arc-market-mcp
v0.2.0
Published
MCP server for Arc (Circle's L1, chainId 5042). Reads live chain state: the ERC-8004 agent directory with every card fetched and checked, launchpad concentration, LP range-APR, RPC consensus, and sell simulation. Circle's own Arc MCP is docs-only; this on
Maintainers
Readme
Arc Market MCP
An MCP server that reads live market state on Arc — Circle's L1
(chainId 5042) — through the BABA Capital Arc Data API.
Circle publishes an Arc MCP, but it serves documentation. This one reads chain state:
arc_launchpads— launchpad concentration (HHI), pools created, v3 vs v4 launch counts, distinct deployer callers, and per-launchpad share / graduations / dead-on-arrival.arc_lp_apr— realised range-APR for LP pools from the latest scan (filter by pair / venue / range).arc_rpc_consensus— how many of Arc's four public RPCs agree this block, before you trust a figure.arc_token_screen— a launched token's USDC pool, fee, recent swap count, why that pool was selected, and the simulated round trip.arc_token_sellsim— a simulated round trip: buy, then sell, against current chain state, reporting the round-trip fraction recovered. Not a heuristic — an actual simulation.arc_pool_decoy— for one v4 poolId: its fee, the fee cap applied, and which rule placed it (selected, fee above the cap, untraded, or less traded than the selected pool).arc_rpc_consensus,arc_health,arc_agent_card— trust, liveness, and identity.
BridgeCheck — is this Circle's bridge contract, and where will the USDC land?
bridgecheck— on Arc, Base, Ethereum or HyperEVM: give an address, a mined transaction, or an unsigned transaction (to+data).MATCHonly when the address is the one Circle publishes for that chain and its live code, EIP-1967 implementation and admin equal the values pinned from Circle's pages (read on two RPCs). Circle's proxy code is generic, so the same code at another address isNO_MATCH. Also decodes the destination chain, mint recipient (same as you / different), destination caller, max fee and approval size, and says in plain words what happened, e.g. "The contract you're calling is not Circle's. The burn inside is Circle's. Recipient: same as you." Other statuses:IMPLEMENTATION_CHANGED,ADMIN_CHANGED,NOT_DECODED,NO_DATA. Every answer lists what it did not check.
Agent Directory — who is actually on Arc
337 agents (crawl of 2026-09-29 12:47 UTC) are registered in the ERC-8004 registry on Arc and nothing else lets you see who they are. Circle builds the rails; this is the phone book.
arc_agents_list— every registered agent: agentId, owner, agentURI, host, name, skills, validation status, and how concentrated its host and owner are.arc_agent_get— one agent in full, including the raw card as served and a validation report giving the evidence for every flag, so you can check the directory rather than trust it.arc_agents_search— "find me an Arc agent that does X and that I can pay."arc_agents_stats— the registry's shape in one call.
Two things worth knowing, both measured rather than assumed:
x402=trueis much narrower thanpayment=true. Most of this registry prices in USDC via ERC-8183 settlement, which is not x402. Each match carries the exact key and value that prove it.- The registry is concentrated. The largest host holds 115 of 337 ids (34.1%) and the largest owner holds 100 (29.7%). The directory publishes those counts and lets you draw the conclusion — it attaches no label or rating to any agent, because a directory that editorialises is worth nothing.
A card that will not resolve is listed as UNRESOLVED, never quietly dropped; a partial crawl comes
back NO_DATA with coverage naming the ids it could not reach. BABA Capital operates agentIds 135
and 136; they are listed on the same terms as everyone else and get no ranking advantage.
Honesty model (read this)
Every data route returns one envelope:
{ "chain": "arc", "chainId": 5042, "asof": "…", "head": 123, "status": "OK|NO_DATA|REFUSED",
"coverage": {…}, "rpc_consensus": true, "data": {…}, "warnings": [], "source": "…", "version": "…" }NO_DATAis never a zero. A missing or partial reading returnsstatus: "NO_DATA", not an empty success. Absence of a signal is stated, never disguised as a value of the signal.REFUSEDmeans the API declined (e.g. fewer than 2 of 4 RPCs agreed). The reading was not cross-checked; weigh it accordingly.- This server passes the envelope through unchanged. It never unwraps
dataand hides the status.
This is a read-only client. It holds no private key, signs nothing, and moves no funds. This is a software tool that reports chain reads. A passing sell-simulation is a snapshot at one block, not a guarantee.
Install
Runs over stdio via npx — no global install needed.
npx arc-market-mcpClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"arc-market": {
"command": "npx",
"args": ["-y", "arc-market-mcp"]
}
}
}Configuration
| Env var | Default | Meaning |
|---|---|---|
| ARC_API_BASE | https://api.babacapital.app | Base for the /arc/* routes. |
| ARC_AGENT_CARD_BASE | https://babacapital.app | Base for /.well-known/agents/<name>.json. |
| ARC_API_TIMEOUT_MS | 20000 | Per-request timeout (the sellsim route runs a live simulation). |
Pricing
The Arc Data API's free tier is 20 calls/day/IP. Paid calls settle in USDC over Circle Gateway
x402 on Arc (eip155:5042). This package is the reader; payment, when required, is negotiated by the
API's 402 response. The reader never holds funds or keys.
Identity (ERC-8004)
BABA Capital's Arc agents publish ERC-8004 agent-cards at
https://babacapital.app/.well-known/agents/ — baba-arc-data and baba-arc-yield. Fetch one with
arc_agent_card. agentId is null until on-chain registration completes.
Build from source
npm install
npm run build
npm test
node dist/index.jsProvenance
This repository is standalone. Its git history begins on 2026-09-17; it shares no history with any other BABA Capital repository.
License
MIT © 2026 BABA Capital
