io.github.MadeOnSol/robinhood-chain
NPM · MCP-SERVER-ROBINHOOD-CHAIN · SCANNED SEP 20
Robinhood Chain (id 4663) trading intelligence: KOL trades, DEX tape, deployer reputation.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability69
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 12188 tokens (~187/item across 65 items; 65 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
- Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 65 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.MadeOnSol/robinhood-chain MCP server?
io.github.MadeOnSol/robinhood-chain runs locally as an npm package, launched with npx -y mcp-server-robinhood-chain. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · mcp-server-robinhood-chain
claude mcp add madeonsol-robinhood-chain -- npx -y mcp-server-robinhood-chain
{
"mcpServers": {
"madeonsol-robinhood-chain": {
"command": "npx",
"args": [
"-y",
"mcp-server-robinhood-chain"
]
}
}
} {
"servers": {
"madeonsol-robinhood-chain": {
"command": "npx",
"args": [
"-y",
"mcp-server-robinhood-chain"
]
}
}
} codex mcp add madeonsol-robinhood-chain -- npx -y mcp-server-robinhood-chain
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"madeonsol-robinhood-chain": {
"type": "local",
"command": [
"npx",
"-y",
"mcp-server-robinhood-chain"
],
"enabled": true
}
}
} openclaw mcp add madeonsol-robinhood-chain --command npx --arg -y --arg mcp-server-robinhood-chain
mcp_servers:
madeonsol-robinhood-chain:
command: "npx"
args: ["-y", "mcp-server-robinhood-chain"] {
"McpServers": {
"madeonsol-robinhood-chain": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"mcp-server-robinhood-chain"
]
}
}
} assistant mcp add madeonsol-robinhood-chain -t stdio -c npx -a -y mcp-server-robinhood-chain
{
"mcpServers": {
"madeonsol-robinhood-chain": {
"command": "npx",
"args": [
"-y",
"mcp-server-robinhood-chain"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +3
- Stability: unverified → 0.27 ▲ functional
- 12 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 10 Sept 26 49
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/mcp-server-robinhood-chain@0.9.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
rhc_alpha_wallets ~409
Robinhood Chain smart-money wallet ranking — trader wallets ranked by realized on-chain performance. Wallets are effective trading accounts (the ERC-4337 userOp sender where a trade was bundled, not the bundler that relayed it), so relayer addresses do not appear as traders. net_eth is realized net flow (sell − buy); win_rate is the share of traded tokens taken out profitably; likely_bot flags atomic-arb/MM fleets. memecoin_share = launchpad-token trade share — filter with min_memecoin_share to isolate memecoin traders, or max_avg_mc_usd for low-caps. Refreshed every 15 min. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| active_hours | number | – | Only wallets that traded within the last N hours |
| classification | string | – | human = not likely_bot; smart_money = human + net_eth ≥ 2 + win_rate ≥ 0.45 |
| identity | string | – | known_kol = already mapped to a tracked Solana KOL; unknown = net-new RHC smart money |
| limit | number | – | Page size (1-100, default 25) |
| max_avg_mc_usd | number | – | Maximum average market cap traded — filter to low-cap degens |
| max_win_rate | number | – | Maximum win rate (0-1) |
| min_buy_eth | number | – | Minimum ETH deployed (whale/size filter) |
| min_memecoin_share | number | – | Minimum share of trades in launchpad memecoins (0.7 ≈ mostly-memecoin) |
| min_net_eth | number | – | Minimum realized net ETH flow |
| min_tokens | number | – | Minimum distinct tokens traded |
| min_trades | number | – | Minimum trade count |
| min_win_rate | number | – | Minimum win rate (0-1) |
| offset | number | – | Pagination offset |
| order | string | – | Sort direction |
| sort | string | – | Sort axis |
No output schema declared.
No examples provided.
rhc_coordination_alerts_create ~403
CREATE a Robinhood Chain coordination alert rule (POST — this writes and consumes quota). Fires when min_kols+ distinct tracked KOLs buy the same RHC token within window_minutes and the cluster scores at least min_score. SCORING CAVEAT: the shared v1 scorer is used so the number is comparable to Solana, but on RHC the `earliness` component is DEFAULTED to 50 (RHC has no early-entry equivalent) while `quality` is real (KOL 7d win-rate); every fired signal records which components were real in score_inputs. Delivered on the rhc:kol:coordination WS channel and/or an HMAC-signed webhook; webhook_secret is returned EXACTLY ONCE. Rule quota is PER CHAIN (PRO 5, ULTRA 20, BUSINESS 100); exceeding it returns 409. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| cooldown_min | integer | – | Silence per (rule, token) in minutes (1-1440, default 30) |
| delivery_mode | string | – | Where fires are delivered (default 'websocket') |
| max_mc_usd | – | – | Maximum token market cap — must be >= min_mc_usd |
| min_kols | integer | – | Minimum distinct KOL buyers to fire (2-50, default 3) |
| min_mc_usd | – | – | Minimum token market cap, or null for no floor |
| min_score | integer | – | Minimum composite score 0-100 (default 0) |
| name | string | – | Optional human label (max 64 chars) |
| score_jump_break | integer | – | Re-fire inside the cooldown when the score jumps this many points (0-100, default 20) |
| webhook_url | string | – | HTTPS URL — REQUIRED unless delivery_mode is 'websocket' |
| window_minutes | integer | – | Rolling cluster window in minutes (1-60, default 15) |
No output schema declared.
No examples provided.
rhc_coordination_alerts_delete ~65
DELETE a Robinhood Chain coordination alert rule PERMANENTLY. This cannot be undone — to stop it temporarily use rhc_coordination_alerts_update with is_active:false. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Coordination rule id (UUID) |
No output schema declared.
No examples provided.
rhc_coordination_alerts_get ~57
Get ONE Robinhood Chain coordination alert rule by id (UUID). Returns 404 if the rule does not exist or is not yours. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Coordination rule id (UUID) |
No output schema declared.
No examples provided.
rhc_coordination_alerts_list ~115
List your Robinhood Chain coordination alert rules — rules that fire when min_kols+ tracked KOLs buy the same RHC token inside a rolling window. Returns min_kols, window_minutes, min_score, cooldown_min, score_jump_break, the optional min_mc_usd/max_mc_usd band, delivery_mode and is_active. Rule quota is PER CHAIN and does not consume the Solana coordination budget: PRO 5, ULTRA 20, BUSINESS 100. Tier: PRO+.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rhc_coordination_alerts_update ~296
UPDATE a Robinhood Chain coordination alert rule (PATCH — this writes). Send only the fields you want changed; is_active:false pauses the rule without deleting it. The min_mc_usd <= max_mc_usd check is only applied when BOTH bounds arrive in the same call, so send both together when narrowing a band. Pass null for name, webhook_url, min_mc_usd or max_mc_usd to clear them. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| cooldown_min | integer | – | Silence per (rule, token) in minutes (1-1440) |
| delivery_mode | string | – | Where fires are delivered |
| id | string | yes | Coordination rule id (UUID) |
| is_active | boolean | – | false pauses the rule without deleting it |
| max_mc_usd | – | – | Maximum market cap, or null to clear the ceiling |
| min_kols | integer | – | Minimum distinct KOL buyers (2-50) |
| min_mc_usd | – | – | Minimum market cap, or null to clear the floor |
| min_score | integer | – | Minimum composite score 0-100 |
| name | – | – | New label, or null to clear |
| score_jump_break | integer | – | Re-fire threshold in score points (0-100) |
| webhook_url | – | – | New HTTPS webhook URL, or null to clear |
| window_minutes | integer | – | Rolling cluster window in minutes (1-60) |
No output schema declared.
No examples provided.
rhc_copytrade_create ~378
CREATE a Robinhood Chain copy-trade rule (POST — this writes and consumes quota; do not call it to explore). Amounts are ETH, not SOL. IMPORTANT: RHC copy-trade has NO market-cap band (no min_mc_usd/max_mc_usd) — unlike the Solana engine — because the RHC KOL trade event carries no market cap, so the filter would either need a per-event DB lookup on a ~3.3M-trades/day chain or silently never match. Returns webhook_secret EXACTLY ONCE when delivery_mode includes 'webhook' — store it, payloads are HMAC-SHA256 over `<timestamp>.<body>` in X-MadeOnSol-Signature. Rule/wallet caps are PER CHAIN (PRO 3 rules / 5 wallets, ULTRA 20 / 50, BUSINESS 100 / 250); exceeding the rule cap returns 409. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where signals are delivered (default 'webhook') |
| min_trade_eth | number | – | Minimum source-wallet trade size in ETH to fire (default 0) |
| name | string | – | Optional human label (max 64 chars) |
| only_action | string | – | Which side to mirror (default 'buy') |
| sizing_amount | number | yes | Amount in ETH, interpreted by sizing_mode. Required |
| sizing_mode | string | – | How sizing_amount is interpreted (default 'fixed') |
| source_wallets | array | yes | 1-250 source EVM wallets to mirror (0x, 40 hex). Lowercased on write. Capped by tier: PRO 5, ULTRA 50, BUSINESS 250 |
| webhook_url | string | – | HTTPS URL — REQUIRED unless delivery_mode is 'websocket' |
No output schema declared.
No examples provided.
rhc_copytrade_delete ~81
DELETE a Robinhood Chain copy-trade rule PERMANENTLY. This cannot be undone — to stop a rule temporarily use rhc_copytrade_update with is_active:false instead. Returns 404 if the rule does not exist or is not yours. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Copy-trade rule id (positive integer) |
No output schema declared.
No examples provided.
rhc_copytrade_get ~57
Get ONE Robinhood Chain copy-trade rule by id. Returns 404 if the rule does not exist or is not yours. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Copy-trade rule id (positive integer) |
No output schema declared.
No examples provided.
rhc_copytrade_list ~139
List your Robinhood Chain copy-trade rules. Each rule mirrors 1+ source EVM wallets and emits a signal (webhook and/or the rhc:copytrade:signals WS channel) when they trade on chain 4663. Returns id, name, source_wallets, min_trade_eth, only_action, sizing_mode, sizing_amount, delivery_mode, webhook_url, is_active. Rule caps are PER CHAIN and do not consume the Solana copy-trade budget: PRO 3 rules / 5 wallets each, ULTRA 20 / 50, BUSINESS 100 / 250. Tier: PRO+.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rhc_copytrade_signals ~148
Fire history for your Robinhood Chain copy-trade rules — the catch-up path after a missed webhook or a dropped WS connection. Each signal carries fired_at, source_wallet, action, token_address/symbol/name, source_eth_amount, suggested_eth_amount, price_usd, dex, tx_hash and delivery status. Retained 7 DAYS, newest first. Read-only. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of signals (1-500, default 50) |
| since | string | – | Only signals fired at or after this ISO 8601 timestamp |
| subscription_id | integer | – | Filter to one of your rules (404 if not yours) |
No output schema declared.
No examples provided.
rhc_copytrade_update ~253
UPDATE a Robinhood Chain copy-trade rule (PATCH — this writes). Send only the fields you want changed; is_active:false pauses a rule without deleting it. source_wallets is a whole-list REPLACE and is re-checked against the tier wallet cap, so a PRO rule cannot be PATCHed past 5 wallets. Pass null for name or webhook_url to clear them. There is no market-cap band to set on RHC. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where signals are delivered |
| id | integer | yes | Copy-trade rule id (positive integer) |
| is_active | boolean | – | false pauses the rule without deleting it |
| min_trade_eth | number | – | Minimum source trade size in ETH |
| name | – | – | New label, or null to clear |
| only_action | string | – | Which side to mirror |
| sizing_amount | number | – | Amount in ETH |
| sizing_mode | string | – | How sizing_amount is interpreted |
| source_wallets | array | – | Replacement wallet list (0x, 40 hex) — re-checked against the tier cap |
| webhook_url | – | – | New HTTPS webhook URL, or null to clear |
No output schema declared.
No examples provided.
rhc_deployer_alerts ~475
Robinhood Chain deployer alert feed — new_deploy / graduated events, newest first. TWO things a consumer must know: (1) TRADABILITY IS FILTERED BY DEFAULT — alerts on tokens with liquidity_usd < $100 (including unknown liquidity) are dropped, because a $45K-MC alert on a drained $68 pool is not a signal; set include_untradeable=true for the raw tape. The active setting is echoed as tradability_filter. (2) TIER IS RESOLVED AT READ TIME from the live reputation view, so it can never advertise a reputation the deployer has since lost; the snapshot written when the alert fired is returned as tier_at_alert with tier_is_stale flagging a drift. Tiers ride runner_rate ($100K peak MC) + 24h of deployer history, not the $40K graduation rate. Each alert also carries liquidity_usd and current_mc_usd. Poll forward with since=next_event_at, page back with before=next_before. Tier: BASIC (limit capped at 50 below ULTRA).
| Name | Type | Req | Description |
|---|---|---|---|
| alert_type | string | – | Event type — RHC has no bonded/kol_buy alerts |
| before | string | – | Only alerts with event_at strictly older than this (ISO 8601 with offset) — pass next_before to page back |
| deployer_tier | string | – | Filter on the RESOLVED (current) tier, applied after read-time resolution |
| include_untradeable | boolean | – | true disables the default liquidity_usd >= $100 tradability filter and returns the raw tape |
| launchpad | string | – | Filter by launchpad: pons, flap, clanker, hood.fun, noxa, virtuals |
| limit | number | – | Number of alerts (1-500; capped at 50 unless ULTRA) |
| min_mc | number | – | Minimum market cap at the time the alert fired (mc_at_alert) |
| offset | number | – | Pagination offset (used only when no before cursor is given) |
| priority | string | – | Alert priority (RHC has no 'low') |
| since | string | – | Only alerts with event_at strictly newer than this (ISO 8601 with offset) — the incremental-polling cursor |
No output schema declared.
No examples provided.
rhc_deployer_best_tokens ~171
Robinhood Chain best tokens from REPUTABLE deployers — the highest peak-MC tokens launched by elite/good-tier deployers in the window, each with live MC, peak MC + peak_mc_at, liquidity and the deployer's tier / graduation_rate / runner_rate. Tier-gated on purpose: this answers 'what did the deployers worth tracking actually produce' — for an unfiltered peak-MC ranking use rhc_tokens. Scans at most the 1000 most recent qualifying launches; truncated:true means the top-N was drawn from those rather than the whole period. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of tokens (1-50, default 10) |
| period | string | – | Window over the token's first_seen_at (default 7d) |
No output schema declared.
No examples provided.
rhc_deployer_history ~160
Robinhood Chain deployer deploy history (deep pagination, up to 1000 per page) — the reputation row plus every token the deployer launched, newest first, enriched with live and peak MC, with an EXACT total count. RHC has no per-day reputation snapshot table, so this is a token-deploy history, not a daily tier time-series. Unknown wallets return 200 with is_deployer: false. Tier: PRO+ (the point-in-time rhc_deployer_profile stays BASIC).
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Deployer EVM wallet address (0x, 40 hex) |
| limit | number | – | Page size (1-1000, default 100) |
| offset | number | – | Pagination offset |
No output schema declared.
No examples provided.
rhc_deployer_leaderboard ~284
Robinhood Chain deployer reputation leaderboard — deployers ranked by reputation over every launchpad token we've indexed (99k+ deployers). Most RHC launchpads are direct-to-DEX (no bonding curve), so both milestones are market-cap based: graduation_rate = share of tokens that reached a $40K+ peak MC; runner_rate = share that reached $100K+. IMPORTANT (migrations 267 + 269): the elite/good TIER now rides runner_rate ($100K) AND requires 24h of deployer history — elite = 5+ tokens, 24h+ old, runner_rate >= 0.50; good = same with >= 0.25. graduation_rate still means the $40K bar and is still returned, but it NO LONGER sets the tier (it proved farmable by operators rotating wallets); only the spammer label still keys off it (20+ tokens, graduation_rate < 0.05). Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Page size (1-50, default 20) |
| min_tokens | number | – | Minimum tokens deployed (default 3) |
| offset | number | – | Pagination offset |
| sort | string | – | Ordering (all descending, NULLs last; default graduation_rate) |
| tier | string | – | Filter to one reputation tier |
No output schema declared.
No examples provided.
rhc_deployer_profile ~140
Robinhood Chain single deployer profile — one deployer's full reputation row (tier, bonding_rate, runner_rate, best peak MC, launchpads, deploy timeline) plus their 50 most recent tokens enriched with live MC and peak MC. tier is earned on runner_rate ($100K peak MC) plus 24h of deployer history, NOT on graduation_rate ($40K), which is still returned but no longer sets the tier. Unknown wallets return 200 with is_deployer: false (not a 404). Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Deployer EVM wallet address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_deployer_stats ~143
Robinhood Chain chain-wide deployer reputation summary — total deployers and tokens, reputable (elite+good) count, population and token count per tier, spam token share, and 24h/7d alert volume. Also returns the ACTIVE tier_rules so a consumer can read what 'elite' currently means instead of guessing: elite/good are earned on runner_rate ($100K+ peak MC, migration 267) plus 24h of deployer history (migration 269); graduation_rate ($40K) no longer sets the quality tier and only still drives the spammer label. graduation_definition and runner_definition are echoed too. Tier: BASIC.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rhc_deployer_tokens ~225
Robinhood Chain deployer launch history (paginated) — the FULL enumerable token list for one deployer, enriched with live MC, peak MC + peak_mc_at and liquidity. Distinct from rhc_deployer_profile, which caps recent tokens at 50 and is a profile read. total is the deployer's lifetime tokens_deployed, with has_more for paging. NOTE: sort=peak_mc_usd re-orders the REQUESTED PAGE only (peak MC lives in another table) and the response echoes sort_scope:'page' to say so — it is not a global top-tokens ranking. Unknown wallets return 200 with is_deployer: false. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Deployer EVM wallet address (0x, 40 hex) |
| limit | number | – | Page size (1-100, default 50) |
| offset | number | – | Pagination offset |
| sort | string | – | first_seen_at (default, newest first, applied in Postgres) or peak_mc_usd (page-scoped re-sort) |
No output schema declared.
No examples provided.
rhc_deployer_trajectory ~208
Robinhood Chain deployer trajectory — is this deployer getting BETTER or WORSE over time? Returns trend ('improving' | 'declining' | 'stable'), current streak, longest hit/miss streaks, a 10-launch rolling success-rate curve, avg days between deploys, avg launches burned recovering from a miss, and best/worst stretches. The per-token success event is GRADUATION ($40K+ peak MC, echoed as success_metric) — deliberately not the $100K runner bar that sets the tier, because $100K is too rare to give most deployers a readable curve. Field names keep the Solana 'bond' wording for drop-in compatibility. Analyses up to 500 tokens; truncated:true means the curve is a partial history. Unknown wallets return 200 with is_deployer: false. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Deployer EVM wallet address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_equities ~420
Robinhood Chain tokenized equities — every official Robinhood tokenized stock and ETF (NVDA, SPY, AAPL, …) with live price / market cap / liquidity and 24h trades, ETH volume, buys/sells and distinct buyers/sellers. 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 0xe10b6f6b275de231345c20d14ab812db62151b00, read from our own node (re-classified every 10 min). The day this shipped there were 20 fake 'GameStop • Robinhood Token' contracts and 8 fake NVDAs carrying the exact official name suffix — none appear here, and a token that merely LOOKS like an equity by name will not either; issuer_beacon is echoed per row so you can verify. verified is always true by construction. name has the '• Robinhood Token' suffix stripped for display; onchain_name is the raw ERC-20 name. price_usd / market_cap_usd / liquidity_usd may be null for a listed-but-not-yet-priced equity; check liquidity_basis. Use symbol for an exact ticker (case-insensitive) or q for a substring of symbol/name; sort by volume (default) / trades / market_cap / last_trade / symbol. 24h stats are cached 60 s (stats_as_of). This is a discovery surface — per-token drill-downs (rhc_token, rhc_token_holders, …) keep their own gates. Tier: BASIC (any valid key).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Rows (1-300) |
| q | string | – | Substring of symbol or name |
| sort | string | – | Ordering (default volume = 24h ETH volume, descending; symbol is ascending) |
| symbol | string | – | Exact ticker, case-insensitive (e.g. NVDA) |
No output schema declared.
No examples provided.
rhc_first_touch_subscriptions_create ~248
CREATE a Robinhood Chain first-touch subscription (POST — this writes and consumes quota). Pushes on the rhc:kol:first_touches WS channel and/or an HMAC-signed webhook the moment a token gets its first tracked-KOL buy. FILTER SET DIFFERS FROM SOLANA ON PURPOSE: RHC has no scout-score table, so min_scout_tier and min_n_touches do NOT exist here (a filter that silently matched nothing would be worse than its absence); the RHC quality gates are min_kol_winrate and strategy. Unknown filter keys are REJECTED, not ignored. webhook_secret is returned EXACTLY ONCE. Quota is PER CHAIN (ULTRA 10, BUSINESS 50); exceeding it returns 409. Tier: ULTRA+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where events are delivered (default 'websocket') |
| filters | object | – | Filter object. Omit or {} to receive every first touch. Unknown keys are rejected |
| name | string | – | Optional human label (max 64 chars) |
| webhook_url | string | – | HTTPS URL — REQUIRED unless delivery_mode is 'websocket' |
No output schema declared.
No examples provided.
rhc_first_touch_subscriptions_delete ~67
DELETE a Robinhood Chain first-touch subscription PERMANENTLY. This cannot be undone — to stop it temporarily use rhc_first_touch_subscriptions_update with is_active:false. Tier: ULTRA+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | First-touch subscription id (UUID) |
No output schema declared.
No examples provided.
rhc_first_touch_subscriptions_get ~65
Get ONE Robinhood Chain first-touch subscription by id (UUID), including its stored filters object. Returns 404 if the subscription does not exist or is not yours. Tier: ULTRA+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | First-touch subscription id (UUID) |
No output schema declared.
No examples provided.
rhc_first_touch_subscriptions_list ~109
List your Robinhood Chain first-touch subscriptions — push rules that fire when a token receives its FIRST buy from any tracked KOL (the discovery signal behind rhc_kol_first_touches). Returns the filters object, delivery_mode, webhook_url and is_active. Subscription quota is PER CHAIN and does not consume the Solana first-touch budget: ULTRA 10, BUSINESS 50 (PRO is 0 — this feature is ULTRA+). Tier: ULTRA+.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rhc_first_touch_subscriptions_update ~202
UPDATE a Robinhood Chain first-touch subscription (PATCH — this writes). CAREFUL: `filters` is a WHOLE-OBJECT REPLACE, not a merge — send the complete filter set you want, because any key you omit is removed (that is the only way to express 'drop this filter'). Read the current filters with rhc_first_touch_subscriptions_get first. is_active:false pauses without deleting. Pass null for name or webhook_url to clear them. Tier: ULTRA+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where events are delivered |
| filters | object | – | REPLACES the stored filter object wholesale — omitted keys are dropped, not kept |
| id | string | yes | First-touch subscription id (UUID) |
| is_active | boolean | – | false pauses the subscription without deleting it |
| name | – | – | New label, or null to clear |
| webhook_url | – | – | New HTTPS webhook URL, or null to clear |
No output schema declared.
No examples provided.
rhc_kol_coordination ~284
Robinhood Chain KOL coordination / clustering — tokens bought by min_kols+ DISTINCT tracked KOLs inside the window, ranked by KOL count then buy ETH. Per token: buy/sell/net ETH, signal ('accumulating' when net_eth >= 0, else 'distributing'), exited_count vs holders_count, time_to_consensus_sec (first→last KOL buy), MC at first KOL buy, current/peak MC, liquidity, deployer_tier, token age, and the per-KOL breakdown (evm_address, name, twitter_url, buy_eth, sell_eth, exited). Computed read-time from the RHC KOL tape — RHC has no KOL winrate/strategy scores, so those Solana fields are absent. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of tokens to return (1-50) |
| max_mc_usd | number | – | Maximum market cap at the first KOL buy — must be >= min_mc_usd |
| min_kols | number | – | Minimum distinct KOL buyers for a token to qualify (2-50) |
| min_mc_usd | number | – | Minimum market cap at the FIRST KOL buy (tokens with unknown MC are dropped when a band is set) |
| period | string | – | Rolling window over KOL buys |
No output schema declared.
No examples provided.
rhc_kol_feed ~232
Robinhood Chain (chain id 4663) real-time KOL trade feed — every buy/sell from tracked Solana KOLs' verified EVM wallets, attributed to the effective trading account from our self-hosted node (tx.from on an ordinary transaction, or the ERC-4337 userOp sender when the trade was bundled — never the bundler). EVM-native: token_address (0x), eth_amount, tx_hash, block_number. Each row is enriched with deployer_tier, current/peak MC, and mc_multiple_since_trade ('did the call run'). Tier: BASIC (any valid key).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Only buys or only sells |
| before | string | – | Cursor — ISO 8601 timestamp; returns trades strictly older than this. Pass next_before to page back. |
| kol | string | – | Filter to a single KOL by their EVM wallet (0x, 40 hex) |
| limit | number | – | Number of trades to return (1-100) |
| min_eth | number | – | Minimum trade size in ETH |
No output schema declared.
No examples provided.
rhc_kol_first_touches ~308
Robinhood Chain KOL first touches — the GLOBALLY earliest buy by ANY tracked KOL per token (the discovery / early-entry signal), newest first. Each event carries eth_amount, tx_hash, token_age_minutes at the touch, MC + price at the first buy, current and peak MC, and the first_kol block. Cursor back with next_before. Tier: BASIC, but limit is clamped to 20 below PRO and the KOL's evm_address is returned only on ULTRA/BUSINESS (name + twitter_url always).
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | Cursor — only first touches strictly older than this (ISO 8601 with offset). Pass next_before to page back. |
| launchpad | string | – | Filter by launchpad: pons, flap, clanker, hood.fun, noxa, virtuals |
| limit | number | – | Number of events (1-100; clamped to 20 on BASIC) |
| max_mc_usd | number | – | Maximum market cap at the first buy — must be >= min_mc_usd |
| min_eth | number | – | Minimum size of the first buy in ETH |
| min_mc_usd | number | – | Minimum market cap at the first buy |
| since | string | – | Only first touches strictly newer than this (ISO 8601 with offset) |
| token_age_max_min | number | – | Only tokens younger than N minutes at the time of the first touch |
No output schema declared.
No examples provided.
rhc_kol_hot_tokens ~74
Robinhood Chain consensus tokens — bought by 2+ distinct tracked KOLs inside the window, ranked by KOL-buyer count then buy volume. Enriched with launchpad, deployer_tier, graduation status and current MC. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| window | string | – | Rolling consensus window |
No output schema declared.
No examples provided.
rhc_kol_leaderboard ~84
Robinhood Chain KOL activity leaderboard — KOLs ranked by trade count, then net ETH flow, over the chosen window. net_eth is buy−sell flow (not realized PnL). Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Number of KOLs to return (1-100) |
| period | string | – | Rolling window |
No output schema declared.
No examples provided.
rhc_kol_profile ~64
Robinhood Chain single KOL profile — aggregate stats over one KOL's last 200 RHC trades plus their 50 most recent trades. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| wallet | string | yes | KOL EVM wallet address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_lp_events ~427
Robinhood Chain liquidity REMOVALS feed — the rug signal. Every Uniswap v2/v3 Burn and every v4 ModifyLiquidity with a NEGATIVE delta on tracked pools, decoded from our own node's log subscription, newest first. REMOVALS ONLY: liquidity ADDS are not persisted at all (v4 adds share the topic and are dropped at decode time; v2/v3 Mint is not subscribed), so every row is event:'remove', an empty page means 'no removals seen' and NEVER 'no liquidity activity', and the response's coverage block says adds_persisted:false — do not present this as an add/remove ledger. Amounts are RAW on-chain uint256 integers returned as decimal STRINGS (liquidity, amount0, amount1, token_amount_raw, quote_amount_raw) — never coerce them to floats; token0/token1 say which pool side is which and token_amount_raw / quote_token / quote_amount_raw pre-resolve the token side. v4 rows carry liquidity only — the pool manager emits no token amounts (protocol, not a gap). provider is the wallet that pulled; provider_is_token_deployer=true is the classic rug shape, with provider_deployer_tier / provider_kol_name enrichment. block_time is the exact block header timestamp. Cursor: pass next_before back as `before` (same opaque (block_time,id) keyset as rhc_trades). Data since 2026-08-05. Tier: PRO+ (403 on BASIC).
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | Opaque cursor from a previous response's next_before |
| dex | string | – | Filter by DEX version |
| limit | integer | – | Number of events (1-200) |
| pool | string | – | Pool address (v2/v3) or bytes32 poolId (v4) |
| provider | string | – | Filter to one liquidity provider — the wallet that pulled (0x, 40 hex) |
| token | string | – | Filter to one token address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_price_alerts_create ~316
CREATE a Robinhood Chain price alert (POST — this writes and consumes quota). Fires when the token's market cap falls drop_pct below the baseline captured AT CREATION TIME, and optionally again when it recovers recovery_pct off the dip low. TIMING: evaluation is a ~15 SECOND POLL of rhc_token_prices, not a live price loop — effective latency is that interval plus the token's own price-update cadence, so do NOT assume parity with Solana's sub-second alerts. The token must already be tracked with a market cap on RHC or the call returns 400. Returns webhook_secret EXACTLY ONCE when delivery_mode includes 'webhook'. Active-alert quota is PER CHAIN (PRO 5, ULTRA 25, BUSINESS 125); exceeding it returns 409. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where events are delivered (default 'webhook') |
| drop_pct | number | yes | Percent drop from the creation-time baseline MC that fires the dip (0.01-99.99) |
| name | string | – | Optional human label (max 64 chars) |
| recovery_pct | number | – | Percent rebound off the dip low that fires a recovery event (0.01-1000). Omit for dip-only |
| token_address | string | yes | RHC token address (0x, 40 hex). Must be a token we already price |
| webhook_url | string | – | HTTPS URL — REQUIRED unless delivery_mode is 'websocket' |
No output schema declared.
No examples provided.
rhc_price_alerts_delete ~95
DELETE a Robinhood Chain price alert PERMANENTLY. This cannot be undone — to stop it temporarily use rhc_price_alerts_update with is_active:false. Note that recreating an alert re-captures the baseline market cap at the new creation time, so a delete+recreate is NOT a no-op. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Price alert id (positive integer) |
No output schema declared.
No examples provided.
rhc_price_alerts_events ~197
Fire history for your Robinhood Chain price alerts — the catch-up path after a missed webhook or a dropped WS connection. Each event carries event_type ('dip' or 'recovery'), fired_at, token_address, baseline_mc_usd, current_mc_usd, drop_pct_actual, dip_low_mc_usd, recovery_pct_actual and delivery status. Retained 30 DAYS, newest first. Because evaluation is a ~15s poll, fired_at is the poll tick that observed the move, not the exact on-chain moment. Read-only. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | integer | – | Filter to one of your alerts (404 if not yours) |
| event_type | string | – | Only dip events or only recovery events |
| limit | integer | – | Number of events (1-500, default 50) |
| since | string | – | Only events fired at or after this ISO 8601 timestamp |
No output schema declared.
No examples provided.
rhc_price_alerts_get ~71
Get ONE Robinhood Chain price alert by id, including its captured baseline_mc_usd, current status and dip_low_mc_usd. Returns 404 if the alert does not exist or is not yours. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Price alert id (positive integer) |
No output schema declared.
No examples provided.
rhc_price_alerts_list ~155
List your Robinhood Chain price alerts — market-cap dip/recovery alerts on a single RHC token. Returns baseline_mc_usd (captured when the alert was created), drop_pct, recovery_pct, status, dip_low_mc_usd, dip_fired_at, delivery_mode, is_active, expires_at. TIMING: RHC alerts are POLLED on a ~15 SECOND interval against rhc_token_prices — they are NOT sub-second like the Solana price alerts, because the RHC price writer emits no pg_notify. Quota is PER CHAIN and does not consume the Solana price-alert budget: PRO 5 active, ULTRA 25, BUSINESS 125. Tier: PRO+.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
rhc_price_alerts_update ~169
UPDATE a Robinhood Chain price alert (PATCH — this writes). Only name, delivery_mode, webhook_url and is_active are mutable. token_address, drop_pct and recovery_pct are IMMUTABLE BY DESIGN: changing a threshold on an already-dipped alert would make its recorded events uninterpretable — delete and recreate instead (which also re-captures the baseline). Pass null for name or webhook_url to clear them. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_mode | string | – | Where events are delivered |
| id | integer | yes | Price alert id (positive integer) |
| is_active | boolean | – | false pauses the alert without deleting it |
| name | – | – | New label, or null to clear |
| webhook_url | – | – | New HTTPS webhook URL, or null to clear |
No output schema declared.
No examples provided.
rhc_recent_bonds ~187
Robinhood Chain recent graduations — tokens that just crossed the $40K peak-MC milestone, newest peak first, with live MC, peak MC + peak_mc_at, launchpad and the deployer's address + tier. On RHC a 'bond' is NOT a bonding-curve completion (noxa/pons/clanker launch direct-to-DEX with no curve); the set is defined purely by peak_mc_usd >= $40,000, echoed as graduation_mc. min_peak can only RAISE that floor, never lower it. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| deployer_tier | string | – | Only graduations from deployers in this reputation tier |
| limit | number | – | Number of tokens (1-200, default 50) |
| min_peak | number | – | Minimum peak MC in USD — clamped up to $40,000 if lower |
No output schema declared.
No examples provided.
rhc_token ~78
Robinhood Chain token snapshot — metadata, live price/MC/FDV, peak MC + drawdown, graduation status, deployer reputation block (+ other tokens by the same deployer), KOL activity summary, and pool inventory with reserves. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_token_batch ~192
Robinhood Chain multi-token snapshot — up to 50 tokens in ONE call (POST /api/v1/rhc/token/batch). Per token: symbol/name/decimals, launchpad, graduation status, live price/MC/FDV/liquidity, peak MC + peak_mc_at, primary_dex, last trade time, and the deployer reputation block (tier, tokens_deployed, graduation_rate, runner_rate). Set-based, so it is far cheaper than 50 single-token calls. Every REQUESTED address is echoed back in order — unknown ones come back as found:false rather than being silently dropped. Deliberately does NOT include buyer-quality (use rhc_token_batch_buyer_quality). Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| addresses | array | yes | 1-50 token addresses (0x, 40 hex). Duplicates are de-duplicated; addresses are lowercased. |
No output schema declared.
No examples provided.
rhc_token_batch_buyer_quality ~190
Robinhood Chain multi-token early-buyer quality — score several tokens' early-buyer cohorts in ONE call (POST /api/v1/rhc/tokens/batch/buyer-quality). MAX 20 ADDRESSES, not the Solana batch cap of 50: RHC buyer-quality is a per-token cohort computation (ordered early-buyer scan + bundle + alpha/dump-cluster joins), so it cannot collapse into one set-based query. Each entry is the same payload rhc_token_buyer_quality returns; a token that fails to score degrades to an { error } entry instead of failing the whole batch, and the response reports requested vs scored. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| addresses | array | yes | 1-20 token addresses (0x, 40 hex) — the cap is 20, NOT 50. Duplicates are de-duplicated. |
No output schema declared.
No examples provided.
rhc_token_bundle ~126
Robinhood Chain launch-bundle detection — ranks the first 20 distinct buyers by on-chain order and flags a bundle when 3+ make their first buy in the SAME BLOCK (bundle_kind 'same_block'; there is no atomic_tx on an Arbitrum Orbit L2), then reports the cohort's current held %. Field-gated by tier: BASIC gets the scalar bundle signal; PRO adds the top-10 wallets; ULTRA returns the full cohort with alpha-wallet identity. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_token_buyer_quality ~114
Robinhood Chain early-buyer quality — a 0–100 read on a token's earliest distinct buyer cohort (first 20): win-rate, KOL-presence, bot-domination and bundle-buyer legs, plus the informational dump-cluster ensemble (dump_cluster_count flags the pattern but does not move the score). Neutral score (50) with a note when the token has no buyer history yet. Tier: BASIC.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
No output schema declared.
No examples provided.
rhc_token_candles ~121
Robinhood Chain 1-minute OHLC candles — price + market-cap OHLC, close liquidity, volume with buy/sell split, and trade/buy/sell counts, ordered oldest→newest. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
| from | string | – | Lower bound on bucket_start (ISO) |
| limit | number | – | Number of candles (1-1000, default 240) |
| to | string | – | Upper bound on bucket_start (ISO) |
No output schema declared.
No examples provided.
rhc_token_early_buyers ~107
First buyers of a Robinhood Chain token, ranked, with still-holding status. Previously only readable as a count inside a wallet profile ('this wallet was an early buyer of N tokens') — this is the per-token ranked list. Added 2026-09-10. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
| limit | integer | – | Rows, capped at 20 (default 20) |
No output schema declared.
No examples provided.
rhc_token_flow ~219
Net buy/sell flow on a Robinhood Chain token split by mutually-exclusive trader cohort — who is accumulating and who is distributing. SIGN CONVENTION: net_eth = sell MINUS buy, so a POSITIVE net_eth means that cohort DISTRIBUTED (took ETH out) and a NEGATIVE value means it ACCUMULATED. Do not invert this. Cohorts are assigned by a priority ladder and each trader lands in exactly one: kol, bot, dump_cluster, early_buyer, unprofiled, smart_money, retail. smart_money is DERIVED (win_rate >= 0.5 and net positive), not a stored label. unprofiled is a real answer, not missing data — that trader has not met the reputation thresholds yet. There is deliberately NO fresh_wallet cohort because Robinhood Chain stores no wallet-level first-seen. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
| window | string | – | Lookback window (default 24h) |
No output schema declared.
No examples provided.
rhc_token_holders ~367
Exact holder set and concentration for a Robinhood Chain token. Balances are folded from ERC-20 Transfer logs — NOT derived from trades — and reconciled against on-chain totalSupply() at a pinned block. ALWAYS CHECK verified FIRST: false means the reconstruction is incomplete for that token and unverified_reason explains why (a token that only recently became liquid legitimately has partial history); do not present unverified numbers as exact. Concentration (top1/top10/top50 share, hhi, deployer_pct) EXCLUDES liquidity pools and burn addresses from the circulating denominator, because the largest holder of a token is normally its own pool; those are reported separately as pool_held_pct and burned_pct. balance is a raw uint256 returned as a decimal STRING — never coerce it to a float, it exceeds 2^53. Holder addresses may be ERC-4337 smart accounts, so holder_count is not a headcount of people. holder_growth.{1h,24h,7d} reports entered (first Transfer at-or-after the window's cutoff_block), entered_still_holding, exited (pre-existing holders whose last Transfer in the window left them at zero) and net = entered_still_holding − exited ≈ change in holder_count — pools/burns excluded; a window is null only when the chain had no ingested trades in it, the whole object null only if the growth read failed. Tier: PRO+ (50 rows; ULTRA/BUSINESS raises the cap to 200).
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
| limit | integer | – | Rows (capped 50 on PRO, 200 on ULTRA/BUSINESS) |
| offset | integer | – | Page offset |
No output schema declared.
No examples provided.
rhc_token_kol_consensus ~101
Robinhood Chain KOL consensus on a token — distinct KOL buyers vs sellers, exit rate (bought AND sold), net ETH flow (net_flow_eth), median entry MC, and first-touch wallet/time. ULTRA additionally returns the buyers and exited wallet lists. consensus is null when no tracked KOL has traded the token. Tier: PRO+.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Token address (0x, 40 hex) |
No output schema declared.
No examples provided.
What is the io.github.MadeOnSol/robinhood-chain MCP server?
io.github.MadeOnSol/robinhood-chain is an MCP server listed in the public MCP registry as io.github.MadeOnSol/robinhood-chain. Robinhood Chain (id 4663) trading intelligence: KOL trades, DEX tape, deployer reputation. This page covers its npm package (mcp-server-robinhood-chain).
Is the io.github.MadeOnSol/robinhood-chain MCP server safe to use?
io.github.MadeOnSol/robinhood-chain scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.MadeOnSol/robinhood-chain MCP server expose?
io.github.MadeOnSol/robinhood-chain exposes 65 tools: rhc_kol_feed, rhc_kol_leaderboard, rhc_kol_hot_tokens, rhc_kol_profile, rhc_kol_coordination, and 60 more. Their descriptions and schemas cost roughly 12,188 tokens of context every time the server is loaded.
Is the io.github.MadeOnSol/robinhood-chain MCP server still maintained?
io.github.MadeOnSol/robinhood-chain is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.MadeOnSol/robinhood-chain MCP server under?
io.github.MadeOnSol/robinhood-chain declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.