client.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Client } from "@modelcontextprotocol/sdk/client/index.js";
  2. import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
  3. import { MCPClientLogger } from "./logger";
  4. import { ListToolsResponse, McpRequestMessage, ServerConfig } from "./types";
  5. import { z } from "zod";
  6. const logger = new MCPClientLogger();
  7. export async function createClient(
  8. id: string,
  9. config: ServerConfig,
  10. ): Promise<Client> {
  11. logger.info(`Creating client for ${id}...`);
  12. const transport = new StdioClientTransport({
  13. command: config.command,
  14. args: config.args,
  15. env: config.env,
  16. });
  17. const client = new Client(
  18. {
  19. name: `nextchat-mcp-client-${id}`,
  20. version: "1.0.0",
  21. },
  22. {
  23. capabilities: {},
  24. },
  25. );
  26. await client.connect(transport);
  27. return client;
  28. }
  29. export async function removeClient(client: Client) {
  30. logger.info(`Removing client...`);
  31. await client.close();
  32. }
  33. export async function listTools(client: Client): Promise<ListToolsResponse> {
  34. return client.listTools();
  35. }
  36. export async function executeRequest(
  37. client: Client,
  38. request: McpRequestMessage,
  39. ) {
  40. return client.request(request, z.any());
  41. }