mcptee 的
一个简单的工具,将MCP客户端的输入代理到MCP服务器,并将输出返回给客户端,同时逐行记录到文件中,用前缀“in:”和“out:”指示数据的方向,从而得到一个通常有效的YAML文件。
在每个“in:”之前,工具都会打印 --- 以及使文件成为多文档YAML的换行符,因此通常请求/响应的每个组合都是一个单独的文档。
这对于测试和排除MCP客户端和服务器的故障非常方便。
安装
npm
npm install -g @strowk/mcpteeGithub发布
从 发布 页面并放入您的PATH
从源代码构建
go install github.com/strowk/mcptee@latest用法
mcptee [args...]一些例子:
mcptee ./server_log.yaml mcp-k8s-go
mcptee ./server_log.yaml npx @strowk/mcp-k8s您可能会用相应的客户端配置它。例如,对于克劳德:
{
"mcpServers": {
"my_server": {
"command": "mcptee",
"args": ["/path/to/log_file.yaml", "npx", "my_mcp_server"]
}
}
}示例
例如,如果你有一个运行在docker中的postgres服务器:
docker run --rm --name postgres-mcp-test -e POSTGRES_PASSWORD=thesecret -p 7777:5432 postgres:latest,您想用mcp服务器postgres测试它(在另一个终端中运行它):
mcptee log.yaml npx @modelcontextprotocol/server-postgres postgres://postgres:thesecret@localhost:7777现在逐一发送这些:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"testing","version":"0.0.1"}}}
{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query", "arguments": {"sql": "SELECT datname FROM pg_database"} }}您应该在中看到输出 log.yaml 文件如下:
---
in: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"testing","version":"0.0.1"}}}
out: {"result":{"protocolVersion":"2024-11-05","capabilities":{"resources":{},"tools":{}},"serverInfo":{"name":"example-servers/postgres","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
---
in: {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}
out: {"result":{"tools":[{"name":"query","description":"Run a read-only SQL query","inputSchema":{"type":"object","properties":{"sql":{"type":"string"}}}}]},"jsonrpc":"2.0","id":1}
---
in: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query", "arguments": {"sql": "SELECT datname FROM pg_database"} }}
out: {"result":{"content":[{"type":"text","text":"[\n {\n \"datname\": \"postgres\"\n },\n {\n \"datname\": \"template1\"\n },\n {\n \"datname\": \"template0\"\n }\n]"}],"isError":false},"jsonrpc":"2.0","id":1}