ChatGPT, Claude and other hosted MCP clients connect to MCP servers over the internet, so they can't reach a server on your localhost. Expose gives your local MCP server a public HTTPS URL, and its dashboard shows you every request the client sends.
This works for servers that use the Streamable HTTP transport. A server that only speaks stdio runs on the same machine as its client and doesn't need a tunnel.
Start your server, then share its port:
expose share http://localhost:3000
Expose prints a public URL such as https://abc123.eu-1.sharedwithexpose.com. Your MCP endpoint is that URL plus your server's path, usually /mcp.
With Expose Pro, add --subdomain=my-mcp to keep the same URL, so you don't have to add the connector again after every restart.
If your server uses OAuth, the client discovers your authorization server from the public URL, so make sure the metadata your server returns uses the Expose URL and not localhost.
Open the Expose dashboard at http://127.0.0.1:4040. Each JSON-RPC request, such as initialize, tools/list and tools/call, appears with its headers, body and your server's response. That is the fastest way to see why a client rejects your server or which arguments a model passed to a tool.
Click Replay to send a request to your server again after changing the code, without asking the model to call the tool once more.
Expose has its own MCP server. Connect it to Claude Code, Codex or another coding agent, and the agent can read the requests that reached your tunnel while it works on your server's code. See Expose for agentic engineering.
Host and Origin headers. Add your Expose host to the SDK's allowed hosts.