LEGION Verify: MCP tool-list history

io.github.Legion33shadow由 GitHub 帳號 Legion33shadow 發布v1.3.0更新於 Oct 31, 2026

Check if an MCP server changed its tools: signed history, per-server coverage, offline proofs.

已驗證Streamable HTTP可網頁執行開發者工具安全與監控

概覽

AI 產生的概覽

唯讀的遠端 MCP 伺服器,透過 LEGION 簽章透明日誌與可離線驗證的證明,檢查某個 MCP 伺服器的工具清單是否變動。

可以做什麼
  • 取得最新簽章樹頭,並以固定金鑰環驗證其簽章
  • 依登錄表 ID 讀取某伺服器的簽章工具清單歷史,並附上最新記錄的證據包
  • 離線驗證證據包:金鑰環鏈、記錄簽章、簽章樹頭與 Merkle 包含證明,並可與你已核准的工具雜湊比對
  • 以 MCP 伺服器網址在公開登錄表中查詢最新簽章工具記錄、變更次數與證明,可選擇比對目前實際提供的工具清單
  • 依登錄表 ID 一次取得摘要:指紋歷史、含前後指紋的最後變更、覆蓋狀態與證明參照
適用情境
適合在你已核准的 MCP 伺服器可能悄悄改動工具描述或輸入結構時進行核對,或查看其工具清單何時、如何變化。在把某個伺服器接入代理流程前做工具漂移稽核時也很有用。
執行需求
遠端 streamable HTTP 端點 mcp.legion-api.com,無需驗證、API 金鑰或環境變數。README 另提供本機 stdio 方式,需要 Python 3 與 mcp 套件。需要能連線至 LEGION 的日誌與漂移服務端點;離線證據包驗證工具不會發出網路請求。
安裝前請注意
所有工具皆宣告為唯讀,不寫入、不購買、不需要金鑰。傳給 verify_mcp_server 的網址僅在登錄表中查詢,伺服器本身不會連線它;但使用 live=true 時,託管的漂移服務會向該伺服器送出 initialize 與 tools/list,前提是它是具有公開位址的登錄表項目。結果僅反映單一觀察者的日誌,只對 name、description 與 inputSchema 做指紋,變更要等下一次觀察後才會出現,需要驗證的伺服器不會被觀察。未快取的請求依用戶端 IP 限流。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 LEGION Verify: MCP tool-list history,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.Legion33shadow%2Flegion-verify/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "legion-verify-tool-list-history": {
      "type": "http",
      "url": "https://mcp.legion-api.com/mcp"
    }
  }
}

README

LEGION Verify — MCP server to detect MCP tool drift (5 read-only tools) · v1.3.0

Did an MCP server change its tools after you approved them? A model reads tool descriptions as instructions, so a silent change to a description or an inputSchema (tool drift, "rug pull") matters. LEGION Verify answers from LEGION's signed, append-only transparency log of MCP tool lists: what a server exposed, and when it changed. Every answer is checked against a keyring anchored on a pinned root key fingerprint (Ed25519, RFC 9162 Merkle proofs); evidence bundles can be re-checked offline.

To pin tool lists in a lockfile and fail CI on drift, see legion-lock.

Tools — all read-only (readOnlyHint: true, destructiveHint: false)

ToolWhat it doesNetwork
get_checkpointLatest signed tree head; signature checked against the keyringGET fixed routes of https://tlog.legion-api.com/tlog/v0
get_server_changesSigned tool-list history of one MCP server (registry id, limit 1–50), newest first, plus an evidence bundle for the latest recordGET fixed routes of https://tlog.legion-api.com/tlog/v0
verify_evidence_bundleVerifies a bundle OFFLINE: keyring chain from the pinned root, record signature, signed head, RFC 9162 inclusion proof; optional check against a tools hash you approved (MATCHES_APPROVED / UNAPPROVED_CHANGE)none
verify_mcp_serverPaste an MCP server URL: matched against the public MCP registry, then the latest signed tool-list record, change count (total / 30 days), RFC 9162 inclusion proof re-checked from the pinned root, and an evidence bundle. live=true adds the tool list served now, compared with the signed one (not signed)GET https://legion-api.com/drift/verify (default; LEGION_DRIFT_BASE). The live comparison runs only on the hosted endpoint, and only for servers listed in the registry
check_mcp_serverOne call for a registry id: signed tool-list fingerprint history, last change with fingerprints before/after and diff link, per-server coverage from the signed COVERAGE_V1 register (full_register is COMPLETE only if observed in every cycle, UNKNOWN if partial), proof URLs, and one command that re-checks everything offline (legion_check kit). Unknown id → UNKNOWN (absence from the log is not a verdict)GET fixed routes of https://tlog.legion-api.com/tlog/v0 and https://legion-api.com/tlog/v0/coverage

