关于 SPR (Sealed Payment Record)
SPR 是本地支付记录系统,用公司的密钥封存 AI Agent 的支付意图和结算详情。适用于需要独立验证支付凭证的 Agent 运营者、财务团队和审计人员。
主要功能
- 01封存支付意图和结算记录
- 02按声明条款检查支付
- 03导出争议证据
- 04使用公钥验证封存记录
- 05本地账簿和 x402 支持
适用场景
- 01记录 Agent 的支付用途和限额
- 02检查收款方、金额及重复支付
- 03准备拒付争议证据
- 04验证导出的支付账簿
MCP 相关
本地 SPR MCP 服务提供工具,用于记录支付意图、检查支付是否符合意图,以及记录结算。记录会封存在本地账簿中。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @luca-network/spr-mcpSPR_AGENT_IDThe agent's ID, such as agt_researchSPR_ENTITYThe company the agent pays forSPR_DIRThe book's folder (default ./spr-books); it holds the company's private keySPR_TIME_ZONEThe company's time zone for accounting dates (default UTC)SPR_BINDINGon, to return the nonce to sign with each x402 intent本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| rail | string | 否 | |
| product | string | 否 | 可选:购买内容,例如 API 套餐、数据集或 SKU |
| purpose | string | 是 | 付款原因,用一句话说明。审计人员会阅读此内容。 |
| currency | string | 否 | |
| expires_in | string | 否 | ISO 8601 时长(PT1H、P3D) |
| counterparty | string | 否 | |
| max_amount_minor | integer | 否 | 您可以支付的最高金额 |
| expected_amount_minor | integer | 否 |
详细介绍
SPR:密封支付记录
你的 AI Agent 会为数据、计算资源和服务付费,而财务团队和审计员却看不到每笔付款的用途。SPR 会在你的 Agent 付款前后记录每笔付款,并在你自己的机器上用公司的密钥密封记录。任何人都可以检查密封记录。无需信任任何服务,包括 Luca 的服务。
npx -y @luca-network/spr-mcp
免费开源:Apache-2.0,并附带免版税专利承诺(PATENTS.md)。
在你的 AI 工具中使用
以下每种配置都会在你的机器上运行同一个 MCP 服务。设置 SPR_AGENT_ID(你的 Agent)和 SPR_ENTITY(Agent 代表其付款的公司);记录会保存到 SPR_DIR。
Claude Desktop:添加到 claude_desktop_config.json:
{ "mcpServers": { "spr": { "command": "npx", "args": ["-y", "@luca-network/spr-mcp"],
"env": { "SPR_AGENT_ID": "agt_research", "SPR_ENTITY": "Example Co", "SPR_DIR": "/Users/you/spr-books" } } } }
Cursor:在 .cursor/mcp.json 中添加相同的代码块。
Claude Code:
claude mcp add spr -e SPR_AGENT_ID=agt_research -e SPR_ENTITY="Example Co" -- npx -y @luca-network/spr-mcp
OpenAI Agents SDK 和 LangChain(JavaScript):
import { SprBook, toOpenAIAgentsTools, toLangChainTools } from "@luca-network/spr-sdk";
const book = new SprBook({ dir: "./books", agentId: "agt_research", entity: "Example Co" });
const tools = toOpenAIAgentsTools(book, tool); // tool from "@openai/agents"; or toLangChainTools(book, tool)
CrewAI、Microsoft Agent Framework、Google ADK 和 Claude Agent SDK(Python):每种工具只需几行代码即可连接到 MCP 服务。请参阅 examples/。
任何其他 MCP 客户端:使用上述两个设置,通过 stdio 运行 npx -y @luca-network/spr-mcp。
Agent 随后会在付款前调用 record_intent,调用 check_payment 检查付款是否在其声明范围内、是否支付给指定的收款方,以及是否尚未支付,并在付款后调用 record_settlement。每条记录都会密封在账本文件夹中。
商户的账本也可以用同样的方式记录收到的付款:保存买家自己的密封意图、买家的身份验证方式,以及订单和支付处理方的引用信息,并导出单笔付款的证据以回应拒付(export_dispute_pack)。
记录会显示:
- Agent 在付款前声明的内容:付款用途、可支出的最高金额,以及权限的到期时间;
- 实际支付的金额、所用支付渠道、收款方和付款时间;
- 付款是否在声明范围内;
- 对于 x402 付款,链本身是否记录了该笔付款依据哪项声明执行。付款方会将密封意图的指纹签名为付款 nonce。
本仓库包含:
| 路径 | 内容 |
|---|---|
SPEC.md | 格式,草案 1 |
packages/spr | @luca-network/spr,JavaScript 和 TypeScript 的参考库,无依赖项,另含测试向量和 spr-verify |
packages/spr-sdk | @luca-network/spr-sdk:在本地密封 Agent 的付款,提供用于 x402 的 withLuca(fetch),以及适用于 OpenAI Agents SDK 和 LangChain 的工具 |
packages/spr-mcp | @luca-network/spr-mcp:通过 MCP 服务提供相同的调用,适用于 Claude Desktop、Cursor 或你自己的 Agent(npx @luca-network/spr-mcp) |
python | Python 版 spr-sdk:使用相同的格式和账本 |
一行代码密封 x402 付款
import { SprBook } from "@luca-network/spr-sdk";
import { withLuca } from "@luca-network/spr-sdk/x402";
const book = new SprBook({ dir: "./books", agentId: "agt_research", entity: "Example Co" });
const pay = withLuca(book, { signer: account });
const res = await pay("https://data.example/prices", {
luca: { purpose: "Market data for the pricing model", max_amount_minor: 20000, currency: "USDC" },
});
res.luca.record; // sealed, matched to its intent, bound on chain
不依赖 Luca 检查任何内容
npx spr-verify ./books-export --key company.pem # a package, and whose it is
python -m spr ./books-export --key company.pem
npx spr-verify --vectors # the library against the test vectors
python -m spr --vectors # the Python SDK against the same vectors
company.pem 是公司的公钥,需从公司获取,切勿从软件包获取(book.publicKey() 可提供该公钥)。如果不指定 --key,检查工具只会显示软件包与其携带的密钥是否一致,并会明确说明这一点。
安全问题:请参阅 SECURITY.md。
任何语言的实现,只要对 packages/spr/vectors/vectors.json 给出相同的结果,即符合规范。
本地 SPR 与托管版 Luca
这里的程序包运行在你自己的机器上,不会调用 Luca。Luca 的托管服务是另一款产品,你可以将账本发送给它。
| 本地 SPR(这些程序包) | 托管版 Luca | |
|---|---|---|
| 运行位置 | 你的机器、你的文件夹、你的密钥 | Luca 的服务 |
| 记录内容 | Agent 报告的付款前意图和付款后记录 | 相同内容,外加支付通道自身报告的付款记录 |
| 检查的限制 | 声明的意图:其上限、到期时间、是否已撤回,以及其指定的收款方;同一张发票是否支付了两次。也可以检查账本自带的 mandate.json(限制、收款方、重复付款的时间窗口)。该文件由保管文件夹的人编写,因此会标记为 authority: "self-declared" | 财务团队在 Luca 中批准的授权 |
| 支付通道的确认 | 无:记录的内容就是 Agent 报告的内容 | 从支付通道读取的付款记录,并标记出任何差异 |
| 会计处理 | 无 | 分类到你的账目中(US GAAP、IFRS、税务),将日记账分录发布到你的 ERP,并完成当月结账 |
| 证据 | 任何人都可以用 spr-verify 或 python -m spr 检查的封印 | 审计师可以检查的证据,以及当月的审计资料包 |
| 费用 | 免费,Apache-2.0 | Luca 账户 |
财务部门注册密钥后,只需一次调用即可将账本迁移过去:book.sendToLuca()。Luca 会在存储前检查每个封印。
将账本发送给 Luca(可选)
财务部门只需向 Luca 注册一次账本的密钥(book.registerWithLuca),之后调用 book.sendToLuca() 即可发送账本。Luca 会在存储前检查每个封印,重复发送同一账本不会造成任何变化。请发送邮件至 [email protected] 获取账户。
变更
各版本的变更内容,以及升级时可能需要调整的内容:CHANGELOG.md。
状态
这是该格式的第 1 版草案,也是这些库的 0.1 版。随着大家使用,我们预计会进行调整。请告诉我们有哪些问题或缺失内容:提交 issue,或发送邮件至 [email protected]。
许可证
代码采用 Apache License 2.0:请参阅 LICENSE。Luca 的专利承诺允许任何人在使用或不使用此代码的情况下实现该格式,详见 PATENTS.md。
Luca(luca.network)使用 SPR 托管记录 Agent 付款的会计信息。这包括读取支付通道、按 US GAAP 和 IFRS 分类、将分录发布到 ERP、使用与交易对手约定的标签,以及完成结账。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。