Skip to content

Commit f9c9a65

Browse files
committed
fix: pass headers correctly to HTTP/SSE transports
1 parent 4f8087f commit f9c9a65

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

src/transports/factory.ts

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,47 @@ export class TransportFactory {
2222
} as { command: string; args?: string[]; env?: Record<string, string>; cwd?: string };
2323
return new StdioClientTransport(stdioParams) as unknown as Transport;
2424
}
25-
case 'http':
25+
case 'http': {
26+
const httpHeaders: Record<string, string> = {};
27+
28+
// Add API key if provided
29+
if (transportConfig.apiKey) {
30+
httpHeaders['X-API-Key'] = transportConfig.apiKey;
31+
}
32+
33+
// Merge custom headers
34+
if (transportConfig.headers) {
35+
Object.assign(httpHeaders, transportConfig.headers);
36+
}
37+
2638
return new StreamableHTTPClientTransport(
27-
new URL(transportConfig.url)
39+
new URL(transportConfig.url),
40+
Object.keys(httpHeaders).length > 0 ? {
41+
requestInit: { headers: httpHeaders }
42+
} : undefined
2843
) as unknown as Transport;
29-
case 'sse':
44+
}
45+
case 'sse': {
46+
const sseHeaders: Record<string, string> = {};
47+
48+
// Add API key if provided
49+
if (transportConfig.apiKey) {
50+
sseHeaders['X-API-Key'] = transportConfig.apiKey;
51+
}
52+
53+
// Merge custom headers
54+
if (transportConfig.headers) {
55+
Object.assign(sseHeaders, transportConfig.headers);
56+
}
57+
3058
return new SSEClientTransport(
31-
new URL(transportConfig.sseUrl)
59+
new URL(transportConfig.sseUrl),
60+
Object.keys(sseHeaders).length > 0 ? {
61+
eventSourceInit: { headers: sseHeaders },
62+
requestInit: { headers: sseHeaders }
63+
} : undefined
3264
) as unknown as Transport;
65+
}
3366
case 'websocket':
3467
return new WebSocketClientTransport(
3568
new URL(transportConfig.url)

0 commit comments

Comments
 (0)