mcp-scan

io.github.CodingSelim由 GitHub 帳號 CodingSelim 發布v0.2.1更新於 Oct 24, 2026

Passive security scanner: audits MCP servers against the OWASP MCP Top 10, graded A-F.

發布方自己的服務:scan.mx Email Diagnostics

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

被動式安全掃描器,依 OWASP MCP Top 10 稽核 MCP 伺服器並給予 A–F 評級,可透過命令列或作為 MCP 伺服器使用。

可以做什麼
  • 掃描 MCP 伺服器:稽核 stdio 指令或 Streamable HTTP 端點,列舉其工具、提示與資源,輸出 0–100 分與 A–F 評級。
  • 列出檢查項目:顯示涵蓋金鑰外洩、注入、SSRF、路徑穿越、工具投毒、權限範圍、供應鏈、驗證與遙測的 12 項靜態檢查。
  • 跨整個工具集推理「致命三要素」:同時具備讀取私有資料、接收不可信內容與可外洩能力。
  • 以主控台、JSON 或 SARIF 格式輸出結果,並在達到可設定的嚴重等級時回傳非零結束碼,用於 CI 攔阻。
適用情境
適合在把陌生或第三方 MCP 伺服器接入代理程式之前先做一次檢查,也適合在 CI 中攔阻 MCP 設定變更。它面向想快速、唯讀了解伺服器對外暴露面的審查者,而非執行期滲透測試。
執行需求
透過 npx 以 stdio 在本機執行(npm 套件 owasp-mcp-scan),需要 Node.js 以及取得該套件的網路存取。掃描 stdio 目標會啟動該指令;HTTP 目標可能需要在命令列傳入 Authorization 標頭。未宣告任何帳號或環境變數。
安裝前請注意
掃描 stdio 目標會執行該指令,因此只應掃描你信任的伺服器。結果是偏向高召回的靜態啟發式判斷,看不到執行期沙箱,需搭配情境判讀。驗證與傳輸檢查僅適用於 HTTP 目標。以標頭傳入的權杖會出現在命令列中。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 mcp-scan,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

🛡️ mcp-scan

Passive security scanner for Model Context Protocol servers. Point it at any running MCP server; it audits the live server against the OWASP MCP Top 10 and grades it A–F. Read-only, so it is safe to run against production.

[npm] [License: MIT] [Node] [CI] [Tests] [OWASP MCP Top 10]

bash
npx owasp-mcp-scan --stdio "npx -y @modelcontextprotocol/server-filesystem /tmp"
[mcp-scan console report: firecrawl-mcp graded F with critical findings]

I ran it against the 12 most-installed MCP servers. 9 of them failed. No install, no config, no exploiting anything.


Why

MCP tool descriptions are fed straight into your model's context, and most public servers were never security-reviewed. A bad one can hide instructions in a description, expose a raw-shell tool, or leak a key; and your agent acts on it. Endor Labs found 82% of servers prone to path traversal, 34% to command injection.

mcp-scan is the gut-check before you wire a server in. It's passive: it reads advertised capabilities and analyzes them statically, never invoking tools, so it's safe against production servers.

How it works

  1. Connects to the server over stdio or Streamable HTTP and enumerates every advertised tool, prompt, and resource.
  2. Runs 12 static checks across that surface: secrets, injection, SSRF, path traversal, tool poisoning, excessive scope, and more.
  3. toxic-flow reasons across the whole toolset for the lethal trifecta (reads private data + ingests untrusted content + can exfiltrate), the shape single-tool scanners miss.
  4. Scores 0-100 and grades A-F (any critical forces F). Emits console, JSON, or SARIF.

It never calls a tool, never fuzzes, and never sends an exploit. The worst it does is read what the server already tells everyone.

Real findings on real servers

12 popular npm servers, actual output (snapshot 2026-07-11, full benchmark):

ServerToolsGrade🔴🟠🟡Notable
firecrawl-mcp26F2111lethal trifecta (MCP10) + code exec (MCP05)
@modelcontextprotocol/server-filesystem14F0111unconstrained path params (MCP01)
@modelcontextprotocol/server-puppeteer7F120script param executes JS (MCP05)
tavily-mcp5F031untrusted-input + exfiltration (MCP10)
@modelcontextprotocol/server-memory9F030delete_* tools, no confirmation (MCP02)
@modelcontextprotocol/server-github26D002state-changing tools (MCP02)
@modelcontextprotocol/server-slack8C010reads + posts = data + exfil (MCP10)
@modelcontextprotocol/server-everything13A000clean ✓
@kazuph/mcp-fetch1A000clean ✓

