mcpField
S
Server Attestation

Server Attestation

本地服务
github.com安全01 周前更新

关于 Server Attestation

Server Attestation 是面向开发者的 Node.js 库及参考 MCP 服务,用于限制 MCP 服务可公开的工具和可启动的进程。它通过签名清单、进程启动校验和默认拒绝的参数检查实现防护。

主要功能

  1. 01Ed25519 清单签名与验证
  2. 02运行时进程启动证明
  3. 03默认拒绝的参数清理器
  4. 04首次使用信任密钥固定
  5. 05用于密钥和清单操作的 CLI

适用场景

  1. 01在启动时验证服务工具清单
  2. 02限制子进程命令及参数
  3. 03在后续校验中发现密钥变更

MCP 相关

参考 MCP 服务提供五种工具,用于清单验证、进程启动检查、模板生成、签名和密钥生成。该库可集成到 MCP 服务中,验证获准工具及进程启动。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"attestation": {
"command": "npx",
"args": [
"-y",
"mcp-attest-demo"
]
}
}
}
启动命令npx -y mcp-attest-demo

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-attest-demo0.2.0

工具

5

收录的工具列表 · 更新于 3 周前

参数类型必填说明
manifestPathstring是已签名 manifest JSON 文件的路径。
publicKeyPathstring是十六进制编码公钥的路径(说明性参数;若 manifest 自带 publicKey 字段,则忽略)。

详细介绍

StudioMeyer MCP Stack 的一部分 — 源自马略卡 🌴 · 如果你在使用,请给个 ⭐

mcp-server-attestation

npm version npm downloads License Last commit GitHub stars 为 Model Context Protocol 服务提供第二层供应链加固。采用 Ed25519 签名的工具清单、运行时启动证明,以及默认拒绝的参数清理器。

直接回应以下事件:

  • OX Security 市场投毒事件,2026 年 4 月 — 11 个 MCP 注册表中有 9 个接受了恶意服务。Anthropic 公布的立场是:“预期行为”。
  • CVE-2025-69256 — Serverless Framework MCP 通过 child_process.exec() 命令注入导致远程代码执行。
  • CVE-2025-61591 — Cursor MCP 因通过 OAuth 安装的恶意服务劫持进程启动而导致远程代码执行。

此软件包提供了 Anthropic 选择不提供的功能:以密码学方式验证服务获准公开哪些工具,以及获准执行哪些启动调用。它是一个即插即用的依赖项,不会替换运行时。

我们的一点说明

过去两年,我们一直在为自己构建工具和系统。这个仓库规模小、星标少,并不是因为它刚刚诞生,而是因为我们直到最近才决定分享自己的成果。这不是一个全新的实验,而是一段漫长历程最近的一次提交。

我们热爱构建和分享,不喜欢社交媒体策略、增长技巧,也不热衷于追逐星标和关注者。因此,这个仓库规模不大。代码是真实的,也确实在使用,问题也会得到答复。欢迎自行判断。

如果它对你有帮助,分享、测试和反馈都能帮到我们。如果你觉得有改进空间,提交问题会更有用。如果你用它构建了什么,请发邮件告诉我们:[email protected]。这真的会让我们开心一整天。

来自马略卡岛帕尔马的一间小型工作室。

软件包(npm 工作区)

软件包用途
mcp-server-attestation(packages/lib)库:Ed25519 签名与验证、清单架构、参数清理器、启动证明器、TOFU 信任存储。
mcp-attest-cli(packages/cli)CLI mcp-attest:keygen、sign、verify、inspect、fingerprint、check-pin。
mcp-attest-demo(packages/demo-server)参考 MCP 服务(stdio,规范版本 2025-06-18),提供 5 个用于演示该库的工具。

安装

npm install mcp-server-attestation
# CLI:
npm install -g mcp-attest-cli
# Reference MCP server:
npx mcp-attest-demo

需要 Node 20+。没有外部加密依赖——使用 node:crypto 的 Ed25519 原语。

五行服务快速入门

import { verifyManifestStrict, attestSpawnStrict, type SignedManifest } from "mcp-server-attestation";
import signed from "./signed/manifest.json" assert { type: "json" };

// 1. At startup: prove the manifest you ship is the manifest you signed.
verifyManifestStrict(signed);

// 2. Before every child_process.spawn:
attestSpawnStrict(signed as SignedManifest, { command, args });

这就是全部集成内容。两个函数调用,无需 SaaS,也无需守护进程。

如果你更希望在每次启动时重新验证签名(纵深防御,防止未经验证或被替换的清单进入验证关卡),请改用这个单一的故障安全调用——它会先验证,再进行证明:

