Skip to main content
Everything the handshake probe does, straight against your local server. No tunnel is opened, nothing is published, and no session is recorded.
Each finding is a glyph, its plain-English headline, and the rule id — then the detail, naming the exact parameter and the exact change to make. Every finding also carries a link to its entry in the checks reference. The summary line varies with the verdict:

Options

default:"/mcp"
The MCP route on the local server, if it is not /mcp.Unlike share, there’s no path policy involved here — the probe goes straight to the address you name, so --path works alone.

In CI

This is the main reason probe exists separately from share. The exit codes make it a gate:
To fail only on real breakage and let warnings through:
Add --json for a machine-readable report you can post to a PR.

What it checks

The full handshake — initialize, notifications/initialized, tools/list — then all eleven rules. See the checks reference for each one. Worth knowing: probe talks directly to your local server, while the probe that runs on heymcp share goes through the edge and hits the same routing and path policy a real agent does. If probe is clean but the tunnel’s handshake isn’t, the difference is in the tunnel configuration — usually the path policy.

Common problems

Check the path. If your MCP route isn’t /mcp, pass --path.
Your server rejects Accept: text/event-stream. The probe names it and then retries without SSE, so you still get the rest of the report — but every real client asks for streaming, so this blocks all of them.
If your server is newer than your CLI, update the CLI — curl -fsSL https://heymcp.dev/install.sh | sh. The check knows a fixed list of revisions, and an out-of-date list produces a false alarm about somebody else’s code.