mcp-simple-gateway
Version:
MCP Simple Gateway
52 lines (51 loc) • 1.81 kB
JavaScript
import { getDefaultEnvironment, StdioClientTransport, } from '@modelcontextprotocol/sdk/client/stdio.js';
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
import { isSSEConfig, isStdioConfig, isStreamableHTTPConfig } from '../guards/index.js';
const buildHeaders = (config) => {
const headers = {};
if (config.headers) {
for (const [key, value] of Object.entries(config.headers)) {
headers[key] = value;
}
}
return headers;
};
export const createServerTransport = (serverConfig) => {
if (isSSEConfig(serverConfig)) {
const url = new URL(serverConfig.url);
const headers = buildHeaders(serverConfig);
return new SSEClientTransport(url, {
eventSourceInit: {
fetch: (url, init) => globalThis.fetch(url, {
...init,
headers: {
...init?.headers,
...headers,
},
}),
},
});
}
if (isStreamableHTTPConfig(serverConfig)) {
const url = new URL(serverConfig.url);
const headers = buildHeaders(serverConfig);
return new StreamableHTTPClientTransport(url, {
requestInit: {
headers,
},
});
}
if (isStdioConfig(serverConfig)) {
return new StdioClientTransport({
command: serverConfig.command,
args: serverConfig.args,
env: {
...getDefaultEnvironment(),
...serverConfig.env,
},
cwd: serverConfig.cwd,
});
}
throw new Error('Invalid server config');
};