Keelage is an MCP server. Your agent connects once, lists the tools, and calls them with a contract address. Every answer is JSON with fixed keys. Unknown is null, never zero.
The local server runs on your machine with Node 22 or newer, reads public APIs, and needs no key. The hosted endpoint at mcp.keelage.ai is the next milestone.
{ "mcpServers": { "keelage": { "command": "npx", "args": ["-y", "@keelage/mcp"] } } }
claude mcp add keelage -- npx -y @keelage/mcp
codex mcp add keelage -- npx -y @keelage/mcp
npx -y @keelage/mcp scan 0xf0e17e54239cd945cd7bea471a3a2ca6a8c7f7a3 --text npx -y @keelage/mcp holders 0x… npx -y @keelage/mcp template 0x… npx -y @keelage/mcp record
Optional environment: ROBINHOOD_RPC_URL (defaults to the public RPC), KEELAGE_STATE_DIR (cache, defaults to ~/.cache/keelage), TYPESAFE_API_KEY and SOCIALDATA_API_KEY for the optional context lines. Nothing in the server can hold a key that spends.
Every tool is read-only and idempotent. A scan takes 10 to 40 seconds because it reads 4 upstreams in sequence and paces itself under their limits.
Input: address. The full structural verdict for one token.
| Key | What it holds |
|---|---|
| verdict | key is one of ELIGIBLE, NOT_ELIGIBLE, FAIL, UNVERIFIED; head and why are the one-line answer and the reason. |
| tier · actionable · entryBlock · score | Sizing tier from top-10 concentration; whether the entry test cleared; the one reason it didn't; the ranking score (ranks, never admits). |
| size | usd when eligible: the lower of 1% of the pool and the tier cap. The two inputs are included. |
| market | Price, liquidity, market cap, 24h volume, buys and sells, 24h change, age in days, the pair and dex, the quote symbol. |
| location | Percent below ATH, percent above the 30-day low, the base band in words, ATH and low values, median daily range over 14 days. |
| structure | Pass or fail with reasons (what blocked) and caps (what's unknown). Verified source, contract and implementation names, proxy type, creator, template key and verdict, privileges found in the ABI, whether owner() is renounced, transfer-tax identifier counts, sells clearing, liquidity drawdown. |
| holders | Count, top-10 share excluding pools and contracts (with its source), top-10 including pools, largest wallet, contracts and pools among the top 10, creator share. |
| goplus | Corroboration only: honeypot flag, buy and sell tax, mintable, pausable, LP mode and LP holder statistics. record:false when GoPlus has nothing. |
| takeoverClaim · discoveryShape · x · jev | A paid takeover claim if present (a caution). Whether the token sits inside the discovery shape. The optional X and probability context lines. |
| links · scannedAt · disclaimer | DexScreener, GeckoTerminal and Blockscout pages. The timestamp. "Research only, not financial advice." |
Input: address, optional smartAccounts (default true). The holder map.
| Key | What it holds |
|---|---|
| holderCount · totalSupply | From the explorer. |
| top10 | Share excluding pools and contracts, share including pools, largest wallet, how many contracts and pools sit in the top 10. |
| burnPct | Share held by the zero, dead and 0x1 addresses. |
| smartAccounts | How many of the listed wallets are EIP-7702 delegated accounts (how the Robinhood app wallet reads), and their combined share. |
| holders | Up to 20 rows: address, percent of supply, balance, is it a contract, is it a pool, is it a burn address, the explorer's name for it, smart-account flag. |
| poolsKnown · creator · creatorPct | Every pool address we matched, and the deployer with its current share where GoPlus has it. |
Input: address. Which launcher factory the contract came from.
| Key | What it holds |
|---|---|
| template | Key (pons-launcher, launchtoken, doppler, uerc20-pools-trade, party, robinhood-stock, or unregistered), verdict, what it matched on, the fee model, and the census note. |
| contract | Verified source and when, compiler, contract and implementation names, proxy type, creator, function count. |
| privileges · livePrivilege · taxCode | Owner privileges in the ABI; whether any can change what holders can do; tax and reflection identifier counts and whether they count against the token. |
Input: optional study key. The dated studies behind every rule, with sample sizes. The same numbers as the track record page.
Two layers. The facts are measured from the chain and timestamped; they are the product and they are not in beta. The verdict is a policy laid over the facts under a named, dated ruleset (today: keelage-default, 2026-10-04), 12 of whose 18 lines are still set by hand, so the verdict is in beta and says so. The four verdicts first, then every other term alphabetically.
The code passed every check, the holders aren't too concentrated, and the entry test is clear. Comes with a suggested size. Still not advice.
The code passed, but we wouldn't size it now: too concentrated, too quiet, mid-pump, or no price history to judge. The one reason is always stated.
The chain says no. Unverified code, an excluded launcher, an owner who can still change the rules, a transfer tax, a honeypot flag, nobody able to sell, a drained pool, or a deployer still holding more than 5%.
A data source failed, so we don't know. Never a verdict and never a reason to size. Try again in a minute.
| Term | What it means here |
|---|---|
| Alert | A token that passed the structural checks at the hour our scanner saw it. We log its price then and read it again later. Every row in the track record is an alert. |
| All-time high, "below peak" | The highest price the token has traded at. "57% below peak" means it trades at 43% of that. |
| 30-day low, distance, bands | The lowest price in the last 30 days, and how far above it the price sits now. We group the distance into 4 bands: at base (within 30%), just off base (30 to 100% above), well off base (100 to 500%), already ran (more than 500%). |
| Caps, unknowns | Facts we couldn't read. An unknown never fails a token; it caps the size we'd suggest. Every unknown is listed on the verdict. |
| Robinhood Chain, 4663 | The blockchain these tokens live on. 4663 is its chain ID, the number wallets and tools use to tell it apart from other chains. |
| Creator fees | On most launchers the deployer earns a cut of every trade. We read how much has been earned, claimed, and what the deployer did with it. |
| Deployer, creator | The wallet that created the token contract. "Deployer 0%" means it holds none of the supply now. |
| Entry test | Three checks on top of the code checks before we'd size a token: at least 100 holders, at least $10,000 traded in the last 24 hours and 5% of market cap, and not up more than 30% today. A token we'd call conviction also has to be at least 60% below its peak. |
| FOMO | A social trading phone app (fomo.family) with 2.7 million users as of October 2026, where most Robinhood Chain memecoin buys come from. It routes a buy from the user's USDC on Solana through the Relay bridge to Robinhood Chain. Keelage has no connection to FOMO; we read what its users' trades do on the chain like any other trade. |
| Structural checks, "the gate" | What we read from the chain about the code itself: is it verified, which launcher made it, can an owner mint, pause, blacklist, change fees or upgrade it, is there a transfer tax, did anyone sell in the last 24 hours, has the pool been drained, does the deployer still hold more than 5%, does any source flag it as a honeypot. Pass all of them or the verdict is FAIL. |
| Honeypot | A token you can buy but not sell. We take the flag from two outside sources and we also look at whether sells actually went through. |
| Jev | A model that answers a typed question with a probability. We ask it "will this halve within 7 days?" and show the answer as context. We tested it against 423 outcomes; the halving answer tracks reality, the "up in 7 days" answer doesn't. |
| In the pool, liquidity | The dollars sitting in the token's trading pool. Thin pools move a lot on small trades, so we size against them: never more than 1% of the pool. |
| Market cap | Price times the number of tokens that exist. |
| MCP | Model Context Protocol, the standard way an AI agent connects to a tool. Keelage is an MCP server: your agent connects once and can call our four tools. |
| Median | The middle result when every row is lined up from worst to best. Half did better, half did worse. We use it instead of the average because one 60x would hide forty tokens that went to zero. |
| n | How many rows are behind a number. Under 30 is small; treat the number as a hint, not a fact. We print it next to every figure. |
| Reasons | The evidence that failed a token. Only evidence blocks; an unknown never does. Every reason is listed on the verdict. |
| RPC | The address your software uses to talk to the chain. The local server uses the public one unless you give it your own. |
| Scanner | Our hourly process. It reads every token it can find on Robinhood Chain, runs the checks, and logs the result with a timestamp. Running since July 2026, Robinhood Chain only since 9 Sep 2026. |
| Score | A number that orders tokens on the board. It never admits or rejects one, and in our studies it didn't predict returns, so it's the last tiebreak. |
| Size, size rule | How much we'd put in, in dollars, if the token is eligible: the lower of 1% of the pool and the tier's cap ($1,000 for conviction, $100 for scout). Never more. |
| Robinhood app wallet, smart account | Wallets created inside the Robinhood app read on the chain as EIP-7702 smart accounts. We count them among the holders so you can see how much of a token is held by app users. |
| Paid takeover claim | A listing a new team can buy on DexScreener to say they've taken over an abandoned token. In our study tokens carrying one did far worse than tokens without, so it shows as a caution and counts for nothing. |
| Transfer tax | Code that skims a cut of every transfer to someone's wallet. We read the contract for it. Pool fees, which every token pays to the exchange, are not a transfer tax. |
| Launcher, template | A factory contract that deploys the same token code for anyone who pays. Pons, LaunchToken, Doppler and UERC20 made 68% of the tokens on this chain. We judge the launcher's code once and every token from it inherits that judgement. "No launcher" means somebody wrote the contract by hand. |
| Third-party safety score | Services like GoPlus publish a safety rating for tokens. We read them for corroboration only. In our study a rule set built on them admitted the worse half of the market. |
| Sizing tier, the 30% and 45% lines | How concentrated the holders are, used to cap size. Conviction: the 10 largest wallets hold 30% or less and the pool is $50,000 or more. Scout, thin pool: 30% or less, pool under $50,000. Scout, cluster check: 30 to 45%. Watch only: over 45%, never sized. Where the lines come from. The 30% line is from published research we read in July 2026: tokens with more than 30% of supply in ten wallets made up 87% of the high-risk cases in that study. The 30 to 45% band is our own buffer, where we ask for a check on whether those wallets are one group. Above 45% a handful of wallets can set the price on their own, so we don't size at all. Our own record cuts the other way on returns: tokens over 45% didn't lose more (median -8%, 42% positive, 45 alerts). So the line is about one holder being able to dump on you, not about expected return. Both numbers get re-tested as the record grows. |
| 10 largest wallets | The share of the supply held by the ten biggest holders, with trading pools and other contracts taken out so you see people, not plumbing. Also written "top-10". |
| USDG | A dollar stablecoin on Robinhood Chain. Paid calls are priced in it. |
| Verified code | The contract's source code has been published and the explorer confirmed it matches what's on the chain. Unverified code means nobody can read what the contract does. |
| x402 | A way for a server to answer "pay 0.05 USDG first" and for your agent to pay and retry, with no account or card. Paid Keelage calls will work this way. |
Tools and fields are declared by the server, so your agent sees new ones the next time it connects. These are the ones in the build queue, in order.
| Tool | What it will answer | Needs |
|---|---|---|
| rulesets | The verdict under a ruleset you pick or pass: the default, a stricter one, or your own lines. The facts never change; only the policy over them does. Every ruleset is named and dated in the answer. | The thresholds file as a parameter |
| request form, stored and notified | The request a metric form writes to our own database first and then emails us, so nothing is missed. Until the hosting exists it opens an email to [email protected] instead. | Cloudflare Pages, Supabase, Resend under the Keelage identity |
| lines from the record | Every threshold in the rules (30% and 45% concentration, the $10,000 and 5% trading floors, 60% below peak for conviction, 5% deployer share) re-cut from our own outcome data on a schedule, and published with the date it was set and the rows behind it. Until then the lines are stated with their origin, not presented as measured. | Enough rows per line |
| app-wallet share | On the holder map: the share of a token held by wallets that were filled through the Relay bridge, which is how FOMO and similar apps deliver tokens. So you can see how much of a token sits with app users versus wallets that bought on the chain directly. | Relay fill history per wallet |
| keelage_fees | Creator fees earned, claimed, unclaimed. Dev wallet buys, sells, burns, bridge-outs. A flag when the pattern flips. | Fee-escrow and dev-wallet reads |
| keelage_board | The hourly board, as on the board page, with every row's verdict. | The hourly publisher |
| keelage_history | Every past verdict on a token, with its 24-hour and 7-day outcome. | The hourly publisher |
| keelage_x | What X is saying about a token in the last 24 hours: how many posts and accounts, how much is copy-paste, which large accounts posted and whether they meant this chain's token, and a one-line read of the narrative. Priced to cover the post data we buy. | Funded post-data account |
| keelage_exit | Route and slippage to ETH for your position size, quoted from live pools. | Pool quoting |
| keelage_creator | Earlier launches from the same deployer and how each one ended on our log. | The hourly publisher |
| keelage_watch | A push when a watched token's gate breaks, top-10 drifts, or liquidity halves. | Hosted server |
| Date | Version | Change |
|---|---|---|
| 2026-10-04 | 0.1.0 | First release: keelage_scan, keelage_holders, keelage_template, keelage_record over stdio. 5 reference tokens held to their structural verdict in the live test. |