GK markGK mark
checkmcp

The crash-test dummy
for MCP servers.

Your server tells every AI what it can do. This makes sure it does. Thousands of MCP servers ship every month and almost none are tested: one command speaks the real protocol at yours and slams every lever before real users do, plus an in-memory harness for the tests only you can write.

GitHub · npm · MIT · zero dependencies · no telemetry

23 checks · tools, resources and prompts · every check cites the spec (2025-11-25) · the official reference servers pass with 0 failures

checkmcp v0.1.0 · spec 2025-11-25 · invoice-server 2.3.0 · 21 tools found

  handshake    3/3 passed
  schemas     41/42 passed
  errors      12/12 passed
  robustness  17/18 passed

  ✗ schemas: inputSchema of "search_orders" is not valid JSON Schema: unknown type "decimal"
      schemas/input-schema · spec server/tools#tool
  ✗ robustness: "create_invoice" accepted arguments of the wrong type ({"amount":"not-a-number"})
      Sent deliberately mistyped values; the server should refuse before its handler runs.
      robustness/malformed-argument-types · spec server/tools#security-considerations
  ~ schemas: tool "search_orders" declares no description
      A client model chooses tools by their descriptions. An undescribed tool is invisible at best, misused at worst.

  73/75 passed, 2 failed (1 advisory)

Every check cites the spec section it enforces. The official reference servers pass with zero failures; does yours?

The ten-second inspection

A battery of conformance checks over the whole surface: tools, resources and prompts, in four categories. No test files, no API keys, no model. Exit codes made for CI.

Tests only you can write

An in-memory harness and five matchers for vitest and jest. Your real server, the real protocol, the network replaced by a function call: milliseconds per test.
expect(result).toBeToolSuccess()

Contracts that cannot drift

Tool schemas snapshotted to committed files. A careless change fails CI with a sentence a human can judge: "was optional, now required. This breaks every caller that omits it."

The promise: everything that runs on your machine is free and MIT-licensed, forever. If we ever build a paid product, it will be a hosted service, never a better version of this library.