使用说明
mcp试验
MCP服务器的协议合规性测试。
MCP生态系统有数百台服务器。直到现在,还没有人知道它们是否真的遵循了规范。
mcp-test 对任何MCP服务器运行24次自动合规性检查,验证初始化握手、版本协商、工具/资源/提示模式、错误处理和JSON-RPC正确性——所有这些都是针对 MCP官方规范支持两者 标准 和 流式HTTP 运输。
快速开始
# Test a stdio server
npx @cahlan/mcp-test run --server "node my-server.js"
# Test an HTTP server (Streamable HTTP transport)
npx @cahlan/mcp-test run --url http://localhost:3000
就是这样,一个命令。适用于任何MCP服务器——stdio或HTTP。
它看起来像什么
mcp-test v0.1.0 — Protocol Compliance Suite
Testing: node my-server.js
────────────────────────────────────────────────────────────
Lifecycle
✓ lifecycle-001 Initialize handshake completes successfully
✓ lifecycle-002 Server accepts initialized notification
✓ lifecycle-003 Server response contains valid serverInfo
✓ lifecycle-004 Server responds to ping after initialization
Versioning
✓ version-001 Server returns a valid protocol version
✓ version-002 Server capabilities object is well-formed
Tools
✓ tools-001 tools/list returns valid tool array
✓ tools-002 Tool inputSchema is valid JSON Schema
✓ tools-003 tools/call returns valid content result
✓ tools-004 tools/call with unknown tool returns error
─ tools-005 tools/list supports cursor-based pagination skipped
...
────────────────────────────────────────────────────────────
Results: 20 passed · 4 skipped
Compliance Score: 100% (critical: 100% · major: 100%)
默认情况下,只显示故障。使用 -v 查看上面的完整视图。
安装
# Run directly with npx (no install needed)
npx @cahlan/mcp-test run --server "node my-server.js"
npx @cahlan/mcp-test run --url http://localhost:3000
# Or install globally
npm install -g mcp-test
mcp-test run --server "python my_server.py"
mcp-test run --url http://localhost:3000
用法
运行合规性测试
# Basic usage — stdio transport
mcp-test run --server "node dist/server.js"
# HTTP transport (Streamable HTTP)
mcp-test run --url http://localhost:3000
# Show all tests (not just failures)
mcp-test run --server "node dist/server.js" --verbose
# TAP output for CI systems
mcp-test run --server "node dist/server.js" --output tap
# JSON output for programmatic use
mcp-test run --server "node dist/server.js" --output json
# Only test specific categories
mcp-test run --server "node dist/server.js" --filter tools
mcp-test run --server "node dist/server.js" --filter lifecycle
# Fail CI if any major or higher test fails
mcp-test run --server "node dist/server.js" --fail-on major
# Custom timeout per test
mcp-test run --server "node dist/server.js" --timeout 10000
列出可用测试
mcp-test list
mcp-test list --filter errors
它检查什么
7个类别的24个测试:
| 类别 | 测试 | 它验证了什么 |
|---|---|---|
| 生命周期 | 4 | 初始化握手, initialized 通知、服务器信息结构、ping |
| 版本控制 | 2 | 协议版本格式(YYYY-MM-DD),能力对象结构 |
| 工具 | 5 | tools/list 数组、inputSchema验证、, tools/call 内容、未知工具错误、分页 |
| 资源 | 5 | resources/list 阵列, resources/read 内容、无效URI错误、分页、模板 |
| 提示 | 3 | prompts/list 阵列, prompts/get 消息,分页 |
| 错误 | 3 | 未知方法错误、格式错误的请求处理、错误响应结构 |
| JSON-RPC | 2 | 响应ID匹配,并发请求处理 |
严重程度级别
- 🔴 关键的 --必须符合要求。没有这些,服务器就坏了。
- 🟡 主要的 --必须/应该的要求。对互操作性很重要。
- 🟢 次要的 --应该/可能的要求。很高兴有。
智能跳过
测试不适用时会自动跳过:
- 如果服务器未声明,则跳过工具测试
tools能力 - 如果服务器未声明,则跳过资源测试
resources能力 - 如果服务器没有返回,则跳过分页测试
nextCursor
运输
mcp-test 支持两种MCP传输机制:
stdio(默认)
将服务器作为子进程生成,并通过stdin/stdout进行通信:
npx @cahlan/mcp-test run --server "node my-server.js"
npx @cahlan/mcp-test run --server "python my_server.py"
流式HTTP
连接到正在运行的MCP HTTP服务器。先启动服务器,然后指向 mcp-test 在它:
npx @cahlan/mcp-test run --url http://localhost:3000
该工具将把JSON-RPC请求POST到 {url}/mcp 遵循 MCP流式HTTP传输规范.特点:
- 自动SSE和纯JSON响应处理
- 会话管理通过
mcp-session-id头球 - 关闭时通过HTTP DELETE终止会话
注:
--server和--url是相互排斥的——使用其中之一。
CI集成
GitHub操作
将此添加到您的MCP服务器仓库中:
# .github/workflows/mcp-compliance.yml
name: MCP Protocol Compliance
on:
push:
branches: [main]
pull_request:
jobs:
compliance:
name: MCP Compliance Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
- name: Run MCP compliance tests
run: npx @cahlan/mcp-test@latest run --server "node dist/server.js" --output tap --fail-on critical
TAP输出
使用 --output tap 为了 龙头 大多数CI系统本机支持的格式:
TAP version 14
1..24
ok 1 - lifecycle-001 Initialize handshake completes successfully
ok 2 - lifecycle-002 Server accepts initialized notification
not ok 3 - tools-001 tools/list returns valid tool array
---
message: tools/list result must contain a "tools" array
severity: critical
...
# Tests: 24, Passed: 20, Failed: 1, Errors: 0, Skipped: 3
# Compliance Score: 95%
退出代码
| 代码 | 含义 |
|---|---|
0 |
所有测试均已通过(在配置时 --fail-on 严重程度) |
1 |
一个或多个测试失败,达到或超过 --fail-on 阈值 |
2 |
致命错误(服务器无法启动、参数错误等) |
合规性得分
合规性得分是以下百分比 关键+专业 通过的测试(跳过的测试不计算在内)。即使跳过次要测试,服务器也可以获得100%的分数。
Compliance Score: 92% (critical: 100% · major: 83%)
在您的服务器中发现错误?
检查 MCP规范 对于权威要求。每个测试都链接到相关的规范部分。
我们发现的常见问题:
- tools/list返回对象而不是数组 —
{ tools: { myTool: ... } }而不是{ tools: [...] } - 错误代码是字符串 --JSON-RPC需要整数错误代码(
-32601,不"NOT_FOUND") - 缺失
jsonrpc: "2.0"在回应中 --每条JSON-RPC消息都必须包含此字段 - Ping响应ID不匹配 --响应ID必须与请求ID完全匹配
徽章
显示您的服务器符合要求:
[](https://github.com/cahlan/mcp-test)
贡献
发现了一个我们没有测试的规格要求? 打开一个问题.
许可证
麻省理工学院