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 端點網址做不付款的預檢:抓取其 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。
安裝前請注意
唯讀且從不付款或簽章,但會抓取呼叫端提供的網址,因此預檢目標會被送到該服務。結論反映網域、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 整合