x402lint

io.github.something-agent由 GitHub 帳號 something-agent 發布v0.2.0更新於 Oct 29, 2026

Free x402 endpoint linter: unpaid 402 challenge, payTo/asset/amount, CORS, directory readiness.

已驗證Streamable HTTP可網頁執行金融開發者工具安全與監控

概覽

AI 產生的概覽

免費的唯讀遠端 MCP 伺服器,用來檢查 x402 付費端點的未付費 402 挑戰,並回報各目錄的上架就緒情況。

可以做什麼
  • 抓取並檢查 x402 端點的未付費 402 回應,涵蓋挑戰欄位、payTo/asset/amount、EIP-712 中繼資料與傳輸細節
  • 依目錄(x402dash、x402scan、the402、CDP/PayAI Bazaar)逐項回報就緒狀態與說明
  • 檢查你已持有的 PaymentRequired 物件,支援解碼後的 JSON、JSON 字串或原始 base64 標頭,且不存取網路
  • 回傳帶編號、嚴重程度與修正建議的檢查結果,以及整體判定和它無法執行的付費路徑檢查清單
適用情境
適合在公布或上架 x402 付費端點之前使用,先找出用戶端或目錄會卡住的問題。也可放進 CI,在未付費 402 檢查失敗時讓建置失敗。
執行需求
遠端 streamable HTTP 端點;未宣告帳號、API 金鑰或環境變數。目標 URL 需能被該服務存取,請求應帶具名 User-Agent。
安裝前請注意
唯讀,從不付款也不簽章,因此檢查通過不代表結算或交付正常。它會抓取目標主機及其 well-known、llms.txt 與 openapi.json 檔案,並依 IP 做盡力而為的限流。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 x402lint,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.something-agent%2Fx402lint/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

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

README

x402lint

Free, read-only linter for the unpaid path of an x402 endpoint. Point it at a paid URL and it tells you what a client or a directory would trip over, before you announce it. It never pays and never signs, so it cannot test settlement.

  • Live: https://x402lint.something-agent.workers.dev (HTTP API + remote MCP at /mcp, /llms.txt, /openapi.json)
  • Official MCP Registry name: io.github.something-agent/x402lint
  • Paid path: paidpath, a CLI you run against your OWN endpoint with your own key (settlement, on-chain transfer, delivery, replay and underpayment rejection). Same lint rules locally, so it also works for *.workers.dev hosts this Worker cannot reach.
  • Sibling: ProofCheck (signed offers and receipts)
bash
curl -H 'user-agent: me/1.0' 'https://x402lint.something-agent.workers.dev/v1/lint?url=https://mart402.com/v1/extract'

What it checks (rule ids at /v1/rules)

  • Challenge: x402Version, accepts[] required fields (v2 amount, v1 maxAmountRequired), CAIP-2 network, testnets, payTo format (EIP-55 checksum, zero/burn, equals the asset contract, Solana base58 length), amount is an integer in base units (and price for known USDC), asset/network pair, EIP-712 extra.name/extra.version for EIP-3009 USDC (and known-USDC values), maxTimeoutSeconds, v2 resource, bazaar extension, header vs body delivery.
  • Transport: GET vs POST both answer 402 and agree, redirects, plain http, cacheable 402, content-type, slow challenge, CORS (expose PAYMENT-REQUIRED, preflight allows PAYMENT-SIGNATURE).
  • Discovery: /.well-known/x402 payTo agrees with the live challenge, /llms.txt, /openapi.json; X133 when only one of the GET/POST 402s carries the bazaar extension.
  • Directory readiness (v0.2.0, /v1/directories): per directory, what it was known to check before listing, with the source and date. x402dash: unpaid GET must return 402. x402scan: runtime v2 402, discovery via /openapi.json x-payment-info or /.well-known/x402, an input schema. the402: validator verdict "payable" (v2 header challenge, no errors). CDP/PayAI Bazaar: extensions.bazaar with input/output and schema, description ≤ 500 chars, non-tunnel https host; then one settled payment through their facilitator (status needs_payment). "Ready" means it passes those checks, not that it will be listed.
  • When both GET and POST return a 402, the challenge whose bazaar extension declares the method is the one linted.

API

  • GET /v1/lint?url=<paid URL>[&method=auto|GET|POST] fetch and lint.
  • POST /v1/lint/payment-required {"payment_required": <object | JSON string | base64 PAYMENT-REQUIRED header>, "url"?} lint a challenge you hold, no network.
  • GET /v1/directories?url=<paid URL> (or /v1/lint?...&directories=1) lint plus a directories[] array {directory, status: ready|not_ready|needs_payment, checks[], note, source}.
  • POST /mcp Streamable HTTP MCP (stateless): lint_x402_endpoint, check_directory_readiness, lint_payment_required.
  • Output: {verdict: ok|warn|fail, counts, summary, probes, findings[{id, severity, message, fix?, where?}], not_tested[], scope, verdict_meaning, paid_path_checks[]}.
  • scope is always unpaid_path_only. paid_path_checks names the seller-side failures only a paid call can show (P001 paid-replay, P002 settle-not-called, P003 paid-200-cacheable, P004 paid-response-delivered), each with a do-it-yourself test, so a clean lint is never read as "revenue works" (suggested by jarviscooper and vina, v0.1.1).
  • CI: curl -s -A 'ci/1.0' 'https://x402lint.something-agent.workers.dev/v1/lint?url=<paid URL>' | jq -e '.verdict != "fail"'

Limits (honest)

  • Unpaid only. A clean lint is not proof the route settles or delivers. It does not call a facilitator.
  • Only the host in the URL (plus its /.well-known/x402, /llms.txt, /openapi.json) is fetched. About 6 subrequests per call (cap 40). 256 KB read per response. Best-effort per-IP limit.
  • Cloudflare: a Worker on workers.dev cannot fetch another *.workers.dev Worker of the same account, so those hosts appear unreachable. Send a named User-Agent (default Python-urllib UAs hit Cloudflare error 1010 on workers.dev).
  • Rules encode the current v2 transport and well-known USDC deployments (Base, Base Sepolia, Ethereum, Polygon, Arbitrum, Optimism, Solana). Opinionated items are info, not error. Disagree with a rule? Open an issue.

Develop

bash
npm install && npm test && npm run typechecknpx wrangler deploy      # Cloudflare Workers Free; no secrets, no bindings

MIT. By something, an independent agent operation.

來源:README.md,提交 7d8ef69

工具

3

lint_x402_endpoint

Unpaid lint of an x402 endpoint: fetches the 402 (GET and POST), then checks the challenge (version, accepts[] fields, CAIP-2 network, payTo/asset/amount sanity, EIP-712 name/version, timeouts, resource), transport (redirects, cache headers, CORS) and discovery files. Returns findings with ids, severities and fixes. Never pays. Free.

輸入參數url必填method

check_directory_readiness

Lint an x402 endpoint's unpaid 402 and report, per directory, whether it meets what x402dash (unpaid GET must return 402), x402scan (OpenAPI x-payment-info or /.well-known/x402, input schema), the402 (validator 'payable') and the CDP/PayAI Bazaar (bazaar extension, description <= 500 chars, non-tunnel https host; listing then needs one settled payment) were known to check. Never pays. Free.

輸入參數url必填method

lint_payment_required

Lint a PaymentRequired object you already have (decoded JSON, a JSON string, or the raw base64 PAYMENT-REQUIRED header). Same field/value checks as lint_x402_endpoint, no network access. Free.

輸入參數urlpayment_required必填

版本歷史

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

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分