Skip to main content
Glama

testmcp

An MCP server that wraps existing test frameworks (Jest, Vitest, Pytest) and exposes structured, LLM-optimized results via MCP tools.

Why?

Test frameworks were designed for humans. LLMs get ANSI escape codes, watch mode prompts, and 5000-line outputs that blow up context windows. testmcp fixes this with:

  • Progressive disclosure — Get a summary first, drill into failures on demand

  • Structured output — JSON, not terminal formatting

  • Diff-aware testing — Run only tests affected by your git changes

  • Time-budgeted execution — Set a timeout, get partial results

  • Source enrichment — Failure reports include the relevant source code around each assertion

  • Watch mode protection — Impossible to accidentally enter interactive mode

Related MCP server: Testing MCP

Installation

git clone https://github.com/r-marques/testmcp.git
cd testmcp
yarn install
yarn build

Configure as MCP server

Claude Code (recommended):

claude mcp add testmcp -- node /absolute/path/to/testmcp/dist/index.js

This registers testmcp as a local stdio MCP server. Restart Claude Code after adding.

Other MCP clients (Cursor, Windsurf, etc.):

Add to your MCP configuration file:

{
  "mcpServers": {
    "testmcp": {
      "command": "node",
      "args": ["/absolute/path/to/testmcp/dist/index.js"]
    }
  }
}

Verify it works

After restarting your MCP client, the testmcp tools should be available. In Claude Code you can verify with:

claude mcp list
# Should show: testmcp: node /path/to/testmcp/dist/index.js - ✓ Connected

Tools

Test Execution

Tool

Purpose

discover

Auto-detect test frameworks in a project

run_tests

Execute tests, return a compact summary

run_affected

Git-aware: only run tests affected by changes

get_failures

Drill into failures with source context

get_test_detail

Single test deep-dive with full stack trace

rerun_failed

Re-execute only previously failed tests

get_coverage

Coverage data from a previous run

list_runs

List recent test run summaries

CI Log Parsing

Tool

Purpose

parse_log

Parse raw CI/test log text and extract structured test results. Auto-detects framework.

list_artifacts

List artifacts from a GitHub Actions run

parse_artifact

Download a GitHub Actions artifact and parse it as test results

The CI tools enable a workflow where the LLM reads a CI workflow file to identify the right artifact, then uses parse_artifact to get structured results — no manual log parsing needed.

How It Works

The Progressive Disclosure Flow

Instead of dumping thousands of lines of test output, testmcp gives you information in layers:

Step 1: Run tests — Get a compact summary

run_tests({ projectDir: "/app" })
→ { total: 200, passed: 197, failed: 3, failedTests: ["auth > login > rejects expired token", ...] }

Step 2: Drill into failures — Get failure details with source context

get_failures({ runId: "abc-123" })
→ For each failure:
   - Concise error message
   - 7 lines of source code around the assertion
   - Test file and line number

Step 3: Deep dive — Full stack trace for a single test (only when needed)

get_test_detail({ runId: "abc-123", testName: "auth > login > rejects expired token" })
→ Complete error output with full stack trace

This approach uses 4-5x fewer tokens compared to raw test output in typical failure scenarios, because you never pay for the 197 passing tests you don't care about.

Diff-Aware Test Selection

run_affected analyzes your git changes through three layers:

  1. Direct changes — Test files you modified are included

  2. Naming conventions — Changed src/api/client.ts? Looks for tests/api/client.test.ts

  3. Import scanning — Greps test files for imports of changed source files

Each selected test includes a reason explaining why it was chosen.

Time-Budgeted Execution

run_tests({ projectDir: "/app", timeout: 30000 })

If the suite takes longer than 30 seconds, the process is killed and partial results are recovered. The response includes timedOut: true so you know results are incomplete.

Supported Frameworks

Framework

Detection

Output Parsing

Jest

jest.config.*, package.json

--json (native JSON reporter)

Vitest

vitest.config.*, package.json

--reporter=json (supports both v1.x tasks format and v2+ Jest-style format)

Pytest

pyproject.toml, pytest.ini, conftest.py

Layered fallback: pytest-reportlog JSONL → --junitxml (built-in) → verbose stdout parsing

