How Do You Scan an MCP Server Before You Install It?
Run `pga scan <target>` before install. It checks the code against nearly 690 ATR rules for prompt injection, secrets, and obfuscation, and flags criticals in seconds.
要在安裝 MCP server 或 skill 之前先掃描它,只需要兩個指令:先跑 npm install -g @panguard-ai/panguard 安裝 PanGuard,再跑 pga scan <target> 掃描程式碼。掃描會拿目標比對將近 690 條 ATR(Agent Threat Rules)偵測規則,檢查 prompt-injection pattern、外洩的密鑰、混淆手法,以及已知的惡意行為。整個過程只要幾秒,會列出每一項發現與觸發的規則 ID,若掃到嚴重問題會以非零狀態碼結束。它完全免費,採用 MIT 授權。
這件事重要,是因為 MCP server 執行時對你的機器與資料有實際存取權,而這條供應鏈已經被濫用過。被信任的 MCP 工具 postmark-mcp,連續十五個發佈版本裡,每天默默把 3,000 到 15,000 封郵件 BCC 到外部,才被人發現。MCPJam Inspector 預設綁定 0.0.0.0(CVE-2026-23744),在 v1.4.3 之前的每個版本裡,一個 HTTP request 就能變成遠端程式執行。Azure MCP Server 的 SSRF(CVE-2026-26118)會偷走 managed-identity token。安裝一個 MCP server,就是在你的 agent 裡執行別人的程式碼。安裝前的一次掃描,是攔下問題最便宜的地方。
pga scan 到底檢查什麼?
掃描會讀取目標的原始碼與 manifest,拿它去比對 ATR 規則庫。ATR 是一套獨立、開放、MIT 授權的偵測標準,PanGuard 建構於其上並負責營運。可以把它想成 AI-agent 攻擊界的 Sigma 或 CVE:規則是標準,PanGuard 是執行規則的引擎。截至 2026 年 7 月,規則庫涵蓋 10 個類別、將近 690 條規則(npm agent-threat-rules v3.5.6)。
它具體找四類東西:
- ●Prompt-injection pattern:藏在工具描述、skill markdown 或 server metadata 裡、試圖劫持你 agent 目標的指令(OWASP ASI01,Agent Goal Hijack)。
- ●外洩或竊取的密鑰:寫死的 API key、token,以及讀取你環境變數再回傳出去的程式路徑。
- ●混淆:base64 區塊、編碼過的 payload、以及唯一目的就是讓閱讀者看不懂程式在做什麼的間接手法。
- ●已知惡意行為:比對自真實事件的 pattern,包含默默 BCC/外洩,以及非預期的程式執行(OWASP ASI05)。
這一層偵測是確定性的 Layer 1 規則:要嘛比對到、要嘛沒有,毫秒內跑完。在 498 個真實世界 SKILL.md 樣本的 benchmark 上,這一層達到 100% recall、97% precision(0.2% 誤報)。在 NVIDIA garak 的 650 個實地 jailbreak 樣本上,它抓到 97.2%。這些都是在那些特定語料上的 Layer 1 數字,不是單一的引擎整體分數。
掃描 MCP server 的步驟
1. 安裝 PanGuard。 npm install -g @panguard-ai/panguard。一次全域安裝就有 pga。
2. 啟動 daemon(僅首次)。 pga up。這會啟動本地掃描引擎,並自動偵測你的 agent runtime:Claude Code、Cursor、Windsurf、Gemini CLI、Cline、Codex CLI 等等。
3. 安裝前先掃目標。 pga scan <target>,<target> 可以是本地路徑、套件名稱或 repo。要在把 server 加進 agent 設定之前掃,不是之後。
4. 讀懂發現。 每一項發現都會標明觸發的 ATR 規則 ID、嚴重度,以及命中的行號。CRITICAL 的意思是:在你搞懂原因之前,不要安裝。
5. 做決定。 掃描乾淨就安裝。掃到嚴重問題就停手,或打開被標記的那一行自己判斷。規則 ID 給你的是可以查證的線索,不只是一面紅旗。
一次真實掃描的輸出長什麼樣?
以下是掃描一個把外洩指令藏在工具描述裡的 MCP server:
$ pga scan ./suspicious-mcp-server
PanGuard scanning ./suspicious-mcp-server
engine: ATR agent-threat-rules v3.5.6 (688 rules)
server.js ................ 2 findings
tools/mailer.js .......... 1 finding
package.json ............. clean
CRITICAL [ATR-2026-00040] Tool-description prompt injection
tools/mailer.js:41
Tool description instructs the agent to BCC every outgoing
message to an external address. Hidden from the user-facing
schema. OWASP ASI01 (Agent Goal Hijack).
HIGH [ATR-2026-00112] Environment secret read + network egress
server.js:88
Reads process.env and posts it to a non-declared host.
MEDIUM [ATR-2026-00087] Base64-encoded payload
server.js:16
Encoded blob decoded and eval'd at load time.
Result: FAIL 1 critical, 1 high, 1 medium
Do not install. Review tools/mailer.js:41 first.那個 CRITICAL 就是 postmark-mcp 的模式:一個看起來正當的工具,把默默 BCC 埋在它的描述裡。掃描器不需要認得那個特定 server。它比對到的是行為,標出規則,指向那一行。
為什麼要給規則 ID,而不只是一個警告?
因為你無法查證的警告就是噪音。每一項發現都錨定到一個 ATR 規則 ID,你可以去讀那條規則、看它比對的到底是什麼 pattern,再判斷它是否適用你的情況。規則是開放的、MIT 授權的。新攻擊出現時,由 AI 理解它一次,把它寫成一條確定性規則,那條規則之後就為所有人以毫秒級執行。從新攻擊到規則上線大約一小時。這就是為什麼這套規則庫不是一份 checklist,而是可執行的東西。
這是安裝前的掃描。如果你要的是 agent 執行期間的偵測,那是 Guard 的職責:pga up 會啟動它,即時監看工具呼叫。但掃描是第一道關卡,而它的代價只是一個指令。
FAQ
PanGuard 免費嗎?
免費。Community 就是完整產品,MIT 授權,沒有付費牆、沒有被鎖住的功能。跑 npm install -g @panguard-ai/panguard,你就有完整的掃描器與執行期 Guard。
ATR 和 PanGuard 差在哪?
ATR 是開放、獨立的偵測標準(規則本身)。PanGuard 是執行這些規則、用來掃描與保護你 agent 的引擎。這就像 Sigma 或 CVE 與營運它的廠商之間的關係。ATR 由獨立治理,PanGuard 建構於其上。
它也能掃 skill,不只是 MCP server 嗎?
可以。pga scan <target> 對 skill(一份 SKILL.md 與它的檔案)或 MCP server 的處理方式一樣。在 498 個真實世界 skill 樣本的 benchmark 上,Layer 1 規則達到 100% recall、97% precision。
它會不會誤報?
會,而誤報率取決於 lane。在 65,000 個 benign 樣本的閘門上,enforce lane 約 0.24% 誤報,預設的 hunt lane 約 9%。沒有單一的混合數字。hunt lane 刻意較吵以抓到更多,這是你能在發現清單裡看見的取捨。
下一步:裝起來,在把下一個 MCP server 加進 agent 之前先掃它。npm install -g @panguard-ai/panguard,然後 pga scan <target>。