
A2a Auditor
io.github.4hmetuyar由 GitHub 帳號 4hmetuyar 發布v0.1.1更新於 Oct 24, 2026
Scans Agent2Agent (A2A) protocol code for webhook SSRF, missing auth, and credential exposure
概覽
掃描 Agent2Agent(A2A)協定程式碼,找出 webhook SSRF、缺少驗證與憑證外洩等反模式。
- 可以做什麼
- 這個本機 MCP 伺服器會靜態掃描 A2A 代理實作,涵蓋三類反模式:webhook SSRF、缺少驗證與憑證外洩。它提供 scan_text、scan_file、scan_directory 與 list_patterns 工具,並可輸出 SARIF 2.1.0 格式以整合至 CI/CD。檢查同時涵蓋 TypeScript 與 Python 的 A2A SDK 寫法,部分檢查會跨幾行追蹤資料流。
- 適用情境
- 當你正在建置或審查 A2A 代理,並希望針對參考 SDK 中擷取的特定反模式做一次快速靜態檢查時使用。它面向程式碼審查與 CI 流程,而非即時的協定一致性測試。
- 執行需求
- 以本機 stdio 程序執行,通常透過 npx @guardbee/mcp-a2a-auditor 啟動。未宣告驗證、環境變數或標頭。npm 套件需要 Node.js;掃描本身不需要網路存取。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 A2a Auditor,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
@guardbee/mcp-a2a-auditor
🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch
[npm version] [npm downloads] [License: MIT]
An MCP (Model Context Protocol) server that scans an agent's own Agent2Agent (A2A) protocol implementation for anti-patterns — not invented from the spec text, but read directly out of the reference SDKs (@a2a-js/sdk, a2a-sdk) and their own official sample code.
A2A doesn't have an MCP-style "Security Considerations" section yet to quote. So instead of guessing, this package's patterns come from three things found in the reference SDK source itself: the official push-notification sender fetches a client-supplied webhook URL with no host check at all, the official sample agent ships with an empty security scheme and a literal noAuthentication request handler, and the Python SDK's AgentCard(...) constructor treats its two security kwargs as fully optional — silently meaning "no auth" if you don't pass them.
Telemetry is off by default. With
GUARDBEE_TELEMETRY=1it sends the server, tool, success, duration and short parameter values such as a file path; longer strings and fields likecontent,tokenorpasswordare replaced with a placeholder. See@guardbee/mcp-telemetry.
Why these three specifically
Webhook SSRF because the reference DefaultPushNotificationSender does exactly const url = pushConfig.url; ... fetch(url, ...) — pushConfig.url is set by whichever client subscribed to task updates, and the SDK fetches it with zero host validation. A caller can point a server running this code at an internal service, a cloud metadata endpoint, or anything else reachable from the server's network.
Missing authentication because the SDK's own sample agent (src/samples/agents/movie-agent) ships with securitySchemes: {}, securityRequirements: [], and userBuilder: UserBuilder.noAuthentication — a copy-paste-friendly shape that looks like a placeholder but is, functionally, "accept every request from anyone." The Python SDK has the same failure mode via absence rather than an explicit empty value: AgentCard(...) never requires security_schemes/security_requirements, so a real agent built by following the reference examples can end up with no authentication and no error telling you so.
Credential exposure because an Agent Card is served publicly — anyone who can reach /.well-known/agent-card.json (or the equivalent discovery response) can read it, no authentication required to fetch the card itself. A literal API key sitting in that JSON is effectively public.
Features
- 3 categories: webhook-ssrf, missing-authentication, credential-exposure
- Both TypeScript and Python A2A code — the SDKs use different idioms for the same failure (empty object vs. absent kwargs), so this checks both, not just one language
- Two of the six checks track data flow across a few lines instead of matching a single call site: the webhook check follows a
urlvariable back to apushConfig.url-shaped assignment before flagging thefetch()that uses it, and the credential check extracts the full Agent Card object span (brace-matched) before searching inside it for a literal secret — so it doesn't just flag anyapiKey:anywhere in the file - SARIF 2.1.0 output — CI/CD integration (GitHub Code Scanning, etc.)
- Config file support via
guardbee.yml - 18 unit tests — a positive and a negative (false-positive) scenario for every pattern, including a regression test for a real bug found during development (
\bAgentCarddoesn't match insidemovieAgentCard— no word boundary between a lowercase and uppercase letter — fixed to match the class name as a suffix instead). End-to-end verified against fixtures with all patterns deliberately planted in both TypeScript and Python (caught all of them), and against the entire guardbee-mcp monorepo (461 files — zero findings in any real code; the only matches were this package's own test fixtures, pattern-definition source, and manifest description text)
Quick Start
Claude Desktop / MCP Client
CLI (CI/CD)
MCP Tools
Detected Patterns
Configuration (guardbee.yml)
Limitations (by design)
- Heuristic, not a full A2A conformance test. This finds specific anti-patterns taken from the reference SDK's own source, not a live protocol conformance check against a running agent. A2A is a young, fast-moving spec — new failure modes will show up over time that aren't covered here yet.
- The data-flow checks (indirect webhook fetch, Agent Card credential span) use a bounded text window and bracket-matching, not a real parser — a
urlvariable assigned through a more indirect chain (e.g. passed through a helper function) won't be traced correctly, and neither will an Agent Card object spread across multipleObject.assign()-style merges instead of one literal. - Naming-convention dependent. The checks look for identifiers shaped like
pushConfig.url,*AgentCard,UserBuilder.noAuthentication— code that renames these away from the SDK's own conventions won't be recognized, the same limitation every pattern-based scanner in this family has.
Development
License
MIT — GuardBee
Feedback
Questions, ideas, or a false positive? Start a thread in GitHub Discussions or open an issue. If GuardBee is useful to you, a ⭐ on the repository helps others find it.
來源:packages/a2a-auditor/README.md,提交 040e072
工具
0版本歷史
1- v0.1.1最新Sep 29, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分