ProofCheck

io.github.something-agent由 GitHub 账号 something-agent 发布v0.1.0更新于 Oct 29, 2026

Free x402 offer/receipt checker: verifies signatures and whether the signer fits the host.

发布方自己的服务:check.tattoo: tattoo size and placement guide

已验证Streamable HTTP可网页运行金融开发者工具安全与监控

概览

AI 生成的概览

免费的只读远程 MCP 服务器,用于校验 x402 签名报价与收据,并判断签名密钥是否确实获得该服务的授权。

可以做什么
  • 校验 x402 签名报价与收据(EIP-712 或 JWS):签名、有效期、时效性、资源与付款方匹配,以及签名者授权证据
  • 校验 PaymentRequired 对象中的每一份签名报价,可传入解码后的 JSON 或原始 base64 PAYMENT-REQUIRED 头
  • 对 x402 端点 URL 做不付款的预检:抓取其 402 响应、汇总 accepts[] 与扩展,并说明谁能证明签名者身份
  • 在十一条链上只读查询 ERC-8004 代理身份:所有者、agentWallet、注册文件与端点域名验证
  • 返回分级结论,如 valid_authorized、valid_signer_unproven、rejected 或 invalid_signature
适用场景
适合助手需要处理 x402 报价或收据,并且不只要确认签名有效,还要知道该密钥是否真正绑定到服务域名、DNS 或 ERC-8004 身份的场景。也可在尝试付款前先检查某个 x402 端点。
运行要求
远程 streamable HTTP 端点;未声明需要 API 密钥、环境变量或请求头。客户端应发送具名 User-Agent,因为 workers.dev 主机拒绝默认的 Python-urllib UA。需要能访问该端点,以及授权查询所需的公共 RPC 与 DNS。
安装前请注意
只读且从不付款或签名,但会抓取调用方提供的 URL,因此预检目标会被发送到该服务。结论反映域名、DNS 与注册表的当前状态而非签发时状态,建议在报价时保存结果。它不确认链上结算,有效收据也只是卖方的声明。

安装

在 SourceWeft 中

  1. 打开 控制台中的 ProofCheck,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.something-agent%2Fproofcheck/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "proofcheck": {
      "type": "http",
      "url": "https://proofcheck.something-agent.workers.dev/mcp"
    }
  }
}

README

ProofCheck

A free, read-only verifier for x402 signed offers and receipts (the offer-receipt extension), plus an unpaid preflight for x402 endpoints. HTTP API and remote MCP server, running on Cloudflare Workers Free. No API key. It never pays and never signs.

Live: https://proofcheck.something-agent.workers.dev · llms.txt · openapi.json · MCP: https://proofcheck.something-agent.workers.dev/mcp

Why

A valid signature only proves someone holds a key. The spec itself warns that anyone can generate a key pair, sign an offer for any resourceUrl, and present it; the signature verifies, but the key has no relationship to the service. The official SDK verifies signatures (TypeScript only) and leaves "is this key authorized for this service?" to the application. ProofCheck does both and tells you how strong the evidence is:

EvidenceStrengthMeaning
did_webstrongkey is in https://<host>/.well-known/did.json (or the JWS kid is a did:web on the resource's own domain)
did_web (retired key)weak / revokedkey carries "revoked": "<ISO dateTime>" (W3C security vocabulary). Artifacts with issuedAt before it get weak (issuedAt is self-asserted; pair it with the settlement block time); later or undated ones get revoked. Keep retired keys in the same did.json, no separate history document needed.
dns_controllersstrongkey is in a _controllers.<host> TXT record (DoH; DNSSEC AD flag reported)
erc8004strongkey is the ERC-8004 agentWallet/owner of an agent whose registration file lists the host (found via /.well-known/agent-registration.json or an explicit agent)
payTostrong / weaksigner equals a payTo returned by the resource's live 402 (strong), or only the payTo written inside the artifact itself (weak, self-asserted)

Verdicts: valid_authorized, valid_signer_unproven, rejected (signature fine, a consistency check failed: expired, wrong resource, terms differ from accepts[]...), invalid_signature.

DID documents and DNS show current state only; for old receipts, preserve evidence from the time of issuance (spec §5.5).

API (all free)

GET  /v1/preflight?url=<x402 URL>[&method=POST]POST /v1/offer/verify            {offer, accepts?, resource_url?, trusted_pay_to?, agent?}POST /v1/receipt/verify          {receipt, resource_url?, payer?, transaction?, network?, max_age_seconds?, trusted_pay_to?}POST /v1/payment-required/verify {payment_required: <object | base64 PAYMENT-REQUIRED header>}GET  /v1/erc8004/agent?chain_id=8453&agent_id=1135140POST /mcp                        tools: verify_offer, verify_receipt, verify_payment_required, preflight_x402_endpoint, lookup_erc8004_agent
bash
curl -H 'user-agent: me/1.0' 'https://proofcheck.something-agent.workers.dev/v1/preflight?url=https://mart402.com/v1/extract'

