
mcpgawk
io.github.gawk-devv0.1.68更新於 Oct 3, 2026
Measure MCP servers, pin the approved tool surface, refuse calls to tools that changed. Local-first.
概覽
一個本機閘道,用來量測 MCP 伺服器、固定已核准的工具介面,並封鎖對已變更工具的呼叫。
- 功能
- mcpgawk 會掃描你的代理程式可觸及的 MCP 伺服器,並記錄其工具、輸入結構、描述與註解的基準。它會回報權杖成本指數、寫入或可外洩等能力事實,以及注入式描述等有限訊號。防護掛鉤會拒絕呼叫你在核准伺服器之後才出現或變更的工具,本機面板會顯示伺服器、決策與證據。它也會在沙箱中執行伺服器,觀察工具實際做了什麼。
- 適用情境
- 當你的代理程式連線到可能在核准後變更工具的第三方 MCP 伺服器時,或你想在信任某個伺服器之前了解它在情境權杖上的開銷時,值得加入。也適合在 CI 中於每個提取要求上捕捉漂移與不斷增加的權杖成本。
- 執行需求
- 以 Python 套件在本機執行,可用 uv tool install 或 pipx 安裝,或以 uvx mcpgawk mcp 透過 stdio 啟動。免費層不需要帳號、API 金鑰或環境變數。驗證時可選用 Docker 以取得完整容器隔離。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 mcpgawk,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
One gateway in the path. On your machine.
mcpgawk
[PyPI] [Python] [License] [CI] [Open VSX] [GitHub Marketplace] [No egress]
Your agents call Model Context Protocol servers that can change what their tools do after you approved them, and the agent will call the new one without noticing. mcpgawk reads every server your agents can reach, checks every call against a baseline you approved, and blocks the ones that changed. It runs on your machine and uploads nothing.
The same engine powers mcpgawk Platform: mcpgawk enforce puts one endpoint in front of the
whole fleet with a key per caller, policy on every call and a hash-chained audit log, and
mcpgawk monitor watches the servers you approved around the clock and tells you when one drifts.
This free layer is the seeing and the blocking underneath it. mcpgawk Platform is one subscription
per person for up to 3 machines: start a free 7-day trial at https://mcp.gawk.dev/trial.html
(no card) or subscribe at https://mcp.gawk.dev/subscribe. Then mcpgawk login <key> on this same
install fetches the paid engine and turns those on — one more command, nothing else to set up.
Watch: mcpgawk in 64 seconds. A tool you approved changes in an update; mcpgawk refuses the call until you decide.
mcpgawk demo — its own output, in a sandbox that touches nothing of yours.
Run the same command and you get the same thing.
Why
A server you approved can change what its tools do afterwards. Nothing in MCP tells your agent that happened — it just calls the new tool. That is the rug-pull, and it is the case mcpgawk is built for.
Two things follow from being able to see a server properly. You find out what each one can reach before you trust it, and you find out what it costs: every tool is loaded into your context on every request, used or not.
How it's different
- It blocks, it does not only report. A scanner tells you afterwards.
mcpgawk guardinstalls one pre-execution hook and a tool that appeared after you approved the server does not run. - It runs the server, not just reads it.
mcpgawk verifydrives tools in a sandbox and reports what they actually did — exfiltration, SSRF, poisoning — reproduced before it is reported. - Nothing is uploaded. Cloud scanners send your inventory to a server and gate the verdict there. Every decision here is made on your machine, with no account and nothing to sign in to.
- It says what it did not check. Skipped tools are named as skipped, never counted as clean.
Features
- 🛑 Block a changed tool before it runs —
mcpgawk guard installputs one pre-execution hook in your agent's loop. The decision is local, in about 10ms, with nothing to sign in to. Works on 6 of the 21 supported clients; the rest have no hook point and are named, not glossed over. - 🧪 Run it, don't just read it —
mcpgawk verifydrives tools in a sandbox and reports what they did: exfiltration, SSRF, tool poisoning, secret leaks. The sandbox is a proxy by default, so it needs no Docker; Docker adds full container isolation when you have it. Safe mode drives only provably read-only tools, and every tool it skips is named as skipped. - 🧑⚖️ Approval needs a person —
mcpgawk decideopens a local screen for what changed. The buttons live on the tokened link printed in your terminal, so an agent that opened the page cannot approve its own way past a block. - 🖥️ One local panel —
mcpgawk panel: every server, every decision, every piece of evidence. - 📜 The changelog no vendor publishes —
mcpgawk changesshows every change to a server's tool surface between the snapshots you have recorded: tools added or removed, input schemas widened, descriptions and annotations rewritten. It reads your local history, so it works for a server you approved weeks ago — the one thing a fresh scan can never tell you. - 🔌 Any transport — stdio, streamable-HTTP, SSE, and OAuth remotes (via the
mcp-remotebridge). - 💸 Token cost index — exactly what each tool adds to your context at connect, plus the 3 heaviest tools.
- 🧾 Capability facts — write / exfil-capable / declared annotations, straight from the schema, plus a trust-surface summary (% write, % exfil-capable, destructive-declared count) and an annotation-completeness score.
- 📌 Integrity pin + drift — catch a server that silently rewrites its tools (
--track). - 🚩 Bounded signals — injection-shaped descriptions, cross-server shadowing, under-declaring Server Cards — pointers for a human, never verdicts.
- 🔒 Zero egress, by construction — the measurement layers import no network library. Enforced by a test.
Two checks are opt-in and make an explicit exception (see Guarantees):
--supply-chainand--oauth-scopes.
Get it — three ways
CLI (any terminal):
Run it as an MCP server: mcpgawk mcp (stdio), or uvx mcpgawk mcp.
Editor (VS Code / Cursor): install mcpgawk from the marketplace (Open VSX). It scans your workspace mcp.json and shows cost + capability flags inline. The extension drives this engine as a subprocess — it is built and released separately, so its source is not in this repository.
CI (GitHub Action): gate every PR on token budget / drift (Marketplace):
When to run it
- Once, then leave it on —
mcpgawk guard install. After that a tool that appears on a server you already approved does not get called. - Before you add a server — see what it costs and what it can do, before you trust it.
- When your agent feels slow or picks the wrong tool — it's often MCP bloat (too many / too-heavy tools).
- On every PR — the CI gate catches drift and creeping token cost.
- If you publish an MCP server — see what it costs your users and how it reads to a client, and fix it (usually one line per tool). Lean + well-annotated is a differentiator.
Use
Scanning on its own, if that is all you want:
What it reports
- Cost index — tokens each tool adds at connect (named tokenizer; a comparable index, not an absolute Claude count), plus the 3 heaviest tools.
- Trust surface — capability facts (write/mutating, exfil-capable, declared annotations) rolled up into % write, % exfil-capable, and a destructive-declared count.
- Annotation completeness — a transparent composite (annotated ÷ total tools declaring read/write intent), not a risk score.
- Coverage — tools, prompts, and resources counted (
--verbosefor the full per-tool table). - Integrity pin — a hash that changes if the server silently rewrites its tools;
--trackturns it into rug-pull detection over time. - Bounded signals — precise, low-false-positive pointers for a human to review, never verdicts: injection-shaped descriptions (tools and prompts), cross-server name shadowing, and public Server Cards that under-declare what the server actually exposes.
- Supply-chain (opt-in,
--supply-chain) — checks the launched package against the public npm/PyPI registry for deprecation/yank status. - OAuth scopes (opt-in,
--oauth-scopes) — locally decodes a supplied Bearer JWT'sscopeclaim.
Guarantees
- No inventory egress. The only network is the protocol client talking to the server you point
it at. The measurement layers import no network library — they cannot egress by construction
(enforced by a test). Public Server Card discovery is fetched with no auth and no redirect-following.
Two flags are the explicit, opt-in exception:
--supply-chainsends the launched package's name (and pinned version, if any) — never your tool inventory — to the public npm registry or PyPI JSON API.--oauth-scopesmakes no network call at all; it locally decodes a Bearer JWT you already supplied. Neither runs unless you pass the flag. - Facts ≠ heuristics. Exact capability facts and the token index never mix with the bounded heuristic signals — separate in code, separate in output.
- Reproducible. One command, identical numbers.
- Tracks the protocol. Built on the official
mcpSDK, which negotiates the protocol version.
Develop
CI gate — GitHub Action
Scan your MCP servers on every pull request and fail the build if one gets too heavy or trips a signal. It runs entirely in your runner — nothing is uploaded — and posts a per-server cost/flag table to the job summary.
Available on the GitHub Marketplace.
Contributing
Issues and PRs welcome. Please read CONTRIBUTING.md first, and see the design boundaries in THREAT-MODEL.md. Security reports go through SECURITY.md (privately, not a public issue).
License
Apache-2.0 — see LICENSE. Part of the nativerse · gawk.dev family. Site and docs: mcp.gawk.dev. The value is in the repo, not a cloud.
Use it from your agent (skill)
Let your coding agent run the checks itself — whenever it adds, upgrades or audits an MCP server:
The skill teaches the agent to measure a server BEFORE trusting it, audit an MCP-2 upgrade as a baseline diff instead of blind re-trust, and relay every consent prompt to you verbatim.
來源:README.md,提交 b336940
工具
0版本歷史
1- v0.1.68最新Oct 3, 2026


