Back to Browse

X402 Json Repair MCP Server

by Ktcod
Developer ToolsUse Caution4.2MCP RegistryLocalRemote
Free

Server data from the Official MCP Registry

21 paid tools: US macro data, SEC EDGAR filings, on-chain EVM reads. Settled in USDC on Base.

About

21 paid tools: US macro data, SEC EDGAR filings, on-chain EVM reads. Settled in USDC on Base.

Remote endpoints: streamable-http: https://x402.agentfund.net/mcp

Security Report

4.2
Use Caution4.2High Risk

This is a well-architected pay-per-call MCP server with proper x402 payment gating and deterministic tool logic. The codebase demonstrates good security practices: the server refuses private keys in config, uses env vars for secrets, and implements stateless request handling. Minor code quality concerns (broad error handling, unvalidated optional schema input) and a secondary tool with CSV parsing dependencies prevent a higher score, but these do not constitute security vulnerabilities. Supply chain analysis found 11 known vulnerabilities in dependencies (2 critical, 2 high severity).

5 files analyzed · 16 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

env_vars

Check that this permission is expected for this type of plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

How to Install & Connect

Available as Local & Remote

This plugin can run on your machine or connect to a hosted endpoint. during install.

Documentation

View on GitHub

From the project's GitHub README.

US Economic, SEC EDGAR & On-Chain Data — a pay-per-call MCP server

21 data tools that AI agents discover and pay for per call, settled in USDC on Base via the x402 payment protocol. No account, no API key, no subscription.

Live: https://x402.agentfund.net · Agent guide · Verification ledger · Settlements

EndpointPurpose
POST /mcpMCP over streamable-HTTP (stateless)
POST /x402/<tool>One HTTP route per tool; arguments as a plain JSON body
GET /openapi.jsonOpenAPI 3.1 discovery document with x-payment-info per route
GET /SKILL.mdAgent-facing usage guide
GET /VERIFICATION.mdHow each tool was verified, and the upstream traps found
GET /monitorLive on-chain settlement dashboard
GET /healthLiveness and configuration mode

The tools

US macrotreasury_yield_curve, bls_cpi, macro_pce, macro_jobs, macro_gdp, macro_retail_sales, macro_housing, macro_energy, macro_release_calendar

SEC EDGARedgar_filings_feed, edgar_financials, edgar_insider_transactions, edgar_13f_holdings, edgar_full_text_search

On-chain EVMonchain_token_balances, onchain_portfolio, onchain_cross_chain_balances, onchain_oracle_price, onchain_gas

Pure computestructured_json_repair, tabular_to_json

Prices run $0.001–$0.03 per call.

Why these sources

Every tool wraps free public-domain US government data (Treasury, BLS, BEA, Census, EIA, SEC EDGAR) or a direct on-chain read via public RPC. There is no upstream vendor licence, so nothing here can be revoked or repriced by a third party, and the cost of goods is zero.

The trade-off is inherited from the publishers: government statistics are lagged and revised, 13F is quarterly and stale by design, and none of this is market data. Those limits are stated plainly in SKILL.md rather than buried.

Correctness

Every tool was checked against live upstream data before shipping — not only against unit tests, because a test written from the same wrong assumption as the code passes happily.

That caught six real defects, including 13F values being 1000× too large by following SEC's own documentation, and Census silently returning five regional rows where a national figure was expected. Each is documented with the evidence that exposed it, and locked in by a regression test: VERIFICATION.md.

A failed call is never billed. The MCP SDK turns a thrown tool error into an HTTP 200 carrying isError: true; the payment gate inspects the result and returns errors unsettled rather than charging for a result the caller never received.

Architecture

  • x402 v2 (@x402/core, @x402/evm) with the Coinbase CDP facilitator on Base mainnet.
  • MCP on Workers via @hono/mcp StreamableHTTPTransport (the SDK's own transport is Node-http-based). Stateless JSON.
  • Two entry points, one payment path. /mcp and /x402/<tool> both run through PaymentGate.chargeAndRun, so money-safety rules cannot drift between them.
  • Per-tool HTTP routes exist for discovery. The x402 Bazaar indexes plain HTTP resources only — every catalog entry is type: "http" — so an MCP endpoint alone can never be listed.
  • Discovery needs no secrets. initialize, tools/list and ping are answered without payment configuration, so the server introspects cleanly on a fresh clone or in a CI sandbox.
  • Validation uses @cfworker/json-schema, not Ajv — Ajv compiles via Function, which Workers forbid, and the schema is a runtime input so it cannot be precompiled.
  • No private keys. The server holds only a public payout address; config.ts refuses private-key- or seed-shaped input.

Adding a tool is a one-file change plus a line in src/tools/index.ts.

Development

npm install
npm test          # 174 tests
npm run typecheck
npm run dev       # wrangler dev
npm run dev:node  # tsx watch src/node.ts

Copy .dev.vars.example to .dev.vars for local configuration. Only the public payout address is ever needed — never a private key or seed phrase.

Docs are mirrored into the bundle (Workers have no filesystem); run npm run gen:docs after editing SKILL.md or VERIFICATION.md, or test/docs.test.ts will fail on the drift.

Deployment

Production runs on Cloudflare Workers. Secrets are set with wrangler secret put, never in wrangler.toml:

npx wrangler deploy --env production

A Dockerfile is included for self-hosting the Node entrypoint; it needs no secrets, so the container starts and passes introspection out of the box. See OPERATOR_CHECKLIST.md for the full runbook.

Buyer-side test clients

PAYER_PRIVATE_KEY=0x… node scripts/pay-test.mjs      # pay via /mcp
PAYER_PRIVATE_KEY=0x… node scripts/pay-http.mjs      # pay via /x402/<tool>
node scripts/index-all.mjs                            # dry run: Bazaar index status

Payment is gasless for the payer (the facilitator submits the transaction), so a test wallet needs USDC and no ETH. index-all.mjs skips already-indexed routes and refuses to spend without --yes.

Licence

MIT (declared in package.json; no LICENSE file has been added yet).

Reviews

No reviews yet

Be the first to review this server!