testmcp auto-detects the framework and package manager (npm, yarn, pnpm, poetry). No configuration needed.

Pytest Fallback Chain

Pytest has no built-in JSON reporter, so testmcp uses a three-layer fallback strategy:

  1. pytest-reportlog (primary) — JSONL format via --report-log. Streaming-friendly, survives timeouts. Requires pip install pytest-reportlog.

  2. --junitxml (fallback) — Built into pytest, zero dependencies. Standard JUnit XML format.

  3. Verbose stdout (last resort) — Parses -v --tb=short output with regex. Works everywhere.

The server automatically falls through the chain if a plugin isn't installed — no configuration needed.

Architecture

src/
├── index.ts              # Entry: McpServer + StdioServerTransport
├── server.ts             # 11 MCP tool registrations & handlers
├── types.ts              # Core types
├── store.ts              # In-memory test run storage (LRU, 50 runs)
├── adapters/
│   ├── base.ts           # Abstract adapter interface
│   ├── jest.ts           # Jest adapter
│   ├── vitest.ts         # Vitest adapter (v1.x + v2+ formats)
│   └── pytest.ts         # Pytest adapter (reportlog → junitxml → verbose)
├── ci/
│   ├── log-parser.ts     # Framework detection + raw CI log parsing
│   └── artifacts.ts      # GitHub Actions artifact listing + download + parsing
├── git/
│   └── diff-analyzer.ts  # Git diff → affected test files
├── enrichment/
│   └── source-context.ts # Stack trace parser + source snippets
└── utils/
    ├── process.ts        # Child process runner with timeout
    └── detect.ts         # Framework auto-detection

Key Design Decisions

  • Stdio transport only — No HTTP server, no ports. Works as a local subprocess for Claude Code and IDE integrations.

  • Subprocess isolation — Frameworks are spawned as child processes with CI=true, TERM=dumb. Zero coupling to framework versions.

  • In-memory store — Test runs stored by UUID with LRU eviction at 50 runs. Enables progressive drill-down without re-running tests.

  • Minimal dependencies — Only @modelcontextprotocol/sdk and zod. Everything else uses Node.js built-ins.

Development

yarn build        # Compile TypeScript
yarn dev          # Run in dev mode (tsx)
yarn test         # Run test suite (Vitest)
yarn test:watch   # Run tests in watch mode

License

MIT

Available Tools

11 tools
discoverC

Auto-detect test frameworks configured in a project directory

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirYesAbsolute path to the project directory

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: whether the operation is read-only, what it returns (a list of framework names? config paths?), how multiple/zero frameworks are handled, or whether it inspects files on disk.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the key action and scope front-loaded and no filler. It is appropriately sized, though its brevity is partly the result of omitting useful detail rather than sheer efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what detection yields, and there are no annotations to cover safety or side effects. For a tool agents will call before running tests, essential context about the return value and error behavior is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single projectDir parameter (absolute path) is already fully documented in the schema. The description adds no additional semantics about the path, which matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (auto-detect) and resource (test frameworks configured in a project directory), which is far more informative than the vague name 'discover'. It is distinguishable from the run/parse/list siblings, though it never explicitly names them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives among the many test-related siblings (list_runs, run_tests, etc.). Use is only weakly implied by the notion of detecting frameworks before acting on them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_coverageB

Get coverage data from a previous test run.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoFilter coverage to specific file paths
runIdYesThe run ID from a test run with coverage enabled

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only operation, what the returned coverage payload looks like, how large it might be, or how it behaves when coverage was never enabled for the run — significant gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is efficient, though arguably too terse to be appropriately sized for a data-retrieval tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description needs to explain the return shape and preconditions (coverage must have been enabled on the run). It omits both, leaving the agent unable to predict the response or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (runId and files) are already documented in the schema, making a 3 the baseline. The description adds only the 'previous test run' framing and no extra detail about filtering semantics or runId format beyond what the schema supplies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get coverage data') plus a scope qualifier ('from a previous test run'), which separates it from sibling write/run tools like run_tests and rerun_failed. It does not, however, explicitly contrast itself with the closest read siblings (get_failures, get_test_detail), so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'From a previous test run' implies it only applies to already-completed runs that had coverage enabled, which is useful context. But there is no explicit when-to-use vs. when-not guidance and no mention of what happens if the run lacked coverage, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_failuresB

