mcpField
M
mcpwatch

mcpwatch

本地服务
github.com开发工具08 周前更新

关于 mcpwatch

mcpwatch 是面向使用编码 Agent 的开发者的本地 MCP 流量记录与分析工具。它按服务器列出 Token 成本,并通过命令行、仪表盘和 MCP 工具展示调用记录与健康状况。

主要功能

  1. 01审计每次会话的工具定义成本
  2. 02记录请求、响应、状态和延迟
  3. 03分析故障与服务器健康状况
  4. 04在本地仪表盘查看调用
  5. 05对存储记录中的密钥脱敏
  6. 06导出独立 HTML 会话文件

适用场景

  1. 01找出增加上下文成本却未使用的服务器
  2. 02追踪失败或重复的工具调用
  3. 03检查缓慢或破坏协议的服务器
  4. 04查看并分享记录的会话

MCP 相关

mcpwatch 可代理并记录 MCP 服务流量,也可作为 MCP 服务运行,提供查询成本、故障、健康状况和调用历史的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sreelal727-mcpwatch": {
"command": "npx",
"args": [
"-y",
"@sreelal727/mcpwatch"
]
}
}
}
启动命令npx -y @sreelal727/mcpwatch

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@sreelal727/mcpwatch0.4.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

👁 mcpwatch

你安装的每个 MCP 服务,都会在每次会话中向你收取 Token 费用。 看看账单,然后把费用降下来。

mcpwatch 会记录编码 Agent(Claude Code、Codex、Cursor、Claude Desktop)与 MCP 服务之间的真实流量,然后逐项列出这套配置实际占用了多少上下文,并准确告诉你该删掉什么。

一条命令。本地运行。零配置。永不需要账户。

npm CI License: MIT Node ≥ 22 PRs welcome


安装 MCP 服务时,没人会告诉你这一点:每次会话开始时,该服务的工具定义都会注入到 Agent 的上下文中,不管你是否使用它。 一个包含 50 个工具的大型供应商集成,可能会在你输入任何内容前就占用 15,000+ 个 Token。下次会话还要再付一次,之后每次也一样。

除此之外,你还要为工具响应付费:你只需要一行数据,它却返回 200 kB;调用失败后重试;以及 Agent 重新获取已有内容。

这些费用无处可见。mcpwatch 会记录传输中的实际字节数,并将其整理成逐项账单。

十秒钟查看你的数字

无需设置,无需重启,无需等待。它会启动你已配置的每个 MCP 服务,像客户端一样向服务请求工具列表,测量用量,然后将其关闭:

npx @sreelal727/mcpwatch audit
Every new session pays ~9,262 tokens ($0.05) to load these tool definitions,
before you type a word:

  github         8,825 tokens   52 tools   95%   Cursor
  filesystem       437 tokens    6 tools    5%   Cursor
                 9,262 tokens  every session

At 10 sessions a day that is ~2,778,600 tokens a month ($13.89 at $5/M) spent
before any work happens.

"github" alone is 95% of that. If you do not use it in every project, moving it to
the projects that need it is the single biggest win available to you.

这是固定成本,无需记录任何内容也能得知。

然后查明你实际使用了什么

你调用的工具中,哪些需要记录真实流量。只需进行一次监测,照常工作一天,然后运行:

npx @sreelal727/mcpwatch init     # then restart your client
npx @sreelal727/mcpwatch cost     # a day later
Your MCP setup costs ~12,486 tokens per session before you type a word ($0.06 at $5/M tokens).

PER-SESSION TAX — tool definitions loaded into every new session:
  github        10,762 tokens   46 tools, none used  ← never called
  filesystem       780 tokens    8 tools, 2 used
  postgres         944 tokens    9 tools, 1 used
                12,486 tokens, every session

AT YOUR ACTUAL PACE — 34.9 server startups/day over 11.3 days:
  ~4,362,755 tokens/month ($21.81) on tool definitions alone, before any work happens
  ~4,939,089 tokens/month ($24.70) all in

