← 返回信息流
AI 资讯Hacker News·2 小时前

Mcpsnoop发布:MCP协议抓包工具,支持透明代理与实时TUI

原标题:Show HN: Mcpsnoop – Wireshark for MCP (transparent proxy and live 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.pynpx -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 工具链正在走向成熟。

查看原文 →github.com