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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。