Skip to content

feat: add WebSocket transport for MCP gateway#2867

Merged
asim merged 1 commit intomasterfrom
claude/websocket-mcp-fZd2J
Mar 4, 2026
Merged

feat: add WebSocket transport for MCP gateway#2867
asim merged 1 commit intomasterfrom
claude/websocket-mcp-fZd2J

Conversation

@asim
Copy link
Member

@asim asim commented Mar 4, 2026

Add bidirectional WebSocket transport at /mcp/ws using JSON-RPC 2.0 protocol (same as stdio). This enables persistent connections for real-time AI agents that need streaming tool interactions.

New files:

  • gateway/mcp/websocket.go: WebSocketTransport with connection-level auth, per-message auth fallback, write serialization, OTel tracing
  • gateway/mcp/websocket_test.go: 14 tests covering initialize, tools/list, tool calls, auth (header + param), scopes, rate limiting, audit, concurrent requests, multiple connections, error handling, and connection persistence

Changes:

  • gateway/mcp/mcp.go: Register /mcp/ws handler in serveHTTP
  • go.mod: Added github.com/gorilla/websocket v1.5.3

Auth supports two modes:

  • Connection-level: Bearer token in WebSocket upgrade request headers
  • Per-message: _token field in JSON-RPC params (same as stdio)

https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc

Add bidirectional WebSocket transport at /mcp/ws using JSON-RPC 2.0
protocol (same as stdio). This enables persistent connections for
real-time AI agents that need streaming tool interactions.

New files:
- gateway/mcp/websocket.go: WebSocketTransport with connection-level
  auth, per-message auth fallback, write serialization, OTel tracing
- gateway/mcp/websocket_test.go: 14 tests covering initialize,
  tools/list, tool calls, auth (header + param), scopes, rate
  limiting, audit, concurrent requests, multiple connections,
  error handling, and connection persistence

Changes:
- gateway/mcp/mcp.go: Register /mcp/ws handler in serveHTTP
- go.mod: Added github.com/gorilla/websocket v1.5.3

Auth supports two modes:
- Connection-level: Bearer token in WebSocket upgrade request headers
- Per-message: _token field in JSON-RPC params (same as stdio)

https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc
@asim asim merged commit 076b7c3 into master Mar 4, 2026
4 checks passed
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