Skip to main content
Glama
MadeOnSol

mcp-server-robinhood-chain

by MadeOnSol
README.md
# mcp-server-robinhood-chain

[![npm version](https://img.shields.io/npm/v/mcp-server-robinhood-chain?style=flat-square)](https://www.npmjs.com/package/mcp-server-robinhood-chain)
[![npm downloads](https://img.shields.io/npm/dm/mcp-server-robinhood-chain?style=flat-square)](https://www.npmjs.com/package/mcp-server-robinhood-chain)
[![MCP](https://img.shields.io/badge/MCP-server-8A2BE2?style=flat-square)](https://modelcontextprotocol.io/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](LICENSE)

> ๐Ÿ“š **[API docs](https://madeonsol.com/api-docs)** ยท ๐Ÿค– **[Robinhood Chain](https://madeonsol.com/robinhood)** ยท ๐Ÿ’ฐ **[Free API key](https://madeonsol.com/pricing)**

**Robinhood Chain MCP server โ€” EVM-native on-chain trading intelligence for AI agents, chain id 4663.**

Give Claude, Cursor, or any [MCP](https://modelcontextprotocol.io/) client direct access to Robinhood Chain (an Arbitrum Orbit L2) trading data from our **self-hosted RHC node**: real-time KOL trades plus coordination and first-touch discovery signals, the full Uniswap v2/v3/v4 DEX trade tape, token discovery with launch-bundle + early-buyer-quality detection (single **and** batch), 1-minute OHLC candles, deployer reputation across 99k+ ranked deployers (leaderboard, alerts, trajectory, per-deployer launch history), and smart-money wallet ranking โ€” plus full CRUD over the RHC **rule engines**: copy-trade rules, market-cap dip/recovery price alerts, KOL-coordination alerts and first-touch push subscriptions, all with per-chain quotas. Every tool is EVM-native โ€” lowercase `0x` addresses, `eth_amount`, `tx_hash`, `block_number`, `net_flow_eth`. The KOLโ†’EVM mapping is recovered by tracing each Solana KOL's bridge deposits (deBridge / Relay / Mayan / Wormhole), a dataset unique to MadeOnSol.

RHC coverage is **bundled into every tier at no extra cost**. Get a free API key (200 req/day, no card) at [madeonsol.com/pricing](https://madeonsol.com/pricing).

> **0.8.1** โ€” version alignment with the wider RHC SDK release: WebSocket stream tokens (`POST /api/v1/stream/token`) **never expire** since 2026-08-27 โ€” the same token comes back on every call, `expires_at` / `next_refresh_at` are always `null`, and only an explicit `{"rotate": true}` replaces one. This MCP server exposes REST tools, not WebSocket channels, and has no stream-token tool, so no tool behavior changed.

> **0.5.0** โ€” version alignment with the wider RHC SDK release: the stream channel names were corrected in the TS/Python/Rust SDKs (the RHC firehose channel is `rhc:dex_trades`; the server accepts `rhc:trades` only as a deprecated alias of it). This MCP server exposes REST tools, not WebSocket channels, so no tool behavior changed โ€” the `rhc_trades` tool (the `GET /rhc/trades` tape) is unaffected.

> **Key-mode only.** Authenticate with an `msk_` Bearer API key (`MADEONSOL_API_KEY`). Robinhood Chain does have a keyless x402 pay-per-call rail โ€” a deliberately narrow 6-endpoint subset, documented at [madeonsol.com/robinhood/x402](https://madeonsol.com/robinhood/x402) โ€” but it is not part of this server.

> **New in 0.8.0 โ€” tokenized equities + the liquidity-removals feed.** Two new tools. `rhc_equities` (`GET /rhc/equities`, **BASIC**) lists every official Robinhood tokenized stock and ETF (NVDA, SPY, AAPL, โ€ฆ) with live price / MC / liquidity and 24h trades, ETH volume and buyer-seller split, sortable by `volume` / `trades` / `market_cap` / `last_trade` / `symbol`, filterable by exact `symbol` or substring `q`. **Identity is the issuer beacon, never the name**: a token is listed only if its contract is an EIP-1967 beacon proxy on Robinhood's issuer beacon `0xe10b6f6bโ€ฆ151b00`, read from our own node โ€” on ship day there were 20 fake "GameStop โ€ข Robinhood Token" contracts and 8 fake NVDAs with the exact official suffix, and none of them appear. `rhc_lp_events` (`GET /rhc/lp-events`, **PRO+**) is the rug signal: Uniswap v2/v3 `Burn` and v4 `ModifyLiquidity` with a negative delta on tracked pools, from our node's log subscription, filterable by `token` / `pool` / `provider` / `dex` and cursor-paginated on `next_before`. **Removals only** โ€” adds are not persisted (the response's `coverage` block says `adds_persisted: false`), amounts are raw uint256 **strings**, v4 rows carry `liquidity` only, and `provider_is_token_deployer` is the classic rug tell. Data since 2026-08-05.

> **New in 0.7.0 โ€” `holder_growth`: who arrived and who left.** The `rhc_token_holders` tool now returns `holder_growth` on `GET /rhc/tokens/{address}/holders`: `{ "1h", "24h", "7d" }` ร— `{ cutoff_block, entered, entered_still_holding, exited, net }`. *entered* = addresses whose first `Transfer` of the token landed at-or-after the window's cutoff block (any current balance); *entered_still_holding* = those still non-zero; *exited* = pre-existing holders whose last movement in the window left them at zero; *net* โ‰ˆ the change in `holder_count`. Pools and burn addresses are excluded from every count. This exists because RHC balances are folded from ERC-20 Transfer logs on our own node โ€” the fold keeps first-seen and last-moved blocks per address and retains zero-balance rows โ€” so it is a direct read, not an estimate; the Solana census is a point-in-time ledger scan with no history and cannot answer this. A window is `null` (never 0) only when the chain had no ingested trades in it; the whole block is `null` only if the growth read failed. Sanity check from ship day: a token launched that morning showed 593 entered / 560 still holding over 24h, and `holder_count` was exactly 560.

> **New in 0.6.0 โ€” wallet intelligence.** Ten new operations covering the Robinhood Chain wallet surface, which had no SDK binding at all until now: `rhc_wallet`, `rhc_wallet_pnl`, `rhc_wallet_positions`, `rhc_wallet_trades`, plus the watchlist tools โ€” `rhc_wallet_tracker_list`, `rhc_wallet_tracker_add`, `rhc_wallet_tracker_remove`, `rhc_wallet_tracker_relabel`, `rhc_wallet_tracker_trades` and `rhc_wallet_tracker_summary`. Everything is **ETH**-denominated, and cost basis is FIFO over a rolling 90-day window โ€” `cost_basis_observable_from` names the date the window opens, so a position opened before it reads as a sell with no matching buy. The profile / PnL / positions trio shares ONE snapshot cache server-side, so calling all three on an address costs roughly one computation rather than three; `cache_hit` says which call paid for it. Watchlist quotas are **per chain** (PRO 50 / ULTRA 100 / BUSINESS 500 RHC wallets), independent of your Solana list.

## Install & configure

Add to your MCP client config (Claude Desktop, Cursor, Claude Code). No install step โ€” `npx` fetches it on first run:

```json
{
  "mcpServers": {
    "robinhood-chain": {
      "command": "npx",
      "args": ["-y", "mcp-server-robinhood-chain"],
      "env": {
        "MADEONSOL_API_KEY": "msk_your_api_key_here"
      }
    }
  }
}
```

Then ask your agent things like *"What are tracked KOLs buying on Robinhood Chain right now?"* or *"Score the early-buyer cohort for token 0xโ€ฆ on chain 4663."*

### Transports

- **stdio** (default) โ€” for local clients (Claude Desktop, Cursor, Claude Code).
- **http** โ€” set `MCP_TRANSPORT=http` (+ optional `PORT`, default 3100) for hosted environments (Smithery, etc.). Exposes `/health` and `/.well-known/mcp/server-card.json`.

## Tools โ€” all 64 Robinhood Chain routes

Each tool maps 1:1 to a Robinhood Chain v1 API route. **49 are reads** (GET, plus the two batch tools which POST an address list only because it is too long for a query string) and **15 genuinely write** (POST / PATCH / DELETE on the rule engines, plus the three wallet-watchlist mutations) โ€” those are marked โœ๏ธ / ๐Ÿ—‘๏ธ below and carry non-`readOnly` MCP annotations, so a well-behaved client will not call them speculatively. Fields are EVM-native.

### Reads

| Tool | Route | Tier | Description |
|---|---|---|---|
| `rhc_kol_feed` | `/api/v1/rhc/kol/feed` | BASIC | KOL trade feed with MC/peak enrichment and `mc_multiple_since_trade` (real-time on PRO+; 5-min delay on free keys) |
| `rhc_kol_leaderboard` | `/api/v1/rhc/kol/leaderboard` | BASIC | KOLs ranked by trade count then net ETH flow (`24h`/`7d`/`30d`) |
| `rhc_kol_hot_tokens` | `/api/v1/rhc/kol/hot-tokens` | BASIC | Consensus tokens bought by 2+ distinct KOLs in the window |
| `rhc_kol_profile` | `/api/v1/rhc/kol/{wallet}` | BASIC | Single KOL profile โ€” stats over last 200 trades + 50 recent |
| `rhc_kol_coordination` | `/api/v1/rhc/kol/coordination` | BASIC | Tokens bought by `min_kols`+ distinct KOLs โ€” net ETH, accumulating vs distributing, `time_to_consensus_sec`, per-KOL breakdown |
| `rhc_kol_first_touches` | `/api/v1/rhc/kol/first-touches` | BASIC | Earliest KOL buy per token (discovery signal) โ€” MC at entry, token age, `tx_hash`. `evm_address` on ULTRA only |
| `rhc_trades` | `/api/v1/rhc/trades` | PRO+ | DEX trade tape โ€” Uniswap v2/v3/v4 swaps with the effective `trader_eoa` + MEV fields |
| `rhc_lp_events` | `/api/v1/rhc/lp-events` | PRO+ | Liquidity **removals** feed (the rug signal) โ€” v2/v3 `Burn` + v4 negative `ModifyLiquidity`, raw uint256 strings, `provider_is_token_deployer`. Removals only, adds are not persisted |
| `rhc_tokens` | `/api/v1/rhc/tokens` | PRO+ | Token discovery โ€” MC, liquidity, peak MC + drawdown, launchpad, deployer tier |
| `rhc_equities` | `/api/v1/rhc/equities` | BASIC | Tokenized stocks & ETFs (NVDA, SPY, AAPLโ€ฆ) โ€” live price/MC/liquidity + 24h trades / ETH volume / buyer-seller split. Identity = issuer **beacon** `0xe10bโ€ฆ151b00`, never the name |
| `rhc_token` | `/api/v1/rhc/tokens/{address}` | BASIC | Token snapshot โ€” price/MC/FDV, deployer block, KOL activity, pools |
| `rhc_token_batch` | `POST /api/v1/rhc/token/batch` | BASIC | **Up to 50 tokens in one call** โ€” price/MC/FDV, peak MC, deployer reputation. Unknown addresses echo back as `found: false` |
| `rhc_token_candles` | `/api/v1/rhc/tokens/{address}/candles` | PRO+ | 1-minute OHLC candles โ€” price + MC OHLC, volume with buy/sell split |
| `rhc_token_kol_consensus` | `/api/v1/rhc/tokens/{address}/kol-consensus` | PRO+ | KOL positioning โ€” buyers/sellers, exit rate, `net_flow_eth`, median entry MC |
| `rhc_token_buyer_quality` | `/api/v1/rhc/tokens/{address}/buyer-quality` | BASIC | 0โ€“100 early-buyer quality with bundle-buyer + dump-cluster legs |
| `rhc_token_batch_buyer_quality` | `POST /api/v1/rhc/tokens/batch/buyer-quality` | BASIC | Buyer quality for **up to 20** tokens in one call (cap is 20, *not* 50 โ€” it's a per-token cohort computation) |
| `rhc_token_bundle` | `/api/v1/rhc/tokens/{address}/bundle` | BASIC | Launch-bundle detection (`same_block`) + how much the cohort still holds |
| `rhc_token_top_traders` | `/api/v1/rhc/tokens/{address}/top-traders` | PRO+ | Top traders by **realized** ETH flow (`net_eth` = sell โˆ’ buy, *not* PnL) + wallet reputation |
| `rhc_token_flow` | `/api/v1/rhc/tokens/{address}/flow` | PRO+ | Net buy/sell by mutually-exclusive cohort โ€” positive `net_eth` means that cohort **distributed** |
| `rhc_token_peak_history` | `/api/v1/rhc/tokens/{address}/peak-history` | PRO+ | Peak MC, drawdown, high-water curve โ€” `peak_mc_usd_recorded` vs `peak_mc_usd_observed` |
| `rhc_token_risk` | `/api/v1/rhc/tokens/{address}/risk` | PRO+ | EVM-native risk computed live โ€” proxy upgradeability, LP custody, uncached honeypot sell-sim |
| `rhc_token_holders` | `/api/v1/rhc/tokens/{address}/holders` | PRO+ | Exact holders + concentration from Transfer-log replay, reconciled against `totalSupply()`. Check `verified` first. `holder_growth` (1h/24h/7d): `entered`, `entered_still_holding`, `exited`, `net` โ‰ˆ ฮ” `holder_count` |
| `rhc_deployer_leaderboard` | `/api/v1/rhc/deployer-hunter/leaderboard` | BASIC | 99k+ deployers ranked by reputation โ€” `graduation_rate` ($40K), `runner_rate` ($100K); tier rides `runner_rate` |
| `rhc_deployer_profile` | `/api/v1/rhc/deployer-hunter/{address}` | BASIC | Single deployer profile + 50 most recent tokens |
| `rhc_deployer_tokens` | `/api/v1/rhc/deployer-hunter/{address}/tokens` | BASIC | Paginated launch history with live + peak MC (`sort=peak_mc_usd` is page-scoped) |
| `rhc_deployer_history` | `/api/v1/rhc/deployer-hunter/{address}/history` | PRO+ | Deep-paginated deploy history (up to 1000/page) with an exact total |
| `rhc_deployer_trajectory` | `/api/v1/rhc/deployer-hunter/{address}/trajectory` | BASIC | Improving or declining? Streaks, 10-launch rolling success curve, best/worst stretch. Success = $40K graduation |
| `rhc_deployer_best_tokens` | `/api/v1/rhc/deployer-hunter/best-tokens` | BASIC | Highest peak-MC tokens launched by `elite`/`good` deployers in the window |
| `rhc_deployer_stats` | `/api/v1/rhc/deployer-hunter/stats` | BASIC | Chain-wide summary โ€” tier populations, spam share, alert volume, active `tier_rules` |
| `rhc_deployer_alerts` | `/api/v1/rhc/deployer-hunter/alerts` | BASIC | Deployer alerts โ€” **tradability-filtered by default**, tier resolved at read time (`tier_at_alert`, `tier_is_stale`) |
| `rhc_recent_bonds` | `/api/v1/rhc/deployer-hunter/recent-bonds` | BASIC | Tokens that just crossed the $40K peak-MC graduation milestone, newest peak first |
| `rhc_alpha_wallets` | `/api/v1/rhc/alpha-wallets` | PRO+ | Smart-money wallets โ€” `net_eth`, `win_rate`, `memecoin_share`, `likely_bot` |
| `rhc_wallet` | `/api/v1/rhc/wallet/{address}` | PRO+ | Wallet 90-day profile โ€” ETH PnL, per-token breakdown, reputation flags (shares one snapshot cache with pnl/positions) |
| `rhc_wallet_pnl` | `/api/v1/rhc/wallet/{address}/pnl` | PRO+ | FIFO cost-basis PnL over the rolling 90-day window โ€” curve, closed + open positions; `cost_basis_observable_from` |
| `rhc_wallet_positions` | `/api/v1/rhc/wallet/{address}/positions` | PRO+ | Open positions marked to market โ€” check `liquidity_basis` |
| `rhc_wallet_trades` | `/api/v1/rhc/wallet/{address}/trades` | PRO+ | One wallet's trade tape, keyset-paginated by wallet (not token) |
| `rhc_wallet_tracker_list` | `/api/v1/rhc/wallet-tracker/watchlist` | PRO+ | List your RHC watchlist โ€” quota is per chain |
| โœ๏ธ `rhc_wallet_tracker_add` | `POST /api/v1/rhc/wallet-tracker/watchlist` | PRO+ | Track a wallet (address lowercased on write); 409 if already tracked, 403 at cap |
| ๐Ÿ—‘๏ธ `rhc_wallet_tracker_remove` | `DELETE /api/v1/rhc/wallet-tracker/watchlist/{address}` | PRO+ | Untrack a wallet, freeing a quota slot |
| โœ๏ธ `rhc_wallet_tracker_relabel` | `PATCH /api/v1/rhc/wallet-tracker/watchlist/{address}` | PRO+ | Relabel a tracked wallet; `null` clears the label |
| `rhc_wallet_tracker_trades` | `/api/v1/rhc/wallet-tracker/trades` | PRO+ | Merged trade feed across your tracked wallets, label-tagged |
| `rhc_wallet_tracker_summary` | `/api/v1/rhc/wallet-tracker/summary` | PRO+ | Per-wallet rollup from `rhc_trades` โ€” full history, not capture-log scoped |
| `rhc_copytrade_list` | `/api/v1/rhc/copytrade/subscriptions` | PRO+ | List your copy-trade rules |
| `rhc_copytrade_get` | `/api/v1/rhc/copytrade/subscriptions/{id}` | PRO+ | One copy-trade rule by numeric id |
| `rhc_copytrade_signals` | `/api/v1/rhc/copytrade/signals` | PRO+ | Fire history, **7-day** retention โ€” the catch-up path after a missed webhook |
| `rhc_price_alerts_list` | `/api/v1/rhc/price-alerts` | PRO+ | List your market-cap dip/recovery alerts |
| `rhc_price_alerts_get` | `/api/v1/rhc/price-alerts/{id}` | PRO+ | One price alert by numeric id, with its captured `baseline_mc_usd` |
| `rhc_price_alerts_events` | `/api/v1/rhc/price-alerts/events` | PRO+ | `dip` / `recovery` fire history, **30-day** retention |
| `rhc_coordination_alerts_list` | `/api/v1/rhc/kol/coordination/alerts` | PRO+ | List your KOL-coordination alert rules |
| `rhc_coordination_alerts_get` | `/api/v1/rhc/kol/coordination/alerts/{id}` | PRO+ | One coordination rule by UUID |
| `rhc_first_touch_subscriptions_list` | `/api/v1/rhc/kol/first-touches/subscriptions` | ULTRA+ | List your first-touch push subscriptions |
| `rhc_first_touch_subscriptions_get` | `/api/v1/rhc/kol/first-touches/subscriptions/{id}` | ULTRA+ | One first-touch subscription by UUID |

### Writes โ€” rule engines

These **mutate server state**, consume per-tier quota and fire webhooks. They are annotated `readOnlyHint: false`; the deletes additionally carry `destructiveHint: true`. Creates are *not* idempotent โ€” calling one twice makes two rules and can hit the cap with a `409`.

| Tool | Route | Tier | Description |
|---|---|---|---|
| โœ๏ธ `rhc_copytrade_create` | `POST /api/v1/rhc/copytrade/subscriptions` | PRO+ | Create a copy-trade rule. Returns `webhook_secret` **once** |
| โœ๏ธ `rhc_copytrade_update` | `PATCH /api/v1/rhc/copytrade/subscriptions/{id}` | PRO+ | Patch a rule; `source_wallets` is a whole-list replace, re-checked against the tier cap |
| ๐Ÿ—‘๏ธ `rhc_copytrade_delete` | `DELETE /api/v1/rhc/copytrade/subscriptions/{id}` | PRO+ | Permanent. Use `is_active: false` to pause instead |
| โœ๏ธ `rhc_price_alerts_create` | `POST /api/v1/rhc/price-alerts` | PRO+ | Create an MC dip (+ optional recovery) alert. Baseline is captured **now** |
| โœ๏ธ `rhc_price_alerts_update` | `PATCH /api/v1/rhc/price-alerts/{id}` | PRO+ | Only `name` / `delivery_mode` / `webhook_url` / `is_active` โ€” thresholds are immutable |
| ๐Ÿ—‘๏ธ `rhc_price_alerts_delete` | `DELETE /api/v1/rhc/price-alerts/{id}` | PRO+ | Permanent. Recreating re-captures the baseline, so delete+recreate is not a no-op |
| โœ๏ธ `rhc_coordination_alerts_create` | `POST /api/v1/rhc/kol/coordination/alerts` | PRO+ | Fire when `min_kols`+ KOLs buy the same token inside `window_minutes` |
| โœ๏ธ `rhc_coordination_alerts_update` | `PATCH /api/v1/rhc/kol/coordination/alerts/{id}` | PRO+ | Patch thresholds, MC band, delivery, `is_active` |
| ๐Ÿ—‘๏ธ `rhc_coordination_alerts_delete` | `DELETE /api/v1/rhc/kol/coordination/alerts/{id}` | PRO+ | Permanent |
| โœ๏ธ `rhc_first_touch_subscriptions_create` | `POST /api/v1/rhc/kol/first-touches/subscriptions` | ULTRA+ | Push on a token's first tracked-KOL buy. Unknown filter keys are rejected |
| โœ๏ธ `rhc_first_touch_subscriptions_update` | `PATCH /api/v1/rhc/kol/first-touches/subscriptions/{id}` | ULTRA+ | `filters` **replaces** the stored object wholesale โ€” omitted keys are dropped |
| ๐Ÿ—‘๏ธ `rhc_first_touch_subscriptions_delete` | `DELETE /api/v1/rhc/kol/first-touches/subscriptions/{id}` | ULTRA+ | Permanent |

**Rule-engine quotas are PER CHAIN.** A full set of Solana copy-trade rules, price alerts, coordination rules or first-touch subscriptions does **not** consume your RHC allowance, and vice versa.

| Engine | PRO | ULTRA | BUSINESS |
|---|---|---|---|
| Copy-trade rules (source wallets each) | 3 (5) | 20 (50) | 100 (250) |
| Price alerts (active) | 5 | 25 | 125 |
| Coordination rules | 5 | 20 | 100 |
| First-touch subscriptions | โ€” | 10 | 50 |

> BASIC works with any valid key. PRO+ tools return HTTP 403 on a BASIC key โ€” [upgrade at madeonsol.com/pricing](https://madeonsol.com/pricing).

### Five things agents get wrong

- **RHC price alerts are polled, not pushed.** Evaluation is a **~15 second poll** of the RHC price table โ€” the RHC price writer emits no `pg_notify`, so there is nothing to react to. Effective latency is that interval plus the token's own price-update cadence. Do **not** promise parity with the Solana price alerts, which are sub-second. `fired_at` on an event is the poll tick that observed the move, not the on-chain moment.
- **RHC copy-trade has no market-cap band.** There is no `min_mc_usd` / `max_mc_usd` on a copy-trade rule, unlike the Solana engine, because the RHC KOL trade event carries no market cap โ€” the filter would need a per-event DB read on a ~3.3M-trades/day chain, or it would silently never match. Filter on `min_trade_eth` and `only_action` instead.


- **`trader_eoa` is not simply `tx.from`.** It is the *effective trading account*: `tx.from` on an ordinary transaction, but the ERC-4337 userOp sender (`UserOperationEvent`) when the trade was bundled โ€” never the bundler that relayed the batch, and never the router. It is still an EOA either way; on Robinhood Chain a userOp sender is an ordinary EOA carrying an EIP-7702 delegation, not a smart-contract wallet. Attribute trades and rank wallets on `trader_eoa`; the separate `trader` field is only the swap-log recipient, which is the router on aggregated swaps.
- **`rhc_deployer_alerts` filters for tradability by default.** Alerts on tokens with `liquidity_usd` under $100 (including unknown liquidity) are dropped โ€” a $45K-MC alert on a drained $68 pool is not a signal. Pass `include_untradeable: true` for the raw tape; the response always echoes the active `tradability_filter`. The alert's `tier` is resolved from the live reputation view at read time, so it can never advertise a reputation the deployer has since lost โ€” the snapshot taken when the alert fired is returned separately as `tier_at_alert`, with `tier_is_stale` flagging the drift.
- **`graduation_rate` no longer sets the tier.** It still means the $40K peak-MC bar and is still returned everywhere, but `elite`/`good` are earned on `runner_rate` ($100K) plus 24h of deployer history. Ranking deployers by `graduation_rate` is ranking them on a metric the tier ignores.

## Why Robinhood Chain

Robinhood Chain is dual-natured โ€” launchpad memecoins (pons / flap / clanker / hood.fun / virtuals) alongside tokenized stocks and stablecoins. Most launchpads are **direct-to-DEX** (no bonding curve), so "graduation" is a market-cap milestone: `graduation_rate` = share of a deployer's tokens that reached a $40K+ peak MC, `runner_rate` = share that reached $100K+. The `elite`/`good` **tier** rides `runner_rate` and requires 24h of deployer history (elite = 5+ tokens, 24h+ old, `runner_rate >= 0.50`; good = `>= 0.25`) โ€” `graduation_rate` is still reported but no longer sets the tier, since the $40K bar proved farmable; only `spammer` still keys off it (20+ tokens, `graduation_rate < 0.05`). Because it's an Arbitrum Orbit L2 with no atomic multi-signer transaction, a detected launch bundle is `same_block` (there is no `atomic_tx`).

## Links

- ๐Ÿค– Robinhood Chain overview โ€” https://madeonsol.com/robinhood
- ๐Ÿ’ฐ Pricing & free API key โ€” https://madeonsol.com/pricing
- ๐Ÿ“š API docs โ€” https://madeonsol.com/api-docs

## License

MIT ยฉ MadeOnSol

Maintenance

ActivityActive
ResponsivenessNo issues