mcp-server-robinhood-chain

MCP serverCloud & infra

Lets your agent look up crypto trading data like notable trader trades, DEX activity, and token creator reputation.

Unavailable. This server has no hosted endpoint yet, so ahel can't serve it.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

About this server

Robinhood Chain (id 4663) trading intelligence: KOL trades, DEX tape, deployer reputation.

From the project's README

As published by madeonsol/mcp-server-robinhood-chain in README.md.

πŸ“š API docs Β· πŸ€– Robinhood Chain Β· πŸ’° Free API key

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

Give Claude, Cursor, or any MCP 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.

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 β€” now 10 endpoints (grew from the original 6), documented at madeonsol.com/robinhood/x402 β€” but it is not part of this server.

New in 0.11.0 β€” BREAKING: HTTP mode now requires a separate token (security fix, SEC-02). If you run this server with MCP_TRANSPORT=http, you must now also set MCP_HTTP_TOKEN (a random secret you generate) and send it as Authorization: Bearer <token> on every request, including GET /health and the server-card endpoint β€” previously, anything that could reach the bound port could call every tool using the operator's own credentials with no authentication at all. HTTP mode is now hard-restricted to literal loopback (127.0.0.1 / ::1), rejects Origin/X-Forwarded-* headers and duplicate Authorization/Host headers outright, exposes only POST /mcp plus the two GET routes, and refuses to start if a wallet/payment credential is configured. If you use the default stdio transport (Claude Desktop, Cursor, most MCP clients), nothing changes β€” no action needed. This is a single shared-operator-token fix, not a new multi-user or OAuth system. Full writeup: docs/audit/SEC02_PRIVATE_HTTP_MCP.md.

New in 0.10.1 β€” the server now reports MCP instructions. The initialize response's instructions field (operational guidance for the calling agent β€” distinct from this README/package description) was never set; directories that introspect the live server (Glama) reported "no recorded MCP instructions." No new tools; still 68 total.

New in 0.10.0 β€” token locks & vesting (68 tools total). Three new tools, shipped 2026-09-15 and only now documented here (the code shipped without a version bump or a changelog line, so this README kept saying 65 while the server had actually registered 68 β€” checked going forward by scripts/verify-mcp-tool-counts.mjs in the main repo). rhc_token_locks (PRO+) is the newest-first feed of lock/vesting contracts created across every token β€” PinkLock-compatible, HoodLock, Team Finance-compatible, Titan, UNCX-compatible LP lockers and Sablier v4, decoded from our own node. rhc_token_lock_summary (PRO+) rolls every lock on ONE token into a live "did the team lock, how much, until when, can they cancel" view. rhc_token_unlocks (PRO+) lists upcoming unlock events chain-wide inside a 1h–90d window. All three are create-only: withdrawals and cancels are not tracked by any RHC locker's on-chain events, so withdrawn is always null (unknown), never 0 β€” never present a lock as "still held" beyond what the schedule says.

New in 0.9.0 β€” early buyers (65 tools total at the time). rhc_token_early_buyers (GET /rhc/tokens/{address}/early-buyers, PRO+) β€” first buyers of a token, ranked, with still-holding status. Found by an internal agentic-infra coverage audit as the one RHC capability unreachable from every agent surface, not just this one.

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:

