Model Context Protocol 서버에서 승인되지 않은 도구 변경을 모니터링, 검증 및 차단하는 로컬 게이트웨이를 제공합니다.
다른 이름 gawk-dev/mcpgawk
- 스타
- 1
- Tools
- —
- 다운로드, 30일
- 4,015
- 최신 버전
- 0.1.87
- 마지막 커밋
- 2026년 11월 10일
- 라이선스
- Apache-2.0
mcpgawk MCP란?
mcpgawk은(는) MCP server입니다. Model Context Protocol 서버에서 승인되지 않은 도구 변경을 모니터링, 검증 및 차단하는 로컬 게이트웨이를 제공합니다.
프로젝트 README에서 생성된 요약
mcpgawk MCP server 정보
mcpgawk는 Model Context Protocol 서버를 사용하는 개발자를 위한 로컬 보안 게이트웨이 역할을 합니다. 이는 서버가 초기 승인 이후 도구 정의를 변경하여, 에이전트가 인지하지 못한 채 승인되지 않은 새로운 기능을 실행할 수 있는 위험을 방지합니다. 이 소프트웨어는 사용자의 로컬 환경에서 완전히 실행되며 데이터를 업로드하지 않으므로, 인벤토리와 결정 사항을 비공개로 유지할 수 있습니다.
사용자는 CLI를 사용하거나 VS Code 및 Cursor 전용 확장을 통해 시스템과 상호작용할 수 있습니다. 도구 모음에는 실행 전 훅을 설치하는 mcpgawk guard, 샌드박스에서 도구를 테스트하는 mcpgawk verify, 시간에 따른 도구 인터페이스의 차이점을 확인하는 mcpgawk changes 등의 명령어가 포함됩니다. stdio, SSE, HTTP를 포함한 다양한 전송 방식을 지원합니다. 더 넓은 범위의 관리가 필요한 팀을 위해, mcpgawk Platform은 구독 모델을 통해 mcpgawk enforce 및 mcpgawk monitor와 같은 엔터프라이즈 기능을 제공합니다.
활용 사례
- 1격리된 환경에서 서버 동작 감사서버를 신뢰하기 전에 샌드박스에서 실행하여 데이터 유출이나 SSRF와 같은 악성 활동을 감지할 수 있습니다.
- 2컨텍스트 윈도우 비용 모니터링개발자는 어떤 도구가 가장 많은 토큰을 소비하는지 파악하여 에이전트의 성능과 효율성을 관리할 수 있습니다.
- 3조용한 도구 업데이트 감지추적 기능을 사용하여 서버가 도구 설명이나 입력 스키마를 재작성했는지 식별할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
mcpgawk MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 mcpgawk MCP 설치
$ claude mcp add mcpgawk -- uvx mcpgawkCursor에 mcpgawk MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"mcpgawk": {
"command": "uvx",
"args": [
"mcpgawk"
]
}
}
}VS Code에 mcpgawk MCP 설치
.vscode/mcp.json
{
"servers": {
"mcpgawk": {
"type": "stdio",
"command": "uvx",
"args": [
"mcpgawk"
]
}
}
}VS Code CLI에 mcpgawk MCP 설치
$ code --add-mcp '{"name":"mcpgawk","type":"stdio","command":"uvx","args":["mcpgawk"]}'Claude Desktop에 mcpgawk MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"mcpgawk": {
"command": "uvx",
"args": [
"mcpgawk"
]
}
}
}Codex에 mcpgawk MCP 설치
$ codex mcp add mcpgawk -- uvx mcpgawkCodex config.toml에 mcpgawk MCP 설치
~/.codex/config.toml
[mcp_servers.mcpgawk] command = "uvx" args = ["mcpgawk"]
Gemini CLI에 mcpgawk MCP 설치
$ gemini mcp add -s user mcpgawk uvx -- mcpgawkGemini settings.json에 mcpgawk MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"mcpgawk": {
"command": "uvx",
"args": [
"mcpgawk"
]
}
}
}구성
GITHUB_PERSONAL_ACCESS_TOKEN
| 이름 | 설명 | 유형 |
|---|---|---|
| GITHUB_PERSONAL_ACCESS_TOKEN | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능gawk-dev/mcpgawk is public and reachablegithub.com/gawk-dev/mcpgawk ↗통과
- 패키지가 이 저장소를 소스로 명시mcpgawk names gawk-dev/mcpgawk as sourcepypi.org/project/mcpgawk/ ↗통과
- 빌드 출처(Sigstore 증명)Sigstore attestation for mcpgawkpypi.org/project/mcpgawk/ ↗통과
- 오픈 소스 라이선스 (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-10github.com/gawk-dev/mcpgawk ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from mcpgawk통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음38 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기mcpgawk
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?utm_source=github&utm_medium=readme
(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.
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):
uv tool install --force mcpgawk # or: pipx install --force mcpgawk
mcpgawk # finds every agent config on the machine itself
Run it as an MCP server: mcpgawk mcp (stdio), or uvx mcpgawk mcp.
Editor (VS Code / Cursor): install mcpgawk from the VS Code Marketplace or 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):
- uses: gawk-dev/mcpgawk@v1
with: { config: mcp.json, max-tokens: 8000, fail-on-flagged: true }
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
mcpgawk # first run: every agent config on this machine
mcpgawk demo # the whole arc in a sandbox — approve, drift, block
mcpgawk guard install # put the baseline in your agent's loop
mcpgawk guard status # is protection actually on?
mcpgawk decide # what changed, and approve it as a human
mcpgawk panel # the local page: servers, decisions, evidence
mcpgawk verify mcp.json # run the servers and watch what they do
mcpgawk changes # what changed on your servers since you approved them
mcpgawk login <key> # licence? one command fetches the paid engine (enforce, monitor)
Scanning on its own, if that is all you want:
mcpgawk scan mcp.json # a whole config
mcpgawk scan --stdio "npx -y @modelcontextprotocol/server-filesystem@2026.8.31 /tmp"
mcpgawk scan --http https://host/mcp --header "Authorization: Bearer $TOKEN"
mcpgawk scan --sse https://host/sse
mcpgawk scan mcp.json --track # record + detect rug-pulls over time
mcpgawk scan mcp.json --json # machine-readable labels
mcpgawk scan mcp.json --verbose # full per-tool table, not just flagged tools
mcpgawk scan mcp.json --supply-chain # opt-in: npm/PyPI deprecation check (network)
mcpgawk scan mcp.json --oauth-scopes # opt-in: decode a supplied Bearer JWT's scope
Keep tokens out of the config file. Under mcpgawk wrap, an env value written as keychain:<service>
(or keychain:<service>@<account>) is read from your macOS Keychain when the server starts and placed
in the server's environment only. The config holds a reference, the agent sees a reference, mcpgawk
stores nothing. A reference that cannot be read refuses to start the server and names the reference,
never a value.
"github": { "command": "mcpgawk", "args": ["wrap", "--", "npx", "-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "keychain:gh-work" } }
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
uv run --extra dev --with mcp --with tiktoken --with httpx python -m pytest -q
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.
- uses: gawk-dev/mcpgawk@v1
with:
config: mcp.json # or: stdio / http / sse — a single server
max-tokens: 8000 # fail if any server loads more than this at connect
fail-on-flagged: true # fail if any bounded signal fires
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:
# Claude Code: install the plugin (the skill, nothing else)
/plugin install mcpgawk --marketplace gawk-dev/mcpgawk
# Any other agent: copy the skill folder into its skills directory
mkdir -p ~/.claude/skills && cp -r plugin/skills/mcpgawk ~/.claude/skills/mcpgawk
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.
mcpgawk MCP 질문
mcpgawk MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add mcpgawk -- uvx mcpgawk를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
mcpgawk MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
mcpgawk가 제 데이터를 클라우드에 업로드하나요?
아니요, mcpgawk는 사용자의 로컬 환경에서 실행되며 데이터를 전혀 업로드하지 않는 로컬 우선 도구입니다.
mcpgawk는 도구 변경을 어떻게 처리하나요?
모든 서버를 읽고 승인된 기준점과 호출 내용을 대조하여, 변경된 도구를 차단합니다.
보안 취약점 테스트용으로 사용할 수 있나요?
네, verify 명령어를 통해 샌드박스 내에서 도구를 실행하여 데이터 유출, SSRF 및 도구 포이즈닝(tool poisoning) 여부를 보고할 수 있습니다.
스캔 중에 도구가 건너뛰어지면 어떻게 되나요?
건너뛴 도구는 안전한 것으로 간주되지 않고, 건너뛴 항목으로 명시됩니다.
