Skip to content

fix: resolve ERR_HTTP_HEADERS_SENT and transport reuse errors#2

Open
frank-ih wants to merge 1 commit into
missbjs:mainfrom
frank-ih:fix/http-headers-sent-transport-reuse
Open

fix: resolve ERR_HTTP_HEADERS_SENT and transport reuse errors#2
frank-ih wants to merge 1 commit into
missbjs:mainfrom
frank-ih:fix/http-headers-sent-transport-reuse

Conversation

@frank-ih
Copy link
Copy Markdown

Summary

Fixes two recurring Chrome MCP bridge errors that have been unresolved since April 13th:

Issue 1: ERR_HTTP_HEADERS_SENT

StreamableHTTPServerTransport sends HTTP response headers twice:

  • DELETE /mcp handler: Called transport.handleRequest() which internally sends headers, then called reply.code(NO_CONTENT).send() - causing double headers
  • GET /mcp handler: Called reply.raw.flushHeaders() before transport.handleRequest(), creating header conflicts

Fix: Remove manual header operations - let the transport manage all header sending.

Issue 2: "Already connected to a transport"

The MCP Server was a singleton - the same instance was reused across multiple transport connections, but Server.connect() tracks transports internally and throws when reusing.

Fix: Convert mcp-server.js from singleton to factory pattern - creates a fresh Server instance per transport connection.

Changes

File Change
dist/server/index.js DELETE: Removed redundant reply.send() after transport handles request
dist/server/index.js GET: Removed manual flushHeaders() and reply.hijack()
dist/mcp/mcp-server.js Converted from singleton to factory pattern

Test plan

  • Start Chrome MCP bridge
  • Verify GET /mcp SSE connection establishes without headers error
  • Verify DELETE /mcp closes session without ERR_HTTP_HEADERS_SENT
  • Verify multiple MCP clients can connect simultaneously without "Already connected" error

🤖 Generated with Claude Code

- Remove redundant response send in DELETE /mcp handler (StreamableHTTPServerTransport handles headers internally)
- Remove manual flushHeaders/hijack in GET /mcp handler (transport manages headers)
- Convert mcp-server singleton to factory pattern (creates fresh Server instance per transport connection)

This fixes two recurring Chrome MCP bridge errors:
1. ERR_HTTP_HEADERS_SENT - double header send from transport + reply.send()
2. "Already connected to a transport" - singleton Server instance reuse across connections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants