celo-chain-intel
A paid MCP server providing AI agents with Celo chain intelligence tools (gas, token info, balances, transaction lookup, and x402 endpoint discovery) with payment via x402 on Celo.
README
celo-chain-intel
A paid MCP server: Celo chain-intelligence tools that other AI agents call and pay for per request, settled in stablecoins over x402 on Celo.
No API keys, no accounts, no subscriptions. An agent calls a tool, gets a 402
with the price, signs an EIP-3009 authorization, and retries. Funds move directly
from buyer to seller; the facilitator pays the gas.
Why this shape
Two of the hackathon's four tracks are volume metrics (Most x402 Payments, Most Revenue Generated), so the tools are priced sub-cent to be called constantly rather than expensively. The customers are other agents — including other hackathon entries, which all need Celo data and none of which want to build RPC plumbing.
Tools
| Tool | Price | What it does |
|---|---|---|
celo_gas |
$0.0002 | Gas price, latest block, cost of an ERC20 transfer |
celo_token_info |
$0.0005 | ERC20 name / symbol / decimals / supply |
celo_balances |
$0.001 | CELO + USDC/USDT/cUSD/cEUR balances, flagging which are x402-settleable |
celo_transaction |
$0.001 | Transaction summary by hash |
x402_probe |
$0.002 | Given any URL, report whether it is x402-payable and on what terms — without paying |
x402_probe is the one with no equivalent elsewhere. x402 has no discovery
mechanism: the only way to learn an endpoint's price is to call it and read the
402. This does that safely and normalises the answer, including whether Celo's
facilitator can actually settle those terms.
Quick start
npm install
cp .env.example .env
# set PAY_TO_ADDRESS to the Celo address that should receive payments
npm run dev
Then, free of charge:
curl localhost:3000/ # service card: tools + prices
curl localhost:3000/health # also checks the facilitator is live
curl -X POST localhost:3000/mcp -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Trigger a payment challenge:
curl -i "localhost:3000/v1/tools/celo_gas" # -> 402 with the terms
Pay it end to end (needs a throwaway key holding a little USDC on Celo):
BUYER_PRIVATE_KEY=0x... npm run buyer -- celo_gas
BUYER_PRIVATE_KEY=0x... npm run buyer -- celo_balances '{"address":"0x..."}'
Scripts
| Command | Purpose |
|---|---|
npm run dev |
Run the server with reload |
npm run smoke |
Exercise every tool against live Celo. Spends nothing |
npm run verify-sig |
Prove the EIP-3009 payload + EIP-712 domain are correct, using an unfunded key. Spends nothing |
npm run buyer |
Full buy: 402 → sign → retry → settle. Spends USDC |
npm run typecheck |
tsc --noEmit |
How payment works here
agent → tools/call (no X-PAYMENT)
← 402 + accepts[] (scheme, network, asset, amount, payTo, EIP-712 domain)
agent signs EIP-3009 TransferWithAuthorization
agent → tools/call with X-PAYMENT: base64(payload)
→ facilitator /verify (off-chain: signature + balance simulation)
→ run the tool
→ facilitator /settle (on-chain: facilitator submits, pays gas)
← result + X-PAYMENT-RESPONSE receipt
The tool runs before settlement, deliberately. A tool that throws never calls
settle(), so a failing call costs the buyer nothing. If the tool succeeds but
settlement fails, the result is withheld rather than given away — the response is
a 402, not a silent freebie.
initialize, tools/list and ping are always free: a buyer has to be able to
discover what exists and what it costs before paying for anything.
Findings that contradict the published docs
These were verified against the live facilitator on 2026-07-29 and each one would otherwise have silently broken the build.
-
The documented facilitator URL is wrong.
docs.celo.orgsayshttps://x402.celo.org. That host serves the marketing SPA — it returnstext/htmlforGET /supportedand405forPOST /verify. The JSON API is athttps://api.x402.celo.org.src/x402/facilitator.tsdetects a non-JSON response and says so explicitly, because the natural failure mode is an opaqueJSON.parseerror. -
upto(dynamic/metered pricing) is not supported. Live/supportedadvertises onlyscheme: "exact". The docs' per-token metered-billing example cannot work against this facilitator today. -
No testnet.
/supportedlists onlyeip155:42220(v2) andcelo(v1), despite the docs describing Celo Sepolia support. End-to-end settlement testing requires mainnet — which is why the sub-cent pricing and the two spend-nothing verification scripts exist. -
x402-express@1.2.0cannot target Celo at all. ItsNetworkenum isabstract, base, base-sepolia, avalanche, avalanche-fuji, iotex, solana, solana-devnet, sei, sei-testnet, polygon, polygon-amoy, peaq, story, educhain, skale-base-sepolia— nocelo, noeip155:42220. The docs'x402-expresssnippet fails Zod validation before any request is made. Same applies to thex402client library, which is whyscripts/buyer.tssigns with viem directly. This server implements the protocol against the facilitator's HTTP API instead. -
The USDC address in the docs has an invalid EIP-55 checksum.
0xcEBA9300f2b948710d2653dD7B07f33A8B32118C— correct is0xcebA9300f2b948710d2653dD7B07f33A8B32118C.getAddress()normalises it silently, so this only surfaces at a strict validation boundary. -
cUSD cannot be used for x402 payments. Mento's
StableTokenV2implements only EIP-2612permit, not the EIP-3009transferWithAuthorizationthe facilitator settles with. Celo's flagship stablecoin is therefore unusable as an x402 asset; settlement uses USDC.celo_balancesstill reports cUSD but flagsx402Settleable: false.
Also worth knowing: /verify answers with HTTP 400 and a well-formed verdict
body when a payment is bad. Treating non-2xx as a transport error turns an
underfunded buyer into a confusing 502; post() distinguishes a verdict from a
real failure so the buyer gets a 402 naming the reason.
Verification status
| Piece | Status |
|---|---|
Free MCP discovery (initialize, tools/list, ping) |
Verified |
| All five tools against live Celo mainnet | Verified via npm run smoke |
402 challenge on both MCP and REST, with correct terms |
Verified |
| EIP-3009 payload + EIP-712 domain accepted by the facilitator | Verified via npm run verify-sig — rejected only for insufficient_funds, meaning signature recovery and payload parsing both succeeded |
Underfunded buyer receives a clean 402 naming the reason |
Verified |
| On-chain settlement moving real funds | Not yet run — needs a funded key. This is the one path no test here covers. |
Deployment note
PUBLIC_BASE_URL must match the URL buyers actually call. Payment requirements
bind the signed authorization to the resource URL, so leaving it as
localhost:3000 behind a tunnel or deploy will fail at settlement.
Listing copy
For the marketplace form:
celo-chain-intel — A paid MCP server giving AI agents instant Celo chain intelligence: balances, token metadata, gas, transaction lookups, and x402 endpoint discovery. No API keys and no signup — agents pay per call in stablecoins over x402, from $0.0002. Includes
x402_probe, which tells an agent what any endpoint charges before it commits to paying.
Contact and logo still need to be supplied by you.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.