Why not just a tunnel?
A generic tunnel moves bytes. It has no idea what MCP is, so it can tell you that five POST requests happened and nothing else. HeyMCP speaks the protocol:A URL that stops moving
Your account gets a permanent subdomain. Add the connector once and it
keeps working tomorrow — no re-pasting a fresh URL into six clients every
morning.
Broken before anyone connects
HeyMCP performs the MCP handshake itself the moment your tunnel opens, then
lints your tool schemas against what real clients actually accept. You find
out before Claude quietly refuses to connect.
Every frame in plain English
Not a request log.
Tried place_order · hmm, that broke — a timeline of
what the agent attempted, what your server said, and how long it took.The failures this is for
MCP client failures are mostly silent. A connector that never appears. A tool that’s never called. A schema rejected with no message anywhere. Some real examples HeyMCP catches for you:- Your MCP route answers with
text/plain. Claude.ai fails silently — no error in the UI, no clue in your logs.transport/content-type - A date parameter has no
format, so Claude sends"7pm"and your parser throws a 500.schema/no-format - Two tools differ only by capitalisation, so one of them can never be called.
tools/name-collision
Get going
Quickstart
Install, sign in, share a server, connect a client. About two minutes.
Connect a client
Step-by-step for Claude Code, Claude.ai, ChatGPT, Grok, Cursor, VS Code and
Gemini.
How it works
What connects to what, and why nothing is buffered.
Checks reference
Every rule the handshake probe runs, what it means, and how to fix it.