{
  "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 β€” optional private, API-key-only adapter for one trusted operator on loopback. See the access requirements below; public hosting is unsupported.

Private HTTP transport (SEC-02)

Stdio remains the default for Claude Desktop, Cursor and other local MCP clients. HTTP now requires an explicit private-operator configuration; previously unauthenticated HTTP launch settings will fail closed.

  1. Set MADEONSOL_API_KEY to the operator's msk_ key.
  2. Generate a separate random access token, for example node -e "console.log(require('node:crypto').randomBytes(32).toString('base64url'))", and store it as MCP_HTTP_TOKEN. Do not reuse the upstream API key or put either credential in a URL.
  3. Set MCP_TRANSPORT=http, HOST=127.0.0.1 (default, or ::1) and optionally PORT (default 3100). Non-loopback bindings, missing credentials and any SVM_PRIVATE_KEY or RHC_PAYER_KEY are refused before startup. Solana wallet/x402 mode remains available through stdio.
  4. Connect to http://127.0.0.1:3100/mcp with Authorization: Bearer <MCP_HTTP_TOKEN> on every request, plus the normal MCP Content-Type and Accept headers. Use stdio if the client cannot attach headers. The local token is checked by the MCP adapter; only MADEONSOL_API_KEY is sent upstream.

Only POST /mcp, GET /health and GET /.well-known/mcp/server-card.json are exposed, all authenticated. / and arbitrary paths are no longer MCP endpoints. The adapter is stateless: it does not issue session IDs, rejects supplied Mcp-Session-Id, and returns 405 for GET/DELETE on /mcp. Host must be the selected loopback literal with its port, or localhost with that exact port. Browser Origin headers, forwarded/proxy headers and cross-origin requests are rejected; no CORS access is granted.

Limits: 256 KiB uncompressed JSON bodies, 8 KiB headers, a 10-second body-upload deadline, and 16 active authenticated requests. Oversized or malformed inputs are rejected before tool dispatch. This is not an overall tool-execution deadline; an upstream action already submitted may continue after a disconnect.

Everyone holding the local token acts as the same operator, including access to that operator's mutation tools. This is not a multi-user/OAuth server: do not put it behind a public proxy, share it with untrusted users or expose a funded signer. Separate users require isolated processes/credentials or a future transport that authenticates each principal and maps their own credentials. Restart with a new MCP_HTTP_TOKEN to rotate access.

The Docker image uses the same loopback restriction and requires both environment credentials. Its healthcheck authenticates without putting the token in the URL. It does not support a publicly published Docker port; use stdio or a client in the same trusted network namespace.

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

ToolRouteTierDescription
rhc_kol_feed/api/v1/rhc/kol/feedBASICKOL 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/leaderboardBASICKOLs ranked by trade count then net ETH flow (24h/7d/30d)
rhc_kol_hot_tokens/api/v1/rhc/kol/hot-tokensBASICConsensus tokens bought by 2+ distinct KOLs in the window
rhc_kol_profile/api/v1/rhc/kol/{wallet}BASICSingle KOL profile β€” stats over last 200 trades + 50 recent
rhc_kol_coordination/api/v1/rhc/kol/coordinationBASICTokens 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-touchesBASICEarliest KOL buy per token (discovery signal) β€” MC at entry, token age, tx_hash. evm_address on ULTRA only
rhc_trades/api/v1/rhc/tradesPRO+DEX trade tape β€” Uniswap v2/v3/v4 swaps with the effective trader_eoa + MEV fields
rhc_lp_events/api/v1/rhc/lp-eventsPRO+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/tokensPRO+Token discovery β€” MC, liquidity, peak MC + drawdown, launchpad, deployer tier
rhc_equities/api/v1/rhc/equitiesBASICTokenized 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}BASICToken snapshot β€” price/MC/FDV, deployer block, KOL activity, pools
rhc_token_batchPOST /api/v1/rhc/token/batchBASICUp 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}/candlesPRO+1-minute OHLC candles β€” price + MC OHLC, volume with buy/sell split
rhc_token_kol_consensus/api/v1/rhc/tokens/{address}/kol-consensusPRO+KOL positioning β€” buyers/sellers, exit rate, net_flow_eth, median entry MC
rhc_token_buyer_quality/api/v1/rhc/tokens/{address}/buyer-qualityBASIC0–100 early-buyer quality with bundle-buyer + dump-cluster legs
rhc_token_batch_buyer_qualityPOST /api/v1/rhc/tokens/batch/buyer-qualityBASICBuyer 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}/bundleBASICLaunch-bundle detection (same_block) + how much the cohort still holds
rhc_token_top_traders/api/v1/rhc/tokens/{address}/top-tradersPRO+Top traders by realized ETH flow (net_eth = sell βˆ’ buy, not PnL) + wallet reputation
rhc_token_flow/api/v1/rhc/tokens/{address}/flowPRO+Net buy/sell by mutually-exclusive cohort β€” positive net_eth means that cohort distributed
rhc_token_peak_history/api/v1/rhc/tokens/{address}/peak-historyPRO+Peak MC, drawdown, high-water curve β€” peak_mc_usd_recorded vs peak_mc_usd_observed
rhc_token_risk/api/v1/rhc/tokens/{address}/riskPRO+EVM-native risk computed live β€” proxy upgradeability, LP custody, uncached honeypot sell-sim
rhc_token_holders/api/v1/rhc/tokens/{address}/holdersPRO+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/leaderboardBASIC99k+ deployers ranked by reputation β€” graduation_rate ($40K), runner_rate ($100K); tier rides runner_rate
rhc_deployer_profile/api/v1/rhc/deployer-hunter/{address}BASICSingle deployer profile + 50 most recent tokens
rhc_deployer_tokens/api/v1/rhc/deployer-hunter/{address}/tokensBASICPaginated launch history with live + peak MC (sort=peak_mc_usd is page-scoped)
rhc_deployer_history/api/v1/rhc/deployer-hunter/{address}/historyPRO+Deep-paginated deploy history (up to 1000/page) with an exact total
rhc_deployer_trajectory/api/v1/rhc/deployer-hunter/{address}/trajectoryBASICImproving or declining? Streaks, 10-launch rolling success curve, best/worst stretch. Success = $40K graduation
rhc_deployer_best_tokens/api/v1/rhc/deployer-hunter/best-tokensBASICHighest peak-MC tokens launched by elite/good deployers in the window
rhc_deployer_stats/api/v1/rhc/deployer-hunter/statsBASICChain-wide summary β€” tier populations, spam share, alert volume, active tier_rules
rhc_deployer_alerts/api/v1/rhc/deployer-hunter/alertsBASICDeployer 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-bondsBASICTokens that just crossed the $40K peak-MC graduation milestone, newest peak first
rhc_alpha_wallets/api/v1/rhc/alpha-walletsPRO+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}/pnlPRO+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}/positionsPRO+Open positions marked to market β€” check liquidity_basis
rhc_wallet_trades/api/v1/rhc/wallet/{address}/tradesPRO+One wallet's trade tape, keyset-paginated by wallet (not token)
rhc_wallet_tracker_list/api/v1/rhc/wallet-tracker/watchlistPRO+List your RHC watchlist β€” quota is per chain
✍️ rhc_wallet_tracker_addPOST /api/v1/rhc/wallet-tracker/watchlistPRO+Track a wallet (address lowercased on write); 409 if already tracked, 403 at cap
πŸ—‘οΈ rhc_wallet_tracker_removeDELETE /api/v1/rhc/wallet-tracker/watchlist/{address}PRO+Untrack a wallet, freeing a quota slot
✍️ rhc_wallet_tracker_relabelPATCH /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/tradesPRO+Merged trade feed across your tracked wallets, label-tagged
rhc_wallet_tracker_summary/api/v1/rhc/wallet-tracker/summaryPRO+Per-wallet rollup from rhc_trades β€” full history, not capture-log scoped
rhc_copytrade_list/api/v1/rhc/copytrade/subscriptionsPRO+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/signalsPRO+Fire history, 7-day retention β€” the catch-up path after a missed webhook
rhc_price_alerts_list/api/v1/rhc/price-alertsPRO+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/eventsPRO+dip / recovery fire history, 30-day retention
rhc_coordination_alerts_list/api/v1/rhc/kol/coordination/alertsPRO+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/subscriptionsULTRA+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.

