关于 POPCORN MCP
POPCORN MCP 为跨 Agent 的任务与时间证据提供签名和验证工具,适用于核验任务版本、时间点及授权期限。它支持本地离线验证,并将免费本地工具与需明确批准的付费见证调用区分开。
主要功能
- 01获取签名时间参考
- 02对精确任务字节计算 SHA-256
- 03见证摘要并生成签名回执
- 04使用可信密钥验证回执
- 05验证可链接的历史回执
- 06付费调用需逐次批准
适用场景
- 01核验任务是否在期限内发生
- 02证明特定任务版本在某时存在
- 03离线检查其他 Agent 提供的回执
- 04检查带前序回执的证据链
MCP 相关
MCP 服务向客户端提供时间、哈希、见证、回执验证及目录工具。时间与见证工具默认干运行;付费调用需在该次调用中设置 approve_payment。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://767-2676.com/mcpclaude mcp add --transport http violetclaire-popcorn https://767-2676.com/mcp{"mcpServers":{"violetclaire-popcorn":{"type":"http","url":"https://767-2676.com/mcp"}}}在 Cursor 中打开{"servers":{"violetclaire-popcorn":{"type":"http","url":"https://767-2676.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"violetclaire-popcorn":{"type":"http","url":"https://767-2676.com/mcp"}}}{"mcpServers":{"violetclaire-popcorn":{"serverUrl":"https://767-2676.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6此工具无需参数。
详细介绍
Briarwood AI / POPCORN MCP 服务
如果你需要 RFC 3161、FreeTSA、OpenTimestamps、可信时间戳、存在性证明、授权到期、已签名的执行回执或独立验证,请从证明某项操作发生在授权到期之前开始。
来自 Briarwood AI 的只读时间与任务证据,可供不同 Agent 使用。POPCORN 在 https://767-2676.com 提供已签名的时间和摘要检查点。
先试用,无需钱包
保存 sample.mjs,阅读后使用 Node.js 20 或更高版本运行
node sample.mjs。此独立示例包含一个精确的八行计划,其中有 who、其 SHA-256 摘要以及一份真实的已签名回执。示例可离线运行,并会拒绝对 who 做出的单字节更改。
纯文本契约和完整数据包可保存在本地。 该回执是历史证据。要做出新的决策,请获取新的时间。
从此公开代码库运行当前源代码:
git clone https://github.com/violetclaire/popcorn-temporal-anchor.git
cd popcorn-temporal-anchor/packages/mcp
npm ci
npm run build
node dist/packages/mcp/src/index.js --sample
在 npm 发布 0.1.4 版本后,运行:
npx -y @violetclaire/[email protected] --sample
评估会使用维护中的验证器检查八行任务计划和两份历史上已结算的旧版回执。它会返回有效签名;对于任务时间窗口之后的检查点,返回 STOP;对于任务时间窗口内的检查点,返回 TIME_CHECK_PASSED;并拒绝每份回执中一处单字节更改。所有结果都会保留 authorization_granted: false。
示例无需账户、钱包或原始任务数据。npm 可能会下载软件包;验证本身完全离线运行。
在已连接的 MCP 客户端中,调用 popcorn_sample 并传入 {},即可获得相同结果。其公开源代码链接可让其他开发者重复检查。
捆绑的历史密钥仅用于复现示例。真实任务需要独立信任的签发方密钥;旧回执不是新的时钟读数。
此离线示例仅测试历史上的 TAIN 之前回执。通过该测试并不意味着已测试当前部署的 TAIN 2.0 服务,也不代表已具备集成条件。
用于真实任务
| 需求 | 工具 | 保留在本地的内容 |
|---|---|---|
| 用于截止时间或到期时间的新鲜已签名时间参考 | popcorn_time | 任务和决策 |
| 在指定时间对某个确切任务版本的证据 | popcorn_hash,然后使用 popcorn_witness | 原始任务字节;只有摘要、随机数和可选的前序摘要会发送给见证服务 |
| 检查从其他 Agent 收到的证据 | popcorn_verify | 回执、受信任的密钥、负载和验证过程 |
| 检查 TAIN 2.0 见证回执 | popcorn_verify_v2 或本地 CLI verify-v2 | 确切的预期字节和独立信任的密钥 |
这些用途适用于不同的 Agent 提供商和行业。通过现有的授权交接方式共享回执和相关的确切字节,然后让接收系统进行验证。离线验证无需在发起方 Agent 提供商处拥有账户。由每位参与者决定如何处理。
此源代码检出版本提供五个免费工具和两个 x402 工具。x402 工具默认以演练模式运行。只有在单次工具调用中包含 approve_payment: true,它们才可能进行支出。钱包密钥仅读取服务器进程环境中的 EVM_PRIVATE_KEY。它绝不会作为工具参数接受。
这是一个时钟和封印。它不会退款、授权或托管资金。
使用 npx 运行
安装并运行已发布的软件包:
npx -y @violetclaire/popcorn-mcp
需要 Node.js 20 或更高版本。
程序化核心
受支持的 @violetclaire/popcorn-mcp/core 导出项提供与 stdio 服务相同的本地哈希、离线验证和付费客户端函数:
import {
popcornHash,
popcornVerifyWitnessChain,
popcornWitness,
} from "@violetclaire/popcorn-mcp/core";
popcornVerifyWitnessChain 接受按时间顺序排列的收据,第一张收据的 previous_attestation_digest 为 null。它会验证每张收据及其签名一次,根据前一张收据的确切签名负载字节检查每条链路,并返回已验证条目及头部摘要。此功能免费、在本地运行,且不会发送网络请求。
工具
popcorn_sample
在本地运行两个公开收据示例及其篡改控制。这是对历史证据的可复现评估,不会发送网络请求或付款。输入:{}。
这些历史收据不是 TAIN 2.0 一致性测试。
popcorn_verify_v2
验证 POPCORN-WITNESS/2.0 签名信封、必需的 TAIN 字段、确切的预期负载摘要和 nonce,以及签名时间区间。此本地 MCP 工具和 popcorn-mcp verify-v2 <vector.json> 都会调用同一个验证器。verify/test-vectors/interface-parity-v2/ 下的固定正向和负向测试向量会通过这两个接口运行,并纳入 npm run check;任何结果或原因不一致都会导致检查失败。
提供完整响应、以规范无填充 base64url 格式表示的预期 SHA-256 负载摘要、预期 nonce,以及从收据以外的渠道独立获取的颁发者密钥。本地 CLI 和 stdio MCP 也接受确切负载字节作为 expected_payload_base64url,而非摘要;远程 HTTP MCP 只接受摘要,包括前序收据的摘要,因此私有负载字节无需离开调用方。对于链式收据,请提供包含其自身响应、JWKS 和验证输入的 previous_receipt,最多八个链接。仅凭调用方提供的密钥无法确立颁发者身份;此验证器不会证明链上结算情况,也不会授予权限。
popcorn_catalog
获取实时服务目录、已发布的 JWKS 和公开架构。免费,且不会发送付款。
输入:
{}
popcorn_hash
在本地对确切字节进行哈希,并返回 SHA-256 摘要及字节长度。免费、在本地运行,且不会发送网络请求。
请提供且仅提供一种输入形式:
{ "payload_text": "exact UTF-8 text" }
{ "payload_base64url": "ZXhhY3QgYnl0ZXM" }
popcorn_verify
根据调用方提供的密钥和预期值,在本地验证 POPCORN 时间或见证收据。免费、在本地运行,且不会发送付款。
对于见证收据:
{
"receipt_type": "witness",
"response": { "witness_receipt": {}, "witness_attestation": {}, "payment_status": "settled" },
"jwks": { "keys": [] },
"verification": {
"expected_nonce": "<43-character-base64url>",
"expected_payload_base64url": "<exact-payload-bytes>",
"expected_node_id": "767-2676.com",
"max_clock_accuracy_radius_ms": 10000
}
}
请从 expected_payload_text、expected_payload_base64url 或 expected_payload_digest 中选择一项提供。
当 previous_attestation_digest 不为 null 时,请在 verification 下递归添加:
{
"previous_receipt": {
"response": { "witness_receipt": {}, "witness_attestation": {}, "payment_status": "settled" },
"jwks": { "keys": [] },
"verification": {
"expected_nonce": "<predecessor-nonce>",
"expected_payload_digest": "<predecessor-payload-digest>"
}
}
}
验证器会先验证前序收据,然后对 base64url 解码前序紧凑 JWS 负载段后得到的确切字节进行哈希,并将该摘要与 previous_attestation_digest 比较。
对于时间收据,verification.observation 包含现有离线验证器所需的单调计时器值。可选的 verification.policy 可以包含 execution_window_utc。
popcorn_time
请求 GET /v1/time。默认调用是免费的试运行:
{
"freshness_ms": 30000,
"approve_payment": false
}
它会返回 HTTP 402 条款以及将要付费的确切请求。要授权一次付款,调用方必须在该次特定调用中将 approve_payment 设为 true。
popcorn_witness
请求 POST /v2/receipt。现有集成仍可使用 POST /v1/receipt。默认调用是免费的试运行:
{
"digest": "<43-character-sha256-base64url>",
"nonce": "<43-character-random-base64url>",
"previous_attestation_digest": null,
"approve_payment": false
}
可选的前序摘要是对前序紧凑 JWS 解码后的确切签名负载字节计算的 SHA-256 摘要,不是对完整紧凑 JWS 字符串计算的摘要。
两个付费工具都会将付款锁定为:在 Base 上支付恰好 $0.001 USDC、使用已发布的 USDC 合约和 POPCORN 已发布的 payTo。如果挑战内容发生变化,操作会安全失败。成功的付费结果包含结算交易哈希和 server_processing_duration_ms。
钱包环境
付费调用需要:
EVM_PRIVATE_KEY=0x<dedicated-32-byte-Base-payer-key>
请使用余额较少的专用付款账户。请勿提交此值。免费工具和所有试运行均无需此值。
Claude Desktop
将此服务添加到 Claude Desktop 配置中的 mcpServers 对象:
{
"mcpServers": {
"popcorn": {
"command": "npx",
"args": ["-y", "@violetclaire/popcorn-mcp"]
}
}
}
该配置支持所有免费工具和试运行。如需进行付费调用,请从包含 EVM_PRIVATE_KEY 的环境启动 Claude Desktop,或将 env 对象添加到其私有本地配置中。切勿将密钥粘贴到工具调用或聊天中。
Claude Code
claude mcp add --transport stdio popcorn -- npx -y @violetclaire/popcorn-mcp
仅在需要付费调用时,才在启动 Claude Code 的环境中设置 EVM_PRIVATE_KEY。每次付费调用仍需设置 approve_payment: true。
本地开发
在 packages/mcp 目录中:
npm install
npm run check
npm start
软件包构建会将仓库现有的 TypeScript 验证器包含在发布文件中。运行时依赖仍是常规 npm 依赖。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。