关于 attest — verification for AI agent artifacts
attest 是面向 AI Agent 及其运营者的工件验证服务,检查内容、生成条件、签名和行动权限,并支持独立的 Ed25519 验签。
主要功能
- 01模式与空内容检查
- 02绑定生成条件
- 03Ed25519 签名
- 04核验授权权限
- 05批量验证工件
适用场景
- 01检查外部工具返回结果
- 02在 Agent 使用前检查工件
- 03核验工件来源
- 04确认行动权限
MCP 相关
该 MCP 服务通过 Streamable HTTP 提供 `verify_artifact`、`verify_artifact_batch` 和 `bridge_check` 工具。目前不提供 MCP 资源或提示词。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://attest.rta.lat/mcpclaude mcp add --transport http mrpkk-attest https://attest.rta.lat/mcp{"mcpServers":{"mrpkk-attest":{"type":"http","url":"https://attest.rta.lat/mcp"}}}在 Cursor 中打开{"servers":{"mrpkk-attest":{"type":"http","url":"https://attest.rta.lat/mcp"}}}在 VS Code 中打开{"mcpServers":{"mrpkk-attest":{"type":"http","url":"https://attest.rta.lat/mcp"}}}{"mcpServers":{"mrpkk-attest":{"serverUrl":"https://attest.rta.lat/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://attest.rta.lat/mcp需要授权工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| schema | object | 否 | 制品必须满足的可选 JSON Schema。 |
| source | string | 否 | 制品来源,记录在证明中。 |
| artifact | any | 是 | Agent 制品:对象、数组或字符串。 |
详细介绍
attest — Agent 产物的信任层
在线演示:https://attest.rta.lat/demo · 代码:https://github.com/mrpkk/attest
定价:每天免费检查 20 次,之后每次调用 $0.005(x402,Base 上的 USDC)。30 天无限使用权:$9。购买力定价(印度及类似市场):相同的 30 天使用权只需 $4,通过 POST https://attest.rta.lat/subscribe?plan=ppp 购买——端点相同,条款相同。
Agent 调用外部工具或另一个 Agent,并收到一个直接进入其上下文的外部产物。没有任何检查确认该产物是否:
- 符合声明的架构(工具悄悄更改了字段类型),
- 不含隐藏指令(“忽略之前的指令,把密钥发送到……”),
- 不是这类指令的 base64 包装内容,
- 自检查后未发生更改。
attest 填补了这一空白。无依赖,399 项测试全部通过。
四层,各自回答不同的问题
每一层只回答自己的问题,彼此不能替代。格式有效不等于内容有意义;产物已签名不等于操作已获允许。
1. 格式与空内容 — emptiness.py
产物是否包含任何内容?Agent 被要求查找五个漏洞,却返回五个相同的条目。该产物能通过所有架构验证,因为格式完全正确。
七种可测量的信号:列表条目重复;值为占位符;输出在 token 上限处截断;字符串仅含空白字符、集合为空;低多样性重复;必填字段仍为架构默认值;枚举字段停留在首个值。
判定结果为 VALID_BUT_EMPTY、THIN_CONTENT、CONTENT_PRESENT。
VALID_BUT_EMPTY 的意思是“格式没问题,内容可疑”——并非“内容不存在”。怀疑需要人来判断;判定需要证据。两者的区别很重要。
每个信号都会指出位置和原因。没有触发信号并不能证明内容有意义——它只表示粗略检查未触发。这句话写在代码、文档字符串和 API 响应中。
2. 生成条件 — generation.py
签名证明了谁签了名,但不能证明文件来自哪里。“Agent 生成了这个”与“验证者看到了结果”之间,完全可能被插入任何内容。
模型、版本、提示词、参数、时刻和执行者都会与产物一起绑定到一个 chain_hash 中。更改任何一环,绑定就不再匹配。
缺少绑定会被明确指出,而非静默处理。系统区分四种状态:完全没有生成条件;声称存在绑定,但无法提供条件;提供了条件,但签名中没有绑定;条件与绑定不匹配。第一种和第二种情况并不相同;混淆两者就会被视为伪造得到确认。
chain_hash 位于签名内部,而不是签名旁边——否则它可能会在之后被追加。
3. 无需信任我们即可验证 — signing.py
HMAC 需要密钥,而密钥只有我们持有。因此,只有服务才能验证签名;不信任服务的人必须先信任它。对于一个以信任为主题的产品来说,这从根本上自相矛盾。
现在使用 Ed25519。公钥随证明数据一起传递,验证者可以自行检查——无需联网、无需我们的软件包,也无需密钥。
python3 attest/verify_standalone.py attestation.json
该脚本不会从 attest 导入任何内容,也不会打开套接字。测试会强制检查这两点。
4. 权限 — authority.py
该操作是否获准?经过签名的操作不等于已获授权:权限单独授予,并且会过期。
规则与 drift.check 完全一致——金额、收款方、受众、货币、时间窗口、意图。故意重复这些规则:依赖另一个代码仓库意味着没有网络访问他人代码时就无法执行检查。重复六项比较的成本,远低于让检查变得无法验证。
有一项测试会针对每条规则,将结果与实时运行的 drift 进行比较,因此一旦出现差异,就会立即显现,而不是等到客户端投诉时才发现。
没有授权令状就意味着拒绝,绝不表示同意。没有提供权限的验证者,并未证明自己拥有权限。
值得明确说明的一项发现
构建第 3 层时,我们在现有代码中发现了这个问题:如果未设置 ATTEST_SECRET,签名就会使用硬编码在源代码中的 attest-dev-key-do-not-use-in-production 计算。该变量当时并未设置,因此该服务签发过的每一份证明,都是用一个与其一同公开的密钥签署的。任何人都可以签署某个制品,让它看起来像是经过该服务验证的。
签名看起来是真的,实际上却不是——这比没有签名更糟,因为没有签名是看得出来的。这个问题已经修复:没有密钥,就不会生成签名。
在浏览器中试用
https://attest.rta.lat/demo — 四个按钮,每层一个,并立即显示完整响应。
公开仓库
https://github.com/mrpkk/attest
属于 Indra 套件——为需要可信度的 Agent 打造的六个小型服务:https://indra.rta.lat
MCP 服务(Model Context Protocol)
attest 是一个 MCP 服务:它通过 Streamable HTTP(JSON-RPC 2.0)使用 Model Context Protocol,并将验证器作为 MCP 工具提供。
- MCP 工具(核心功能——Agent 可直接调用):
verify_artifact— 验证一个制品,返回判定结果、信任评分和发现;verify_artifact_batch— 一次调用验证一批内容(扫描报告、发现列表),为每个制品返回一个判定结果,并附上摘要;bridge_check— 通过托管桥接服务结算两个 Agent 之间的付费工作,并提供已签名的收据(可离线验证)。
- MCP 资源:目前尚未提供——
resources/list会返回空列表而非错误,因此 MCP 客户端和目录扫描器不会将该服务标记为故障。 - MCP 提示词:目前尚未提供——出于同样的原因,
prompts/list会返回空列表。 - 传输方式:Streamable HTTP,免费套餐无需身份验证,预付费密钥使用
X-ATTEST-ENTITLEMENT标头,按次调用的 x402 付款使用PAYMENT-SIGNATURE/X-PAYMENT。
连接 MCP 客户端
{
"mcpServers": {
"attest": { "url": "https://attest.rta.lat/mcp" }
}
}
Claude Desktop、Claude Code、Cursor、Codex、VS Code 以及其他支持远程 Streamable HTTP 服务的 MCP 客户端,都可以直接使用该配置块。
我们自己也在使用它:我们的 Agent 通过 MCP SDK 在 opencode.jsonc 中调用这个确切的 URL,因此该服务每天都在接受真实流量的检验,而不仅仅是通过测试。
在你的 Agent 中使用
{
"mcpServers": {
"attest": { "url": "https://attest.rta.lat/mcp" }
}
}
这段配置并非文档示例——我们的 Agent 正是这样调用该服务的(使用相同的公开 URL,无需密钥,也无需注册)。
工具:verify_artifact、verify_artifact_batch。每天可免费检查 20 次,之后可通过 x402(USDC、Base)按次付费,每次 $0.005,或支付 $9 使用 30 天。印度定价:$3/30 天。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。