Test a local MCP server with ChatGPT and Claude
#

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.

1. Start your MCP server and share it
#

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.

2. Connect a client
#

  • ChatGPT: enable developer mode, create a connector or app, and enter the public MCP URL.
  • Claude: add a custom connector with the public MCP URL.
  • MCP Inspector: connect to the public URL to test from outside your machine.

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.

3. See what the client sends
#

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.

4. Let your coding agent read the requests
#

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.

Troubleshooting
#

  • The client can't connect. Check that the URL includes your MCP path and that Expose is still running. Free URLs change on each connection.
  • Your server rejects the request's host or origin. Some MCP SDKs protect against DNS rebinding by checking the Host and Origin headers. Add your Expose host to the SDK's allowed hosts.
  • The connection drops after a while. The free plan has a time limit per connection. Expose Pro has none.