Docs
What Rollycall counts, how, and where it stops.
What it counts
Every agent id in the ERC-8004 Identity Registry (0x8004A169FB4a3325136EB29fA0ceB6D2e539a432) on Robinhood Chain (chain 4663), crawled daily. For each id Rollycall reads the owner, the tokenURI and the agent wallet on chain, then fetches the agent-card and records what happened.
Live
Live means: its agent-card URL answered HTTP 200 with valid JSON and a name, the last time we checked (timestamp shown).
| Status | Rule |
|---|---|
| live | HTTP 200 (or a decoded data: URI, or an IPFS gateway 200), body parses as JSON, and name is a non-empty string. |
| unreachable | Fetch failed (DNS, timeout 8 s, 5xx, 4xx, non-JSON, no name) fewer than 3 consecutive times. |
| dead | 3 or more consecutive failures spanning 72 hours or more. A dead card that answers again becomes live on the next check. |
| opaque | tokenURI scheme we cannot fetch (for example priors:agent:…, an empty string). |
| host-down | The card's host failed DNS on the host-level probe this cycle; per-card fetches are skipped. Counts as unreachable, and as dead by the same 3 / 72 h rule. |
Score
Score v1, 0 to 100, every part recomputable from fields the API exposes: card 45, endpoint 10, observed age 15, owner activity 15, independence 10, Pons link 5.
| Part | Max | Formula |
|---|---|---|
| card | 45 | live 30; +5 if name length ≥ 3 and description length ≥ 40; +5 if the image URL answered 2xx; +5 if registrations[] contains this id and the registry eip155:4663:0x8004A1…. Not live: 0. |
| endpoint | 10 | 10 if url or a services[].endpoint (https) answered 2xx/3xx to a HEAD (fallback GET); else 0. |
| age | 15 | round(15 · L(observedDays, 90) / 100), observedDays = days since Rollycall first saw the card live. |
| owner | 15 | round(15 · L(ownerNonce, 1000) / 100); nonce 0 gives 0, 1 gives 2, 30 gives 7, 1,000 gives 15. |
| independence | 10 | min(hostTier, ownerTier). hostTier by agents on the same platform: ≤ 10: 10 · 11–100: 7 · 101–1,000: 4 · over 1,000: 1. ownerTier by agents held by the owner: ≤ 3: 10 · 4–20: 6 · over 20: 2. |
| pons | 5 | 5 if a verifiable Pons link exists, else 0. The coin's market cap and volume are shown, never scored. |
L(x, cap) = clamp(100 · log10(1+x) / log10(1+cap), 0, 100), applied to the unrounded value inside each part. Sort: total descending, then id ascending. Observed age is not mint age: the archive RPC is unavailable, so every agent starts at zero and the age part separates agents only after the first weeks. The endpoint, image, owner-activity and Pons parts are filled in as their probes run; until a probe has run, its part shows 0 and its input shows "not probed yet".
The score is our heuristic. It is not reputation, not an audit, and not endorsement.
Platforms
Grouped by the platform that hosts the card: the registrable domain of the tokenURI host, except shared hosts (fly.dev, vercel.app, github.io, workers.dev and similar) which keep the full host. data: URIs are "Self-contained", ipfs:// is "IPFS", any other scheme is its own group. A platform with more than 1,000 agents carries the mass platform badge; the badge is information, nothing is dropped.
Pons link
Pons-linked means: the card or its web endpoint names a token address that is a Pons launch (checked against ponsfamily.com). A card that says "our token" without an address gets nothing; a name match is never used.
Index & crawler
The chain is read with plain eth_call through Multicall3 (about 125 calls for a full pass). Cards are fetched over https, from data: URIs, or through an IPFS gateway, at most 2 requests per second per host, 512 KB per card, with the user agent rollycall/0.1 (+https://rollycall.xyz/docs#crawler). One DNS/HTTP probe per host comes before any card fetch; a host that fails DNS is marked host-down without individual requests. To opt a host out, stop answering the user agent above with JSON and the cards will read as unreachable.
API
Public JSON, no key, CORS open, cached 60 s.
curl https://rollycall.xyz/api/agents?live=1&limit=20Routes: /api, /api/stats, /api/agents, /api/agent/:id, /api/agent/:id/card, /api/platforms, /api/top, /api/health. Also llms.txt.
Source: github.com/rollycall/rollycall (MIT). MCP server: rollycall-mcp on npm.
MCP
For agents, one line:
claude mcp add rollycall -- npx -y rollycall-mcpTools: search_agents, get_agent, list_platforms, top_agents.
Privacy
No wallet, no signature, no contract. Nothing to approve. The server stores counts only: no IP address, no user agent.
Limits
- The on-chain Reputation Registry has no readable feedback on this chain; we show nothing from it.
- Observed age is days since we first saw the card live, not mint age.
- Cards change or die; one host answering again or going silent can move the live number overnight.
- The score is a heuristic with hand-picked weights. It is not reputation, not an audit, and not endorsement.
- Data refreshes daily; each number shows the time it was computed (UTC).
Verify it yourself
cast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "ownerOf(uint256)(address)" 1 --rpc-url https://robinhood-rpc.publicnode.comcast call 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 "tokenURI(uint256)(string)" 1 --rpc-url https://robinhood-rpc.publicnode.com