本项目是一个最小化的演示仓库,展示了使用 Vitest 对 TypeScript MCP(模型上下文协议)服务器进行端到端(E2E)测试的两种模式:
tsx 孵化 CLI 并通过 stdio 进行通信(JSON-RPC)。Client 和 InMemoryTransport 进行内存中 RPC。仓库地址:https://github.com/mkusaka/mcp-server-e2e-testing-example
# 克隆仓库
git clone https://github.com/mkusaka/mcp-server-e2e-testing-example.git
cd mcp-server-e2e-testing-example
# 安装依赖项
pnpm install
.
├── LICENSE
├── README.md
├── package.json
├── pnpm-lock.yaml
├── src
│ ├── cli.ts # CLI 入口点(tsx + stdio 运输)
│ └── server.ts # createServer() 工厂(资源、提示、工具)
├── tests
│ └── e2e
│ ├── raw.spec.ts # spawn-based E2E 测试
│ └── sdk.spec.ts # SDK/InMemoryTransport-based E2E 测试
└── tsconfig.json
此套件通过 npx tsx 孵化 CLI (src/cli.ts) 并通过 stdin/stdout 发送 JSON-RPC。
pnpm vitest run tests/e2e/raw.spec.ts
此套件使用 MCP SDK 的 Client + InMemoryTransport 调用相同的服务器逻辑,而无需孵化子进程。
pnpm vitest run tests/e2e/sdk.spec.ts
如果需要,可以在 package.json 中添加以下脚本:
{
"scripts": {
"test:raw": "vitest run tests/e2e/raw.spec.ts",
"test:sdk": "vitest run tests/e2e/sdk.spec.ts",
"test": "vitest run"
}
}
pnpm run test:raw - 只运行原始/stdio 测试pnpm run test:sdk - 只运行内存中 SDK 测试pnpm run test - 运行所有测试此仓库旨在作为示例/模板。请随意:
src/server.ts 工厂适配为自己的 MCP 服务器raw.spec.ts 和 sdk.spec.ts 以包含更多测试用例以 MIT License 发布。