Nothing else: no write, no purchase, no private key, no API key needed. The only caller-supplied URL is the one given to verify_mcp_server: it is looked up in the registry; this server never connects to it. On the hosted endpoint, live=true lets LEGION's drift service send initialize + tools/list to that server, and only if it is a registry entry with a public address.

Connect

Claude Code (remote)

claude mcp add --transport http legion-verify https://mcp.legion-api.com/mcp

Claude Desktop (local, stdio) — claude_desktop_config.json:

{ "mcpServers": { "legion-verify": { "command": "python3", "args": ["/ABSOLUTE/PATH/server.py"] } } }

(requires pip install "mcp==2.1.1"; server.py and legion_tlog_verify.py in the same folder)

Any MCP client (remote): streamable HTTP at https://mcp.legion-api.com/mcp, no auth.

Try it

  1. "Call get_checkpoint and give tree_size, root_sha256 and signature_valid."
  2. "With get_server_changes, show the signed history of xyz.signomy/civitae (limit 3)."
  3. "Pass the evidence_bundle you got to verify_evidence_bundle and tell me whether the proof is valid."
  4. "Use verify_mcp_server on https://tandem.ac/mcp with live=true: did its tools change since the signed record?"

Same check in a browser, with an embeddable badge: https://legion-api.com/drift/check/

Verify the whole log yourself (no MCP, no pip)

PIN=a7c6a35b1c2c81d589a30c2ad628679bdea9da4139d49aa3c42cdde6e1c65036curl -fsSLO https://legion33shadow.github.io/legion-tlog-mirror/legion_verify_mirror.pypython3 -I -S legion_verify_mirror.py "$PIN"

Root key fingerprint — pin it out of band: a7c6a35b1c2c81d589a30c2ad628679bdea9da4139d49aa3c42cdde6e1c65036

Limits

The log is the signed record of one observer (LEGION); it does not show what a server serves to other clients. Only name, description and inputSchema are fingerprinted. A change appears only after the next LEGION observation and the next signed head. Bitcoin anchors are pending (no ots verify on a full node yet). No independent witness has cosigned yet. Servers that require auth are not observed.

Public server (v1.3.0): immutable proofs and per-head history are cached; each client (IP seen by Cloudflare) may trigger at most 20 uncached log requests per minute (CLIENT_RATE_LIMITED otherwise; cached answers still served).

License: MIT (see LICENSE).

來源:README.md,提交 935a516

工具

5

get_checkpoint

Latest signed tree head of the LEGION MCP transparency log. The signature is checked against the keyring, anchored on the pinned root key fingerprint. Read-only. Returns tree_size, root_sha256, timestamp, signer and signature_valid. For a trustless check, verify it yourself (see `how_to_verify_yourself`).

無需輸入參數。

get_server_changes

Signed tool-list history of one MCP server as observed by LEGION (registry id, e.g. "xyz.signomy/civitae"), newest first, at most `limit` (1-50) changes, plus an evidence bundle for the latest record (record + RFC 9162 inclusion proof + signed tree head + keyring) that `verify_evidence_bundle` checks offline. A change is not a fault; history = what LEGION observed, not what other clients see.

輸入參數limitserver_id必填

verify_evidence_bundle

Verify an evidence bundle OFFLINE (no network call): keyring chain from the pinned root fingerprint, record signature and integrity, signed tree head, RFC 9162 inclusion proof. If `approved_tools_sha256` is given, also reports whether the signed tool list still matches the version you approved (UNAPPROVED_CHANGE if not). Bundle = {record, proof, sth, keyring} as returned by get_server_changes (max 256 KB).

輸入參數bundle必填approved_tools_sha256

verify_mcp_server

Check an MCP server URL against LEGION's signed transparency log. Read-only. For each registry server at this URL: latest signed tool definition (leaf index, date, tools_sha256), number of tool changes (total and 30 days), date of the last change, RFC 9162 inclusion proof + signed tree head (re-verified here from the pinned root key), an evidence bundle for `verify_evidence_bundle`, and — if live=true — whether the tool list served NOW differs from the signed one (live check by LEGION: initialize + tools/list only, public addresses only, NOT signed). A change is not a fault; history = what LEGION observed, not what other clients see.

輸入參數url必填live

check_mcp_server

One-call summary for an MCP server registry id (e.g. "ai.alphaquantlabs/propertycheck"): tool-list fingerprint history observed by LEGION, last change, per-server coverage from the signed COVERAGE_V1 register (COMPLETE only if observed in every register cycle, UNKNOWN if partial), proof references and a command that verifies everything offline. Read-only. Unknown id -> state UNKNOWN (absence from the log is not a verdict). A change is not an attack; this log does not certify that a server is secure.

輸入參數server_id必填

版本歷史

1
  1. v1.3.0最新Oct 17, 2026

評分

已滿足適用檢查項的 100%

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

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分