9 of 12 flagged, 3 clean, every row audited finding-by-finding, false positives stripped rather than padded. Reproduce any row yourself:

bash
npx owasp-mcp-scan --stdio "npx -y firecrawl-mcp"     # F: lethal trifecta + code execnpx owasp-mcp-scan --stdio "npx -y @modelcontextprotocol/server-everything"   # A: clean

Use it

CLI

bash
npx owasp-mcp-scan --stdio "<command>"                                  # local stdio servernpx owasp-mcp-scan --url https://host/mcp --header "Authorization: Bearer $TOKEN"npx owasp-mcp-scan --config ~/.cursor/mcp.json --format sarif --output mcp.sarif

As an MCP server, let your agent scan servers on demand ("scan this MCP server before I add it"). Add to any client; this mcpServers shape works in Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, and Gemini CLI:

json
{ "mcpServers": { "mcp-scan": { "command": "npx", "args": ["-y", "owasp-mcp-scan", "--serve"] } } }

OpenAI Codex (~/.codex/config.toml):

toml
[mcp_servers.mcp-scan]command = "npx"args = ["-y", "owasp-mcp-scan", "--serve"]

Exposes two tools: scan_mcp_server (audit a stdio/HTTP target) and list_checks.

Claude Code plugin

/plugin marketplace add CodingSelim/mcp-scan/plugin install mcp-scan@mcp-scan

Also on the official MCP registry as io.github.CodingSelim/mcp-scan. Publishing steps: PUBLISHING.md.

What it checks

Full OWASP MCP Top 10 (2025) coverage, 12 checks:

CheckOWASPCatches
secret-exposureMCP01AWS / OpenAI / Anthropic / GitHub / GitLab / Stripe / SendGrid / npm / HF / DB URIs / JWT / private keys in advertised text
transportMCP01Plaintext http:// to a non-loopback host
path-traversalMCP01file:///{path} templates and unconstrained path params
excessive-scopeMCP02Destructive tools (delete, drop, transfer) with no confirmation
tool-poisoningMCP03Instruction overrides, hidden exfiltration directives, zero-width / Unicode-tag smuggling
tool-shadowingMCP03 / MCP09Duplicate tool-name collisions and "call me first" precedence injection
supply-chainMCP04 / MCP09Unpinned/placeholder versions and homoglyph server names
command-injectionMCP05Unconstrained command / shell / code params, raw SQL, advertised execution
ssrfMCP05Arbitrary url / host params with no allowlist
tool-poisoning (dynamic)MCP06Injection in resource contents and server instructions
authnMCP07HTTP servers that complete an unauthenticated handshake
telemetryMCP08High-impact tools with no audit trail (advisory, unscored)
toxic-flowMCP10Lethal trifecta: one server that reads private data, ingests untrusted content, and can exfiltrate

toxic-flow is the standout, it reasons across the whole toolset, catching the GitHub-MCP / email-agent injection shape that per-tool checks miss.

Output & CI

console (default) · json · sarif (GitHub Code Scanning). Exit code is non-zero at/above --fail-on (default high), so it gates CI:

yaml
- run: npx owasp-mcp-scan --url ${{ secrets.MCP_URL }} --format sarif --output mcp.sarif- uses: github/codeql-action/upload-sarif@v3  with: { sarif_file: mcp.sarif }

Limitations (read these)

  • Static analysis can't see runtime sandboxing, a server that safely confines paths still flags them. Verify against actual enforcement.
  • Auth and transport checks apply to HTTP targets only.
  • Heuristics favor recall, so triage findings in context. When a rule is tightened to kill a false positive, a test pins the intended behavior.
  • Scanning a stdio target spawns that command, so run it only on servers you trust.

Develop

bash
npm install && npm run build && npm test   # 48 tests, incl. live end-to-end fixture scans

Checks are pure and isolated (src/checks/), reusing detectors in src/detectors/. See CONTRIBUTING.md.

References

OWASP MCP Top 10 · MCP Security Cheat Sheet · Vulnerable MCP Project · MCPTox

MIT © CodingSelim

來源:README.md,提交 cdb4707

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.1最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Scan 整合