BIGGEST SAVINGS — ~1,510,287 tokens ($7.55) of the above bought you nothing:
  1. 1,420,584 tokens (10,762 of them every session) — github: 46 tools loaded into
     every session, never called
     → Remove "github" from your MCP config (or load it only in projects that need it).
  2. 85,523 tokens — filesystem: 132 repeat calls with identical arguments in the same session
     → The agent re-fetched the same thing — usually a sign it lost the earlier result.
  3. 4,180 tokens — postgres: 33 failed calls
     → Fix or remove postgres's failing calls — each one costs context and a retry too.

把前两个数字放在一起看:每月账单中的 $21.81 是工具定义的费用——仅仅是配置了这些服务就要付出的成本,此时你的 Agent 还没做任何有用的事。而其中最大的那个服务,你一次都没调用过。

这就是这个工具的意义所在。它不是“给你一个仪表板,让你自己去找”,而是从配置中删掉这一行,每次会话就能省下 10,762 个 Token;你从未使用过这个服务,却一直在为它付费。

预测使用的是你的记录中观察到的启动频率——不是猜测,而且只有在历史数据足够可靠后才会显示。

(使用 npm i -g @sreelal727/mcpwatch 安装一次,之后每条命令都只需运行 mcpwatch …。)

你的 Agent 也能查看账单

init 还会将 mcpwatch 注册为 MCP 服务,因此你的 Agent 无需额外设置即可使用这些工具:

工具它能回答的问题
token_costs“我的 MCP 配置要花多少钱?应该移除什么?”
recent_failures“刚才出了什么问题?使用了哪些参数?服务端说了什么?”
server_health“那个服务是否在崩溃、运行缓慢、卡住,或破坏协议?”
find_calls“这个工具以前成功运行过吗?我上次用了哪些参数?”
get_call“显示调用 #412 的确切请求和响应 JSON。”

因此,你只需在自己正在使用的客户端中提问:

你: 我的上下文总是被占满,是什么在消耗它?

Agent: (调用 token_costs) 你的 github 服务加载了 46 个工具定义—— 共 10,762 个 token——每个会话都会加载,而且你过去 30 天一次都没调用过它。 按这个时间段计算,大约消耗了 140 万个 token。你的文件系统服务还重复读取了 相同的文件 132 次。要我把 github 从你的配置中移除吗?

这些描述写成了触发条件,因此 Agent 会主动调用它们——工具调用失败后调用 recent_failures,你提到上下文或成本时调用 token_costs——而不是等着你告诉它们这些工具的存在。

它也会告诉你哪里出了问题

同一份记录只需一条命令,就能回答关于可靠性的问题:

$ mcpwatch doctor
2 error(s) in 19 MCP calls across 3 server(s) in the last 24h.

! web-fetch        5 calls, no errors, avg 152ms   last seen 32s ago
    1 non-protocol stdout line (this server logs to stdout, which corrupts MCP)
✗ database         7 calls, 2 errors (29%), avg 227ms   last seen 34s ago
    high error rate
    slowest: run_query at 1.3s
✓ filesystem       7 calls, no errors, avg 54ms   last seen 36s ago

