@mcp-shark/mcp-shark
Version:
Aggregate multiple Model Context Protocol (MCP) servers into a single unified interface with a powerful monitoring UI. Prov deep visibility into every request and response.
54 lines (46 loc) • 1.59 kB
JavaScript
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { WebSocketClientTransport } from '@modelcontextprotocol/sdk/client/websocket.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
/**
* Create transport for MCP server based on config
*/
export function createTransport(serverConfig, serverName) {
const type = serverConfig.type || (serverConfig.url ? 'http' : 'stdio');
const {
url,
headers: configHeaders = {},
command,
args = [],
env: configEnv = {},
} = serverConfig;
const env = {
...process.env,
...configEnv,
};
const requestInit = { headers: { ...configHeaders } };
switch (type) {
case 'stdio':
if (!command) {
throw new Error(`Server ${serverName}: command is required for stdio transport`);
}
return new StdioClientTransport({ command, args, env });
case 'http':
case 'sse':
case 'streamable-http':
if (!url) {
throw new Error(`Server ${serverName}: url is required for ${type} transport`);
}
return new StreamableHTTPClientTransport(new URL(url), { requestInit });
case 'ws':
case 'websocket':
if (!url) {
throw new Error(`Server ${serverName}: url is required for websocket transport`);
}
return new WebSocketClientTransport(new URL(url));
default:
if (command) {
return new StdioClientTransport({ command, args, env });
}
throw new Error(`Server ${serverName}: unsupported transport type: ${type}`);
}
}