Get detailed failure information for a test run, including source context around each failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe run ID from a previous run_tests or run_affected call

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses that results are enriched with source context around each failure, but says nothing about read-only safety, large-run behavior, pagination, or what happens when a run has no failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the core action, and the enriching detail (source context) is appended efficiently. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description is the only source of behavioral and return information. It covers the gist of the returned data but omits the failure record shape, result limits, and error conditions, leaving clear gaps for an agent invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, so the schema fully documents 'runId' including its origin from run_tests/run_affected. The description adds no syntax, format, or edge-case meaning beyond the schema, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get detailed failure information for a test run') and adds scope with 'including source context around each failure.' It is clearly distinguishable from run_tests or list_runs, though it never explicitly contrasts itself with the closest sibling, get_test_detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use statement, no prerequisite, and no named alternative. The phrase 'for a test run' weakly implies it is called after a run, but nothing tells an agent when to prefer this over get_test_detail or rerun_failed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_test_detailB

Get complete details for a single test, including full stack trace.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe run ID from a previous test run
testNameYesThe test fullName or name to look up

TDQS

B3.2/5.0
Behavior3/5

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 discloses that the response includes a full stack trace, but says nothing about read-only nature, permissions, or what happens for a non-existent test.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource and the notable return field front-loaded. Nothing is wasted, though it is arguably too terse to be maximally useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should ideally describe the shape of the returned details beyond the stack trace. With two fully documented required params and no annotations, it is adequate but leaves gaps about the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with runId and testName both documented, so the baseline is 3. The description adds no extra semantics such as whether testName accepts fullName vs name ambiguity beyond the schema's own note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get complete details for a single test') and adds the return highlight ('full stack trace'). However, it never names or contrasts with siblings like get_failures or list_runs, so an agent must infer the distinction from the singular 'single test'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as get_failures (which surfaces failing tests in bulk). The only signal is the implied 'single test' lookup, which is thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_artifactsB

List artifacts from a GitHub Actions run. Use with parse_artifact to download and parse test result artifacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub repo in owner/repo format (e.g. "r-marques/testmcp")
runIdYesGitHub Actions run ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not say whether the call is read-only (implied by 'list'), whether results are paginated, what the artifact entries contain, or what authentication the repo/runId require. Only the bare 'list' semantics are conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, with no filler. Slightly terse given the absence of any behavioral detail, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter listing tool with no output schema and no annotations, the description covers purpose and a companion tool but omits return shape (what an artifact entry looks like) and any read-only/auth context. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both required parameters (repo, runId) are documented in the schema with format examples. The description adds nothing beyond that, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list artifacts) scoped to a GitHub Actions run, which separates it from list_runs and the parse_* siblings. It does not explicitly name list_runs as the alternative for run-level data, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence implies a workflow (use alongside parse_artifact to download and parse test result artifacts), which gives the agent a downstream context. It does not state when to reach for this tool versus list_runs or when artifacts would be absent, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_runsC

List recent test run summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of runs to return (default: 10)

TDQS

C2.9/5.0
Behavior2/5

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 implies a read-only listing via 'List', but says nothing about permissions, pagination, ordering, or what a 'summary' omits versus a full run record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste and the purpose front-loaded. It is efficient, though arguably under-specified rather than optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-required-parameter list tool with no output schema, the description is minimally viable but omits what a 'summary' contains and how results are ordered or paginated, which the agent would want when calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'limit' parameter is fully documented in the schema, so baseline 3 applies. The description adds only the word 'recent', which mildly implies a default sort order not stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (recent test run summaries), which is clearer than a tautology. However, it does not differentiate itself from siblings such as get_failures, get_test_detail, or list_artifacts, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 siblings, no mention of prerequisites or exclusions. 'recent' hints at a recency scope but the agent gets no trigger conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_artifactB

