Spaces:
Sleeping
Sleeping
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; | |
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; | |
import { MCPClientLogger } from "./logger"; | |
import { ListToolsResponse, McpRequestMessage, ServerConfig } from "./types"; | |
import { z } from "zod"; | |
const logger = new MCPClientLogger(); | |
export async function createClient( | |
id: string, | |
config: ServerConfig, | |
): Promise<Client> { | |
logger.info(`Creating client for ${id}...`); | |
const transport = new StdioClientTransport({ | |
command: config.command, | |
args: config.args, | |
env: { | |
...Object.fromEntries( | |
Object.entries(process.env) | |
.filter(([_, v]) => v !== undefined) | |
.map(([k, v]) => [k, v as string]), | |
), | |
...(config.env || {}), | |
}, | |
}); | |
const client = new Client( | |
{ | |
name: `nextchat-mcp-client-${id}`, | |
version: "1.0.0", | |
}, | |
{ | |
capabilities: {}, | |
}, | |
); | |
await client.connect(transport); | |
return client; | |
} | |
export async function removeClient(client: Client) { | |
logger.info(`Removing client...`); | |
await client.close(); | |
} | |
export async function listTools(client: Client): Promise<ListToolsResponse> { | |
return client.listTools(); | |
} | |
export async function executeRequest( | |
client: Client, | |
request: McpRequestMessage, | |
) { | |
return client.request(request, z.any()); | |
} | |