Summary
A no-auth MCP plugin created through Secure MCP Tunnel is discovered successfully, but ChatGPT immediately reports that the connection has expired and repeatedly asks the user to reconnect.
The same tunnel and MCP tools work through the Responses API.
Environment
- macOS, Apple Silicon
- tunnel-client:
v0.0.11+8d55683eeef80bc5e360d95abf4692454fafc615
- MCP transport: stdio
- MCP server: Python with FastMCP
3.4.7
- MCP SDK dependency:
mcp 1.29.0
- ChatGPT developer-mode plugin
- Authentication supported: None
- Authentication used: None
- Tunnel and identifiers: redacted
Steps to reproduce
- Start a local stdio MCP server with two read-only tools:
search and fetch.
- Start tunnel-client using an existing tunnel associated with the correct ChatGPT workspace.
- Create a developer-mode ChatGPT plugin using that tunnel.
- Confirm that ChatGPT discovers both tools and their input schemas.
- Add the plugin to a new ChatGPT conversation.
- Ask ChatGPT to call
search and then fetch.
- Click Reconnect when prompted.
Actual result
ChatGPT repeatedly displays:
Your connection has expired. Reconnect it before ChatGPT can use it for this request.
Clicking Reconnect returns to the same state.
The tunnel-client trace shows ChatGPT sending a server/discover request. The request is forwarded to the MCP target but fails before any tools/call request occurs.
With the Python stdio server, the MCP SDK rejects server/discover as an unsupported request.
The behavior was also reproduced using tunnel-client’s own embedded test server:
dispatcher received MCP upstream error; posted error response to control plane
rpc_method="server/discover"
status_code=400
failure_source="target_http"
transport_error_kind="http_status"
upstream_response_received=true
tunnel_client_version="0.0.11+8d55683eeef80bc5e360d95abf4692454fafc615"
Control tests
- The local stdio MCP client successfully lists and calls
search and fetch.
- The OpenAI Responses API successfully invokes the same tools through the same tunnel.
- tunnel-client starts successfully and remains connected.
- The tunnel is associated with the correct ChatGPT workspace.
- Plugin creation succeeds and ChatGPT displays both discovered tools.
- The plugin reports no supported or used authorization.
- Replacing the Python MCP server with tunnel-client’s
--embedded-mcp-stub does not resolve the ChatGPT reconnect loop.
Expected result
A no-auth plugin created from a healthy tunnel should remain connected and allow ChatGPT to invoke its discovered MCP tools.
Possibly related
Issue #35 reports another ChatGPT-specific tunnel endpoint compatibility problem, although its observed failure is an SSE GET probe returning 404 rather than this reconnect loop:
#35
Summary
A no-auth MCP plugin created through Secure MCP Tunnel is discovered successfully, but ChatGPT immediately reports that the connection has expired and repeatedly asks the user to reconnect.
The same tunnel and MCP tools work through the Responses API.
Environment
v0.0.11+8d55683eeef80bc5e360d95abf4692454fafc6153.4.7mcp 1.29.0Steps to reproduce
searchandfetch.searchand thenfetch.Actual result
ChatGPT repeatedly displays:
Clicking Reconnect returns to the same state.
The tunnel-client trace shows ChatGPT sending a
server/discoverrequest. The request is forwarded to the MCP target but fails before anytools/callrequest occurs.With the Python stdio server, the MCP SDK rejects
server/discoveras an unsupported request.The behavior was also reproduced using tunnel-client’s own embedded test server:
Control tests
searchandfetch.--embedded-mcp-stubdoes not resolve the ChatGPT reconnect loop.Expected result
A no-auth plugin created from a healthy tunnel should remain connected and allow ChatGPT to invoke its discovered MCP tools.
Possibly related
Issue #35 reports another ChatGPT-specific tunnel endpoint compatibility problem, although its observed failure is an SSE GET probe returning 404 rather than this reconnect loop:
#35