tcm-mcp
The tcm-mcp server provides a stable, tool-based interface for AI agents to read and write TCM (Test Case Management) test cases without direct database access, acting as a thin client that proxies TCM REST endpoints. All write operations follow a mandatory dry-run → approval → commit safety flow.
Project discovery:
list_projectsallows finding available projects by ID or name, with search capabilities.Suite management:
search_suiteresolves a suite name or prefix to a suite ID within a project;list_suiteslists all suites in a project with details like ID, name, prefix, group, and test case count.Test case listing:
list_test_casesretrieves a lightweight, filterable list by project, suite, search term,automation_status, orpriority, showingdisplay_id,title,automation_status, andpriority(up to 200 results).Test case details:
get_test_casefetches the full details of a specific test case—including all steps—using its human-readabledisplay_id(e.g.,APA-3).Create test cases:
create_test_casecreates a new test case with title, steps, priority, description, preconditions, tags, platform tags, and automation status; requires adry_run: truecall for validation and summary before a commit call (dry_run: falseor omitted).Update test cases:
update_test_casepartially updates an existing test case bydisplay_id; providing steps fully replaces all existing steps; also enforces the dry-run → approval → commit flow.Authentication Management: Supports interactive login sessions, static tokens, and Clutch API keys, with auto-refreshing for interactive sessions.
Write Safety Flow: All write operations enforce a dry-run → human approval → commit process to ensure changes are reviewed before being applied.
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., "@tcm-mcpGet details for test case APA-3"
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.
tcm-mcp — TCM MCP Server (Epic 1: Test Case CRUD)
A stdio MCP server that gives AI agents (Torque, triage-e2e, Claude agents) a stable tool interface to read and write TCM test cases — without touching the database schema directly.
It is a thin client: every tool call proxies a TCM REST endpoint. ID resolution, validation, display_id generation, the in_cicd lock, and soft-delete scoping all happen inside TCM. Agents reference cases by display_id (e.g. APA-3); internal UUIDs are never exposed.
Full design: docs/features/mcp-e1-test-case-crud.md (in the main TCM repo).
Tools
Tool | Purpose |
| Discover the projects you can see ( |
| Resolve a suite name/prefix → |
| List every suite in a project — each with |
| Lightweight filterable list ( |
| Full detail + steps, by |
| Create a case with steps — dry-run → approval → commit (see below). |
| Partial update; steps are full-replace when provided — same dry-run flow. |
Reads exclude trashed (soft-deleted) cases. Writes require the dry-run flow.
Project scoping. search_suite, list_suites, and list_test_cases scope by project. Pass a project_id (UUID) directly, or a project_name — the server resolves the name to an id via list_projects (case-insensitive exact match; an unknown name returns NOT_FOUND and an ambiguous one returns AMBIGUOUS with the candidate ids). Use list_projects first to discover ids. list_test_cases with no project returns cases across every project you can see.
Related MCP server: TestRail MCP Server
Requirements
Node.js ≥ 18 (for
npxand the globalfetch).Git read access to
JoinFullStackDev/tcm-mcp— the package is distributed by git URL, not published to npm. On headless hosts (OpenClaw/Torque) a git token must be present in the environment.That's it for the TCM URL: it defaults to production (
https://tcm-ochre.vercel.app), so there's nothing to look up or set. You just need to authenticate (Quickstart).
Because it's distributed by git URL, npx clones the repo and builds from source on first run (via the package's prepare → tsc step), so the first launch is slower. Subsequent runs are cached.
Quickstart
Zero-config: the production TCM instance (https://tcm-ochre.vercel.app) is baked in as the default, so you never set TCM_BASE_URL. Point at a different instance only if you self-host (see Environment variables).
Prerequisite — git access. This package is fetched by git URL from a private repo, so the machine running it needs git read access (gh auth login, or a git token for headless hosts). Node ≥ 18 must be installed. On macOS, GUI-launched Claude Desktop may not see your shell PATH — if the server fails to start, use an absolute path to npx in the config (find it with which npx).
1. Register the server
Claude Code — one command, nothing to edit by hand:
claude mcp add tcm --scope user -- npx --yes github:JoinFullStackDev/tcm-mcp#v1.4.0 --stdio--scope user makes it available in every project. (Drop it to scope to the current project; Claude Code writes the .mcp.json for you.)
Claude Desktop — no CLI, so add it to the config file once:
Settings → Developer → Edit Config — this creates and opens
claude_desktop_config.jsonfor you (no folder to make yourself):macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the
tcmentry (merge intomcpServersif it already exists), then fully quit + reopen Claude Desktop:
{
"mcpServers": {
"tcm": {
"command": "npx",
"args": ["--yes", "github:JoinFullStackDev/tcm-mcp#v1.4.0", "--stdio"]
}
}
}Pin to a tag (
#v1.4.0), not a branch — a branch ref re-resolves on every launch and can trip the 30 s MCP startup timeout. Noenvblock is needed.
2. Sign in
The server starts even before you've logged in — it just exposes a login tool. So the easiest way (works in Claude Desktop and Claude Code, no terminal):
Just ask Claude: "Log me into TCM."
Claude calls the login tool, a browser opens once for Google sign-in, and the server stores a session it then keeps refreshed. The other tools light up immediately after. (Playwright is auto-installed on first login — a one-time ~100 MB browser download into ~/.tcm-mcp.)
Prefer a terminal? Same thing, run once:
npx --yes github:JoinFullStackDev/tcm-mcp#v1.4.0 loginDetails: Auto-refreshing login.
If you'd rather edit .mcp.json directly (Claude Code project or ~/.claude/.mcp.json), the minimal entry is just command + args as shown above. To use the legacy static-token mode instead of a login session (e.g. CI that already has a JWT), add an env block — note it expires ~1h and refreshing it needs a full client restart:
{
"mcpServers": {
"tcm": {
"command": "npx",
"args": ["--yes", "github:JoinFullStackDev/tcm-mcp#v1.4.0", "--stdio"],
"env": { "TCM_USER_TOKEN": "${TCM_USER_TOKEN}" },
},
},
}Auth modes
The server resolves its mode at startup. Precedence: CLUTCH_API_KEY → login session file → TCM_USER_TOKEN.
Mode | Selected by | Sends | Use for | Attribution |
Refreshing token (interactive) | a session file ( |
| Claude Code, human in the loop | The real user (their Supabase session) |
Static token (legacy) |
|
| CI / scripts injecting a JWT | The real user (their Supabase JWT) |
Clutch key (headless) |
|
| Torque via Clutch/OpenClaw | The service profile — see |
In refreshing mode the server auto-renews the access token before expiry and again on any 401 (retrying the request once), and persists the rotated refresh token back to the session file. In static and clutch modes a 401 is terminal (nothing to refresh).
In headless mode you must also set MCP_AGENT_USER_ID, or create/update will fail on the created_by/updated_by NOT NULL constraint. The server prints a startup warning if it's missing. When set, the server forwards it to TCM as an X-Agent-User-Id header (trusted only alongside a valid X-Clutch-Key), so each agent attributes its own writes; TCM falls back to its own MCP_AGENT_USER_ID env if the header is absent. (Requires TCM with the matching write-attribution support.)
Auto-refreshing login (recommended)
The login helper signs you into TCM in a browser once and writes a session file the server then uses to keep itself authenticated indefinitely — no ~1h token churn, no client restarts.
# no clone needed — runs straight from the git URL:
npx --yes github:JoinFullStackDev/tcm-mcp#v1.4.0 login
# ...or, from a local clone of this repo:
npm run loginOpens a browser only if there's no valid saved session; later runs refresh silently (headless, no window).
Playwright is installed for you on first login. It is deliberately not a server dependency (keeps
npx <server>installs lean ~50 MB), so the login helper installsplaywright+ Chromium once into~/.tcm-mcp(a ~100 MB one-time download) if they aren't already present. You do not need a separate "Playwright MCP" — the login is fully self-contained.
It writes ~/.tcm-mcp/session.json (mode 0600) containing the Supabase project URL, anon key (public), and the access + refresh tokens. From then on the MCP server (mode “refreshing token”) mints fresh access tokens on demand.
Session file location:
~/.tcm-mcp/session.json, override withTCM_SESSION_FILE.Browser profile:
~/.tcm-mcp/browser, override withTCM_BROWSER_PROFILE.Security: the refresh token is a long-lived credential — the file is
0600and must never be committed or shared. Supabase rotates the refresh token on every refresh; the server persists the new one atomically.When it expires: if the refresh token is ever revoked/expired, tool calls fail with a clear “run
npm run login” message. Re-run the helper.Anon key capture: the helper sniffs the public
apikeyheader from Supabase network traffic. If capture ever fails, setSUPABASE_ANON_KEY(safe to expose) and re-run.
Environment variables
Variable | Required | Mode | Purpose |
| no (defaults to production) | all | Base URL of the TCM instance. Defaults to |
| no | refreshing | Override the session-file path (default |
| no | refreshing | Override the login browser-profile dir (default |
| one credential | static | User's Supabase JWT (legacy; expires ~1h, no refresh). |
| one credential | headless | Server-to-server key; must match TCM's |
| yes, in headless mode for writes | headless |
|
The recommended credential is the login session file (npm run login), not TCM_USER_TOKEN — see Auto-refreshing login. TCM_USER_TOKEN remains for CI / scripts that already have a JWT.
The write safety flow (dry-run → approval → commit)
create_test_case and update_test_case are two-pass:
Call with
dry_run: truefirst. The tool validates, resolves IDs, and returns a summary (create: the proposed case; update: a field-level diff + before/after steps). No write happens.A human reviews and approves — Torque relays the summary to Slack via Clutch; Claude Code shows it inline in the chat.
Call again with
dry_run: false(or omitdry_run) to commit.
The server does not technically enforce that a dry-run/approval happened before a commit (decided: PRD OQ-4 Option A) — it's a process convention. Don't call with dry_run: false without human approval.
Local development
git clone https://github.com/JoinFullStackDev/tcm-mcp && cd tcm-mcp
npm install # runs prepare → tsc → dist/
npm run build # rebuild after changes
# run the stdio server directly (Ctrl-D / EOF to exit)
TCM_BASE_URL=https://your-tcm-instance.example.com \
TCM_USER_TOKEN=your-jwt \
node dist/index.js
npm run dev # same, via ts-node (no build step)Startup logs (mode, base URL, "Ready") are written to stderr, so they don't interfere with the stdio MCP protocol on stdout.
Notes & caveats
Audit logging (
mcp_tool_calls, PRD Appendix C) requires migration00042applied to the TCM database. The log inserts are fire-and-forget and non-blocking — if the table is missing, tools still work; only the audit trail is skipped.Distribution is git-URL only (no npm publish). Pin a tag; ensure hosts have git access.
The
--stdioarg in the config is cosmetic — stdio is the only transport.
Available Tools
5 toolscreate_test_caseA
Create a test case with steps. REQUIRED: call with dry_run: true first. Review the summary with a human. Only call with dry_run: false (or omit dry_run) after explicit human approval. Steps are required. display_id is assigned by TCM on commit.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Free-form tags (each ≤50 chars). | |
| steps | Yes | Test steps (required; step_number assigned by order, 1-based). | |
| title | Yes | Test case title (1–500 chars). | |
| dry_run | No | true → validate + return summary to caller, no write. false/omit → commit (only after human approval of a dry-run). | |
| priority | No | Priority (v1: low/medium/high only; critical deferred to v2). | |
| suite_id | Yes | Suite UUID (from search_suite). | |
| description | No | Description text (optional). | |
| precondition | No | Precondition text (optional). | |
| platform_tags | No | Platform tags (constrained enum: desktop/tablet/mobile only). | |
| automation_status | No | Default: not_automated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing the dry-run validation vs. commit behavior, the requirement for human approval, and that display_id is assigned by TCM on commit. It stops short of describing validation failures or side effects, but the key behaviors are transparent.
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 three sentences and front-loaded with the primary verb and resource. The REQUIRED dry-run workflow is stated in a deliberate, direct manner without any extraneous content. Every sentence contributes essential operational guidance.
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 10-parameter tool with 3 required parameters and no output schema, the description covers the critical workflow and key constraints (steps required, dry_run first, display_id on commit). It doesn't explain the return value or failure modes, but the rich schema and concise workflow guidance make the tool usable; a small gap remains regarding what the dry-run summary contains and follow-up actions on validation failure.
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 input schema fully documents all 10 parameters. The description adds no new parameter details beyond reinforcing that steps are required (already in schema) and noting that display_id is assigned on commit (a behavioral outcome, not a parameter semantic). Baseline 3 is appropriate given complete schema coverage.
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 test case with steps,' which uses a specific verb and resource, clearly distinguishing this creation tool from sibling tools like update_test_case, get_test_case, and search_suite. The added step requirement and commit workflow reinforce its unique purpose.
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 explicit instructions on when to use dry_run true (first), when to get human approval, and when to commit with dry_run false/omitted. However, it does not explicitly compare against sibling tools or state when not to use this tool at all, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_test_caseA
Get full detail of a test case by display_id (e.g. "APA-3"), including all steps. Use this before update_test_case to review the current state.
| Name | Required | Description | Default |
|---|---|---|---|
| display_id | Yes | Human-readable test case ID, e.g. "APA-3". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. 'Get' implies a read-only operation, and it mentions returning full detail with all steps. However, it does not explicitly state safety (no side effects) or error behavior, leaving some 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?
Two concise sentences: first states the primary function, second provides a concrete usage guideline. No wasted words.
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 single-parameter tool with no output schema, the description adequately explains what is returned (full detail, all steps), how to identify the test case, and when to use it. No additional documentation is necessary.
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%, providing full parameter documentation. The description adds a usage example ("APA-3") and implies the parameter's role in retrieval, but does not significantly extend 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?
The description clearly states the tool gets full detail of a test case by display_id, including all steps. It distinguishes itself from siblings like update_test_case by implying a read-only retrieval operation.
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 advises using this tool before update_test_case to review current state, giving a clear use case. It does not mention exclusions for other siblings like list_test_cases, but the context is specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_test_casesA
List test cases with lightweight projection (display_id, title, automation_status, priority). Filterable by project, suite, or search term. Default limit 50, max 200.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50, max 200). | |
| search | No | ilike match on display_id or title. | |
| suite_id | No | Filter by suite UUID. | |
| project_id | No | Filter by project UUID (joins through suite). |
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 behavioral disclosure. It does disclose the lightweight projection fields and the default/max limit, which are useful behavioral insights. It does not explicitly state the return shape or read-only nature, but the verb 'List' and the projection list make these reasonably clear.
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 two sentences and front-loads the core purpose. Every sentence adds functional value: projection, filters, and limit behavior. No wasted words.
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 list tool with 4 optional parameters and no output schema, the description covers the essentials: what is returned (lightweight fields), how to filter, and result limits. It does not mention sorting or pagination, but given the max limit of 200, this is likely acceptable.
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 input schema covers 100% of parameters, so the baseline is 3. The description's mention of 'filterable by project, suite, or search term' provides a useful summary but does not add new semantics beyond what the schema already states (e.g., ilike matching, UUIDs).
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 uses a specific verb and resource ('List test cases') and clearly distinguishes this tool from siblings by mentioning 'lightweight projection' and the specific fields returned. This differentiates it from get_test_case (single, detailed) and search_suite (searches 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 provides clear context for when to use the tool—when you need a filtered, lightweight list of test cases—and mentions the filterable dimensions (project, suite, search). However, it does not explicitly name alternative tools or state exclusions, such as 'for full details use get_test_case', so it is strong but not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_suiteA
Resolve a suite name or prefix to a suite reference. Call this before create_test_case or list_test_cases to get the suite_id. Returns all matches so the caller can disambiguate if >1.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project UUID. Scopes the search (prefix is only unique per project). | |
| name_or_prefix | Yes | Suite name or prefix to search (case-insensitive, substring match). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It reveals that 'Returns all matches so the caller can disambiguate if >1', which is important. However, it does not describe the return structure, error behavior, or required permissions, leaving gaps for a tool with no output schema.
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?
Three concise sentences front-load the purpose, provide usage context, and note a key behavioral detail. Every sentence contributes value without redundancy.
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 covers the tool's purpose and usage, and mentions that it returns matches and yields a suite_id. However, with no output schema and no annotations, it stops short of fully describing the return format and edge cases, making it slightly 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 100%, with both project_id and name_or_prefix well described. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 applies.
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 specifies the verb 'Resolve' and resource 'suite name or prefix' with an output of 'suite reference'. It distinguishes itself from siblings by positioning as a prerequisite lookup for create_test_case and list_test_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 explicitly instructs when to use the tool: 'Call this before create_test_case or list_test_cases to get the suite_id.' This is clear, though it does not mention when not to use it or direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_test_caseA
Partially update an existing test case by display_id. If steps is provided, ALL existing steps are wiped and replaced (full-replace — not partial). REQUIRED: call with dry_run: true first. The dry-run shows the full before/after diff including steps. Only call with dry_run: false after explicit human approval.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tags (optional, replaces all). | |
| steps | No | If provided: FULL REPLACE of ALL steps. Omit to leave steps unchanged. | |
| title | No | New title (optional). | |
| dry_run | No | true → compute diff + return to caller, no write. false/omit → commit (only after human approval). | |
| priority | No | New priority (optional). | |
| display_id | Yes | Target test case display_id, e.g. "APA-3". | |
| description | No | New description (optional). | |
| precondition | No | New precondition (optional). | |
| platform_tags | No | New platform tags (optional, replaces all). | |
| automation_status | No | New automation status (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It discloses a critical destructive behavior: 'ALL existing steps are wiped and replaced (full-replace — not partial)' and mandates a dry-run first for safety. This goes beyond a generic update description and alerts the agent to the mutating consequence.
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?
Three sentences, tightly packed. The purpose is front-loaded, followed by the two most critical safety warnings. Every sentence earns its place with zero 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 tool with 10 parameters, no annotations, and no output schema, the description covers the essential workflow and the most dangerous edge case (steps replacement). It doesn't mention that tags and platform_tags also replace-all, but the schema already documents those semantics, so the description is not incomplete. It could briefly note other replace-all fields but is otherwise 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 input schema has 100% description coverage, so baseline is 3. The description adds value by emphasizing 'by display_id', repeating the steps full-replace warning, and explaining that dry-run shows 'the full before/after diff including steps' — a detail not in the schema. This is a modest but meaningful addition.
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 'Partially update an existing test case by display_id', using a specific verb ('update') and resource ('test case') and key parameter. It distinguishes from sibling tools like create_test_case (create) and get_test_case (read), making the 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 explicitly requires 'call with dry_run: true first' and 'Only call with dry_run: false after explicit human approval', providing a clear mandatory workflow. It also clarifies the full-replace behavior for steps, giving the agent precise conditions for safe use.
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.
5 tool updates
v1.0.0- First observed
create_test_case - First observed
get_test_case - First observed
list_test_cases - First observed
search_suite - First observed
update_test_case
TDQS
Each tool has a distinct purpose: create, update, get, list, and suite search. No two tools overlap in function, and search_suite clearly serves as a helper for resolving suite IDs before other operations.
All tools use a verb_noun snake_case pattern (create_, update_, get_, list_, search_). The only deviation is list_test_cases using plural while others use singular, which is a standard convention for list operations.
Five tools is well-scoped for a test case management server. Each tool covers a necessary operation without redundancy or bloat.
Core CRUD operations are present (create, get, update, list), but delete_test_case is missing. Suite management is limited to search, with no create/update/delete for suites, leaving notable lifecycle gaps.
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
An MCP server that provides access to Testiny projects, test cases and test runs
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Related MCP Servers
- AlicenseAqualityFmaintenanceQA Sphere MCP server that enables Large Language Models to interact directly with test management system test cases, supporting AI-powered development workflows and test case discovery.1532023MIT
- 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
- FlicenseNot gradedqualityBmaintenanceAn MCP server that exposes Kiwi TCMS as a set of AI-callable tools, enabling assistants to create and manage test plans, test cases, test runs, and executions directly from a conversation.1-
- FlicenseNot gradedqualityBmaintenanceMCP server that enables AI agents to programmatically run tests, query results, and receive intelligent recommendations about test execution strategy.-
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/JoinFullStackDev/tcm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server