ToolRouteTierDescription
✍️ rhc_copytrade_createPOST /api/v1/rhc/copytrade/subscriptionsPRO+Create a copy-trade rule. Returns webhook_secret once
✍️ rhc_copytrade_updatePATCH /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_deleteDELETE /api/v1/rhc/copytrade/subscriptions/{id}PRO+Permanent. Use is_active: false to pause instead
✍️ rhc_price_alerts_createPOST /api/v1/rhc/price-alertsPRO+Create an MC dip (+ optional recovery) alert. Baseline is captured now
✍️ rhc_price_alerts_updatePATCH /api/v1/rhc/price-alerts/{id}PRO+Only name / delivery_mode / webhook_url / is_active β€” thresholds are immutable
πŸ—‘οΈ rhc_price_alerts_deleteDELETE /api/v1/rhc/price-alerts/{id}PRO+Permanent. Recreating re-captures the baseline, so delete+recreate is not a no-op
✍️ rhc_coordination_alerts_createPOST /api/v1/rhc/kol/coordination/alertsPRO+Fire when min_kols+ KOLs buy the same token inside window_minutes
✍️ rhc_coordination_alerts_updatePATCH /api/v1/rhc/kol/coordination/alerts/{id}PRO+Patch thresholds, MC band, delivery, is_active
πŸ—‘οΈ rhc_coordination_alerts_deleteDELETE /api/v1/rhc/kol/coordination/alerts/{id}PRO+Permanent
✍️ rhc_first_touch_subscriptions_createPOST /api/v1/rhc/kol/first-touches/subscriptionsULTRA+Push on a token's first tracked-KOL buy. Unknown filter keys are rejected
✍️ rhc_first_touch_subscriptions_updatePATCH /api/v1/rhc/kol/first-touches/subscriptions/{id}ULTRA+filters replaces the stored object wholesale β€” omitted keys are dropped
πŸ—‘οΈ rhc_first_touch_subscriptions_deleteDELETE /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.

Shortened here. Read the whole README on GitHub.

Signals

Last commit
Sep 2026
Weekly downloads
373
Weekly_downloads
152 weekly_downloads
Advanced
Delivery
robinhood-chain MCP server β†’ your ahel connector (mcp.ahel.ai) β†’ your AI.
Item type
mcp-server
Key
io-github-madeonsol-robinhood-chain
Source
github.com/madeonsol/mcp-server-robinhood-chain