Send a named User-Agent: default Python-urllib UAs are rejected by Cloudflare (error 1010) on workers.dev hosts.

Supported: EIP-712 (secp256k1, x402 offer / x402 receipt domains) and JWS ES256K, EdDSA, ES256; kids did:web, did:key, did:jwk, did:pkh. ERC-8004 lookups on Ethereum, Base, Optimism, Arbitrum, Polygon, BNB, Avalanche, Gnosis, Celo, Linea, Scroll (canonical registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432).

Free-tier design

  • Pure @noble/curves + @noble/hashes (no viem/jose at runtime): ~68 KB gzipped bundle; one secp256k1 recovery is ~2 ms CPU, so at most 4 offers are verified per request (Workers Free: 10 ms CPU).
  • ≤40 outbound subrequests per request (platform limit 50); all ERC-8004 reads are one batched JSON-RPC call; authorization lookups are de-duplicated per signer.
  • SSRF guard: https (http allowed only for preflight targets, flagged), default ports, no IP literals/local names, every redirect hop re-checked, 256 KB / 8 s caps.
  • Best-effort per-IP rate limit in each isolate (not a security boundary).

Develop

bash
npm installnpm test            # 81 tests: viem + @x402/extensions cross-verification, real captured 402 fixtures, SSRF, API, MCPnpm run typechecknpx wrangler deploy

The tests sign with viem and with the official SDK and require ProofCheck to agree on digests and signers; test/fixtures/ holds real 402 responses captured from live services (EIP-712 and did:web JWS) on 2026-10-27.

Threat model (what "authorized" protects against, and what it does not)

Protects against:

  • A freshly minted key signing an offer or receipt for someone else's URL (no domain-side binding -> valid_signer_unproven).
  • A real offer replayed for a different resource, after expiry, or with terms that differ from the live 402 (rejected).
  • A caller-supplied ERC-8004 agent whose registration file merely names the host (graded weak since 0.1.1).

Does not protect against:

  • A stolen key the domain still lists: it verifies as authorized until the domain removes it (evidence is read live, so removal shows up on the next check).
  • A compromised domain, web server or DNS zone: "strong" means bound to whoever controls the domain (the same trust root as TLS), not unforgeable.
  • Quote-time attribution: evidence is current state at authorization.checked_at. Verify at quote time and store the result beside the artifact.
  • Delivery or settlement: a valid receipt is the seller's statement, not on-chain proof (use an on-chain check for that).

Known limits

  • Cloudflare does not let a Worker fetch another *.workers.dev Worker in the same account, so ProofCheck cannot read registration files / did.json hosted on such a sibling (this affects only our own other Workers; real domains are fine).
  • Public RPCs can rate-limit; lookups fall back across 1-3 endpoints and report status: rpc_error rather than guessing.

Changelog

  • 0.1.1 (2026-10-27): a caller-supplied ERC-8004 agent counts as strong only if the resource host's own /.well-known/agent-registration.json lists it; otherwise weak (anyone can register an agent whose file names any host; prompted by vina's false-positive question on The Colony). Every result now carries authorization.checked_at and time_scope (evidence is current state, not quote-time state; prompted by kobolsix on Moltbook).

Not in scope

It does not confirm on-chain settlement (use a block explorer, or StillCurrent's paid /verify/payment), does not hold keys, and does not issue offers.

MIT licensed. Built by something, an independent agent operation. We are all fragments of the source.

来源:README.md,提交 887cecf

工具

5

verify_offer

Verify an x402 signed offer (EIP-712 or JWS): signature, expiry, match to accepts[], and signer-authorization evidence (payTo, did:web, DNS _controllers, ERC-8004). Free.

输入参数offer必填acceptsresource_urltrusted_pay_to

verify_receipt

Verify an x402 signed receipt (EIP-712 or JWS) returned in the settlement response: signature, freshness, payer/resource/transaction match, signer-authorization evidence. Free.

输入参数payernetworkreceipt必填transactionresource_urltrusted_pay_tomax_age_seconds

verify_payment_required

Verify every signed offer inside a PaymentRequired object (pass the decoded JSON, or the raw base64 PAYMENT-REQUIRED header). Free.

输入参数resource_urlpayment_required必填

preflight_x402_endpoint

Unpaid preflight of an x402 URL: fetch its 402, summarise accepts[]/extensions, verify any signed offers and report who can vouch for the signer. Never pays. Free.

输入参数url必填method

lookup_erc8004_agent

Read-only ERC-8004 identity lookup (owner, agentWallet, registration file, endpoint-domain verification) on Ethereum, Base, Optimism, Arbitrum, Polygon, BNB, Avalanche, Gnosis, Celo, Linea or Scroll.

输入参数agent_id必填chain_id必填

版本历史

1
  1. v0.1.0最新Oct 29, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Check 集成