testrails-mcp
Supports converting Jira tickets into TestRail test cases by extracting acceptance criteria and creating cases, with a confirmation step before creation.
Provides CRUD operations for TestRail test cases, test runs, and results, enabling management of test projects, suites, sections, and recording test outcomes.
Click on "Deploy 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., "@testrails-mcpList all projects in TestRail"
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.
testrails-mcp
An MCP (Model Context Protocol) server that exposes TestRail CRUD operations to agentic coding tools like Claude Code and Codex CLI, plus a bundled agent skill for turning Jira tickets into TestRail cases.
What it does
testrails-mcp is a thin, async wrapper around the TestRail API v2. Once
registered with your agent, it lets the model:
Navigate your TestRail instance — list projects, suites, and sections.
Manage test cases — list, read, create, update, and (soft-)delete cases.
Manage runs — list, read, create, and close test runs; list the tests inside a run.
Record results — add and read results for cases within a run.
It speaks stdio (the standard MCP transport for local tools), authenticates
with TestRail via HTTP Basic auth using your email and API key, and reads
credentials from environment variables or a local .env file.
The repo also ships a portable agent skill (skills/jira-to-testrail/) that
auto-triggers when a user asks to convert a Jira ticket into TestRail cases.
The skill orchestrates a Jira MCP (any vendor) + this MCP to produce one case
per acceptance criterion, with a confirmation gate before anything is created.
Related MCP server: TestRail MCP Server
Requirements
Python 3.11+
A TestRail account with API access enabled (admin → Site Settings → API)
A TestRail API key — generate one at My Settings → API Keys → Add Key
An agent runtime that speaks MCP — Claude Code, Codex CLI, Claude Desktop, or any other MCP-compatible client
Setup
git clone <this-repo> testrails-mcp
cd testrails-mcp
uv venv
uv pip install -e .
cp .env.example .env
# then edit .env with your TestRail URL, email, and API key.env shape:
TESTRAIL_URL=https://yourcompany.testrail.io
TESTRAIL_USER=you@example.com
TESTRAIL_API_KEY=...Verify it launches:
.venv/bin/testrails-mcp
# (should sit silently waiting on stdin; Ctrl+C to exit)Confirm the protocol surface:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | .venv/bin/testrails-mcpFor an interactive smoke test with form inputs for every tool:
npx @modelcontextprotocol/inspector .venv/bin/testrails-mcpRegister with your agent
Claude Code
claude mcp add testrails -- /absolute/path/to/.venv/bin/testrails-mcpOr add to ~/.claude.json (user-scope) or .mcp.json (project-scope):
{
"mcpServers": {
"testrails": {
"command": "/absolute/path/to/.venv/bin/testrails-mcp"
}
}
}Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.testrails]
command = "/absolute/path/to/.venv/bin/testrails-mcp"Other clients (Claude Desktop, etc.)
Use the standard MCP server entry: command =
/absolute/path/to/.venv/bin/testrails-mcp, no args.
Tools
Navigation
list_projects()list_suites(project_id)list_sections(project_id, suite_id?)
Cases (CRUD)
list_cases(project_id, suite_id?, section_id?, limit?, offset?)get_case(case_id)add_case(section_id, title, type_id?, priority_id?, estimate?, refs?, custom_fields?)update_case(case_id, title?, type_id?, priority_id?, estimate?, refs?, custom_fields?)delete_case(case_id, soft=True)—soft=Truepreviews; passsoft=Falseto actually delete
Runs
list_runs(project_id)get_run(run_id)add_run(project_id, name, suite_id?, description?, case_ids?, include_all?)close_run(run_id)list_tests(run_id)
Results
add_result_for_case(run_id, case_id, status_id, comment?, version?, elapsed?, defects?)get_results_for_case(run_id, case_id)
TestRail default status IDs: 1=Passed, 2=Blocked, 3=Untested, 4=Retest, 5=Failed.
custom_fields on add_case / update_case accepts any TestRail custom field
the instance has configured — commonly custom_steps, custom_preconds,
custom_expected, or custom_steps_separated.
Skills
This repo ships one bundled skill — a portable SKILL.md that works in both
Claude Code and Codex CLI. Skills are auto-loaded by the agent based on their
description and activate when the user's prompt matches.
jira-to-testrail
Converts a Jira ticket into TestRail test cases. Triggers on phrases like:
"Turn PROJ-1234 into test cases"
"Create TestRail cases from this ticket"
"Generate QA coverage for "
What it does:
Verifies both a Jira MCP and this TestRail MCP are connected.
Reads the ticket, extracts acceptance criteria (refuses to invent any).
Auto-discovers the instance's custom-field shape by sampling an existing case in the target section.
Drafts one case per AC with behavior-focused titles and mapped priority.
Shows you the plan and waits for confirmation before creating.
Creates the cases and reports IDs + URLs as a table.
On partial failure, asks how to proceed rather than auto-retrying.
Requires a Jira MCP to also be installed (e.g. Atlassian's official MCP, or
mcp-atlassian) — the skill is vendor-agnostic about which one.
Installing the skill
Skills live in a directory the agent watches. Symlink the bundled skill into
your agent's skills location so git pull keeps it up to date:
Claude Code
mkdir -p ~/.claude/skills
ln -s "$(pwd)/skills/jira-to-testrail" ~/.claude/skills/jira-to-testrailCodex CLI
mkdir -p ~/.agents/skills
ln -s "$(pwd)/skills/jira-to-testrail" ~/.agents/skills/jira-to-testrailProject-scoped (Codex only)
If you'd rather scope the skill to a single repo, drop a copy into that repo's
.agents/skills/ directory — Codex walks up from the cwd to find skills.
Prefer a copy over a symlink:
cp -r skills/jira-to-testrail ~/.claude/skills/ # or ~/.agents/skills/Verifying the skill loaded
Claude Code: run
/skillsand look forjira-to-testrailin the list.Codex CLI: start a new session and ask "what skills do you have?" — it should mention
jira-to-testrail(Codex loads skill names/descriptions at session start).
If it doesn't show up, double-check:
The symlink target exists (
ls -la ~/.claude/skills/jira-to-testrail).SKILL.mdis directly inside that folder, not nested further.The frontmatter (
name,description) is present and valid YAML.
Project layout
testrails_mcp/
├── pyproject.toml
├── README.md
├── .env.example
├── .gitignore
├── src/testrails_mcp/
│ ├── __init__.py
│ ├── client.py # async httpx client (Basic auth)
│ └── server.py # FastMCP tools, stdio entrypoint
└── skills/
└── jira-to-testrail/
└── SKILL.md # portable Claude/Codex skillTroubleshooting
Missing TestRail credentialson startup —.envnot found or missing a key. The server reads.envfrom the cwd it's launched in; if your agent spawns it from a different directory, set the vars in your shell profile or agent config instead.TestRail API 401— wrong email or API key. Confirm the key in My Settings → API Keys and that the user has API access on the instance.TestRail API 403on create/update/delete — the user lacks write permission on the project, suite, or section.delete_casereturns a preview — that's the default (soft=True). Passsoft=Falseto actually delete.Skill doesn't trigger — descriptions are matched fuzzily, but very short prompts may miss. Try a phrase closer to the examples in the skill's description. As a fallback you can invoke it explicitly (
/skill jira-to-testrailin Codex; mention the skill name directly in Claude Code).
Roadmap
Phase 1 (current): Cases, Runs, Results, plus the Jira → TestRail skill.
Likely next:
Sections CRUD (so the skill can create new sections if needed).
Milestones and Plans.
A
bulk_add_result_for_casestool (TestRail has a native batch endpoint).A second skill for bug report → regression case flows.
License
MIT.
Available Tools
15 toolsadd_caseC
Create a new test case in a section.
custom_fields: pass TestRail custom fields like {"custom_steps": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | ||
| title | Yes | ||
| type_id | No | ||
| priority_id | No | ||
| estimate | No | ||
| refs | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as side effects, error handling, idempotency, or required permissions. Merely stating 'Create' is insufficient.
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 brief and front-loaded with the main action. The custom_fields example is helpful but could be structured more clearly. No wasted text.
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 7 parameters, no output schema, and no annotations, the description is incomplete. It omits explanations for most parameters and does not describe the return value or potential errors.
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 0% schema description coverage, the description adds value only for custom_fields by showing an example. However, it does not clarify the meaning or constraints of other parameters like estimate, refs, or priority_id.
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 clearly states 'Create a new test case in a section.' This specifies a concrete verb (create) and resource (test case in section), distinguishing it from siblings like delete_case or update_case.
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?
No guidance on when to use this tool versus alternatives (e.g., add_result_for_case), nor any prerequisites or restrictions. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_result_for_caseC
Add a result for a case within a run.
status_id: 1=Passed, 2=Blocked, 3=Untested, 4=Retest, 5=Failed (TestRail defaults).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| case_id | Yes | ||
| status_id | Yes | ||
| comment | No | ||
| version | No | ||
| elapsed | No | ||
| defects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It partially covers behavioral context by explaining status_id values (1=Passed, etc.), but does not disclose side effects, required permissions, idempotency, or return behavior.
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?
Concise with no redundant text. However, the structure is simple and could benefit from grouping or bullet points. It is efficient but minimally informative.
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 tool has 7 parameters (3 required) and no output schema, the description covers only the core action and one parameter's semantics. It lacks descriptions for other parameters, return value, and usage context, making it incomplete.
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 0% with 7 parameters. The description only adds meaning for status_id (mapping values 1-5). No information is provided about run_id, case_id, comment, version, elapsed, or defects, leaving significant gaps.
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 clearly states the action and resource: 'Add a result for a case within a run.' It distinguishes from sibling tools like 'get_results_for_case' and 'delete_case', but could be more specific about what a 'result' entails.
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?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, when not to use, or differentiate from get_results_for_case or add_case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_runB
Create a test run. If case_ids is provided, include_all defaults to False.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| name | Yes | ||
| suite_id | No | ||
| description | No | ||
| case_ids | No | ||
| include_all | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It only states the creation action and a default behavior, but does not disclose side effects, required permissions, idempotency, or error conditions. This is insufficient for a mutation tool.
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 extremely concise with two short sentences. No unnecessary words. It is front-loaded with the core action and provides a key default behavior. Every sentence earns its place.
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?
Despite having 6 parameters, no output schema, and zero schema coverage, the description offers minimal context. It does not explain return values, prerequisites, defaults beyond the one mentioned, or relationship to other entities (e.g., suites, cases). The tool is underspecified for an agent to use correctly without additional knowledge.
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 0%, meaning no parameter descriptions. The description adds one behavioral note about the interaction between case_ids and include_all, but does not explain the meaning or constraints of other parameters (project_id, name, suite_id, description, case_ids, include_all). Significant gap remains.
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 clearly states 'Create a test run' which is a specific verb and resource. It also adds a conditional behavior about include_all defaulting to False when case_ids is provided. No sibling ambiguity as siblings are different actions.
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 this tool (to create a test run) and provides a context-dependent default behavior. However, it does not mention when not to use it or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_runA
Close a test run (archives it; cannot be reopened).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description carries the full burden. It discloses the key behavioral trait that the run is archived and cannot be reopened. However, it omits potential failure conditions (e.g., run already closed) or side effects.
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?
Single sentence with no wasted words. Every part adds value: action, result, constraint.
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 simple tool (one required param, no output schema), the description covers the essential purpose and behavior. It could mention what happens on success or error, but for a close operation this is adequate.
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 schema has 0% description coverage for run_id. The tool description does not add extra meaning beyond the parameter name; it does not specify constraints like 'must exist' or 'integer format'. Minimal added value.
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?
Description clearly states the verb (close) and resource (test run), and adds crucial context that it archives and cannot be reopened, distinguishing it from other sibling tools like add_run or get_run.
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 implies when to use by stating the irreversible archive behavior, but does not provide explicit when-not or alternative tools. However, the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_caseC
Delete a test case. soft=True previews the deletion without applying it.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | ||
| soft | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions that soft=True previews without applying, but does not describe what happens when soft=False (actual deletion), whether it is irreversible, or any side effects. For a destructive operation, more disclosure is needed.
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 a single concise sentence that front-loads the action and includes a key parameter detail. No unnecessary words, making it efficient for agent parsing.
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 no annotations, no output schema, and two parameters, the description covers the basic operation but misses critical context: return value, error handling, permission requirements, and the irreversible nature of deletion. This incompleteness warrants a 2.
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 schema has 2 parameters with 0% description coverage. The description adds meaning for 'soft' by explaining its preview function, but provides no additional context for 'case_id' beyond its name. This partial compensation earns a 3.
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 clearly states the action ('Delete a test case') and the resource ('test case'). It also introduces the soft delete option, making the purpose specific. However, it does not differentiate from sibling tools like update_case or add_case, so a 4 is appropriate.
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?
No guidance on when to use this tool versus alternatives like update_case or list_cases. There is no mention of prerequisites, constraints, or context in which deletion is appropriate. The description only explains the soft parameter, not when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_caseA
Get a single test case by id.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the action "Get", which implies a read-only operation. It does not disclose any behavioral traits such as authentication requirements, error conditions, or side effects.
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 a single sentence with no redundant words. It front-loads the action and resource immediately.
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 simple get-by-id tool with one parameter and no output schema, the description is largely sufficient. However, it could mention what is returned or any common error conditions.
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 0%, so the description must add meaning. It says "by id" which maps to the case_id parameter, but this merely restates the schema field name without adding format, constraints, or examples.
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 clearly states the verb "Get" and the resource "a single test case", with the qualifier "by id". It distinguishes from sibling tools like add_case, delete_case, and list_cases.
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 implies usage for retrieving a single case, but does not explicitly mention when to use this tool vs alternatives like list_cases or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_results_for_caseC
Get all results recorded for a case in a given run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| case_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It says 'Get all results' but does not specify what results look like (e.g., list of objects, properties), that it's read-only, or how pagination works. Limited transparency.
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?
Single sentence, front-loaded with action. It is concise but too brief to provide adequate information; could include more detail without being verbose.
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?
No output schema exists, yet the description does not explain what is returned (e.g., shape of results). Missing error conditions or behavior for missing entities. Incomplete for a simple retrieval tool with no annotations.
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 0%. The description adds no details about parameters beyond the schema (run_id, case_id). It does not explain format, allowed values, or constraints, failing to compensate for missing schema descriptions.
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 clearly states the tool retrieves all results for a case in a given run, using specific verb 'Get' and resource 'results for a case in a given run'. It differentiates from siblings like 'add_result_for_case' (adds) and 'get_case' (gets case info).
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?
No guidance on when to use this tool versus alternatives such as 'add_result_for_case' or 'get_case'. Does not mention prerequisites (e.g., case and run must exist) or that it's a read-only operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runB
Get a single test run by id.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does not mention any side effects, authentication requirements, rate limits, or what the response contains. The simple 'Get' suggests a read operation, but this is not explicitly stated.
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 a single sentence that is concise, but it does not provide structured information. It is minimally adequate but could be improved by adding more detail without increasing length significantly.
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 no output schema, the description should explain what is returned (e.g., the run object). It is too brief for a tool with no annotations or output schema, leaving the agent with incomplete information about the tool's result.
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 only reiterates that the run is identified by id, which is already evident from the required parameter name. Since schema description coverage is 0%, the description should add more detail, such as the format or source of the run_id, but it does not.
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 clearly states the action (Get) and resource (a single test run) and specifies the identifier method (by id). This distinguishes it from sibling tools like list_runs (retrieves multiple runs) and add_run (creates a run).
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 implies usage when you have a specific run ID, but it does not explicitly state when to use this tool versus alternatives like list_runs or when not to use it. No exclusions or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_casesB
List test cases in a project. Filter by suite and/or section.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| suite_id | No | ||
| section_id | No | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It mentions 'list' and 'filter' but omits pagination behavior (limit/offset), default ordering, error states, or the nature of the response. This is insufficient for a listing tool.
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 extremely concise: two sentences, no redundant words, and immediately front-loaded with the action. Every word adds value.
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 moderate complexity (5 parameters, pagination) and no output schema, the description is incomplete. It lacks details on pagination mechanics, response structure, error handling, and default state. A listing tool requires more context for effective use.
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 0%, so the description must explain all parameters. It covers suite_id and section_id as filters, but ignores project_id (required), limit, and offset for pagination. The description adds value over the schema only for two of five 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 description clearly states the action ('List'), the resource ('test cases'), and the scope ('in a project'). It also specifies filtering options ('by suite and/or section'), which differentiates it from sibling tools like 'get_case' (single case) or 'list_suites'.
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 implies usage for listing cases, but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or conditions. Sibling tools like 'get_case' suggest a specific use case, but no comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all TestRail projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose any behavioral traits such as pagination, permissions, rate limits, or return format. For a list tool, at least mentioning pagination or scope would improve transparency.
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 a single, concise sentence that immediately conveys the purpose. It is front-loaded and contains no extraneous information, making it highly efficient.
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 minimal and adequate for a simple 'list all' tool with no parameters. However, it lacks details like whether results are paginated or if any filters are available, which could be useful for an AI agent. Given no output schema, additional context on return structure would improve completeness.
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?
There are no parameters in the input schema (100% schema description coverage by default). The description adds meaning by specifying the resource ('projects') that will be listed, which is valuable context beyond the empty 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 'List all TestRail projects' uses a specific verb ('list') and resource ('projects'), clearly stating the tool's function. It distinguishes from sibling tools since no other sibling lists projects, making its purpose unambiguous.
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 provides no explicit guidance on when to use this tool versus alternatives. However, given the simplicity of listing all projects, the intended usage is implied and no conflicting alternatives exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsC
List test runs for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It fails to disclose behavioral traits like pagination, filtering, sorting, or whether all runs are returned. The minimal description leaves significant ambiguity.
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 a single concise sentence, but it is overly terse. While there is no unnecessary verbosity, the lack of structure and detail makes it less useful.
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 no output schema, the description should explain return values or behavior, but it does not. The information is incomplete for an agent to understand what the tool returns or how to handle the output.
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 0% schema description coverage, the description adds no meaning beyond the schema. It does not explain the project_id parameter, how to obtain it, or its format. The agent must rely solely on the parameter name.
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 'List test runs for a project' clearly specifies the action (list), the resource (test runs), and the scope (for a project). It effectively distinguishes from sibling tools like list_cases, list_suites, and get_run.
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?
No guidance is provided on when to use this tool versus alternatives such as get_run (single run) or close_run (mutating runs). The description does not help the agent decide contextually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sectionsA
List sections in a project (optionally filtered by suite).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| suite_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It accurately describes the operation as 'list', which implies a read-only, safe action. However, it does not elaborate on side effects, permissions, or response characteristics beyond the basic behavior.
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 a single sentence that is front-loaded with the core purpose. It contains no unnecessary words or filler, achieving maximum efficiency.
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 simple list tool with two parameters and no output schema, the description covers the essential behavior and filtering. However, it does not indicate the structure of the returned objects or any ordering/pagination, which could be useful context.
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 0%, so the description must compensate. It adds meaning by linking 'filtered by suite' to the optional suite_id parameter, but does not explain the project_id parameter or any constraints. This is adequate for a simple two-parameter tool.
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 'List sections in a project (optionally filtered by suite)' clearly states the action (list) and resource (sections in a project), and distinguishes from siblings by mentioning the optional suite filter. This is specific and unambiguous.
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 implies usage in contexts where sections are needed, and the mention of optional suite filtering provides context. However, no explicit guidance on when to prefer this over sibling tools (e.g., list_cases, list_suites) or when not to use it is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suitesC
List test suites for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose behavioral traits such as read-only nature, pagination, permissions, or rate limits. As a list operation, it is likely read-only but not explicitly stated.
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?
Single sentence, no fluff. Efficiently conveys purpose. Could add structure (e.g., bullet lists) for parameters, but acceptable for a simple tool.
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 simple tool with one parameter and no output schema, the description is minimal. It does not describe the return format (e.g., list of suite IDs/names), which is needed for an agent to use the response. Lacks completeness beyond basic intent.
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 0% schema description coverage, the description must clarify parameters. It only implies project_id identifies the project via 'for a project', but adds no details about format, source, or constraints. The parameter name 'project_id' is informative but not elaborated.
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 clearly states the action (list) and resource (test suites) with context (for a project). It distinguishes from sibling tools like list_cases, list_runs, and list_projects by specifying 'suites'.
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?
No guidance on when to use this tool vs alternatives. Does not mention prerequisites, filtering, or ordering. Leaves the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_testsC
List tests (case-instances) inside a run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose any behavioral traits such as read-only nature, pagination, or side effects. For a simple list tool, the minimal description fails to add transparency beyond the bare action.
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 very concise with one sentence, front-loading the key information. It is appropriate for a simple tool, though it could be slightly expanded without losing conciseness.
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 tool has 1 parameter, no output schema, and no annotations, the description lacks information about return format, pagination, error handling, or any further details needed for complete understanding.
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 single parameter 'run_id' is mentioned as the run identifier via the phrase 'inside a run', but no additional semantic details are provided. The schema has 0% description coverage, so the description adds minimal value over the parameter title.
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 clearly states the verb 'list' and the resource 'tests (case-instances)' with the scope 'inside a run'. It distinguishes from siblings like 'list_cases' by specifying the context, though it could be more explicit about the difference.
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?
No guidance is provided on when to use this tool versus alternatives like 'list_cases' or 'get_case'. The sibling tools are listed but no usage context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_caseA
Update an existing test case. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| case_id | Yes | ||
| title | No | ||
| type_id | No | ||
| priority_id | No | ||
| estimate | No | ||
| refs | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that only provided fields are changed (partial update), which is important behavioral info. No annotations provided, so no contradictions, but lacks details on permissions or side effects.
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?
Two concise sentences, front-loaded with key behavior. Could be slightly more structured but overall efficient.
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?
Adequate for a simple update tool with 7 parameters; no output schema. Lacks examples or typical use cases, but not critically incomplete.
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 0%, and the description does not explain individual parameters. Although parameter names are somewhat self-explanatory, the description adds no semantic value beyond 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?
Clearly states it updates an existing test case and specifies that only provided fields are changed. Distinguishes from sibling tools like add_case, delete_case, get_case.
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?
Implied usage from description but no explicit guidance on when to use versus alternatives (e.g., using get_case first). No exclusions or prerequisites mentioned.
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.
15 tool updates
v0.1.0- First observed
add_case - First observed
add_result_for_case - First observed
add_run - First observed
close_run - First observed
delete_case - First observed
get_case - First observed
get_results_for_case - First observed
get_run - First observed
list_cases - First observed
list_projects - First observed
list_runs - First observed
list_sections - First observed
list_suites - First observed
list_tests - First observed
update_case
TDQS
Scored across 15 tools
Each tool targets a distinct TestRail entity or action (project, suite, section, case, run, result, test) with clear boundaries, e.g., add_case vs update_case, list_cases vs get_case, add_result_for_case vs get_results_for_case. No two tools have overlapping purposes.
All tools follow a consistent verb_noun pattern using snake_case (e.g., add_case, get_run, list_sections). Verbs are imperative (add, get, list, delete, close, update) and nouns are singular entity names. Minor prepositions like 'for_case' are uniform.
Fifteen tools is well-scoped for a TestRail MCP covering core entities: projects, suites, sections, cases, runs, results, and tests. Each tool serves a clear purpose without unnecessary bloat or missing essentials.
The tool set provides full CRUD for test cases and runs, plus read and list operations for most entities. However, missing create/update/delete for sections and suites are notable gaps that agents would need to work around, though core test workflow is covered.
Maintenance
Related MCP Connectors
An MCP server that provides access to Testiny projects, test cases and test runs
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI access to SmartBear tools, including BugSnag, Reflect, Swagger, PactFlow, QTM4J.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables management of TestRail projects, test cases, runs, and results directly through MCP-supported clients. It provides a comprehensive set of tools to interact with the TestRail API for seamless test cycle management within AI environments.421,101 npm44MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for TestRail that enables AI assistants to interact with TestRail's test management platform. It can query and manage projects, test cases, runs, results, plans, milestones, and more.MIT
- AlicenseBqualityAmaintenanceAI-native Model Context Protocol (MCP) server for TestRail. Lets Claude, Cursor, Windsurf, and other AI assistants browse projects, create and update test cases, kick off test runs, and record results through natural-language conversation — with strongly-typed tool schemas and per-project custom field validation that helps LLMs generate valid TestRail requests on the first try.281,082 npm39Apache 2.0
- AlicenseBqualityBmaintenanceAn MCP server for TestRail that prepares everything needed to generate test cases from Jira tickets, Confluence pages, or free-form specs and pushes them back to TestRail.312MIT