MCP客户端工具包

一个TypeScript/Node.js客户端库,用于连接多个模型上下文协议(MCP)服务器并通过统一接口聚合其功能。

  • by leotrinh
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 leotrinh/mcp-client-kit

使用说明

MCP客户端套件

mcp-client-kit TypeScript/Node.js客户端库,用于连接到多个模型上下文协议(MCP)服务器,并通过统一接口聚合它们的功能。

特性

  • 多服务器支持:同时连接到多个MCP服务器
  • 多种传输协议:支持SSE、HTTP流和stdio传输
  • JSON-RPC 2.0:完整的JSON-RPC 2.0协议实现
  • 聚合API:与所有连接的服务器进行交互的统一界面
  • TypeScript:完全支持TypeScript和类型定义
  • 认证:内置对Bearer令牌身份验证的支持

安装

npm install mcp-client-kit

快速开始

1.创建配置文件

创建一个 mcp_servers.json 项目根目录中的文件:

{
  "mcpServers": {
     "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "d:/DevSpaces/MNTWS/CVAWS"
      ]
    },
    "canva-dev": {
      "command": "npx",
      "args": ["-y", "@canva/cli@latest", "mcp"]
    },
    "leo-sse-mcp": {
      "type": "sse",
      "url": "http://localhost:3000/sse",
      "headers": {
        "Authorization": "Bearer leo-dGluaHRkLmluZm9AZ21haWwuY29t"
      }
    }
  }
}

2.使用客户端

import { McpClient } from 'mcp-client-kit';
import * as path from 'path';

async function main() {
  // Initialize the client
  const configPath = path.join(process.cwd(), 'mcp_servers.json');;
  const client = new McpClient(configPath);

  try {
    // Connect to all servers
    await client.connect();

    // List all available tools from all servers
    const tools = await client.listTools();
    console.log(`Found ${tools.length} tools`);

    tools.forEach((tool) => {
      console.log(`- [${tool.serverName}] ${tool.name}`);
    });

    // Call a specific tool
    const result = await client.callTool('leo-sse-mcp', 'my-tool', {
      param1: 'value1',
    });
    console.log('Result:', result);

  } finally {
    // Always disconnect when done
    await client.disconnect();
  }
}

main().catch(console.error);

运输类型

SSE(服务器发送事件)

{
  "type": "sse",
  "url": "http://localhost:3000/sse",
  "headers": {
    "Authorization": "Bearer token"
  }
}

HTTP流

{
  "type": "httpStream",
  "url": "http://localhost:3000/stream",
  "headers": {
    "Authorization": "Bearer token"
  }
}

stdio(本地进程)

{
  "type": "stdio",
  "command": "node",
  "args": ["./mcp-server.js"],
  "env": {
    "DEBUG": "mcp:*"
  }
}

API 参考

Mcp客户端

constructor(configPath: string)

创建新的MCP客户端实例。

  • configPath:通往 mcp_servers.json 配置文件

connect(): Promise<void>

初始化并连接到所有已配置的服务器。

disconnect(): Promise<void>

断开与所有服务器的连接。

listTools(): Promise<IAggregatedTool[]>

列出所有连接服务器中的所有工具。每个工具包括 serverName 属性,指示它属于哪个服务器。

listResources(): Promise<IAggregatedResource[]>

列出所有连接服务器的所有资源。

listPrompts(): Promise<IAggregatedPrompt[]>

列出来自所有连接服务器的所有提示。

callTool(serverName: string, toolName: string, params?: unknown): Promise<unknown>

在特定服务器上执行特定工具。

  • serverName:服务器名称(来自配置)
  • toolName:要调用的工具的名称
  • params:工具的可选参数

readResource(serverName: string, uri: string): Promise<unknown>

从特定服务器读取资源。

getPrompt(serverName: string, promptName: string, args?: Record<string, unknown>): Promise<unknown>

从特定服务器获取提示。

getConnectedServers(): string[]

获取已连接服务器名称的列表。

isServerConnected(serverName: string): boolean

检查是否连接了特定服务器。

示例

请参阅 示例 更多使用示例的目录:

  • basic-usage.ts -基本客户端使用
  • advanced-usage.ts -高级功能和错误处理
  • stdio-transport.ts -对本地服务器使用stdio传输

测试

该库在 测试 目录:

快速测试(单服务器)

npm run test:quick

全面测试(所有服务器)

npm run test:all

本地服务器测试

npm run test:local

发展

构建

npm run build

观看模式

npm run build:watch

运行单元测试

npm test

棉绒

npm run lint

建筑

有关更详细的体系结构信息,请参见 项目_结构.md.

文档

其他文件可在 文档 目录:

许可证

麻省理工学院

贡献者

由我和克劳德发起,我希望尽可能简单透明地为这个项目做出贡献。所以,只需简单地进行更改,然后创建PR