import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });

工具(参考服务 mcp-attest-demo)

#名称readOnlyHintdestructiveHint
1attest_verify_manifesttruefalse
2attest_inspect_spawntruefalse
3attest_generate_manifest_templatetruefalse
4attest_sign_manifestfalsefalse
5attest_keygenfalsefalse

注解如实反映了行为:attest_sign_manifest 和 attest_keygen 会在磁盘上写入文件,因此不是只读操作;但它们不会销毁现有数据,所以 destructiveHint 保持为 false。每个工具的能力表请参阅 docs/THREAT-MODEL.md。

CLI

mcp-attest keygen --out-dir ./keys --name prod
mcp-attest sign --manifest manifest.json --private-key keys/prod.key --out signed.json
mcp-attest verify --signed signed.json --pin                  # TOFU pin
mcp-attest verify --signed signed.json --sigstore             # opt-in Rekor cross-ref
mcp-attest inspect --signed signed.json --command /usr/bin/echo --arg "hello"
mcp-attest fingerprint --public-key keys/prod.pub
mcp-attest check-pin --server my-server --signed signed.json

verify 在签名无效时以代码 2 退出,在固定密钥不匹配时以代码 3 退出。

MCP 规范兼容性

规范版本状态
2024-11-05可在清单中解析,但不是参考服务的目标版本
2025-03-26可在清单中解析,但不是参考服务的目标版本
2025-06-18完全支持

该库与传输方式无关。参考服务仅支持 stdio。

安全模型

  • 首次使用时信任是默认设置。首次验证服务时,其公钥会固定到 ~/.mcp-attest/trust.json(覆盖项:MCP_ATTEST_TRUST_FILE)。后续验证会拒绝同一服务名称对应的任何新密钥,并返回 TRUST_PIN_MISMATCH。这能防范类似 Cursor 的恶意更新攻击。
  • 不附带可信密钥列表。 此软件包不充当把关者。若要获得更强保障,可启用 --sigstore,将公钥指纹与 Sigstore Rekor 透明日志交叉核对。
  • 默认拒绝的参数清理器。 shellSafeString 会拦截所有 ASCII shell 元字符、NUL、CR、LF、VT、FF、NEL、零宽字符、BOM、RTL/LTR 覆盖字符、Trojan-Source 隔离符以及全角拉丁字符混淆符。只有使用显式的 regex / enum / prefix / literal 规则类型,才会采用允许列表行为。
  • 可抵御 ReDoS 的 regex 规则。 regex 规则的模式由作者签名,但参数值可由攻击者控制。清理器会静态检测容易导致回溯的模式(例如 (a+)+ 这类嵌套的无界量词),并拒绝运行它们,因此单个精心构造的参数无法卡住 spawn 热路径。regex 规则还设有 maxLength 输入长度上限(默认为 4096)。
  • 可防目录遍历的 prefix 规则。 prefix 规则默认拒绝 .. 路径组件(denyTraversal: true,包括 %2e%2e 编码形式),因此即使 /safe/../../etc/passwd 符合 prefix: "/safe/",也会被拦截。
  • 先验证,再证明。 attestSpawnVerified 会在一次故障安全调用中先检查清单签名,再证明 spawn;除非你已测量并确认 Ed25519 验证确实处于极热循环中,否则请使用它,而不是 attestSpawnStrict。
  • 规范化 JSON 是签名内容。重新序列化不会改变已签名的字节。

本软件包不提供以下功能(不在范围内):

  • 对服务进程进行沙箱隔离或容器化。
  • 加固 OAuth 流程(由单独的 mcp-oauth-shield 构建提供)。
  • 控制网络出口。
  • 自动修补现有服务。

测试

npm install
npm run typecheck
npm test

测试语料库包含 CVE 重放测试样例(packages/lib/tests/fixtures/cve-2025-69256-payloads.json、cve-2025-61591-payloads.json)。构建会执行回归检查:所有载荷都必须被拦截。

分发

  • 通过 GitHub Actions OIDC 使用 --provenance 发布到 npm。
  • 已向 mcp.so 和 FastMCP Directory 提交参考服务。
  • 该库另行发布为 mcp-server-attestation。

关于 StudioMeyer

StudioMeyer 是一家位于马略卡岛帕尔马、服务全球客户的 AI 与设计工作室。我们为中小型企业打造定制网站和 AI 基础设施。生产技术栈基于 Claude Agent SDK、MCP 和 n8n,并使用 Sentry、Langfuse 和 LangGraph 进行可观测性管理,同时配备自研防护层。

许可证

MIT,版权所有 © 2026 Matthias Meyer(StudioMeyer)。详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。