Mcpsnoop发布:MCP协议抓包工具,支持透明代理与实时TUI
速览
Mcpsnoop是一个面向MCP(Model Context Protocol)的透明代理和实时终端界面抓包工具,可类比Wireshark在TCP/IP中的作用。它允许开发者监控、分析和调试MCP通信流量,支持透明代理拦截。这对于构建基于MCP的AI应用或服务非常重要,能够帮助排查协议问题、优化性能。该工具已在GitHub上以开源形式发布。
AI 深度解读
背景
MCP(Model Context Protocol)正在成为 AI 客户端与工具服务器之间的标准通信协议。当开发者构建基于 MCP 的 AI 应用时,调试客户端与服务器之间的实际调用往往令人头疼。官方提供的 MCP Inspector 虽然能测试服务器,但它作为一个独立的客户端运行,完全看不到你的真实客户端(如 Claude Desktop、Cursor、Claude Code)和服务器之间传输的数据。在服务器中设置断点也只能在请求到达后才触发,无法捕捉客户端根本没有发送的调用,或者客户端发送了意料之外的参数。当某个工具静默地未被调用、能力声明不匹配、或者调用挂起时,开发者只能回到 /tmp 里 tail 日志,然后靠猜测来定位问题。
核心内容
mcpsnoop 是一个为 MCP 打造的透明代理与实时 TUI 工具,被作者称为"Wireshark for MCP"。它插入在客户端和服务器之间的真实数据路径上,让你能够实时查看所有工具调用的 JSON-RPC 帧。
工作原理 mcpsnoop 以一个二进制文件提供两种角色:
- 透明垫片(shim):通过
mcpsnoop -- <server>启动,客户端直接将它作为服务器命令来运行。它逐字节转发客户端和服务器之间的数据,同时将每一帧的副本发送给聚合中心。 - 聚合中心与 TUI:直接运行
mcpsnoop(不带参数)即启动实时终端 UI。垫片和 UI 通过已知的 socket 和磁盘日志自动配对,无需指定端口或启动顺序——无论你先打开 UI 还是先启动客户端,它都能正常工作。
使用方法
- 对于标准服务器(stdio 模式):在客户端的 MCP 配置中将服务器命令改为 mcpsnoop,例如:
{ "mcpServers": { "my-server": { "command": "mcpsnoop", "args": ["--", "node", "build/index.js"] } } }--之后的部分即你原本用来启动服务器的命令,可以是python server.py、npx -y @scope/server或任何编译好的二进制程序。 - 对于 streamable HTTP 服务器:以反向代理模式运行
mcpsnoop http --target http://localhost:3000/mcp --listen :7000,然后将客户端指向 mcpsnoop 的地址即可。
安装方式
- Go 安装:
go install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest - Homebrew:先添加 tap
brew tap kerlenton/mcpsnoop,然后brew install mcpsnoop。如果 Homebrew 因第三方 tap 限制而拒绝,运行brew trust kerlenton/mcpsnoop信任一次后重试。若想无 tap 安装,需要项目在 Homebrew core 中达到一定门槛(stars、forks、watchers),作者欢迎加星帮助项目进入 core。 - 直接从 Release 页面下载预编译二进制。
TUI 功能
- 实时 JSON-RPC 流:显示请求、响应、通知和服务器 stderr,彩色标注,错误和慢调用会被标记(包括工具级别的
result.isError,而不仅是 JSON-RPC 错误)。 - 回放(Replay):对任意已捕获的工具调用,重新在一个干净的服务器副本上执行,是迭代工具的最快循环。
- 能力检查器(按
c):精确显示客户端和服务器在握手时协商的能力。 - 帧检查器(按
enter):完整的漂亮打印 JSON,支持帧内搜索。 - 挂起调用检测:正在进行的请求显示
PENDING并带有实时计时器,一眼就能看出哪个工具卡住了。 - 真正的过滤查询:支持
tool:、status:、dir:、kind:、id:等字段过滤,以及纯文本匹配(多个 token 空格分隔为 AND 关系)。例如tool:search status:slow显示搜索工具的慢调用;dir:s2c kind:req显示服务器发起的请求(如 sampling、roots)。
快捷键与操作
j/k移动,ctrl-f/ctrl-b翻页,g/G跳转首尾,shift+列名排序。enter深入查看帧,esc返回,r回放,c能力,y复制,/过滤,:命令,p暂停,f跟随,ctrl-d删除。- 按
?查看完整帮助列表。
安全提示 mcpsnoop 会运行你包装的服务器命令,因此只应包装你信任的服务器,不信任的服务器请放在容器中运行。它不会执行你未在客户端配置中指定的任何内容。
项目状态 mcpsnoop 是 1.0 之前的版本,遵循 SemVer:在 0.x 阶段,minor 版本可能改变用户可见行为,patch 版本为 bug 修复。欢迎提交 issue 和 pull request。
关键要点
- 透明代理架构:mcpsnoop 不作为一个独立客户端接入,而是垫在真实客户端和服务器之间,看到的是实际通信,而非模拟流量。
- 双角色合一:一个二进制同时担任垫片(转发+复制帧)和 UI 聚合中心,通过自动配对机制消除配置复杂度。
- 零配置使用:只需在客户端配置中将服务器命令替换为 mcpsnoop,无需设置 socket 路径、端口或启动顺序,UI 会自动从磁盘回填历史会话。
- 强大调试能力:包括实时 JSON-RPC 流、回放、能力检查、帧内搜索、挂起调用检测、按字段过滤等,覆盖开发调试全流程。
- 多安装方式:支持 Go install、Homebrew(含 tap 和未来可能的 core)、以及预编译二进制,适应不同环境。
- 安全考量:明确提醒用户只包装可信服务器,并声明工具不会执行未配置的命令。
意义与影响
mcpsnoop 填补了 MCP 生态中一个关键的调试空白。官方 Inspector 的"旁观者"视角无法捕捉真实客户端与服务器之间的微妙差异——工具是否被正常调用、参数是否正确、能力协商是否一致、调用为何挂起——而 mcpsnoop 的透明代理设计让开发者能直接"透视"数据管道。它降低了 MCP 开发的试错成本,尤其是当客户端行为与预期不符时,不再需要猜测或手动插桩。回放功能又进一步缩短了工具迭代的反馈周期。随着 MCP 在多模态 AI、Agent 应用中的广泛采用,这种级别的调试工具将成为开发者工具箱中的标配。mcpsnoop 的开源和社区驱动方式,也预示着 MCP 工具链正在走向成熟。
