Robinhood Chain (Free)
Tokenized stocks & ETFs on Robinhood Chain (chain id 4663), free and non-gated: live Chainlink prices with corporate-action multipliers, whole-wallet portfolios (AAPL/TSLA/SPY/… + USDG), Morpho lending & borrowing (markets, positions, health factor), Uniswap v4 stock-token swap quotes with a Chainlink cross-check, the canonical Ethereum bridge, and construction-only build_* tools that return UNSIGNED transactions the user signs — swap, lend, post collateral, borrow, repay, withdraw, bridge. Swap builds are re-decoded and guard-verified before they are returned; lending builds fail closed on health factor. Never holds keys, never signs, never submits. Rate-limited. By Yeetful.
Routability
can the router discover, pick, and call it?14 checks
- schema · 12 endpoints are planner-eligible
- schema · param-schema coverage 15/18 endpoints (83%)
- schema · typed params 29/29
- schema · required flags present
- description · 12/12 endpoint descriptions carry real intent
- description · capability tags: defi, stocks, robinhood, tokenized-stocks, morpho
- description · 3 example queries
- probe · https://robinhood-mcp.yeetful.com/mcp → HTTP 200
- planner · "what stocks can I trade on Robinhood Chain?" → picked + constructed (tools/call)
- planner · "buy AAPL with 500 USDG on robinhood" → picked + constructed (tools/call)
- planner · "lend 100 USDG on Morpho on Robinhood Chain" → picked + constructed (tools/call)
- affordances · identity params documented for context vars ($USER_ADDRESS)
- affordances · no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)
- affordances · signing hygiene: build-don't-execute language (or no signables)
Suggested fixes
- Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.
Fix it with Claude Code
Paste this into Claude Code inside the MCP’s repo — it carries the failing checks, the fix list, and the conventions the router grades against.
You are upgrading the MCP service "Robinhood Chain (Free)" so an AI router can reliably discover, choose, and call its tools. Pantessa's Reason Router just graded it 97/100 (A). I'll point you at the service's codebase; audit it against the findings below and implement the fixes.
## Failing checks
affordances (80%):
- no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)
## Fixes, in priority order
1. Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.
## The conventions to build to (what the router needs)
- **Param schemas on every tool/endpoint**: name, type, required-vs-optional, and a description per param. A router refuses to construct calls it cannot validate — schema-less endpoints are invisible.
- **Descriptions that carry user intent**: write what a USER would ask ('crypto spot price by symbol — price of ETH, BTC…'), never what the URL is. Include 2–3 example queries.
- **One guarded escape hatch instead of endless params**: if the backend has a native query language (GraphQL/SQL), expose ONE read-only general-query tool with strict guardrails (single read-only operation, allowlisted root fields, depth + page-size caps, response truncation) and a compact schema card in the tool description (root fields + useful filters + one example). Long-tail intents then need no new endpoints.
- **Declare user-identity params**: any param that should be the CALLER's own address (their votes, follows, balances, orders) must say so in its description ('the user's own wallet address') so routers can inject identity server-side instead of guessing.
- **Server-side joins for the headline intent**: if answering the #1 user question takes two chained calls (e.g. resolve follows → filter proposals), add one param that does the join server-side.
- **Build, don't execute**: anything signable returns an UNSIGNED payload (typed data / tx template) for the user's own wallet. Never hold keys, never sign, never submit on the user's behalf.
- **Free tiers still need rate limiting**: no payment gate means no natural throttle.
Start by reading the tool/endpoint definitions and their input schemas, then apply the fixes smallest-first. After each change, restate which failing check it clears.
Audit before you build: if a fix describes a capability the service ALREADY provides (e.g. an escape hatch or identity param that exists but the grader missed), do NOT duplicate it — say so, skip it, and note it back as a likely router-side scoring gap on Pantessa rather than an MCP deficiency. Only change what this service actually controls.Tools
18- POST/mcp/portfoliostart herevia Yeetful (free)robinhood-mcp.yeetful.com
Whole-wallet view on Robinhood Chain: native ETH, every tokenized stock/ETF (AAPL, TSLA, SPY, …), USDG/USDe/WETH — balances with live Chainlink USD values and a total. The 'what do I hold on Robinhood Chain?' tool. Morpho lending positions live in lending_position.
1 parameter
- userstringbodyrequired
EVM address (0x…) of the account — pass "$USER_ADDRESS" for the connected user.
- POST/mcp/pricesstart herevia Yeetful (free)robinhood-mcp.yeetful.com
Batch Chainlink USD prices for Robinhood Chain tokens — pass symbols for specific ones or nothing for the whole board. Prices are staleness-checked and already include corporate-action multipliers. 'Price check TSLA and NVDA on-chain.'
1 parameter
- tokensstring[]body
Symbols/addresses to price, e.g. ["TSLA","NVDA"]. Omit for every token with a feed.
- POST/mcp/stock_tokensvia Yeetful (free)robinhood-mcp.yeetful.com
The tokenized stocks & ETFs on Robinhood Chain (AAPL, TSLA, NVDA, SPY, QQQ, …) plus the money tokens (USDG, USDe, WETH) — symbol, name, contract address, decimals, Chainlink feed. 'Which stocks can I trade on Robinhood Chain?'
- POST/mcp/token_infovia Yeetful (free)robinhood-mcp.yeetful.com
One Robinhood Chain token in depth: live Chainlink USD price (staleness-checked), total supply, and ERC-8056 corporate-action state (uiMultiplier, pending multiplier changes, oracle pause). 'What's AAPL trading at on-chain?'
1 parameter
- tokenstringbodyrequired
The token to inspect — token SYMBOL ("AAPL", "TSLA", "USDG", case-insensitive) or 0x… address on Robinhood Chain.
- POST/mcp/chain_infovia Yeetful (free)robinhood-mcp.yeetful.com
Robinhood Chain (chain id 4663) at a glance: the Arbitrum-Orbit stack, RPC/explorer endpoints, and where each protocol lives — Uniswap v4 for stock trading, Morpho for lending, the canonical bridge.
- POST/mcp/lending_marketsvia Yeetful (free)robinhood-mcp.yeetful.com
Morpho lending markets on Robinhood Chain: loan/collateral pair, supply & borrow APY, utilization, LLTV, market size — returns the marketId every build_* lending tool needs. Curated markets by default; includeUnlisted adds permissionless ones (early stock-collateral markets). 'What can I lend or borrow on Robinhood Chain?'
1 parameter
- includeUnlistedbooleanbody
Also show permissionless (unvetted) markets. Default false.
- POST/mcp/lending_positionvia Yeetful (free)robinhood-mcp.yeetful.com
A wallet's Morpho position on Robinhood Chain, computed from on-chain state: supplied assets (earning), posted collateral, borrowed debt with accrued interest, borrowing power, health factor per market. 'How are my loans doing / can I get liquidated?'
2 parameters
- userstringbodyrequired
EVM address (0x…) of the account — pass "$USER_ADDRESS" for the connected user.
- marketIdsstring[]body
Specific 32-byte market ids to check. Omit to scan all known markets.
- POST/mcp/quotevia Yeetful (free)robinhood-mcp.yeetful.com
Live Uniswap v4 swap quote on Robinhood Chain — tokenized stocks quote against USDG ('how much AAPL for 500 USDG?'). Scans the standard no-hook pools, best price wins, and cross-checks against Chainlink with a divergence warning. Quote only — build_swap prepares the signable transactions.
3 parameters
- sellTokenstringbodyrequired
Token to sell — token SYMBOL ("AAPL", "TSLA", "USDG", case-insensitive) or 0x… address on Robinhood Chain.
- buyTokenstringbodyrequired
Token to buy — token SYMBOL ("AAPL", "TSLA", "USDG", case-insensitive) or 0x… address on Robinhood Chain.
- amountstringbodyrequired
Amount of sellToken to swap as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- POST/mcp/build_swapvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare a Uniswap v4 stock-token swap on Robinhood Chain — returns UNSIGNED {action:'send_transaction'} steps for the USER to sign: exact-amount Permit2 approvals only when live allowances are short, then ONE Universal Router swap whose output credits the signer. Every build is re-decoded and guard-verified against the quote; balance checked first. 'Buy AAPL with 500 USDG.'
5 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that swaps, receives the output, and signs — pass "$USER_ADDRESS" for the connected user.
- sellTokenstringbodyrequired
Token to sell — token SYMBOL ("AAPL", "TSLA", "USDG", case-insensitive) or 0x… address on Robinhood Chain.
- buyTokenstringbodyrequired
Token to buy — token SYMBOL ("AAPL", "TSLA", "USDG", case-insensitive) or 0x… address on Robinhood Chain.
- amountstringbodyrequired
Amount of sellToken to swap as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- slippageBpsnumberbody
Slippage tolerance in basis points (100 = 1%). Default 100.
- POST/mcp/build_lendvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare a Morpho SUPPLY on Robinhood Chain — UNSIGNED steps lending the market's LOAN asset to earn the supply APY (exact-amount approve step only when the live allowance is short; balance checked first). 'Lend 100 USDG.'
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that lends and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
LOAN-asset amount to supply as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- POST/mcp/build_supply_collateralvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare UNSIGNED steps posting COLLATERAL into a Morpho market on Robinhood Chain (collateral doesn't earn; it unlocks borrowing the loan asset). 'Post 1 TSLA as collateral.'
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that posts collateral and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
COLLATERAL-asset amount to post as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- POST/mcp/build_borrowvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare an UNSIGNED Morpho borrow against posted collateral on Robinhood Chain. Fails closed: refuses beyond borrowing power or market liquidity, states the resulting health factor, warns when it's thin. 'Borrow 50 USDG against my TSLA.'
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that borrows, receives the loan asset, and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
LOAN-asset amount to borrow as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- POST/mcp/build_repayvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare UNSIGNED steps repaying Morpho debt on Robinhood Chain. amount:"max" clears the debt exactly (repaid by shares, immune to interest drift between build and sign). Approve step included when needed.
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that repays and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
LOAN-asset amount to repay as a decimal string in HUMAN units, or "max" for the full balance/debt.
- POST/mcp/build_withdrawvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare an UNSIGNED withdrawal of assets supplied to a Morpho market on Robinhood Chain (amount:"max" empties the position including accrued interest). Refuses when high utilization leaves too little un-borrowed liquidity.
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that withdraws and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
LOAN-asset amount to withdraw as a decimal string in HUMAN units, or "max" for the full balance/debt.
- POST/mcp/build_withdraw_collateralvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare an UNSIGNED Morpho collateral withdrawal on Robinhood Chain. Fails closed: refuses any withdrawal that would leave outstanding debt under-collateralized or the health factor razor-thin.
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that withdraws and signs — pass "$USER_ADDRESS" for the connected user.
- marketIdstringbodyrequired
The 32-byte Morpho market id (0x…, 64 hex chars) — from `lending_markets`. Never a name or symbol.
- amountstringbodyrequired
COLLATERAL-asset amount to withdraw as a decimal string in HUMAN units, or "max" for the full balance/debt.
- POST/mcp/bridge_infovia Yeetful (free)robinhood-mcp.yeetful.com
How to move funds between Ethereum and Robinhood Chain over the canonical Arbitrum bridge: routes, timing (deposits ≈ minutes, withdrawals ≈ 7 days + an L1 claim), contracts, and what needs the bridge UI instead.
- POST/mcp/build_bridge_depositvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare an UNSIGNED ETHEREUM-MAINNET transaction (chainId 1!) bridging ETH into Robinhood Chain via the canonical Delayed Inbox — the same address is credited on the L2 within minutes; L1 balance checked first. The wallet must be on Ethereum to sign. 'Bridge 0.1 ETH to Robinhood Chain.'
2 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet that deposits on L1 and receives on Robinhood Chain — pass "$USER_ADDRESS" for the connected user.
- amountstringbodyrequired
ETH amount to bridge in as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- POST/mcp/build_bridge_withdrawvia Yeetful (free)robinhood-mcp.yeetful.com
Prepare an UNSIGNED Robinhood Chain transaction starting an ETH withdrawal to Ethereum over the canonical bridge. NOT instant: the exit waits out the ~7-day challenge period, then needs a one-time claim on Ethereum (bridge UI). 'Withdraw 0.5 ETH back to mainnet.'
3 parameters
- userstringbodyrequired
EVM address (0x…) of the wallet exiting from Robinhood Chain — pass "$USER_ADDRESS" for the connected user.
- amountstringbodyrequired
ETH amount to withdraw as a decimal string in HUMAN units, e.g. "100" or "0.5" (not wei/atoms).
- destinationstringbody
Ethereum address to receive the ETH. Defaults to the sender.