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 服务器 URL 在公共注册表中查询最新签名工具记录、变更次数与证明,可选比对当前实际提供的工具列表
  • 按注册表 ID 一次获取摘要:指纹历史、含前后指纹的最后变更、覆盖状态与证明引用
适用场景
适合在你已批准的 MCP 服务器可能悄悄改动工具描述或输入结构时做核对,或查看其工具列表何时、如何变化。在把某个服务器接入智能体流程前做工具漂移审计时也很有用。
运行要求
远程 streamable HTTP 端点 mcp.legion-api.com,无需认证、API 密钥或环境变量。README 另提供本地 stdio 方式,需要 Python 3 和 mcp 包。需要能访问 LEGION 的日志与漂移服务端点;离线证据包验证工具不发起网络请求。
安装前请注意
所有工具均声明为只读,不写入、不购买、不需要密钥。传给 verify_mcp_server 的 URL 仅在注册表中查询,服务器本身不会连接它;但使用 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 分