Download a GitHub Actions artifact and parse it as test results. Supports JUnit XML, Jest JSON, Vitest JSON, and pytest-reportlog JSONL.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub repo in owner/repo format (e.g. "r-marques/testmcp")
runIdYesGitHub Actions run ID
artifactNameYesName of the artifact to download and parse

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It usefully reveals that the tool performs a network download from GitHub and which four test-report formats are accepted, which is real behavioral context. However, it is silent on authentication requirements, whether the download is cached, and how malformed or unsupported artifacts are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with zero filler; the core action is front-loaded and the format enumeration is compressed into a single compact clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should shoulder more of the burden — particularly what the parsed result looks like (a structure? a summary? failures only?) and how it relates to get_failures/get_test_detail. The format list is helpful, but the return contract is left entirely to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so repo, runId, and artifactName are already documented in the schema, making the baseline 3 appropriate. The description adds only the format-detection behavior, not additional parameter semantics such as whether artifactName is case-sensitive or a glob.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states two specific verbs (download, parse) against a concrete resource (GitHub Actions artifact) and names the output domain (test results). It implicitly differentiates from siblings like list_artifacts and parse_log, though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to reach for this tool versus list_artifacts, parse_log, or get_test_detail, nor any stated prerequisite such as needing a prior list call to obtain artifactName. The supported-format list hints at applicability but does not constitute usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_logA

Parse raw CI/test log text and extract structured test results. Auto-detects framework (Jest, Vitest, Pytest) from the log content.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesRaw CI log or test output text to parse
frameworkNoForce a specific framework instead of auto-detecting

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it does little beyond stating auto-detection. It does not say what happens when detection fails or the log is malformed, whether parsing is deterministic/pure, or what the structured result looks like. For a tool with zero annotation coverage this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste; the core purpose is front-loaded and the framework detail follows naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should ideally hint at the shape of the extracted results or at least the failure mode for unparseable logs. It covers inputs adequately but leaves the return contract and error behavior unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented inline, including the enum values and the override semantics. The description only restates the auto-detect behavior, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (parse) and resource (raw CI/test log text) plus the outcome (extract structured test results), and names the supported frameworks. An agent can tell it apart from the sibling parse_artifact, which implies parsing a stored artifact rather than raw log text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The auto-detect default and the force-a-framework escape hatch are stated, which implies when to pass the framework parameter. However, there is no guidance on when to prefer this tool over parse_artifact or how it relates to get_failures/get_test_detail, leaving the selection decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rerun_failedB

Re-execute only the tests that failed in a previous run.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe run ID whose failed tests should be re-run
timeoutNoTime budget in milliseconds

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and falls short: it does not say whether this creates a new run or mutates the old one, what happens if there are no failures, whether the runId must reference a completed run, or what permissions are needed. For an execution tool that kicks off work, that is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the scoping constraint is stated before any elaboration. Nothing here is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that re-executes tests with no annotations and no output schema, the definition omits the return shape, run-creation semantics, and failure/no-failure behavior. An agent knows the intent but not the mechanics or consequences of calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both runId and timeout are already documented in the schema; baseline is 3. The description adds no syntax, format, or timeout-unit guidance beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Re-execute ... tests') plus a scoping qualifier ('only the tests that failed in a previous run'), which cleanly separates it from run_tests and run_affected. It stops short of naming any sibling explicitly, so an agent must infer the boundary rather than being told it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in a previous run' implies the trigger condition (a prior run that had failures), but there is no explicit when-to-use statement, no prerequisites, and no mention of alternatives such as get_failures or run_tests for the non-failed case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_affectedA

Run only tests affected by git changes. Analyzes diff to find related test files.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoGit ref to diff against (e.g., "main", "HEAD~3"). Defaults to unstaged/staged changes.
timeoutNoTime budget in milliseconds
coverageNoEnable coverage collection
projectDirYesAbsolute path to the project directory

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose meaningful behavior beyond the schema: it analyzes the git diff to select test files. It still omits execution side effects (e.g., coverage artifact writes implied by the 'coverage' param), failure semantics, and run duration expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler. The core action and selecting mechanism are front-loaded and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a test-execution tool with no annotations and no output schema, the description is thin on runtime behavior and results. The fully documented schema compensates on the input side, but an agent still lacks context on what execution returns and how failures surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (base, timeout, coverage, projectDir) are already documented in the schema. The description adds no additional parameter meaning, which makes the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ("Run") and resource ("tests affected by git changes") and explains the mechanism ("Analyzes diff to find related test files"). It implicitly differentiates from sibling run_tests by scoping to git-affected tests, but never names run_tests to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "Run only tests affected by git changes" – an agent can infer this is for incremental/PR-focused runs rather than full suites. However, there is no explicit when-to-use vs run_tests, no guidance on when to prefer a full run, and no note on prerequisites such as a git repository being present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_testsA

