mcp-autotest
是专门用于测试 MCP 协议实现的自动化测试工具。MCP 协议作为模型上下文交互的通信协议,该工具能助力开发者快速验证服务是否契合 MCP 协议规范。
MCP 协议(Model Context Protocol)是一种用于模型上下文交互的通信协议。mcp-autotest
是一个专为测试 MCP 协议实现而设计的自动化测试工具,能够帮助开发者快速验证其服务是否符合 MCP 协议规范。
npx mcp-autotest
编辑 testdata
文件夹中的 YAML 测试文件:
case: List tools
in_list_tools: {"jsonrpc":"2.0","method":"tools/list","id":1}
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!re "list-[a-z]+" } ]},"id":1}
运行以下命令启动测试:
npx mcp-autotest run testdata -- npx -y @modelcontextprotocol/server-postgres localhost:5432
在某些情况下,您可能需要处理动态值(如时间戳或 UUID),此时可以使用正则表达式进行匹配。工具支持两种模式:
全量正则表达式:
使用 !!re
标签将整个字符串视为正则表达式。
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!re "list-[a-z]+" } ]},"id":1}
嵌入式正则表达式:
使用 !!ere
标签在字符串中嵌入正则表达式片段。
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!ere "list-/[a-z]+/-tool" } ]},"id":1}
注意事项:
\\
)。请参考项目中的 PostgreSQL 示例,了解如何编写针对具体服务的测试用例。
2025/03/31 22:23:39 实际 JSON 与期望不匹配,
得到:'{"id":1,"jsonrpc":"2.0","result":{"tools":[{"description":"Run a read-only SQL query","inputSchema":{"properties":{"sql":{"type":"string"}},"type":"object"},"name":"query"}]}}'
与预期比较:
"result": {
"tools": {
"0": {
"description": {
^ 字符串值不匹配,
期望字符串:'Run a read-only SQL query 2',
实际字符串:'Run a read-only SQL query'
测试失败
假设工具返回的描述字段为动态值,您可以使用以下方式编写测试用例:
case: List tools
in_list_tools: {"jsonrpc":"2.0","method":"tools/list","id":1}
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!ere "list-/[a-z]+/-tool" } ]},"id":1}
此示例中:
"list-"
和 "-tool"
为固定字符串。/[a-z]+/
是嵌入的正则表达式,匹配任意小写字母序列。这样可以避免因版本号等动态值导致测试失败的问题。
mcp-autotest
是一个功能强大的自动化测试工具,能够帮助开发者高效验证 MCP 协议实现。通过灵活的配置和正则表达式支持,您可以轻松应对各种场景下的测试需求。