Skip to content

Build sturdier MCP servers,
and see exactly what to fix

Test MCP servers automatically with code. One tool starts the server, validates responses, records and replays external calls, and substitutes a mock server.

npm install -g @mcpeak/cli
zsh — weather-server
$ mcpeak test weather.suite.json -- node ./server.mjs
날씨 서버 (3 cases)
✓ tool-exists get_weather 도구를 제공한다
✓ seoul-succeeds 서울 날씨를 정상 조회한다
✗ missing-tool 존재하지 않는 도구를 요구한다
toolExists 툴 'missing_weather_tool'을(를) 찾을 수 없습니다. 발견된 툴: 'add', 'get_weather'
해결: 서버의 tools/list 응답과 테스트 명세를 확인하세요.
2 passed, 1 failed (3 total)

A failed case says what differs, why, and how to fix it

The failure message is the product. A test tool's real interface is the sentence it prints when something fails. Instead of stopping at expected true, got false, MCPeak says what differs, why, and how to fix it.

  • Same input, same result
  • Only approved suites are pinned
  • External calls recorded once
  • MIT open source

IMCP servers

I want to know my server actually works

  1. No suite file yet

    Generate suites from schemas

    It reads tools/list, proposes passing and violation cases, and saves only what a person approves.

    mcpeak generate --out weather.suite.json -- node ./server.mjs
  2. After you change server code

    Verdicts that explain failures

    It prints what differs, why, and how to fix it. Any failure exits with code 1, so it drops straight into CI.

    mcpeak test weather.suite.json -- node ./server.mjs
  3. No server code yet

    Mock server

    One definition JSON starts a mock that passes the same suite.

    mcpeak test weather.suite.json -- mcpeak-mock weather.mock.json
  4. Your server calls a weather, payment, or other external API

    Record and replay external calls

    Call the real API once. Later runs replay the recording and get the same responses without the network.

    mcpeak test weather.suite.json --record-session weather.session.db -- node ./server.mjs
  5. The same suite gives different results run to run

    Determinism check

    It runs the suite against the server twice and compares the results, finding cases that wobble on timestamps or ordering.

    mcpeak test weather.suite.json --determinism -- node ./server.mjs
  6. You need to find the cause in server code

    Repair

    --repair-bundle saves the failure evidence to a file, which you hand to an AI for likely causes in your server code.

    mcpeak repair repair.json --provider claude --model sonnet
zsh — my-mcp
$ mcpeak generate --out weather.suite.json --baseline-only -- node ./server.mjs
baseline suite를 저장했습니다: weather.suite.json
커버리지 2 tools, 8 axes 전부 검증
$ mcpeak test weather.suite.json -- node ./server.mjs
날씨 서버 (3 cases)
✓ tool-exists get_weather 도구를 제공한다
✓ seoul-succeeds 서울 날씨를 정상 조회한다
✗ missing-tool 존재하지 않는 도구를 요구한다
toolExists 툴 'missing_weather_tool'을(를) 찾을 수 없습니다. 발견된 툴: 'add', 'get_weather'
해결: 서버의 tools/list 응답과 테스트 명세를 확인하세요.
2 passed, 1 failed (3 total)

Dashboard

In the browser,
not the terminal

Pick and run suites in a local web UI, and approve generate proposals or review repair results with a click. The verdict calls the same functions as the CLI, so both give the same result.

  • Live events and per-case results while a run is in progress
  • Review and approve proposed cases in the generate wizard
  • Replay recordings and review Repair results in one place
npm install -g @mcpeak/dashboard && mcpeak-dashboard

Get started

Three commands to your first verdict

  1. 1

    Install

    One global install gives you the mcpeak command. For a one-off run, npx works too.

    npm install -g @mcpeak/cli
  2. 2

    Generate a suite

    It reads the server's schemas and proposes cases. Only what a person approves is saved.

    mcpeak generate --out weather.suite.json -- node ./server.mjs
  3. 3

    Run

    It starts the server and judges it. Any failure exits with code 1, so it drops straight into CI.

    mcpeak test weather.suite.json -- node ./server.mjs

Docs

Docs for builders