Qase MCP Server
OfficialThe Qase MCP Server connects AI assistants to the Qase Test Management Platform, enabling full read/write access to test-related entities via the Model Context Protocol. Here's what you can do:
Project Management — List, get, create, and delete projects; grant/revoke access for users or groups.
Test Cases — List, get, create, update, delete, and bulk-create test cases; attach/detach external issues (e.g., Jira).
Test Suites — List, get, create, update, and delete test suites, including nested suites via parent ID.
Test Runs — List, get, create, delete, and complete (close) test runs; manage public shareable links.
Test Results — List, get, create, update, delete, and bulk-create test results.
Test Plans — List, get, create, update, and delete test plans.
Shared Steps — List, get, create, update, and delete reusable shared steps.
Shared Parameters — List and get shared parameters.
Milestones — List, get, create, update, and delete milestones for organizing tests by release or sprint.
Defects — List, get, create, update, delete, and resolve defects; update defect status (open, in_progress, resolved, invalid).
Environments — List, get, create, update, and delete test environments (e.g., staging, production).
Attachments — List, get, upload (base64), and delete attachments.
Custom & System Fields — List, get, create, update, and delete custom field definitions; list built-in system fields.
Configurations — List configuration groups and items; create and delete configuration groups.
Users & Authors — List/get workspace users and test case authors.
QQL (Qase Query Language) — Search across cases, runs, results, defects, and plans using powerful QQL queries; get syntax help and examples.
Tool Discovery — Use qase_discover_tools to find and activate secondary tools on demand.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Qase MCP Serverlist test cases in project 'Mobile App'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Qase MCP Server
Official Model Context Protocol (MCP) server for Qase Test Management Platform — connect AI assistants to your test cases, runs, defects, and more.
Table of Contents
Related MCP server: qtm4j-mcp-server
Overview
The Qase MCP Server lets AI assistants (Claude, Cursor, Codex, and any other MCP client) read and write Qase test cases, runs, results, defects, suites, milestones, and more — through a standardized protocol, with no custom integration code.
Features:
36 task-oriented tools (37 total, including
qase_discover_tools) — consolidated from 83 v1 tools for lower token usage and better LLM accuracyComposite tools — multi-step workflows in a single call: CI reporting, defect triage, regression run setup
QQL support — Qase Query Language for advanced searches across cases, runs, results, defects, and plans
Project context bootstrap — one call returns full project structure (suites, milestones, environments, users, custom fields)
Test case review — propose new cases or changes for review, assign reviewers, and track status (approving and merging remain UI-only)
Tool discovery — secondary tools stay hidden until needed, keeping the default tool list small
Hosted or self-run — connect to
https://mcp.qase.io/mcpwith just your Qase login, or run the server locally with your own API tokenTenant-safe caching & HTTP resilience — two-tier cache (in-memory + optional Redis), connection pooling, retry with backoff
Escape hatch — direct REST API access for any endpoint via
qase_api
Use Cases
Scenario | Example prompt | Tool |
Bootstrap project context | "Show me the structure of project DEMO — suites, milestones, environments" |
|
Create or update a test case | "Create a high-priority smoke test case in project DEMO titled 'Login with valid credentials'" |
|
Report CI results | "Report these CI results for project DEMO: case 1 passed, case 2 failed with 'timeout error'" |
|
Triage a failed test | "Create a critical defect for the login timeout failure in run #42" |
|
Search with QQL | "Find all failed test results from the last 7 days in project DEMO" |
|
See Tools and docs/tools.md for the full reference.
Quick Start
Use the hosted Qase MCP (recommended)
No install, no API token — connect to the Qase-hosted server and sign in with your Qase account.
Note: The hosted Qase MCP requires the Enterprise plan and a workspace on Qase's main cloud (
qase.io). On another plan, or on a dedicated instance, run the server yourself with your own API token — that works everywhere.
Claude — open Settings → Connectors, find Qase Test Management, click Connect.
Cursor — add
{"mcpServers": {"qase": {"url": "https://mcp.qase.io/mcp"}}}to.cursor/mcp.json.Codex — add the URL
https://mcp.qase.io/mcpin Settings → MCPs → Add server, or configure~/.codex/config.tomlfor the CLI.VS Code — add
{"servers": {"qase": {"type": "http", "url": "https://mcp.qase.io/mcp"}}}to.vscode/mcp.json, or run MCP: Add Server.
Full per-client steps, other clients, and the active-workspace model: docs/connect.md.
Run it yourself
Install the package and provide your own API token:
npm install -g @qase/mcp-server
export QASE_API_TOKEN=your_api_token_hereThen point your MCP client's stdio config at the @qase/mcp-server binary. Full install options, client configs (Claude Desktop, Cursor, Claude Code, Codex, OpenCode), environment variables, and transports (stdio/SSE/streamable-HTTP): docs/self-run.md.
Building on top of this server
For integration authors only — if you use the server directly, nothing here applies to you.
If your product drives this server (a plugin, an agent, a wrapper CLI), it can identify itself so its usage is attributable in Qase analytics, independently of which AI host is connected:
QASE_MCP_INTEGRATION=quality-supervisor/1.4.0 # <name>/<version>, version optionalThe name must be on the allowlist in src/utils/integration-marker.ts — add yours in a PR. Anything unlisted or malformed is ignored, and the API call still succeeds. HTTP transports also accept the marker per request (X-Qase-Integration header or ?integration=). Details: docs/self-run.md.
Upgrading from v1
v2 consolidated 83 v1 tools into 29 task-oriented tools (30 total, including a discovery tool), and has since grown to 36 (37 total). Tool names and response shapes have changed. See docs/migration.md for the complete tool mapping table, response format changes, and before/after examples.
Tools
37 tools across 6 groups (36 task-oriented tools plus qase_discover_tools for on-demand activation of secondary tools):
Group | Count | Description |
Read | 2 | Fetch any entity by type/ID, or bootstrap full project context in one call |
QQL | 2 | Search across cases, runs, results, defects, and plans with Qase Query Language |
Write | 28 | Create, update, and delete cases (single or up to 100 at once), runs, results, defects, suites, milestones, plans, shared steps, environments, and attachments; link cases and runs to Jira issues; propose and manage test case reviews |
Composite | 3 | Multi-step workflows in one call: CI reporting, defect triage, regression run setup |
Escape hatch | 1 | Direct REST API access for any endpoint not covered by the tools above |
Meta | 1 |
|
Full tool-by-tool reference with parameters and the discovery model: docs/tools.md.
Documentation
docs/connect.md — connect to the hosted Qase MCP (Claude, Cursor, Codex, other clients)
docs/self-run.md — install and run the server yourself (config, clients, transports)
docs/tools.md — full tool reference, groups, and the discovery model
docs/troubleshooting.md — auth, OAuth/connector, and SSL issues
docs/migration.md — v1 → v2 tool mapping and migration guide
Contributing
Contributions are welcome! See CONTRIBUTING.md for development setup, testing, and linting guidelines.
License
MIT License — see LICENSE for details.
Support
Documentation: https://docs.qase.io/en/articles/14984302-qase-mcp-server
Email: support@qase.io
GitHub Issues: https://github.com/qase-tms/qase-mcp-server/issues
Links
Qase Platform: https://qase.io
Qase Documentation: https://help.qase.io
API Documentation: https://developers.qase.io
MCP Protocol: https://modelcontextprotocol.io
Issue Tracker: https://github.com/qase-tms/qase-mcp-server/issues
Available Tools
14 toolsqase_apiAInspect
Call any Qase REST endpoint directly, for the few things no dedicated tool covers. Pass the HTTP method, a path starting with /v1/, and an optional body or query. See developers.qase.io for the reference. Prefer a dedicated tool wherever one exists: they normalize enums, validate arguments before spending a round trip, and shape the response for a model. This one hands back whatever the API returns. It sends JSON only and cannot upload files — multipart uploads go through qase_attachment_upload. A DELETE through this tool asks for confirmation the same way the dedicated delete tools do. Cost: one API call, typically 0.3-1.5s depending on the endpoint. No caching, no pagination help, no retries beyond the client defaults.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body for POST/PUT/PATCH | |
| path | Yes | API path starting with /v1/ (e.g., "/v1/project/DEMO/run") | |
| query | No | Query parameters | |
| method | No | HTTP method | GET |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses JSON-only request bodies, inability to upload files, raw API response passthrough, DELETE confirmation, typical latency/cost, and the absence of caching, pagination help, and extra retries. These are concrete behavioral traits that help an agent predict side effects. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then moves through exclusions, safety behavior, and operational limits. Every sentence carries decision-relevant information for a generic passthrough tool, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deliberately generic tool with no output schema, the description covers everything needed to invoke it correctly: HTTP method, path convention, optional body/query, reference link, JSON-only constraint, file upload exception, DELETE confirmation, cost/latency, and limitations. It sets correct expectations for response passthrough and lack of pagination/retries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented at baseline. The description adds practical semantics: the path must start with /v1/, body and query are optional, and the API accepts JSON only. This goes beyond what the schema alone provides and justifies a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence, 'Call any Qase REST endpoint directly, for the few things no dedicated tool covers,' gives a specific verb, resource, and role as a fallback. It explicitly distinguishes itself from siblings by positioning dedicated tools as the preferred route and this tool as the catch-all.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to prefer a dedicated tool wherever one exists and gives the reason (enum normalization, validation, shaped responses). It also names qase_attachment_upload as the alternative for multipart uploads, and notes DELETE confirmation behavior. This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_attachment_uploadAInspect
Upload a file and get back the hash that other tools reference it by — screenshots, logs, HAR files, videos. Pass file_base64 with the base64-encoded bytes, or file_path with an absolute path; filename with its extension is always required. Use file_base64 unless the server runs on the same machine as the file: a remote server, the hosted connector included, cannot see your filesystem, and file_path will simply not find the file. The returned hash is what goes in the attachments field of qase_case_upsert, qase_result_record, qase_defect_upsert or qase_triage_defect — uploading alone attaches nothing, the hash has to be passed on. This is the only tool that sends multipart/form-data, which is why qase_api cannot send them. Upload once and reuse the hash rather than re-uploading the same evidence per case. Cost: one API call per file, dominated by file size rather than round trip — well under a second for a screenshot, seconds for a video. Base64 inflates the payload by about a third.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| file | No | Deprecated: prefer file_base64 or file_path, which say which one you mean. Accepts either an absolute path to an existing file or base64 content. | |
| filename | Yes | Original filename with extension | |
| file_path | No | Absolute path to a file on the machine running THIS server. Only usable for a local stdio server; a remote server cannot see your filesystem — send file_base64 instead. | |
| file_base64 | No | File content, base64 encoded. Use this whenever the server is not on the same machine as the file — including the hosted connector, where it is the only option. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only, non-idempotent operation, and the description adds meaningful context: uploading alone attaches nothing, the hash must be passed on, file_path will fail against remote servers, and each upload costs one API call. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every sentence earns its place: purpose, parameter choice, failure mode, downstream usage, and cost. It is front-loaded with the core purpose and the hash contract, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description clearly states the return contract: the tool returns a hash to use in the attachments field of related tools. It also covers the critical failure mode and reuse recommendation, so an agent has enough context to call and use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces the choice between file_base64 and file_path and confirms filename is always required, but most of this is already present in the schema. It adds little genuinely new per-parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Upload a file and get back the hash that other tools reference it by.' It also distinguishes this tool from qase_api by noting it is the only tool that sends multipart/form-data, so an agent can differentiate it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use file_base64 unless the server is on the same machine, file_path only works for local stdio servers, and the returned hash must be passed to specific sibling tools' attachments fields. It even explains why qase_api cannot handle these uploads, covering the main alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_case_upsertAInspect
Create or update a single test case. With id it updates that case, without id it creates a new one. Enum fields (priority, severity, type, layer, behavior, automation) accept either a label such as "high" or "blocker" or the project's numeric ID — the server normalizes both. Steps can be classic action/expected pairs or Gherkin, and may reference shared steps by hash. Writing more than one case? Use qase_case_bulk_create instead: it takes a list and sends one request. If the project has "Test case review" enabled, direct writes may need to go through a review — run qase_discover_tools with "review" for those tools. Cost: one API call, about 0.6s to create and 0.4s to update. Ten sequential calls measured 5.6s against 1.2s for one qase_case_bulk_create writing the same ten, so a loop is roughly four times slower.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Case ID — if provided, updates the case; if omitted, creates a new one | |
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| tags | No | ||
| type | No | Type label or numeric ID | |
| layer | No | Layer label or numeric ID | |
| steps | No | ||
| title | Yes | Test case title | |
| status | No | Status label or numeric ID | |
| behavior | No | Behavior label or numeric ID | |
| is_flaky | No | ||
| priority | No | Priority label or numeric ID (0=not set, 1=high, 2=medium, 3=low) | |
| severity | No | Severity label or numeric ID | |
| suite_id | No | ||
| automation | No | Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated) | |
| steps_type | No | ||
| attachments | No | Attachment hashes from qase_attachment_upload | |
| description | No | ||
| custom_field | No | ||
| milestone_id | No | ||
| preconditions | No | ||
| postconditions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a write operation (readOnlyHint=false, destructiveHint=false without idempotency), but the description adds meaningful behavior: enums normalize labels vs numeric IDs, steps can be classic or Gherkin, shared-step references resolve to shared_step_hash on read, and the review workflow may intercept direct writes. It doesn't spell out error semantics or whether update is partial or full, but the write path is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact for 21 parameters, front-loaded with the create/update decision and alternatives. Every sentence adds useful guidance. The only waste is the measured timing detail ('Ten sequential calls measured 5.6s...') — it supports the bulk-create recommendation but is more evidence than need for an agent decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 21 parameters, 52% schema coverage, nested objects, no output schema, and a complex upsert flow, this description covers all critical aspects: the id branch, enum values, shared steps, review-mode caveat, and the bulk alternative. Nothing an agent needs to invoke it correctly is missing from the core decision path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 52%, and this description compensates for the largest gap by explaining the core branching parameter semantics: id selects update vs create. It also gives meaning to enum fields collectively, and clarifies the steps object structure including the alias shared_step_hash for shared. That's exactly the kind of meaning the raw schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact verb-resource relationship: 'Create or update a single test case' and immediately clarifies the id-based branching. This differentiates it from qase_case_bulk_create by name and by role. The first sentence alone gives an agent everything needed to decide whether this tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use qase_case_bulk_create instead: 'Writing more than one case? Use qase_case_bulk_create instead.' It also instructs running qase_discover_tools with 'review' when the project has Test case review enabled, directing the agent to alternatives when direct writes may be blocked. That's excellent routing guidance, not just description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_ci_reportAInspect
Report a whole CI run in one call: creates the run, records every result, and completes it. This is the tool for a pipeline that has just finished — it replaces qase_run_upsert, then qase_result_record, then qase_run_complete, and leaves no half-open run behind if the agent stops early. Each result needs a numeric case_id plus a status, and may carry duration, comment, stacktrace and attachment hashes. Use qase_result_record instead when the run already exists and results arrive in stages; use qase_run_upsert when you need the run left open. Cost: one tool call covering three API operations. A run with two results measured about 0.7s, against roughly 1.5s for the same work as three separate calls, and it grows with the number of results rather than with the number of round trips.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| title | Yes | Run title (e.g., "CI Build #1234") | |
| results | Yes | Test results to record | |
| complete | No | Complete the run after recording results (default: true) | |
| is_autotest | No | Mark as automated run (default: true) | |
| environment_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| run_id | Yes | Created run ID |
| run_status | Yes | |
| results_recorded | Yes | Number of results recorded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich context beyond annotations, including the create/record/complete sequence, the no-half-open-run guarantee, and performance trade-offs. However, it states that the run is always completed, while the schema's `complete` parameter defaults to true but can be false, making that guarantee conditional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior, then provides explicit routing rules and a useful cost/performance note. Every sentence contributes to selection or invocation, and the structure makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-step tool with six parameters and an output schema, the description is nearly complete: it explains the workflow, result shape, and alternatives. The only gap is the unconditional 'completes it' language, which should acknowledge the `complete` parameter's ability to leave the run open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the baseline is 3. The description adds only a compact restatement of result requirements like numeric `case_id`, status, and optional attachment hashes; it does not add meaningful semantics for top-level parameters such as `code`, `title`, `environment_id`, or `complete` beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Report a whole CI run in one call: creates the run, records every result, and completes it.' It clearly identifies the operation and distinguishes it from the related split tools without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit selection guidance: use this after a pipeline finishes, use qase_result_record when the run already exists and results arrive in stages, and use qase_run_upsert when the run must stay open. These conditional rules fully route an agent to the correct sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_defect_upsertAInspect
Create or update a defect — a tracked problem found by testing. Without id it creates, with id it updates. Creating one requires title, actual_result and severity; the API rejects a defect missing any of the three. Severity is given as a label ("blocker", "critical", "major", "normal", "minor", "trivial") and the server maps it to the workspace's numeric ID, custom options included. Status is a label too ("open", "in_progress", "resolved", "invalid") and passes through as written; setting it to "resolved" on an existing defect goes through the dedicated resolve endpoint. When the defect comes from a specific test failure, use qase_triage_defect instead. The API has no way to attach runs or results to a defect, so reference the failing results in the text rather than expecting a link. Find existing defects with qql_search before filing a duplicate. Cost: one API call, about 0.5s, plus a cached lookup of the severity options.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Defect ID — if provided, updates; if omitted, creates | |
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| tags | No | ||
| title | Yes | Defect title | |
| status | No | Set to "resolved" to resolve the defect | |
| severity | No | ||
| attachments | No | Attachment hashes from qase_attachment_upload | |
| custom_field | No | ||
| actual_result | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, openWorld=true, idempotent=false, destructive=false), the description discloses create/update branching, mandatory-field rejection, server-side severity label mapping, the dedicated resolve endpoint for status='resolved', and the lack of run/result attachment. No statement contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well front-loaded and every major sentence adds operational value, but the final cost sentence repeats 'about 0.5s' three times, introducing unnecessary redundancy. Apart from that, the structure is clear and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter upsert with nested objects and no output schema, the description covers the critical invocation decisions: create vs update, required fields, label handling, resolve behavior, alternatives, duplicate avoidance, and cost. It does not describe return values or custom_field semantics, but those gaps do not block correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 56%, the description compensates by explaining the functional meaning of id, title/actual_result/severity requirements, and the enum labels for severity and status. It also clarifies how severity labels map to workspace IDs, which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Create or update a defect') and explains the create/update distinction by id, making the operation unambiguous. It also names the nearby sibling qase_triage_defect, so the agent can tell this tool apart from the test-failure-specific alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use qase_triage_defect when the defect stems from a specific test failure, and instructs the agent to search with qql_search before filing duplicates. It also warns that runs/results cannot be attached to a defect, outlining when not to expect linking behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_discover_toolsARead-onlyIdempotentInspect
Find and switch on tools that are hidden by default. Only core tools appear in the tool list; deletes, shared steps and parameters, attachments, external issue links, case reviews, defect triage, and project and custom-field management all exist but stay hidden until discovered. Search by what you are trying to do — "delete", "milestone", "attachment", "review", "custom field" — and matching tools are activated and become callable. Every word in the query must appear in a tool's name or description, so prefer two or three words over a sentence. Never conclude a capability is missing without searching here first. Cost: no API call, matching happens in memory, about 3ms. Free to call as often as needed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query to find tools by name or description. Examples: "delete", "milestone", "attachment", "suite" | |
| activate | No | If true (default), found tools are activated and become available for use | |
| category | No | Filter by tool category |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | Number of matching tools |
| tools | Yes | |
| activated | Yes | Number of newly activated tools |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses behaviors beyond the annotations: hidden-by-default state, in-memory matching, no API call, ~3ms cost, and that matching tools become activated and callable. These details complement the readOnlyHint, openWorldHint, and idempotentHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, hidden capabilities, usage trigger, query constraints, and cost. The description is dense but well-organized and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool with readOnly, openWorld, and idempotent annotations plus an output schema, the description covers all essential information: what the tool does, when to use it, how to search, side effects, and cost. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining query matching semantics and giving concrete example queries, though it does not add detail for the activate or category parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('Find and switch on') and resource ('tools that are hidden by default'), and the description lists concrete hidden capabilities such as deletes, attachments, and custom-field management. This makes it clearly distinguishable from sibling tools like qase_get or qase_api.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to call this tool: never conclude a capability is missing without searching here first. It also provides query strategy, examples, and the rule that every word in the query must appear in a tool name or description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_getARead-onlyIdempotentInspect
Fetch one known record by type and ID: case, suite, run, result, plan, defect, milestone, environment, shared_step, shared_parameter, configuration, attachment, author, user, review, or custom_field. code is required for project-scoped entities and can be omitted for global ones (user, author, attachment, custom_field). Narrow the payload with fields, or pass ["*"] for everything. Use this only when you already know the ID and want a single record. For several records, for anything filtered or cross-project, or when you are about to call this in a loop, use qql_search instead — one search returns the whole page at once. Cost: one API call, 0.3-0.5s. Ten of these in sequence measured 5.3s against 1.2s for a single qql_search returning the same ten records, so a loop over IDs is roughly four times slower and ten times more calls.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID (number) or hash (string) | |
| code | No | Project code (required for most entities) | |
| entity | Yes | Entity type to fetch | |
| fields | No | Optional field projection — only return these top-level fields. Pass ["*"] for all fields. | |
| include | No | Comma-separated list of related entities to include in the response. Cases and runs already request their external issue links by default ("external_issues" / "external_issue"); pass this only to override that. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive, so the description doesn't need to repeat that. It adds useful behavioral context: one API call, measured latency, and a concrete performance penalty for doing this in a loop instead of using qql_search. It doesn't cover error/not-found behavior, but that is a minor gap given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the operation and entity list, followed by code requirements, then usage boundaries, then cost guidance. Every sentence earns its place, and the measured performance comparison directly supports the recommended routing to qql_search.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record fetch tool, the description covers scope, code requirements, field projection, and alternative routing, which is enough for correct selection and invocation. It could mention response/error shape and the include parameter more explicitly, but the schema covers include and annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful nuance beyond the schema: code is required for project-scoped entities but can be omitted for global ones, and fields can be narrowed or set to ['*']. It does not add much about the include parameter, but the schema already documents that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Fetch one known record by type and ID', and enumerates all 16 supported entity types. This clearly distinguishes it from qql_search, which is for batched/filtered lookup, without requiring an agent to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit selection rule: 'Use this only when you already know the ID and want a single record.' It names the alternative, qql_search, and lists the exact conditions that should route an agent away from this tool: several records, filtered or cross-project queries, or loops.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_project_contextARead-onlyIdempotentInspect
Seed everything about a project in one call: project details, the full suite tree, milestones, environments, custom fields, and users. This is the first call to make when starting work on a project — it replaces six separate list calls and gives the model the metadata it needs to build any later query. Each collection returns its first 100 entities; the coverage field reports { total, loaded, truncated } per collection, so check it before assuming a list is complete, and pass full: true to page through everything. For a single record you already have the ID for, qase_get is cheaper; for filtered or cross-project questions, use qql_search. Cost: six API calls behind one tool call, 0.5-1.3s cold, and 16-48KB of response depending on project size. Cached for 5 minutes, so repeat calls inside that window return in about 5ms. full: true costs one extra call per 100 entities and can return thousands of items.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| full | No | Page through every suite, milestone, environment, custom field, and user instead of fetching only the first 100 of each (default: false). Use this when a collection is reported as truncated and you need the complete set — it costs one API call per 100 entities and can return thousands of items, so prefer the targeted list tools or qql_search when you only need a subset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| users | No | Team members list |
| suites | Yes | Suites list with entities array |
| project | Yes | Project details |
| coverage | Yes | Per-collection completeness: each of suites, milestones, environments, custom_fields, and users maps to { total, loaded, truncated }. When truncated is true the list holds only the first `loaded` of `total` entities — re-call with full: true for the rest. |
| milestones | Yes | Milestones list |
| environments | Yes | Environments list |
| custom_fields | No | Custom fields list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: 100-entity pagination limits per collection, the coverage field shape, truncation semantics, full:true behavior, cold vs. cached latency, response size, and cost in API calls. It also confirms read-only/idempotent behavior through 'Cached for 5 minutes' and 'repeat calls... return in about 5ms.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, first-call guidance, pagination behavior, alternatives, cost, latency, caching, and full-mode tradeoffs are all relevant for correct tool selection and invocation. The core purpose is front-loaded before performance and alternative details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with this complexity, the description covers what the tool returns, pagination limits, truncation detection, when to pass full:true, cost implications, alternatives, and caching behavior. The output schema handles the detailed return structure, so nothing essential is missing from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description adds extra meaning for the full parameter by explaining the cost model ('one extra call per 100 entities') and directing users toward targeted tools when only a subset is needed. That goes beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource with an explicit inventory: 'Seed everything about a project in one call: project details, the full suite tree, milestones, environments, custom fields, and users.' It also clearly distinguishes itself from siblings by naming qase_get and qql_search as alternatives for different query patterns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is explicit: 'This is the first call to make when starting work on a project' and it 'replaces six separate list calls.' It also states when not to use it: 'For a single record you already have the ID for, qase_get is cheaper; for filtered or cross-project questions, use qql_search.' This gives the agent clear decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_regression_runAInspect
Build and start a test run from a suite, a test plan, or an explicit list of case IDs, in one step. Use it to launch a regression cycle without first querying for cases and then creating a run around them — give it the source and it resolves the cases itself. For a run you assemble by hand, use qase_run_upsert and pass the case IDs. For a pipeline that has already finished and just needs its results filed, use qase_ci_report instead: this tool opens a run, it does not close one. Cost: two API calls behind one tool call — resolving the source, then creating the run — roughly 1s, growing with the number of cases the source resolves to.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| title | Yes | Run title | |
| plan_id | No | Create run from an existing test plan | |
| suite_ids | No | Include cases from these suites | |
| description | No | ||
| milestone_id | No | ||
| include_cases | No | Explicit case IDs to include | |
| environment_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | No | Full run entity |
| run_id | Yes | Created run ID |
| cases_added | Yes | Number of cases added to the run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the operation is not read-only, not idempotent, and not destructive. The description adds useful context beyond annotations: it resolves the source into cases, makes two API calls, and opens a run without closing one, including a rough latency estimate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: purpose, alternative routing, and behavioral/cost notes. The core purpose is front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and an output schema, the description covers the main invocation decision, the source-resolution behavior, and sibling alternatives. It is slightly incomplete only in not explaining the optional milestone/environment/description parameters or whether source selectors are mutually exclusive, but the schema and output schema mitigate the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, so the description needs to add moderate value. It clarifies the semantics of the three source selectors (plan_id, suite_ids, include_cases) by explaining the tool resolves cases itself, but optional parameters such as milestone_id, environment_id, and description remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb phrase, 'Build and start a test run from a suite, a test plan, or an explicit list of case IDs,' naming the resource and supported sources. It also explicitly differentiates the tool from qase_run_upsert and qase_ci_report, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: launch a regression cycle from a source without first querying cases. It names alternatives and the conditions that select them — qase_run_upsert for hand-assembled runs, qase_ci_report for already-finished pipelines — and clarifies that this tool opens but does not close a run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_result_recordAInspect
Record one or more results into an existing run. A case says what should be tested; a result says what happened when it ran — status, duration, comment, stacktrace, attachments — so a result always needs a run to live in. Pass several results in one call rather than calling once per test: the tool takes a list and sends them together. If the run does not exist yet and this is a finished CI job, qase_ci_report is the single call that creates the run, records the results and completes it. Status is a label, one of "passed", "failed", "blocked", "skipped" or "invalid" — unlike the case enums, numeric IDs are not accepted here. Cost: one API call for the whole list, about 0.5s for a small batch, growing with payload rather than with the number of results.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| run_id | Yes | Run ID to record results into | |
| results | Yes | One or more results to record |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent write. The description adds useful behavior: results require an existing run, results are sent together in one API call, status must be a string label rather than a numeric ID, and cost grows with payload size. Repeated-call semantics (append vs. update) are not disclosed, but core behavior is well conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but each sentence carries informational weight: definition, batching, alternative tool, status constraints, and cost. There is slight redundancy between 'Pass several results in one call' and 'takes a list and sends them together,' but the structure remains purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not explain return values, but that is not critical for invoking the tool correctly. It covers the run prerequisite, batching behavior, status format, cost expectation, and the main sibling alternative. It could explicitly mention qase_run_upsert for non-CI run creation, but the given guidance is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful guidance by clarifying the status enum usage, explicitly rejecting numeric IDs unlike case enums, and stressing that the results argument is a batchable list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Record one or more results into an existing run.' The case-vs-result distinction and the explicit alternative to qase_ci_report make its scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs batching multiple results into one call instead of calling per test, and names qase_ci_report as the correct alternative for a finished CI job without an existing run. It does not state what to do when a run is missing outside a CI context, but the prerequisite is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_run_upsertAInspect
Create or update a test run. Without id it opens a new run; with id it updates that one. A run is the container results are recorded into, so open it before calling qase_result_record. Optionally scope it to a milestone, an environment, a plan, or an explicit list of case IDs. To build a run from a suite or plan without listing cases yourself, use qase_regression_run. For a CI job that has already finished, use qase_ci_report instead — it opens the run, files the results and closes it in one call, so no half-finished run is left behind. Cost: one API call, about 0.5s.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Run ID — if provided, this is an update (note: Qase API has limited run update support) | |
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| tags | No | ||
| cases | No | Case IDs to include | |
| title | Yes | Run title | |
| plan_id | No | Test plan to base run on | |
| end_time | No | RFC3339 end time | |
| start_time | No | RFC3339 start time | |
| description | No | ||
| is_autotest | No | ||
| custom_field | No | ||
| milestone_id | No | ||
| environment_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description carries the behavioral burden well despite minimal annotations. It reveals the create/update branch, the ordering dependency with qase_result_record, the role of a run as a results container, and the operational cost of one API call. This goes beyond what the annotations provide and contains no contradiction with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core behavior, and every clause earns its place. It packs branching behavior, ordering, scoping options, alternative-tool routing, and cost into a few tight sentences with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, the description provides essential context: sequencing, scoping options, and tool-selection rules. A small gap is that it does not warn about the limited update support mentioned in the schema, but overall the description gives an agent enough to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 54%, so the description meaningfully compensates by explaining the defining behavior of 'id' (new vs update) and summarizing how milestone, environment, plan, and case IDs scope the run. It does not explain every optional parameter like custom_field or timestamps, but the schema already provides basic descriptions for those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Create or update a test run.' It immediately clarifies the create-vs-update branching based on 'id' and distinguishes itself from nearby siblings like qase_result_record, qase_regression_run, and qase_ci_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable: open the run before calling qase_result_record; use qase_regression_run when building from a suite or plan; use qase_ci_report when the CI job has already finished. It gives clear selection criteria and even explains why the alternative avoids leaving a half-finished run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qase_triage_defectAInspect
Create a defect from a test failure, with the failure context written into it. Requires title, actual_result and severity — the API rejects a defect missing any of the three. Note: the API offers no way to attach existing runs or results to a defect. The runs and results seen on a defect in the UI are populated by the test runner when it reports a result as a defect, so there is nothing to pass here for that — reference the failing results inside actual_result instead, and do not expect a link to appear. For a defect unrelated to a test failure use qase_defect_upsert. Cost: one API call, about 0.5s. Triaging a whole run means one call per defect, so cluster identical failures and file one defect per distinct cause rather than one per failed test.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Project code (2-10 uppercase letters, numbers, or underscores) | |
| tags | No | ||
| title | Yes | Defect title | |
| severity | Yes | Required by the API | |
| attachments | No | Attachment hashes from qase_attachment_upload | |
| description | No | ||
| custom_field | No | ||
| actual_result | Yes | Observed behavior. Required by the API |
Output Schema
| Name | Required | Description |
|---|---|---|
| defect | No | Full defect entity |
| defect_id | Yes | Created defect ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing API rejection behavior for missing fields, the inability to attach existing runs/results, the lack of a link in the UI, cost/latency, and per-defect call behavior. It does not contradict the readOnly/idempotent/destructive annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries operational information: purpose, requirements, API limitation, alternative tool, latency, and batching guidance. It is dense but not bloated, and the most important facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an agent deciding whether and how to call this tool: it explains purpose, required fields, API limitations, expected behavior, cost, and the right alternative. With an output schema present, describing return values is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful parameter guidance: title, actual_result, and severity are required by the API, and failing results should be referenced inside actual_result. Schema coverage is 63%, so the description partially compensates, though optional params like tags, description, and custom_field remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a defect from a test failure,' giving a specific verb, resource, and trigger context. It also explicitly names qase_defect_upsert as the alternative for non-failure defects, making sibling differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use this tool (test failures) and when not to (unrelated defects, use qase_defect_upsert). It also provides operational guidance: cluster identical failures, file one defect per distinct cause, and expect one API call per defect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qql_helpARead-onlyIdempotentInspect
Read the QQL reference before writing a query. Pass a topic: overview, syntax, entities, operators, functions, examples, aggregation, or enumValues. entities lists the fields each entity actually exposes, and enumValues gives the accepted values for status, priority, severity and the rest — both matter, because QQL rejects a query naming an attribute that does not exist on the entity rather than ignoring it, and the field names differ from those in the write tools. Read this once per session before the first qql_search rather than guessing and retrying. Cost: no API call, static text, about 2ms. Free to call, and cheaper than one rejected query.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which section to return (required — one section per call): - overview: what QQL is, overall query structure, subscription requirement - syntax: structure, ordering, custom fields, case-sensitivity, boolean and date fields - entities: the fields available on each entity — field names are NOT uniform across entities, so read this before writing a query against an unfamiliar one - operators: comparison, matching, set, null, and logical operators - functions: currentUser, activeUsers, and the now/startOf*/endOf* date functions - examples: ready-made queries for common questions - aggregation: SELECT (COUNT/MIN/MAX/AVG/SUM/FIRST/LAST), GROUP BY, HAVING — use this to count or summarise instead of paging through rows - enumValues: the valid values for priority, severity, and the per-entity status fields |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description adds value beyond them: no API call, static text, ~2ms latency, and free invocations. It also discloses the failure mode it guards against (rejected queries from nonexistent attributes) and that field names diverge from write tools. No contradiction with annotations; only the output format of the returned reference text is left unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, critical topics, rationale, session cadence, and cost. The inline topic list partially duplicates the schema enum, and the most actionable instruction ('once per session') sits mid-description rather than front-loaded, but the density of useful information justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, static-reference tool with fully documented enum values and strong annotations, the description covers everything essential: when to call, which topics exist, which matter most, why, and cost. The only gap is the unspecified shape of the returned reference text, which is minor given the low complexity and absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich per-enum-value descriptions, so the baseline is 3. The description adds meaning by highlighting which topics matter most (entities, enumValues) and why — field names differ from write tools and unknown attributes cause rejection rather than being ignored. This elevates understanding beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — read the QQL reference — and enumerates the eight available topics, making the tool's function clear. It distinguishes itself from the qql_search sibling by framing this as the prerequisite reference lookup. Slight deduction: the phrasing is advisory ('Read the QQL reference before writing a query') rather than declarative about what the tool returns, so an agent must infer that the deliverable is the reference text for the requested topic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (qql_search), prescribes cadence ('once per session before the first qql_search'), and discourages the anti-pattern ('rather than guessing and retrying'). It also justifies the rule by disclosing the consequence — QQL rejects queries naming nonexistent attributes instead of ignoring them, and field names differ from the write tools. Nothing about when or when not to call is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qql_searchARead-onlyIdempotentInspect
Search any entity with Qase Query Language: filtering, cross-project queries, sorting, and aggregation. This is the right tool for every question that is not "give me this one record by ID" — "cases without automation", "results that failed this week", "open blockers across projects" — and the right way to fetch many records at once instead of looping over qase_get. Call qql_help first for the syntax, the fields available per entity, and the enum values; a query naming an unknown attribute is rejected outright. Use qase_get instead when you already know the entity and its ID and want just that one. Cost: one API call. 0.5-0.9s for pages up to 50 records; a page of 100 measured 0.9-2.8s depending on how much each record carries. Prefer one search over N single fetches: the same ten records cost 1.2s here against 5.3s as ten qase_get calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 10, max: 100) | |
| query | Yes | QQL query expression. Examples: - entity = "case" and project = "DEMO" and status = "Actual" - entity = "defect" and severity = "blocker" and status = "open" - entity = "result" and status = "failed" and ended >= now("-7d") - entity = "run" and milestone ~ "Sprint 12" See QQL documentation for full syntax and examples. | |
| offset | No | Number of results to skip for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total matching entities |
| entities | Yes | Matching entities |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark this as read-only, idempotent, and non-destructive, the description adds valuable behavioral context: a query naming an unknown attribute is rejected outright, this costs one API call, latency ranges are provided for different page sizes, and one search is preferred over N single fetches. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by concrete use cases, prerequisite guidance, alternative selection, and performance details. Every sentence earns its place, and the examples make the QQL query style concrete without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex query language, rich annotations, complete input schema, and presence of an output schema, the description covers everything an agent needs: when to use it, when not to use it, how to get syntax help, failure behavior, and cost/performance trade-offs. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining that query fields and enums require qql_help, unknown attributes are rejected, and the tool is meant for batch retrieval rather than point lookups. This adds meaning to the query parameter beyond the inline examples in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search any entity with Qase Query Language' and enumerates capabilities (filtering, cross-project queries, sorting, aggregation). It also explicitly contrasts with qase_get by saying it is not for 'give me this one record by ID', which makes it easy to distinguish from its sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it is 'the right tool for every question that is not "give me this one record by ID"' and the right way to fetch many records instead of looping over qase_get. It also tells the agent to call qql_help first for syntax and enum values, and to use qase_get instead when the entity and ID are already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v2.2.1- Added
qase_attachment_upload - Changed
qase_case_upsert3 fields changed- added
Input schema / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload" - changed
Input schema / properties / steps / items / properties / attachments / descriptionPrevious value: -"Attachment hashes"New value: +"Attachment hashes from qase_attachment_upload" - changed
Input schema / properties / steps / items / properties / steps / items / properties / attachments / descriptionPrevious value: -"Attachment hashes"New value: +"Attachment hashes from qase_attachment_upload"
- Changed
qase_ci_report1 field changed- added
Input schema / properties / results / items / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload"
- Changed
qase_defect_upsert1 field changed- added
Input schema / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload"
- Changed
qase_get1 field changed- changed
Input schema / properties / entity / enumPrevious value: -[ - "case", - "suite", - "run", - "result", - "plan", - "defect", - "milestone", - "environment", - "shared_step", - "shared_parameter", - "configuration", - "attachment", - "author", - "user", - "custom_field" -]New value: +[ + "case", + "suite", + "run", + "result", + "plan", + "defect", + "milestone", + "environment", + "shared_step", + "shared_parameter", + "configuration", + "attachment", + "author", + "user", + "review", + "custom_field" +]
- Changed
qase_result_record2 fields changed- added
Input schema / properties / results / items / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload" - added
Input schema / properties / results / items / properties / steps / items / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload"
- Changed
qase_triage_defect1 field changed- added
Input schema / properties / attachments / descriptionAdded value: +"Attachment hashes from qase_attachment_upload"
4 tool updates
v2.1.1- Changed
qase_project_context3 fields changed- added
Input schema / properties / fullAdded value: +{ + "description": "Page through every suite, milestone, environment, custom field, and user instead of fetching only the first 100 of each (default: false). Use this when a collection is reported as truncated and you need the complete set — it costs one API call per 100 entities and can return thousands of items, so prefer the targeted list tools or qql_search when you only need a subset.", + "type": "boolean" +} - added
Output schema / properties / coverageAdded value: +{ + "description": "Per-collection completeness: each of suites, milestones, environments, custom_fields, and users maps to { total, loaded, truncated }. When truncated is true the list holds only the first `loaded` of `total` entities — re-call with full: true for the rest.", + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "project", - "suites", - "milestones", - "environments" -]New value: +[ + "project", + "suites", + "milestones", + "environments", + "coverage" +]
- Changed
qase_triage_defect7 fields changed- changed
Input schema / properties / actual_result / descriptionPrevious value: -"Observed behavior"New value: +"Observed behavior. Required by the API" - removed
Input schema / properties / failed_result_idsRemoved value: -{ - "description": "Result hashes to link to this defect (from the run)", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / run_idRemoved value: -{ - "description": "Run containing the failed results", - "exclusiveMinimum": 0, - "type": "integer" -} - added
Input schema / properties / severity / descriptionAdded value: +"Required by the API" - changed
Input schema / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "severity", + "actual_result" +] - removed
Output schema / properties / linked_resultsRemoved value: -{ - "description": "Number of linked result hashes", - "type": "integer" -} - changed
Output schema / requiredPrevious value: -[ - "defect_id", - "linked_results" -]New value: +[ + "defect_id" +]
- Changed
qql_help3 fields changed- changed
Input schema / properties / topic / descriptionPrevious value: -"Specific help topic, or omit for general overview"New value: +"Which section to return (required — one section per call):\n- overview: what QQL is, overall query structure, subscription requirement\n- syntax: structure, ordering, custom fields, case-sensitivity, boolean and date fields\n- entities: the fields available on each entity — field names are NOT uniform across entities, so read this before writing a query against an unfamiliar one\n- operators: comparison, matching, set, null, and logical operators\n- functions: currentUser, activeUsers, and the now/startOf*/endOf* date functions\n- examples: ready-made queries for common questions\n- aggregation: SELECT (COUNT/MIN/MAX/AVG/SUM/FIRST/LAST), GROUP BY, HAVING — use this to count or summarise instead of paging through rows\n- enumValues: the valid values for priority, severity, and the per-entity status fields" - changed
Input schema / properties / topic / enumPrevious value: -[ - "syntax", - "entities", - "operators", - "functions", - "examples" -]New value: +[ + "overview", + "syntax", + "entities", + "operators", + "functions", + "examples", + "aggregation", + "enumValues" +] - added
Input schema / requiredAdded value: +[ + "topic" +]
- Changed
qql_search2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"QQL query expression. Examples:\n- entity = \"case\" and project = \"DEMO\" and status = \"Actual\"\n- entity = \"defect\" and severity = \"blocker\" and status = \"open\"\n- entity = \"result\" and status = \"failed\" and created >= now(\"-7d\")\n- entity = \"run\" and milestone ~ \"Sprint 12\"\nSee QQL documentation for full syntax and examples."New value: +"QQL query expression. Examples:\n- entity = \"case\" and project = \"DEMO\" and status = \"Actual\"\n- entity = \"defect\" and severity = \"blocker\" and status = \"open\"\n- entity = \"result\" and status = \"failed\" and ended >= now(\"-7d\")\n- entity = \"run\" and milestone ~ \"Sprint 12\"\nSee QQL documentation for full syntax and examples." - changed
Input schema / properties / query / maxLengthPrevious value: -1000New value: +2000
2 tool updates
v2.0.3- Changed
qase_case_upsert6 fields changed- changed
Input schema / properties / steps / items / properties / action / descriptionPrevious value: -"Step action (classic steps)"New value: +"Step action (classic steps). Not needed when `shared` is set." - added
Input schema / properties / steps / items / properties / sharedAdded value: +{ + "description": "Hash of an existing shared step to insert at this position, from `qase_shared_step_upsert`. The step then reuses that shared step instead of defining its own content, so `action` can be omitted. Reading the case back reports the link as `shared_step_hash`.", + "type": "string" +} - added
Input schema / properties / steps / items / properties / shared_step_hashAdded value: +{ + "description": "Alias for `shared` — the name used when reading a case. Sent to the API as `shared`.", + "type": "string" +} - changed
Input schema / properties / steps / items / properties / steps / items / properties / action / descriptionPrevious value: -"Step action (classic steps)"New value: +"Step action (classic steps). Not needed when `shared` is set." - added
Input schema / properties / steps / items / properties / steps / items / properties / sharedAdded value: +{ + "description": "Hash of an existing shared step to insert at this position, from `qase_shared_step_upsert`. The step then reuses that shared step instead of defining its own content, so `action` can be omitted. Reading the case back reports the link as `shared_step_hash`.", + "type": "string" +} - added
Input schema / properties / steps / items / properties / steps / items / properties / shared_step_hashAdded value: +{ + "description": "Alias for `shared` — the name used when reading a case. Sent to the API as `shared`.", + "type": "string" +}
- Changed
qase_get1 field changed- added
Input schema / properties / includeAdded value: +{ + "description": "Comma-separated list of related entities to include in the response. Cases and runs already request their external issue links by default (\"external_issues\" / \"external_issue\"); pass this only to override that.", + "type": "string" +}
90 tool updates
v2.0.0- Removed
attach_external_issue - Removed
bulk_create_cases - Removed
complete_run - Removed
create_case - Removed
create_configuration_group - Removed
create_custom_field - Removed
create_defect - Removed
create_environment - Removed
create_milestone - Removed
create_plan - Removed
create_project - Removed
create_result - Removed
create_results_bulk - Removed
create_run - Removed
create_shared_step - Removed
create_suite - Removed
delete_attachment - Removed
delete_case - Removed
delete_configuration_group - Removed
delete_custom_field - Removed
delete_defect - Removed
delete_environment - Removed
delete_milestone - Removed
delete_plan - Removed
delete_project - Removed
delete_result - Removed
delete_run - Removed
delete_run_public_link - Removed
delete_shared_step - Removed
delete_suite - Removed
detach_external_issue - Removed
get_attachment - Removed
get_author - Removed
get_case - Removed
get_custom_field - Removed
get_defect - Removed
get_environment - Removed
get_milestone - Removed
get_plan - Removed
get_project - Removed
get_result - Removed
get_run - Removed
get_run_public_link - Removed
get_shared_parameter - Removed
get_shared_step - Removed
get_suite - Removed
get_user - Removed
grant_project_access - Removed
list_attachments - Removed
list_authors - Removed
list_cases - Removed
list_configurations - Removed
list_custom_fields - Removed
list_defects - Removed
list_environments - Removed
list_milestones - Removed
list_plans - Removed
list_projects - Removed
list_results - Removed
list_runs - Removed
list_shared_parameters - Removed
list_shared_steps - Removed
list_suites - Removed
list_system_fields - Removed
list_users - Added
qase_api - Added
qase_case_upsert - Added
qase_ci_report - Added
qase_defect_upsert - Added
qase_discover_tools - Added
qase_get - Added
qase_project_context - Added
qase_regression_run - Added
qase_result_record - Added
qase_run_upsert - Added
qase_triage_defect - Changed
qql_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "entities": { + "description": "Matching entities", + "items": { + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "Total matching entities", + "type": "integer" + } + }, + "required": [ + "total", + "entities" + ], + "type": "object" +}
- Removed
resolve_defect - Removed
revoke_project_access - Removed
update_case - Removed
update_custom_field - Removed
update_defect - Removed
update_defect_status - Removed
update_environment - Removed
update_milestone - Removed
update_plan - Removed
update_result - Removed
update_shared_step - Removed
update_suite - Removed
upload_attachment
3 tool updates
v1.1.8- Changed
bulk_create_cases1 field changed- changed
Input schema / properties / cases / items / properties / automation / descriptionPrevious value: -"Automation status"New value: +"Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)"
- Changed
create_case1 field changed- changed
Input schema / properties / automation / descriptionPrevious value: -"Automation status"New value: +"Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)"
- Changed
update_case1 field changed- changed
Input schema / properties / automation / descriptionPrevious value: -"Automation status"New value: +"Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)"
80 tool updates
v1.1.7- First observed
attach_external_issue - First observed
bulk_create_cases - First observed
complete_run - First observed
create_case - First observed
create_configuration_group - First observed
create_custom_field - First observed
create_defect - First observed
create_environment - First observed
create_milestone - First observed
create_plan - First observed
create_project - First observed
create_result - First observed
create_results_bulk - First observed
create_run - First observed
create_shared_step - First observed
create_suite - First observed
delete_attachment - First observed
delete_case - First observed
delete_configuration_group - First observed
delete_custom_field - First observed
delete_defect - First observed
delete_environment - First observed
delete_milestone - First observed
delete_plan - First observed
delete_project - First observed
delete_result - First observed
delete_run - First observed
delete_run_public_link - First observed
delete_shared_step - First observed
delete_suite - First observed
detach_external_issue - First observed
get_attachment - First observed
get_author - First observed
get_case - First observed
get_custom_field - First observed
get_defect - First observed
get_environment - First observed
get_milestone - First observed
get_plan - First observed
get_project - First observed
get_result - First observed
get_run - First observed
get_run_public_link - First observed
get_shared_parameter - First observed
get_shared_step - First observed
get_suite - First observed
get_user - First observed
grant_project_access - First observed
list_attachments - First observed
list_authors - First observed
list_cases - First observed
list_configurations - First observed
list_custom_fields - First observed
list_defects - First observed
list_environments - First observed
list_milestones - First observed
list_plans - First observed
list_projects - First observed
list_results - First observed
list_runs - First observed
list_shared_parameters - First observed
list_shared_steps - First observed
list_suites - First observed
list_system_fields - First observed
list_users - First observed
qql_help - First observed
qql_search - First observed
resolve_defect - First observed
revoke_project_access - First observed
update_case - First observed
update_custom_field - First observed
update_defect - First observed
update_defect_status - First observed
update_environment - First observed
update_milestone - First observed
update_plan - First observed
update_result - First observed
update_shared_step - First observed
update_suite - First observed
upload_attachment
TDQS
Most tools target clearly distinct resources and lifecycle stages: case/defect/run upserts, result recording, CI reporting, search, and project context are easy to tell apart. The main ambiguity is qase_defect_upsert versus qase_triage_defect, which are nearly identical in behavior, and qase_api intentionally overlaps everything, though its description mitigates that.
The qase_/qql_ prefixes give the set cohesion, but the action/noun ordering is inconsistent: qase_case_upsert and qase_result_record are noun_verb, qase_triage_defect and qase_discover_tools are verb_noun, and qase_get, qase_api, and qase_project_context follow no shared pattern. Names are readable, but not predictable enough for a consistent convention.
14 tools is well-scoped for a Qase test management server: cases, runs, results, defects, attachments, search, context seeding, CI reporting, and a generic REST fallback are all covered without bloat. The hidden-tools mechanism keeps the core list focused while allowing expansion on demand.
The visible tools cover the major workflows, and qase_api provides a direct REST escape hatch for anything not dedicated. qase_discover_tools explicitly exposes hidden capabilities like deletes, shared steps, reviews, and project management, while qql_search and qase_project_context fill read/query needs. There are no obvious dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Official DevSpeak MCP server — translate technical text into formal specs from any AI IDE or agent
Official Miro MCP server - Supports context to code and creating diagrams, docs, and data tables.
Related MCP Servers
- AlicenseCqualityFmaintenanceA TypeScript-based MCP server that provides integration with the Qase test management platform, allowing you to manage projects, test cases, runs, results, plans, suites, and shared steps.2612MIT
- AlicenseAqualityCmaintenanceMCP server for QTM4J (QMetry Test Management for Jira) Open API, enabling test case and cycle management via natural language.2155MIT

Nhost MCP Serverofficial
AlicenseNot gradedqualityFmaintenanceOfficial MCP server for the Nhost backend platform. Manage Postgres data, GraphQL, auth, storage, migrations and Hasura metadata via AI assistants.5MIT
QA Touch MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceOfficial MCP server for QA Touch, enabling AI assistants to manage test cases, defects, test runs, and more via natural language.94MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/qase-tms/qase-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server