用于测试您的MCP服务器的测试库。
mcp-testing-kit 提供了测试 模型上下文协议 (MCP) 服务器的实用工具。它允许您连接到一个 MCP 服务器实例,发送请求,接收通知,并在测试中验证服务器的行为。
$ npm i -D mcp-testing-kit
假设您在 example/basic/src/index.ts 中定义了一个 MCP 服务器:
// mcp-server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({ name: 'simple-mcp-server', version: '1.0.0' });
server.tool(
'add',
'以 MCP 方式添加两个数字',
{
a: z.number().describe('第一个数字'),
b: z.number().describe('第二个数字')
},
async ({ name }) => ({
messages: [
{ role: 'user', content: { type: 'text', text: String(a + b) } }
]
})
);
export default server;
您可以使用 mcp-testing-kit 编写如下测试:
// mcp-server.test.js
import server from "../src/index.js";
// 使用您喜欢的测试框架。
import { describe, it, expect, afterEach } from "vitest";
import { connect, close } from "../../../index.js";
describe("基本 MCP 服务器", () => {
afterEach(async () => {
await close(server);
});
it("当调用 `sum` 时应返回正确的总和", async () => {
// 连接到服务器并创建一个模拟客户端。
const client = await connect(server);
const result = await client.callTool("greeting-template", { a: 10, b: 2 });
expect(result.content[0].text).toEqual("12");
});
});
connect(server: Server)连接到 MCP 服务器实例,并返回具有以下方法的客户端:
| 方法 | 签名 | 描述 |
|---|---|---|
listTools | (): Promise<ListToolsResult> | 列出服务器上注册的所有工具。 |
callTool | (tool: string, params?: any): Promise<any> | 通过名称调用工具,可选参数。 |
listResources | (): Promise<ListResourcesResult> | 列出服务器上注册的所有资源。 |
listPrompts | (): Promise<ListPromptsResult> | 列出服务器上注册的所有提示。 |
getPrompt | (prompt: string, params?: any): Promise<any> | 通过名称获取提示,可选参数。 |
onNotification | (cb: (message: JSONRPCMessage) => void): void | 注册来自服务器的通知回调。 |
onError | (cb: (message: JSONRPCMessage) => void): void | 注册来自服务器的错误消息回调。 |
onProgress | (cb: (message: JSONRPCMessage) => void): void | 注册来自服务器的进度通知回调。 |
sendToServer | (message: Request): Promise<any> | 向服务器发送原始 JSON-RPC 请求。 |
close(server: Server)关闭 MCP 服务器实例。
参见 example/basic 以了解一个完整的 MCP 服务器及其对应的测试。
MIT