[#14] 2s ago  database/does_not_exist  tool_error  (2ms)
    error: MCP error -32602: Tool does_not_exist not found
    session fd14d19f · full payloads: get_call(14)

mcpwatch tail 会实时逐行输出调用记录。所有命令都支持 --json,因此只有 Shell 访问权限的 Agent(例如在 VS Code 终端中运行的 Codex、钩子、CI)也能读取。你也可以运行 mcpwatch ui,在 127.0.0.1 上打开本地仪表板,亲自查看。

你将获得

  • 十秒内得到一个数字——mcpwatch audit 无需插桩、无需重启客户端,也无需等待流量,即可为已配置的服务估算成本。
  • 逐项列出的 token 账单——mcpwatch cost 会计算每个服务每个会话的开销,根据你的实际使用情况预测未来成本,并按可移除项排序:未使用的服务、臃肿的工具列表、过大的响应、重复调用、失败调用。
  • Agent 可读的记录——将 token_costs、recent_failures、server_health、find_calls、get_call 作为 MCP 工具提供,并且所有命令都支持 --json,方便只有 Shell 访问权限的 Agent 使用。你的 Agent 不再需要猜测自己的工具调用情况。
  • 实时仪表板——Agent 工作时,会话记录会实时流入:调用时间线、状态指示点、延迟条形图、完整的请求/响应 JSON 检视、筛选,以及深色/浅色模式。
  • 记录每次调用——保存成对的请求/响应,以及耗时和状态(ok / rpc_error / tool_error),包括客户端经常悄悄吞掉的带内工具错误。
  • 检测行为异常的服务端——将日志写入 stdout 的服务端会破坏 MCP 协议;mcpwatch 会记录这些行并将其标记出来,而不是因此导致协议中断。
  • 默认启用密钥脱敏——API 密钥、Bearer token、JWT 和类似密码的 JSON 字段都会从存储副本中清除(不会处理实时数据流)。使用 --no-redact 可关闭,使用 MCPWATCH_REDACT_EXTRA 可添加匹配模式。
  • 导出会话——mcpwatch export <id> 会生成一个独立的 HTML 文件,作为可分享、无脚本的故障报告,准确呈现发生过的事情。
  • 也支持 HTTP 服务——mcpwatch http <url> 是一个用于 Streamable HTTP 服务的记录型反向代理(也包含 SSE 响应)。
  • 数据归你,存储在你的磁盘上——使用 mcpwatch gc 管理保留期限;删除 ~/.mcpwatch,数据就会消失。永远没有 SaaS、账户或遥测。

工作原理

your agent ──stdio──▶ mcpwatch run ──stdio──▶ your MCP server
    ▲                      │
    │                      └── tee ──▶  SQLite (~/.mcpwatch)
    │                                        │
    └──── mcpwatch mcp ◀─────────────────────┤   the agent reads its own history
                                             │
          mcpwatch ui / doctor / tail ◀──────┘   you read it, when you want to

mcpwatch init 会重写客户端配置中的每个 stdio 服务条目,使其通过 mcpwatch run 路由。代理会原样传递字节流,并解析该数据流的一个副本——捕获功能与透传功能独立接线,因此即使录制失败,Agent 仍能继续工作。透传至关重要是设计原则 #1,已在代码中落实,并通过端到端测试验证:测试会让真实 MCP 客户端通过代理运行。

init 还会将 mcpwatch 本身添加到客户端,作为一个 MCP 服务,从而形成闭环:录制器也成为 Agent 可以调用的工具。它绝不会通过自己的代理进行包装——否则,Agent 针对流量提出的每个问题都会变成更多流量。

对比

mcpwatchMCP InspectormcpsnoopSaaS Agent 可观测性
告诉你当前配置的服务会消耗多少令牌✅ cost❌❌部分支持(可查看支出,但无法查看每个服务的开销)
你的 Agent 可以查询录制内容✅ MCP 工具❌❌❌
来自你实际客户端的真实会话✅❌ 手动开发工具✅✅
无头/仅终端工作流✅ doctor、tail❌✅❌
Web 仪表板✅✅❌ 终端 TUI✅
一条命令配置整个客户端✅ init❌❌ 每个服务单独配置❌ 需要更改 SDK/Agent
实时跟踪✅❌✅✅
自包含的 HTML 会话导出✅❌❌❌
100% 本地运行,无需账户✅✅✅❌
策略防护措施🔜 v1.0❌❌因平台而异

(这些工具都很不错——这里比较的是它们各自适用的场景。Inspector 非常适合调试你正在开发的服务;mcpsnoop 是一款可靠的终端查看器;SaaS 平台则会在其基础设施上提供集群管理功能。)

命令

命令功能
mcpwatch audit [--json]立即衡量已配置服务的每会话开销——无需设置
mcpwatch init [--dry-run]为客户端添加监控,并向 Agent 提供 mcpwatch 工具(会创建备份,且可还原)
mcpwatch cost [--since 30d] [--rate N] [--json]详细的令牌账单:每会话开销、月度预估、按节省金额排序
mcpwatch doctor [--json]一次性健康报告:列出出错、崩溃、挂起、运行缓慢或破坏协议的服务
mcpwatch tail [--json]在终端实时跟踪调用,每次调用显示一行
mcpwatch mcp将 mcpwatch 作为 MCP 服务运行(由客户端启动;通常你无需手动运行)
mcpwatch connect输出可复制粘贴的 Claude Code / Codex / Cursor 配置
mcpwatch unwrap还原原始配置
mcpwatch status显示已添加监控的内容
mcpwatch ui [--port 4680]本地仪表板
mcpwatch run --name X -- <cmd>手动包装单个 stdio 服务
mcpwatch http <url> [--port 4681]为 Streamable HTTP 服务提供录制反向代理
mcpwatch sessions / calls <id>通过命令行查看录制数据
mcpwatch export <id> [--out f.html]导出自包含的 HTML 会话
mcpwatch gc [--keep-days 30]清理旧会话,压缩数据库

常见问题

Token 数量有多准确? 这些数字根据记录的字节数估算得出,大约按每个 Token 对应 4 个字符计算,并未使用真正的分词器——要在这里集成一个分词器,就得在用户全局安装的 CLI 中加入原生依赖。这个精度足以判断哪些操作开销大,以及比较不同服务,这才是你真正需要用到的。不要拿它们来核对账单。金额按你可以通过 --rate 设置的费率计算(默认每百万 Token 5 美元),并且总会打印出采用的费率。

这能降低我的托管或数据库账单吗? 不能直接降低——mcpwatch 是本地记录器,不是基础设施。不过,它会显示哪些重复工作正在给你的后端增加负担:重复的相同调用、过大的查询、重试循环。解决这些问题可以减少 API 配额消耗和数据库负载。但坦白说,最主要的收益在于上下文 Token,而节省也确实体现在这里。

记录本身会消耗 Token 吗? 不会。捕获过程是在你的机器上进行的字节级分流;不会向任何提示词中添加内容。只有当 Agent 实际调用 Agent 工具时,它们才会进入上下文,而且其回答会经过限制和摘要,不会直接倾倒全部内容。

有开销吗? 代理会进行字节级分流;解析和存储则基于副本进行,不会影响协议的关键路径。如果捕获过程发生故障(磁盘已满等),它会自行禁用,流量仍会继续传输。

我的数据安全吗? 数据绝不会离开你的机器:数据存储在 ~/.mcpwatch 中的 SQLite 数据库里,仪表板绑定到 127.0.0.1,并且默认在写入时对密钥进行脱敏。Agent 工具读取的是同一个已脱敏的本地数据库——将记录交给 Agent 不会把数据发送到原本不会发送的地方。

我的客户端没有被自动检测到。 运行 mcpwatch connect,即可获取可复制粘贴的配置片段,适用于 Claude Code(claude mcp add)、Codex(~/.codex/config.toml)、Cursor 或其他 MCP 客户端。Agent 工具并非 Claude 专属——它就是一个普通的 MCP 服务。

Agent 每次都会读取我的全部历史记录吗? 不会。工具会返回经过限制和摘要的结果(十几行数据,以及参数预览),并默认使用最近的时间范围。只有当 Agent 针对某次特定调用提出请求时,才会返回完整负载。

护栏呢? 这是 v1.0 的计划:针对每个服务/工具设置允许/拒绝规则,为危险调用提供确认提示,并对工具描述变更发出警报(“抽地毯”攻击)。你现在使用的记录器正是这些功能的基础。请参阅 ROADMAP.md。

开发

npm install && npm run build && npm test

单体仓库:packages/cli(代理 + CLI + 仪表板服务), packages/ui(React 仪表板,构建后会放入 CLI 包)。 用于开发 UI 的演示数据:

cd packages/cli
npx tsx scripts/seed-demo.ts /tmp/mcpwatch-demo.db --keep-running &
node dist/index.js ui --db /tmp/mcpwatch-demo.db

欢迎贡献——请查看路线图,了解项目的发展方向。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。