返回市场
麦普提

麦普提

作者:strowk8 星标更新:2025-04-12

项目介绍

mcptee

一个简单的工具,它将来自MCP客户端的输入代理到MCP服务器,并将输出返回给客户端。同时,该工具会逐行记录输入和输出到文件中,并使用前缀"in:"和"out:"来指示数据的方向,从而生成一个通常有效的YAML文件。

在每个"in:"之前,工具会打印---并换行,使得文件成为多文档YAML,因此通常每个请求/响应组合都会成为一个单独的文档。

这对于测试和排查MCP客户端和服务器的问题非常有用。

安装

npm

npm install -g @strowk/mcptee

Github Releases

发布页面下载预构建的二进制文件,并将其放入你的PATH中。

从源代码构建

go install github.com/strowk/mcptee@latest

使用方法

mcptee <out-file> <command> [args...]

一些示例:

mcptee ./server_log.yaml mcp-k8s-go

mcptee ./server_log.yaml npx @strowk/mcp-k8s

你可能需要根据相应的客户端进行配置。例如,与Claude配合使用:

{
    "mcpServers": {
        "my_server": {
            "command": "mcptee",
            "args": ["/path/to/log_file.yaml", "npx", "my_mcp_server"]
        }
    }
}

示例

如果你有一个正在Docker中运行的PostgreSQL服务器:

docker run --rm --name postgres-mcp-test -e POSTGRES_PASSWORD=thesecret -p 7777:5432 postgres:latest

并且你想用mcp-server-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}