run_suiteLABSCO SUMMARY
Live mode is the default for a reason.
Simulation mode is useful while writing a fixture, but a fixture that never spawns the server proves nothing — the repository is explicit that live mode runs against real servers and that output_contains will always fail in simulation if expected_output isn't set. regression_report surfacing fixes as well as regressions is the small touch that makes it worth running on every change.
What it is
A testing harness for MCP servers and agent workflows. Test cases are plain YAML files in version control, so they diff and review like code; the runner spawns a real server over stdio and asserts against what it actually returns, then compares this run to previous ones.
What you get
- Running:
run_suiteexecutes every fixture and returns a pass/fail summary,run_caseruns one by name,list_casesenumerates them with step counts - Authoring:
create_test_casewrites a new fixture,scaffold_fixturegenerates boilerplate with placeholder steps and pre-filled assertion comments - Reporting:
regression_reportcompares the current state to the last run and surfaces both regressions and fixes,compare_resultsdiffs two runs by id,generate_html_reportproduces a single-file report - Operations:
evaluate_deployment_gatefails CI when the recent pass rate drops below a threshold,discover_fixturesfinds fixture files across directories - Assertions combine per step:
output_contains,output_not_contains,output_equals,output_matches,schema_matchagainst JSON Schema,tool_called, andlatency_underin milliseconds - A fixture with a
serverblock runs live; without one it runs in simulation againstexpected_output. Fixtures made bycreate_test_casehave noserverblock, so they simulate until you add one - Steps pipe into each other with
{{steps.<step_id>.output}}, in both modes
Requirements
Node.js v22.5.0 or newer, and npm. Add it to your client as npx -y mcp-eval-runner@latest. Fixtures load from ./evals unless --fixtures points elsewhere; run history goes to a SQLite file at ~/.mcp/evals.db by default. --timeout bounds a single step at 30000 ms, --concurrency runs cases in parallel from a default of 1, --watch reruns the affected fixture on file change, and --format selects console, json or html output. A GitHub Action is included.
Setup effort
One command — npx -y mcp-eval-runner@latest
USE CASES
Catching a regression in your own MCP server
Run the suite against the live server and see what changed since last time.
Writing your first test without learning the format
Scaffold a fixture with its assertions already sketched in.
Checking one thing you just fixed
Run that single fixture instead of the whole suite.
Blocking a bad deploy
Gate CI on the recent pass rate rather than on a green light from one run.
Showing someone what broke
Diff two runs by id, or hand over a self-contained HTML report.
10 tools
Listed in project docs. Your client may show a different list.
run_caselist_casescreate_test_casescaffold_fixtureregression_reportcompare_resultsgenerate_html_reportevaluate_deployment_gatediscover_fixturesBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
- npx on PATH
- Node.js v22.5.0 or later
Where it runs
All 4 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
npx -y mcp-eval-runner@latestMCP Clients
Amp
{
"amp.mcpServers": {
"eval-runner": {
"command": "npx",
"args": [
"-y",
"mcp-eval-runner@latest"
]
}
}
}Claude Code, Cline, Other MCP clients
{
"mcpServers": {
"eval-runner": {
"command": "npx",
"args": [
"-y",
"mcp-eval-runner@latest"
]
}
}
}