Run tests and return a compact summary. Use get_failures to drill into failures.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoTime budget in milliseconds. Process is killed if exceeded.
coverageNoEnable coverage collection
fileGlobNoGlob pattern to filter test files
frameworkNoForce a specific framework
projectDirYesAbsolute path to the project directory
testNamePatternNoRegex pattern to filter test names

TDQS

A3.5/5.0
Behavior3/5

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 discloses that the result is a compact summary and that failure details require get_failures, which is genuine behavioral context. It omits side-effect information (spawning processes, writing coverage artifacts, the kill-on-timeout behavior) that an agent would want before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no redundancy. The primary action comes first and the routing hint follows immediately; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should convey what the compact summary contains and how options like coverage change it. It signals summarization and points to the drill-down tool, which covers the essential workflow, but leaves the shape of the returned summary unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters (projectDir, timeout, coverage, fileGlob, framework, testNamePattern) are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run tests') plus the return character ('compact summary'), and explicitly names the sibling get_failures for drill-down. It does not differentiate from other run-oriented siblings like run_affected or rerun_failed, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives useful follow-up routing ('Use get_failures to drill into failures'), which implies this tool is the entry point for a full run. However it never states when to choose this over run_affected, rerun_failed, or discover, nor any prerequisites such as a discovered project setup.

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.

  1. 11 tool updatesv0.1.0
    • First observeddiscover
    • First observedget_coverage
    • First observedget_failures
    • First observedget_test_detail
    • First observedlist_artifacts
    • First observedlist_runs
    • First observedparse_artifact
    • First observedparse_log
    • First observedrerun_failed
    • First observedrun_affected
    • First observedrun_tests

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct resource+action targets: run_tests vs run_affected, list_runs vs list_artifacts, and get_failures vs get_test_detail are separable. However, get_failures and get_test_detail both surface failure detail, and parse_log and parse_artifact both 'parse' test data, creating mild potential for misselection.

Naming Consistency4/5

Nearly all names follow a consistent snake_case verb_noun pattern (list_runs, run_tests, get_failures, parse_artifact, rerun_failed). The lone outlier is 'discover', a bare verb with no noun object, which is a minor deviation from the otherwise uniform convention.

Tool Count5/5

11 tools is well-scoped for a test-runner server, with each tool covering a distinct facet (discovery, execution, failure drill-down, coverage, artifact parsing). No redundant or filler tools appear.

Completeness4/5

The surface covers the full test lifecycle: discovery, running (full and affected), failure inspection, reruns, coverage, and CI log/artifact parsing. Minor gaps exist (e.g., no config/watch or artifact listing beyond GitHub Actions), but core workflows are complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

  • Run, debug, and triage tests from your IDE using natural language, no dashboard switching, no manual data transfers. The TestMu AI (formerly LambdaTest) MCP Server is a single remote server exposing four tool suites: HyperExecute — analyze your project, generate YAML configs and test runner commands, then monitor jobs and sessions. Automation — pull a TestID's details plus command, network, and console logs into one chat for instant root-cause analysis. Includes mobile app upload. SmartUI — explain pixel, layout, DOM, and perceptual changes in a visual regression run, with context-aware React/HTML/CSS fixes. Accessibility — audit any public URL or a local React app against WCAG and get ready-to-apply remediation steps. Connects over https://mcp.lambdatest.com/mcp using OAuth 2.1 — no API keys in your config. One-click install in Cursor; works with Claude, GitHub Copilot, Cline, and any MCP client. Tests execute on the TestMu AI cloud: 3,000+ browsers and 10,000+ real devices.

  • 3rd Generation Testing (3TG) — generate deterministic test suites from Markdown spec tables via MCP.

  • Generates unit tests for Python code with coverage before/after reports and concrete edge cases.

  • One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.

Related MCP Servers