Skip to content

ChatGPT no-auth tunnel plugin immediately enters reconnect loop #41

Description

@channico

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

  1. Start a local stdio MCP server with two read-only tools: search and fetch.
  2. Start tunnel-client using an existing tunnel associated with the correct ChatGPT workspace.
  3. Create a developer-mode ChatGPT plugin using that tunnel.
  4. Confirm that ChatGPT discovers both tools and their input schemas.
  5. Add the plugin to a new ChatGPT conversation.
  6. Ask ChatGPT to call search and then fetch.
  7. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions