Mcp Supply Audit

io.github.kimmawla由 GitHub 帳號 kimmawla 發布v0.1.0更新於 Nov 5, 2026

Audits MCP servers as software artifacts: registry entries, packages, configs, tool definitions.

發布方自己的服務:audit.domains - Domain Valuation

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

概覽

AI 產生的概覽

把 MCP 伺服器當成供應鏈產物來稽核:登錄檔項目、PyPI/npm 套件、用戶端設定與工具定義,全為唯讀靜態檢查。

可以做什麼
  • 以登錄檔名稱或套件名稱加生態系,一次併行執行適用檢查並回傳合併報告
  • 檢查登錄檔項目的儲存庫一致性、擁有者比對、套件與版本是否存在、遠端 URL
  • 檢查 PyPI 或 npm 套件版本的公告、撤回或棄用狀態、安裝腳本、來源證明與發佈時間
  • 判斷名稱是否與已知熱門套件或登錄檔名稱相近
  • 掃描貼上的 MCP 用戶端設定,找出未鎖定版本的執行器、明文 http 遠端位址、硬編碼密鑰、shell 包裝與過寬路徑
  • 掃描 tools/list 快照,找出隱藏 Unicode、類指令措辭、外洩措辭與編碼資料塊
適用情境
適合在決定是否採用某個 MCP 伺服器、套件或用戶端設定時使用,也適合審查伺服器工具描述中的提示注入跡象。適合想要可重現、依規則檢查結果而非結論的審查者。
執行需求
以 Python 套件(mcp-supply-audit)形式透過 stdio 在本機執行,通常用 uvx 啟動,或從原始碼取出後用 uv 執行。未宣告任何驗證、API 金鑰或環境變數。檢查需要連線 registry.modelcontextprotocol.io、pypi.org、registry.npmjs.org 與 api.osv.dev。
安裝前請注意
處於預發佈階段且尚未發佈,目前只能從原始碼取出執行。報告只是跡象而非結論:沒有發現不等於安全,靜態檢查也看不到執行時行為。失敗或逾時的檢查會列為略過,需閱讀略過清單。貼上的設定與工具快照可能含密鑰,這些內容會傳送到上述四個外部服務。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

mcp-supply-audit

Audits MCP servers as software artifacts: registry entries, packages, configs, tool definitions.

An MCP server. Static checks only. It never runs the code it inspects.

Status: pre-release, in development. Not yet published. Nothing here is a security guarantee.

Why this exists

Most MCP security scanners focus on tool descriptions. This project looks at the server as a supply-chain artifact: does the registry entry match its package and repo, is the name close to a popular one, what do the package version's own metadata and advisories say, and what does the config you are about to copy actually do.

What works today

Six tools, served over stdio by a FastMCP server (tool surface). All are read-only and take names or pasted text, never a path.

  • audit_server: runs the checks below that apply to one server (a registry name, or a package name plus pypi/npm) concurrently under a 30 s deadline, and returns one merged report. A check that fails or times out is listed as skipped; the rest of the report still returns.
  • audit_registry_entry: an MCP Registry entry's repository consistency with its packages, owner match, package and version existence, ownership markers, status, and remote URLs (as text).
  • audit_package: one PyPI or npm package version's OSV.dev advisories, yanked or deprecated state, install scripts (npm only), provenance, publish recency (PyPI only) and declared repository.
  • check_typosquat: whether a name is close to one in a dated reference list (curated PyPI and npm names; for registry names, also names crawled from the MCP Registry).
  • scan_mcp_config: an MCP client config's servers, for unpinned runners, plain-http remotes, hardcoded secrets, shell wrappers, broad paths, non-registry sources and risky env.
  • scan_tool_definitions: checks a tools/list snapshot for hidden Unicode, instruction-like phrasing, cross-tool references, exfiltration phrasing, encoded blobs, and other indicators.

Outbound requests go only to registry.modelcontextprotocol.io, pypi.org, registry.npmjs.org and api.osv.dev.

Quick start

Not on PyPI yet: these commands work once the package is published. Until then, run it from a source checkout.

For Claude Code, with uv:

bash
claude mcp add mcp-supply-audit -- uvx mcp-supply-audit

Pinned to one version (uvx's package@version form):

bash
claude mcp add mcp-supply-audit -- uvx [email protected]

scan_mcp_config flags the first form in the configs it scans (CF001, unpinned package runner).

From a source checkout

Run it from a checkout of this repository with uv:

bash
cd mcp-supply-audituv sync

Then point an MCP client at the mcp-supply-audit console script in that checkout. For Claude Code:

bash
claude mcp add mcp-supply-audit -- uv --directory /path/to/mcp-supply-audit run mcp-supply-audit

For clients configured with JSON (e.g. Claude Desktop's mcpServers):

json
{  "mcpServers": {    "mcp-supply-audit": {      "command": "uv",      "args": ["--directory", "/path/to/mcp-supply-audit", "run", "mcp-supply-audit"]    }  }}

Then ask, for example, "Is the MCP server <namespace>/<name> safe to install?" and the client can call audit_server. Read the report's skipped checks: a report with no findings is not proof of safety.

Design principles

  • Never executes a scan target. Static analysis and metadata only. No tool accepts a filesystem path.
  • Hostile input by default. Text from a target is sanitized, capped, and returned only as quoted evidence under untrusted_text. Hidden characters are shown as visible \uXXXX escapes.
  • Deterministic rules, no LLM in detection. Results are reproducible and unit-tested.
  • Findings are indicators, not verdicts. Every report lists which checks ran and which were skipped, and states that no findings is not proof of safety.
  • Mapped to the OWASP MCP Top 10 (beta, v0.1), by ID.

Limits

Static checks cannot see runtime behavior. Audit and telemetry gaps, shadow servers, and context over-sharing are outside what this tool can detect.

Per-check limits: registry checks, package checks, typosquat checks, config checks.

Evaluation

No benchmark has been run yet.

Development

bash
uv syncuv run pytest -quv run ruff checkuv run ruff format --check

Security

To report a vulnerability in this project, see SECURITY.md.

License

MIT

來源:README.md,提交 47f5543

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:軟體包安裝失敗。

版本歷史

1
  1. v0.1.0最新Nov 5, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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

其他 Audit 整合