Skip to content

MCP를 더 견고하게,
실패하면 고칠 곳까지 알려준다

MCP를 코드로 자동 테스트한다. 서버를 띄우고, 응답을 검증하고, 외부 호출을 녹화·재생하고, 목 서버로 대체하는 것을 하나의 도구로 한다.

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)

실패한 케이스는 무엇이 다른지, 왜 다른지, 어떻게 고치는지를 찍는다

실패 메시지가 곧 제품이다. 테스트 도구의 화면은 실패했을 때 터미널에 찍히는 문장이다. expected true, got false 로 끝내지 않고, 무엇이 왜 다른지와 어떻게 고치는지까지 쓴다.

  • 같은 입력, 같은 결과
  • 사람이 승인한 명세만 고정
  • 외부 호출은 한 번만 녹화
  • MIT 오픈소스

나는 MCP입니다

내가 만든 MCP가 제대로 동작하는지 확인하고 싶다

  1. 명세 파일이 아직 없을 때

    스키마에서 명세 생성

    tools/list 를 읽어 정상 케이스와 위반 케이스를 제안하고, 사람이 승인한 것만 명세로 남긴다.

    mcpeak generate --out weather.suite.json -- node ./server.mjs
  2. 서버 코드를 고친 뒤

    판정과 실패 문장

    무엇이 왜 다른지, 어떻게 고치는지 찍는다. 하나라도 실패하면 종료 코드 1 이라 CI 에 그대로 붙는다.

    mcpeak test weather.suite.json -- node ./server.mjs
  3. 서버 코드가 아직 없을 때

    목 MCP

    정의 JSON 하나로 같은 명세를 그대로 통과하는 MCP를 띄운다.

    mcpeak test weather.suite.json -- mcpeak-mock weather.mock.json
  4. 서버가 날씨·결제 같은 외부 API 를 부를 때

    외부 호출 녹화·재생

    한 번만 진짜로 부르고, 이후 실행은 녹화본을 재생해 네트워크 없이 같은 응답을 받는다.

    mcpeak test weather.suite.json --record-session weather.session.db -- node ./server.mjs
  5. 같은 명세가 돌릴 때마다 다른 결과를 낼 때

    결정론 검사

    같은 명세를 서버에 두 번 돌려 결과를 비교한다. 타임스탬프나 실행 순서에 따라 흔들리는 케이스를 찾아낸다.

    mcpeak test weather.suite.json --determinism -- node ./server.mjs
  6. 실패 원인을 서버 코드에서 찾아야 할 때

    Repair

    --repair-bundle 로 실패 근거를 파일에 남기고, 그 파일을 AI 에게 넘겨 서버 코드의 원인 후보를 받는다.

    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)

대시보드

터미널 대신
브라우저에서

로컬 웹 UI 에서 명세를 고르고 실행하고, generate 승인과 repair 검토까지 클릭으로 진행한다. 판정은 CLI 와 같은 함수를 부르므로 어느 쪽으로 돌려도 결과가 같다.

  • 실행 중 이벤트와 케이스별 결과를 실시간으로
  • 생성 마법사에서 제안된 케이스를 보고 승인
  • 녹화 재생과 Repair 검토를 한 화면에서
npm install -g @mcpeak/dashboard && mcpeak-dashboard

시작하기

명령 세 줄이면 첫 판정까지

  1. 1

    설치

    전역 설치 한 번이면 mcpeak 명령이 생긴다. 한 번만 쓸 거라면 npx 로도 된다.

    npm install -g @mcpeak/cli
  2. 2

    명세 만들기

    서버의 스키마를 읽어 케이스를 제안한다. 사람이 승인한 것만 명세 파일로 남는다.

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

    실행

    서버를 띄우고 판정한다. 하나라도 실패하면 종료 코드 1 이라 CI 에 그대로 붙는다.

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

문서

개발자용 문서