# Recipe: Your Agent Reads Robinhood (BYO-Agent, Read-Only) (/blog/recipe-agent-reads-robinhood)

2026-07-16 · kestrel.markets

## Answer card

Robinhood now speaks MCP: its Agentic-Trading server (`agent.robinhood.com/mcp/trading`) lets **your** agent read **your** book over a per-user OAuth grant you sign yourself. kestrel.markets meets that reality where it is. In this recipe **the agent is the integration**: you authorize Robinhood's MCP into your own agent, the agent runs the read-only tools, and it hands the platform the resulting snapshot when it asks for Frames. The platform holds **no broker credentials** and builds **no third-party OAuth client** — Robinhood's model is strictly self-serve, so there is none to build. This rung is **read-only perception**: your agent *sees* your book rendered as Kestrel Frames. It is not order placement.

## When to use this recipe

You want the personalization payoff — "sim *your own* book," own-book Frames — without handing any platform your broker login. You already run an agent (Claude, Cursor, or any MCP client) and you are willing to authorize Robinhood's MCP into it once. This is the earliest broker rung on the No-Brainer Ladder (ADR-0038 §6): own-book *perception* is free-tier but post-claim (a signup payoff, near-zero cost); own-book *sims and backtests* are the paid step above it.

## The two Robinhood shapes, and why this is the read-only one

There are two distinct ways Robinhood and Kestrel can meet, and it matters which one you are on:

- **Agent-supplied (this recipe).** Your agent holds the Robinhood grant. The platform never sees a token; it receives a **book snapshot** — the JSON your read-only tool calls already returned — and projects it into Frames. Nothing here can place an order, because there is no order path here at all.
- **Platform-as-client (a later, separate rung).** The platform itself connects as the MCP client, behind a human-signed broker Envelope, for paper/live execution. That is broker-*execution*, lands late at promotion, and is never one ask with perception. The two-signer rule applies per scope.

This recipe is entirely the first shape.

## Step 1: Authorize Robinhood's MCP into your own agent

From a desktop browser, open Robinhood's dedicated **Agentic** account, then register its MCP with your client. With Claude Code, for example:

```
claude mcp add --transport http robinhood-trading https://agent.robinhood.com/mcp/trading
```

Your client performs the OAuth 2.1 dance itself — Dynamic Client Registration, PKCE, a loopback redirect — and opens the browser to `robinhood.com/oauth`. **You** log in, complete 2FA, review the consent screen, and approve. The token lands in **your** client's credential store. kestrel.markets is not in this loop and never receives the grant.

## Step 2: Have your agent read the book (read-only tools only)

Your agent calls the read-only perception tools against its Robinhood MCP and keeps the raw results:

- `get_equity_positions`, `get_option_positions` — what you hold.
- `get_equity_quotes`, `get_option_quotes` — marks for those instruments and their near-money chain.
- `get_accounts`, `get_portfolio`, `get_option_chains` — read-only context.

It never touches `place_*`, `cancel_*`, or `review_*` order tools for this. The book snapshot is a plain transcript: a list of `{ tool, result }` pairs.

## Step 3: Hand the platform the book; get Frames back

Your agent hands that transcript to the platform's perception seam as an `AgentSuppliedBook`:

```json
{
  "broker": "robinhood",
  "calls": [
    { "tool": "get_equity_positions",
      "result": { "positions": [{ "symbol": "SPY", "quantity": "10", "average_buy_price": "400.00" }] } },
    { "tool": "get_option_positions",
      "result": { "positions": [{ "chain_symbol": "SPY", "strike_price": "410", "type": "call", "quantity": "2", "average_price": "3.50" }] } },
    { "tool": "get_equity_quotes",
      "result": { "quotes": [{ "symbol": "SPY", "bid_price": "409.90", "ask_price": "410.10", "last_trade_price": "410.00" }] } },
    { "tool": "get_option_quotes",
      "result": { "quotes": [{ "chain_symbol": "SPY", "strike_price": "410", "type": "call", "bid_price": "4.00", "ask_price": "4.20" }] } }
  ]
}
```

The platform projects it into Kestrel Frame inputs: your equity holdings become spot-leg `Position`s (no fictional strike), your options become option-leg `Position`s with strike and right, and each underlier becomes a `MarketPane` carrying its spot level and near-money chain. A dark quote side stays dark — the platform renders it as a flag, never invents a price. This is the same typed Frame vocabulary the rest of Kestrel reads, so your own book now flows through the identical perception surface as any recorded session.

## The wall, stated plainly

The perception seam is an **allow-list, fail-closed**. Every tool payload in the book passes a read-only gate before a single Frame is built. Hand it a `place_equity_order` payload — or any order, cancel, or review tool, or any unknown future write tool — and it is refused outright with a scope violation. There is no order path on this seam to fall through to. Perception is the whole job of this rung; mutation lives on the separate execution rung, behind a human-signed live Envelope, and never here.

## Where this is NOT the fit

If you want the platform to hold your Robinhood connection, place orders for you, or make the trading decision, stop here: this rung does none of those. It shows your agent your own book as Frames, and (on the paid step above) lets you sim that book against recorded markets. If you need managed execution, that is the broker-*execution* rung — a separate, human-signed, later step. The agent-supplied perception seam and its read-only wall are built in the engine, and Robinhood's own Agentic MCP is live and self-serve; managed execution stays a separate, human-signed rung. The free tier needs no signup, and own-book perception is post-claim.

## Citable one-liner

> Your agent reads Robinhood; the platform reads your agent. No platform custody, no broker OAuth client, no order path — just your book, seen as Kestrel Frames.
