Skip to content

Commit 96a05fa

Browse files
author
Lasim
committed
fix(satellite): respect transport_type for SSE MCP servers
Previously, RemoteToolDiscoveryManager and McpServerWrapper always used StreamableHTTPClientTransport regardless of the configured transport_type. This caused SSE endpoints to fail with "Cannot POST /sse" errors. Now both tool discovery and tool execution check config.transport_type and use SSEClientTransport when transport_type is 'sse'. Fixes #553
1 parent ee9c3bf commit 96a05fa

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

services/satellite/src/core/mcp-server-wrapper.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { DynamicConfigManager } from '../services/dynamic-config-manager';
1515
import { OAuthTokenService } from '../services/oauth-token-service';
1616
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
1717
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
18+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
1819
import { getVersionString } from '../config/version';
1920

2021
/**
@@ -626,8 +627,20 @@ export class McpServerWrapper {
626627
// Build URL with query parameters
627628
const finalUrl = this.buildMcpServerUrl(config.url, config.url_query_params);
628629

629-
// Create transport
630-
const transport = new StreamableHTTPClientTransport(new URL(finalUrl));
630+
// Create transport based on configured transport_type
631+
const transportType = config.transport_type || 'http';
632+
const serverUrl = new URL(finalUrl);
633+
634+
this.logger.debug({
635+
operation: 'transport_selection',
636+
server_name: serverName,
637+
transport_type: transportType,
638+
server_url: config.url
639+
}, `Using ${transportType} transport for tool call to ${serverName}`);
640+
641+
const transport = transportType === 'sse'
642+
? new SSEClientTransport(serverUrl)
643+
: new StreamableHTTPClientTransport(serverUrl);
631644

632645
// WORKAROUND: Patch global fetch temporarily to inject OAuth headers
633646
// The MCP SDK doesn't currently support custom headers in StreamableHTTPClientTransport

services/satellite/src/services/remote-tool-discovery-manager.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { FastifyBaseLogger } from 'fastify';
33
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
44
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
5+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
56
import { DynamicConfigManager, DynamicMcpServersConfig, ConfigurationChanges } from './dynamic-config-manager';
67
import { McpServerConfig } from './command-polling-service';
78
import type { EventBus } from './event-bus';
@@ -344,8 +345,20 @@ export class RemoteToolDiscoveryManager {
344345
}
345346
}
346347

347-
// Create transport for the remote server
348-
const transport = new StreamableHTTPClientTransport(new URL(finalUrl));
348+
// Create transport based on configured transport_type
349+
const transportType = config.transport_type || 'http';
350+
const serverUrl = new URL(finalUrl);
351+
352+
this.logger.debug({
353+
operation: 'transport_selection',
354+
server_name: serverName,
355+
transport_type: transportType,
356+
server_url: maskUrlForLogging(finalUrl, config.secret_metadata?.query_params)
357+
}, `Using ${transportType} transport for ${serverName}`);
358+
359+
const transport = transportType === 'sse'
360+
? new SSEClientTransport(serverUrl)
361+
: new StreamableHTTPClientTransport(serverUrl);
349362

350363
// WORKAROUND: Patch global fetch temporarily to inject OAuth headers
351364
// The MCP SDK doesn't currently support custom headers in StreamableHTTPClientTransport

0 commit comments

Comments
 (0)