MCP服务器能力表面检测工具

一款用于检查、指纹识别和比较MCP服务器声明能力表面的工具,适用于接口兼容性检查和能力变更审查。

  • by mcp-surfaceprint
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 jordanstarrk/mcp-preflight

使用说明

mcp表面印刷

检查、指纹识别和区分MCP服务器声明的功能表面。

MCP服务器可以在现有工具名称下获得工具、参数、资源、提示或新操作。 mcp-surfaceprint 将客户端可见表面捕获为确定性快照,在检查完成时计算稳定的摘要,并显示随时间变化的结构差异。

将其用作:

  • MCP服务器维护人员的接口兼容性检查
  • 为使用第三方MCP服务器的团队提供能力变更审查门

如果你想要更深入的框架和实验,请参阅 你无法证明MCP服务器没有改变.

为什么

在安装MCP服务器之前,您需要对其进行检查。稍后,依赖性升级会在现有工具名称下添加一个破坏性操作。软件包版本发生了变化,但没有任何东西能为您提供您之前审查过的声明能力表面的持久、结构化记录。

mcp-surfaceprint 将该声明转换为可以提交、比较和审查的版本化工件。

快速启动(快照+检查)

pipx install mcp-surfaceprint

# Commit a baseline snapshot (one-time)
mcp-surfaceprint --save mcp-surface.json "uv run server.py"
git add mcp-surface.json

# Later, locally or in CI: check the live server against the baseline
mcp-surfaceprint check mcp-surface.json "uv run server.py"

改变的表面不会自动变得不安全; check 将其转化为明确的审查事件,而不是让它被忽视。

安全: 此命令在本地启动服务器。MCP发现不会调用其声明的工具,但服务器在处理任何请求时可以执行任意代码。使用 --isolate-home 防止它使用你的正常 HOME 以及XDG目录;这不是沙盒。

示例更改

Surface changed.

Tools:
  ~ manage_items
      inputSchema.properties.action.enum:
        + delete

Previous: sha256:...
Current:  sha256:...

结构化输出:

mcp-surfaceprint check --json mcp-surface.json "uv run server.py" > check.json

它捕获和比较的内容

  • 工具、描述和完整的输入模式
  • 架构字段、必需参数和枚举值,包括未更改的工具名称下的更改
  • 资源和资源模板
  • 提示和提示论点
  • 对于在一个工具后面复用操作的服务器,可选的每个工具清单操作(请参阅 docs/server-manifest.md)

集成

快照、表面摘要和结构化 check --json 输出可以被注册表、治理系统、代理运行时和安全网关使用。这些系统可以将批准锚定在特定的观察表面上,并在该表面发生变化时触发重新审查。

mcp-surfaceprint 提供检验工件;消费系统决定是允许、阻止、沙盒还是要求批准。

常见工作流程

# Inspect (human-readable)
mcp-surfaceprint "uv run server.py"
mcp-surfaceprint "npx my-mcp-server"
mcp-surfaceprint "python3 /path/to/server.py"

# Save a snapshot (JSON)
mcp-surfaceprint --save snapshot.json "uv run server.py"

# Check against a baseline snapshot
mcp-surfaceprint check mcp-surface.json "uv run server.py"

# Diff two saved snapshots
mcp-surfaceprint diff before.json after.json

# JSON output
mcp-surfaceprint --json "uv run server.py"

CI工作流程

check 将声明的表面更改转化为显式的审查步骤,具有稳定的退出代码和可选的结构化JSON(--json).

  1. 提交基线快照(一次性)。
  2. 跑 mcp-surfaceprint check ... 在CI。
  3. 如果表面发生了变化,请查看PR中的差异,并有意更新基线快照。

退出代码:

  • 0--未更改:检查已完成,表面消化物匹配
  • 1--已更改:检查已完成,表面消化不同
  • 2--检查失败:超时、需要身份验证、启动错误等。
  • 3--未完成检查:飞行前无法建立可比的表面消化
  • 4--无效基线:缺少/部分基线,快照版本不受支持,JSON无效

机器可读输出:

mcp-surfaceprint check --json mcp-surface.json "uv run server.py" > check.json
echo "exit_code=$?"

快照和身份

快照将观测元数据与声明的曲面分开。仅对归一化曲面进行哈希处理。

只有当每个支持的身份承载发现部分都成功完成时,才会发出摘要。不完整的检查不会产生摘要,而不是声称具有可比的身份。

看 快照格式和规范化.

交互式检查

交互式检查输出对于首次探索、调试和手动审查非常有用。

Example interactive inspection output
my-server (MCP 2025-03-26)

  Caution: the server process runs locally without sandboxing.
  Use --isolate-home to prevent access to your real HOME directory.

  MCP Tools (client-visible):
    🟢 list_items     "List all items in the database"
    🟢 get_item       "Get a single item by ID"
    🟡 create_item    "Create a new item"
    🟡 update_item    "Update an existing item"
    🔴 delete_item    "Permanently delete an item"

  Resources:
    📄 my-server://items
    📄 my-server://items/{id}

  Additional declared operations (from server manifest, 12 across 3 tools):
    Not represented as separate entries in tools/list.
    These are server-declared actions multiplexed behind the tools above.
      ↳ items (8): list, get, create, update, delete, search, export, archive
      ↳ reports (3): daily, weekly, monthly
      ↳ auth_login (single action)

  Prompts:
    💬 analyze_items (project_name)
Auth-gated servers / custom env

一些MCP服务器仅在身份验证后显示工具/资源。 mcp-surfaceprint 不运行登录流,因此在提供凭据之前,它可能无法枚举部分或全部声明的表面。

# Pass a token via env
export MCP_SERVER_TOKEN=...
mcp-surfaceprint "npx -y my-mcp-server"

# Point HOME (and XDG_* dirs) somewhere else (useful for servers that read ~/.config, ~/.local, etc.)
mcp-surfaceprint --home /tmp/mcp-surfaceprint-home "npx -y my-mcp-server"

# Isolate HOME entirely to reduce side effects/pollution
mcp-surfaceprint --isolate-home "npx -y my-mcp-server"
Optional heuristic annotations

交互式检查可以根据工具名称和描述添加启发式信号,包括读/写/破坏性注释。这些只是提示:它们没有被强制执行,也没有参与表面消化。

通过以下方式禁用它们:

mcp-surfaceprint --no-signals "uv run server.py"

非目标

mcp-surfaceprint 不提供沙盒、策略执行或运行时分析。它描述了服务器声明的接口;它并不能证明声明是真实的、详尽的或安全的。

文档

项目