UNPKG

consortium

Version:

Remote control and session sharing CLI for AI coding agents

81 lines (79 loc) • 2.65 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'; function parseArgs(argv) { let url = null; for (let i = 0; i < argv.length; i++) { const a = argv[i]; if (a === "--url" && i + 1 < argv.length) { url = argv[i + 1]; i++; } } return { url }; } async function main() { const { url: urlFromArgs } = parseArgs(process.argv.slice(2)); const baseUrl = urlFromArgs || process.env.CONSORTIUM_HTTP_MCP_URL || ""; if (!baseUrl) { process.stderr.write( "[consortium-mcp] Missing target URL. Set CONSORTIUM_HTTP_MCP_URL or pass --url <http://127.0.0.1:PORT>\n" ); process.exit(2); } let httpClient = null; async function ensureHttpClient() { if (httpClient) return httpClient; const client = new Client( { name: "consortium-stdio-bridge", version: "1.0.0" }, { capabilities: {} } ); const transport = new StreamableHTTPClientTransport(new URL(baseUrl)); await client.connect(transport); httpClient = client; return client; } const server = new Server( { name: "Consortium MCP Bridge", version: "1.0.0" }, { capabilities: { tools: {} } } ); server.setRequestHandler(ListToolsRequestSchema, async () => { try { const client = await ensureHttpClient(); return await client.listTools(); } catch (error) { process.stderr.write(`[consortium-mcp] listTools failed: ${error instanceof Error ? error.message : String(error)} `); return { tools: [] }; } }); server.setRequestHandler(CallToolRequestSchema, async (request) => { try { const client = await ensureHttpClient(); const response = await client.callTool({ name: request.params.name, arguments: request.params.arguments ?? {} }); return response; } catch (error) { return { content: [ { type: "text", text: `Tool "${request.params.name}" failed: ${error instanceof Error ? error.message : String(error)}` } ], isError: true }; } }); const stdio = new StdioServerTransport(); await server.connect(stdio); } main().catch((err) => { try { process.stderr.write(`[consortium-mcp] Fatal: ${err instanceof Error ? err.message : String(err)} `); } finally { process.exit(1); } });