MCP server for TestRail — CRUD plus AI test-case generation from text, Jira tickets, and Confluence pages
Project description
testrail-mcp
An MCP server for TestRail that goes beyond CRUD: it generates real test cases from Jira tickets or any free-form spec, optionally pushing them straight into TestRail.
Built on the official Python MCP SDK (FastMCP). Designed to plug into Claude Desktop, Claude Code, Cursor, or any other MCP-capable client.
What it gives you
CRUD over TestRail
list_projects— projects visible to the userlist_suites— suites under a projectsearch_test_cases— list cases under a project / suite / section, optionally filter by title substringget_test_case— fetch one case by IDcreate_test_case— create a case in a sectionget_or_create_section— resolve a path likeAuth > Login > Edge Cases, creating missing nodes
AI tools (the actual differentiator)
generate_cases_from_text— feed a PRD chunk / spec / bug report → get TestRail-shaped cases, optionally created in the given section (by ID or by hierarchy string)generate_cases_from_jira— pass a Jira issue key (e.g.ABC-123); server fetches summary, description, comments, subtasks, walks the ADF tree, generates casesgenerate_cases_from_confluence— pass a Confluence page ID; same flow, HTML body stripped to plain textpreview_house_style— see the 5 sibling cases that will be passed to Claude as in-context style anchors
All three generate_cases_* tools pull a few existing cases from the target section and feed them to Claude as house-style examples by default, so new cases match local title casing, step granularity, and expected-result phrasing. Override with house_style_section_id to draw style from a different "golden" section, or set house_style=False to skip.
Quick start
Run with uvx (recommended — no clone, no venv)
Once the package is on PyPI:
uvx testrail-mcp-server
For local development from a checkout:
git clone https://github.com/Sergey-Bl/testrail-mcp
cd testrail-mcp
uv venv --python 3.12
uv pip install -e .
cp .env.example .env # fill in TestRail / Jira / Anthropic keys
Inspect interactively (recommended first step)
npx @modelcontextprotocol/inspector python server.py
This opens a local web UI where each tool can be called by hand. Use it to verify auth and tool wiring before you plug into a client.
Use in Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"testrail": {
"command": "uvx",
"args": ["testrail-mcp-server"],
"env": {
"TESTRAIL_BASE_URL": "https://your-org.testrail.io",
"TESTRAIL_USER": "you@example.com",
"TESTRAIL_API_KEY": "...",
"TESTRAIL_PROJECT_ID": "1",
"TESTRAIL_SUITE_ID": "1",
"ANTHROPIC_API_KEY": "sk-ant-...",
"JIRA_BASE_URL": "https://your-org.atlassian.net",
"JIRA_USER": "you@example.com",
"JIRA_API_TOKEN": "..."
}
}
}
}
Restart Claude Desktop. The testrail server should appear in the tools menu.
Use in Claude Code
claude mcp add testrail -- uvx testrail-mcp-server
(You'll still need to provide env vars — either via claude mcp add --env KEY=VALUE flags or a .env in the working directory.)
Use in Cursor
In ~/.cursor/mcp.json:
{
"mcpServers": {
"testrail": {
"command": "uvx",
"args": ["testrail-mcp-server"],
"env": { "TESTRAIL_BASE_URL": "...", "TESTRAIL_USER": "...", "TESTRAIL_API_KEY": "...", "ANTHROPIC_API_KEY": "..." }
}
}
}
Configuration
| Env var | Required | Purpose |
|---|---|---|
TESTRAIL_BASE_URL |
yes | e.g. https://your-org.testrail.io |
TESTRAIL_USER |
yes | TestRail account email |
TESTRAIL_API_KEY |
yes | from My Settings → API Keys |
TESTRAIL_PROJECT_ID |
optional | default project ID for tools that take it |
TESTRAIL_SUITE_ID |
optional | default suite ID |
TR_TEMPLATE_ID |
optional | default template (2 = "Test Case (Steps)") |
TR_TYPE_ID |
optional | default case type |
TR_PRIORITY_ID |
optional | default priority (3 = Medium) |
ANTHROPIC_API_KEY |
yes | required for AI generation tools |
CASE_GEN_MODEL |
optional | defaults to claude-haiku-4-5-20251001 (cheap + fast) |
JIRA_BASE_URL |
optional | only for generate_cases_from_jira |
JIRA_USER |
optional | Jira account email |
JIRA_API_TOKEN |
optional | https://id.atlassian.com/manage-profile |
CONFLUENCE_BASE_URL |
optional | only for generate_cases_from_confluence |
CONFLUENCE_EMAIL |
optional | defaults to JIRA_USER |
CONFLUENCE_API_TOKEN |
optional | defaults to JIRA_API_TOKEN |
Example: from a Jira ticket straight into TestRail
In Claude Code or Claude Desktop, after the server is registered:
Generate test cases from
ABC-123and put them underAuth > Login > Smoke.
The server walks the section path (creating missing nodes), pulls the Jira ticket, generates ~15-30 cases, then bulk-creates them with house-style defaults (template 2, type 7, priority 3). Reply contains every new case ID.
Tool reference
In addition to the basics above:
bootstrap_feature— one-shot pipeline: ingest a Confluence page / Jira ticket / raw spec, generate cases with house-style anchors, run lint + coverage-gap analysis, optionally dedupe against an existing section, push to TestRail.push=Falsefor dry-run.dedupe_against_section— flag generated cases that look like duplicates of cases already in a target section (title-token overlap; configurablethreshold).lint_cases— Claude reviews a batch of cases and flags vague titles, generic "should work" expecteds, combined steps, missing preconditions, etc.coverage_gaps— Claude compares the original spec to the generated case set and lists testable behaviours that aren't covered.list_sections,find_populated_section,create_suite— small CRUD helpers used by the orchestrator.
Roadmap
- SSE / HTTP transport for hosted use
- Embedding-based dedupe (semantic, not just token overlap)
-
update_case— patch existing cases when the spec changes - Suite cloning across projects
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file testrail_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: testrail_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
271cbd737941c8c93f54f5386b3f5bcfef1f26cb8884d443ca6cfcfddf484514
|
|
| MD5 |
c141f87f8b1c0d5a1f15ac3071516c72
|
|
| BLAKE2b-256 |
c17b76ba06a62693c40368d078bfd80692194289c44014e61fa1171e21bafffd
|
File details
Details for the file testrail_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: testrail_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b37c0e9005beb2146cf95789abf3c114428f0dd2793b54c19bb91072afc276fc
|
|
| MD5 |
78c67b0f64b1b9b4e672ae429f01a6f7
|
|
| BLAKE2b-256 |
c3f226d39b8d6fb5b443caf957197775d680f034cd7797096078ebbb09238813
|