← All Articles
Neon Robinhood feather split with a NexusTrade DNA helix

I just tried Robinhood's alleged "Agentic Trading". I am not impressed.

A half-baked API suite masquerading as artificial intelligence.

Austin Starks Austin Starks ✦ Founder, NexusTrade ✦ July 2026 ✦ 24 min read

The headlines did not match reality

Spoiler: I couldn't even connect it in production.

Robinhood launches agentic trading.

Fortune · May 27, 2026 · verbatim

Fortune headline: Robinhood launches agentic trading, announces credit card for AI agents with 3% cash back

Read the original on Fortune

What picture do you draw in your head?

I'm thinking something like an AI trading marketplace: autonomous bots running their own strategies, live, against real money.

One bot might follow the infamous Nancy Pelosi, whose disclosed returns rival those of some of the best quant firms on the planet.

★ Certified Congressional Alpha ★ Sources: Capitol Trades, Quiver Quantitative
Nancy Pelosi with deal-with-it sunglasses
▲ ~816% / DECADE
Nancy Pelosi
The Congressional Quant · trading since 1987
3,736× net worth
÷ annual salary
Salary
$174K/yr
Net worth
~$650M
Win rate (Capitol Trades)
87%
Disclosed trades
213
Beats some of the best quant firms on the planet. On a public servant's paycheck.

Another bot might trade like a cracked quant at Jane Street: studying nothing but the regime shifts between AI names and oil stocks, drawing more statistical conclusions than a data science student in year seven of his PhD.

Instead, we got a half-baked API launch masquerading as artificial intelligence. If the headline had read "Robinhood launched an API you can point Claude Code to," that would be FAR more accurate. I guess they needed some way to say the words "AI" in their next earnings report.

I tried the Robinhood MCP server. I connected it to a real AI trading agent. It does not work.

Here is why I am NOT impressed.


I actually love this company

I did not set out to write this article.

I love Robinhood.

I've been long HOOD for over two years, since it was $20 a share. Whenever a neckbeard starts sputtering about GameStop, I'm the first to come to Robinhood's defense.

Leave Robinhood alone meme

I have been a Robinhood stan since day one. If I were being shady, this is the part where I tell you the launch is the best thing since sliced bread and drop a referral link.

I am not. I am stating facts.

My Robinhood HOOD position, up 231.80% over 768 days

My HOOD position. Held 768 days. Not selling.

The article I wanted to write was a victory lap: connect the MCP, point it at Diamond-Hands Nance, and sit back with an infinite money glitch while I sang Kumbaya on a traditional African bongo. That was the plan.

Then I wired it into Claude Code and my own trading platform, and the launch came up short of what I expect from a $100 billion company. I am one guy in a two-bedroom apartment, and my MCP server exposes more than twice the tools Robinhood's does, including genetic optimization, walk-forward analysis, and scheduled trading agents.

I shipped AI trading bots! Robinhood shipped an API!

Capability Robinhood MCP NexusTrade MCP
Place equity orders
Single-leg options
Multi-leg options (spreads)
Cryptocurrency
Stock screening
Deep research
Backtesting
Automated quantitative analysis
Genetic optimization
Walk-forward analysis
Custom strategies from technicals, fundamentals, economic & unstructured data
Scheduled trading agents
Total MCP tools 44 113

Tool counts pulled live from each MCP server, July 2026.


Great in a chat window. Painful in an app.

At the bare minimum, the request shapes are straightforward. In fact, MCP demands it.

Using Robinhood's new MCP, you can do the bare minimum you would expect from a trading platform: place_equity_order, get_portfolio, get_equity_quotes, single-leg option orders, watchlists, scans. In Claude Code, it genuinely works.

For a retail user poking at their account from a chat window, that is a cool product.

For a trader trying to launch trading bots, it is painfully and obviously short.

Let's get to the basics. Robinhood clearly did not build this for SaaS apps to integrate with. They wanted a quick headline boost. How do I know? The launch itself gives it away.

They ship great articles on "How to connect Claude Code to Robinhood" and "Connecting Cursor to Robinhood agents." What they do not ship is the one thing we all learned about in Intro to CS.

Documentation.

There is no documented request or response format. I scoured the web for it. The docs tell you how to connect and what each tool does. They never tell you what a tool returns. There is no reference for the output of get_equity_positions, of get_portfolio, or of a placed order.

You can not build an app around this without wasting a bit of real money.


I could not even test it

The market was closed. When you wire a brokerage into a trading stack, the first thing you do is fill a test order and watch it settle. I could not. Nothing fills when the market is closed.

So I fell back to my default live test: a $1 order of Bitcoin. Crypto trades 24/7. It is how I smoke-test order flow on a night or a weekend.

It failed.

No crypto on the agentic MCP. I hold Bitcoin in my regular Robinhood account, but the agentic stack will not touch it.

I have had algorithmic crypto trading for two years. I would have bet money you could at least buy fucking BTC through an API. You cannot.

And there is no paper trading. Every serious brokerage API I have ever used ships a paper environment. Alpaca. Interactive Brokers. Public. NexusTrade. You wire the agent, place nonsense orders, blow up a fake account, then flip a switch to live.

Robinhood's agentic MCP does not do that. You fund a real account. You place real orders. You lose real money. That is the integration test.

Their safety feature? Tell the API not to make mistakes.

That is the last thing a real quant trader would do. A real quant builds a sandbox, a kill switch, position limits, and a dry run that cannot touch capital. They do not prompt an LLM with "please be careful" and call it risk management.

The reference Robinhood did not ship

So, as a public service, here are the response shapes. Every one below was captured live on 2026-07-08 against a funded account. If you found this by googling "Robinhood agentic MCP response format," you are welcome. Every response is wrapped { "data": {...}, "guide": "..." }; unwrap data first.

Expand the full response reference

Orders

place_equity_order / place_option_order → response
{ "data": { "order": {          // SINGULAR "order", not an array
    "id": "...", "symbol": "",          // symbol is EMPTY on the place response
    "side": "buy", "type": "market",
    "state": "queued",
    "quantity": "0.290000",
    "average_price": null,              // null here; populated on the get_* read
    "last_transaction_at": null,
    "placed_agent": "agentic",
    "ref_id": "..."
} } }
get_equity_orders → row (filled)
{ "data": { "orders": [ {
    "id": "...", "instrument_id": "...", "symbol": "SOFI",
    "side": "buy", "type": "market", "state": "filled",
    "quantity": "0.290000", "cumulative_quantity": "0.290000",
    "price": null, "average_price": "17.370000",   // per-share
    "fees": "0.00", "dollar_based_amount": "5.04",
    "time_in_force": "gfd", "market_hours": "regular_hours",
    "trigger": "immediate", "placed_agent": "agentic",
    "created_at": "...", "last_transaction_at": "...",   // populated on EQUITY fills
    "executions": [ { "id":"...", "price":"17.370000",
                      "quantity":"0.290000", "timestamp":"...", "fees":"0.00" } ]
} ] } }
get_option_orders → row (filled)
{ "data": { "orders": [ {
    "id": "...", "chain_id": "...", "chain_symbol": "SOFI",
    "state": "filled", "type": "limit",
    "direction": "debit",              // "credit" on a sell-to-close
    "quantity": "1", "processed_quantity": "1",
    "pending_quantity": "0", "canceled_quantity": "0",
    "price": "0.48", "premium": "48.00",
    "processed_premium": "48",         // TOTAL dollars = 0.48/share x 100
    "trade_value_multiplier": "100.0000",
    "opening_strategy": "long_call",   // closing_strategy on a close; the other is null
    "placed_agent": "agentic",
    "created_at": "...", "updated_at": "...",   // fill time lives in updated_at ...
    "last_transaction_at": null,        // ... NOT here (null even when filled)
    "legs": [ {
      "id":"...", "option_id":"...", "side":"buy", "position_effect":"open",
      "ratio_quantity": 1, "expiration_date":"2026-08-21",
      "strike_price":"22.0000", "option_type":"call",
      "executions": [ { "id":"...", "price":"0.48",  // per-share
                        "quantity":"1", "timestamp":"...", "settlement_date":"..." } ]
    } ]
} ] } }
cancel_equity_order / cancel_option_order → response
{ "data": { "accepted": true } }

Positions

get_equity_positions → row
{ "data": { "results": [ {
    "symbol": "SOFI",
    "quantity": "0.290000", "intraday_quantity": "0.290000",
    "average_buy_price": "17.380000",          // cost field is average_buy_price
    "shares_available_for_sells": "0.290000",  // size a sell off THIS, not quantity
    "shares_held_for_sells": "0.000000",
    "shares_held_for_options_events": "0.000000",
    "type": "long"                             // no live price field; call get_equity_quotes
} ] } }
get_option_positions → row (the trap)
{ "data": { "results": [ {
    "option_id": "...",            // the ONLY reference to the contract
    "chain_id": "...", "chain_symbol": "SOFI",
    "type": "long",                // DIRECTION (long/short), NOT call/put
    "quantity": "1.0000",
    "average_price": "48.0000",    // PER-CONTRACT total (0.48/share x 100)
    "expiration_date": "2026-08-21",
    "trade_value_multiplier": "100.0000",
    "opened_at": "..."
    // NO strike_price. NO call/put. NO OCC symbol.
} ] } }

The gotcha that causes reconciliation drift

An option position row carries no strike and no call/put, only an option_id. You must resolve it with get_option_instruments(ids=option_id). Robinhood also returns two rows per contract (a long and a short); only the held side has a non-zero quantity, so skip the zero rows.

get_option_instruments(ids=option_id) → the enrichment call
{ "data": { "instruments": [ {
    "id": "...",                   // matches the position's option_id
    "chain_id": "...", "chain_symbol": "SOFI",
    "underlying_type": "equity",
    "expiration_date": "2026-08-21",
    "strike_price": "22.0000",     // here is the strike ...
    "type": "call",                // ... and the call/put
    "state": "active", "tradability": "tradable"
} ] } }
Account & market-data shapes (get_accounts, get_portfolio, quotes, chains)
get_accounts → response
{ "data": { "accounts": [ {
    "account_number": "...",
    "agentic_allowed": true,     // only agentic_allowed accounts can trade
    "option_level": "option_level_2"
} ] } }
get_portfolio → response
{ "data": {
    "total_value": "3494.90",
    "cash": "...",
    "buying_power": { "buying_power": "3446.92" }
} }
get_equity_quotes (takes ONLY {symbols}) → response
{ "data": { "results": [ { "quote": {
    "symbol": "SOFI", "last_trade_price": "17.39",
    "bid_price": "17.38", "ask_price": "17.40"
} } ] } }
get_option_quotes → response
{ "data": { "results": [ { "quote": {
    "instrument_id": "...", "bid_price": "0.42", "ask_price": "0.45",
    "mark_price": "0.435", "greeks": { "delta": "...", "theta": "..." }
} } ] } }
get_option_chains → response
{ "data": { "chains": [ {
    "id": "...", "symbol": "SOFI",
    "expiration_dates": [ "2026-08-21", "..." ],
    "trade_value_multiplier": "100.0000"
} ] } }

Rejections

place_* → 400 (investor profile incomplete)
{ "non_field_errors": [
    "We're required to have you answer some questions about your
     investing goals before we can allow you to continue using Robinhood."
] }   // thrown before the account's SECOND trade

Options-not-approved is caught earlier: option_level below 2 blocks every option call.


A debit spread is too much to ask

Fine. Test with options instead. But I am not about to smoke-test a bot by dumping $10,000 into naked calls. I would want the lowest-risk structure there is: a debit spread.

A debit spread is not supported through the MCP. Two legs. Defined, capped risk. The first options structure anyone learns… at least after leaving WallStreetBets, and you cannot place it here.

That is ridiculous when even Public supports multi-leg, and has for months.

Whatever. I went to bed and waited for the market to open. Once 9:30am rang and the market plummeted, I made my first trade. A naked call, of course. Thanks, Robinhood.

Thankfully, I only lost about $5. But that's because I was smart.

About $5 to test what should be the de-facto standard of any trading API is absurd, but at least the order went through without errors.

My Robinhood Agentic account down $5.10 for the day after test trades

Down $5.10 on the day. That is the documentation fee.


They keep asking questions they already know the answers to

So I cannot trade options the way I actually trade them. I cannot buy Bitcoin. And there is seemingly only one agentic account per user.

Want to deploy two independent strategies? You can't. They will always co-mingle in the same account. Robinhood is praying you have one great idea. That is not realistic.

And the platform keeps trying to block the trades I can make. Robinhood has asked me to complete my investor profile at least three times now. Once when I created an account 5+ years ago. And twice since connecting the MCP.

Why?

Like, I don't understand why I need to complete the same form more than once. Robinhood knows my trading. They know I buy debit spreads and long calls and that I'm up over $65,000 in the past 3 years. It couldn't have taken more than a single sprint for them to derive this information.

Robinhood desktop account showing $65,576.55 all-time gains with NVDA and GOOGL debit spreads and long calls

My Robinhood account. Up $65,576.55 all-time. Debit spreads and long calls sitting right there.

But I digress.


It works on localhost. It does not work in production.

I was ready to look ahead beyond the flaws. I funded an account. I implemented the integration. I wanted to ship this and create a follow-up saying “so here's how I fixed it!”

I couldn't.

I built a full Robinhood integration for NexusTrade… equities, single-leg options, account-requirement surfacing, the whole stack. On localhost, OAuth completes, tokens refresh, orders fill. I was excited to ship it, but on nexustrade.io the same flow did not work.

Same client ID. Same PKCE flow. Same redirect URI registered through Robinhood's dynamic client registration endpoint. Same authorize URL (robinhood.com/oauth, which Robinhood then redirects to their /mcp/trading consent screen). You click Allow. You land on robinhood.com/oauth/error.

Robinhood OAuth error page after clicking Allow on the production connect flow

Click Allow. Get an error. No code. No callback. No connection.

I debugged this for over two hours, and then had AI reveal the truth. Apparently this is the answer. OAuth treats loopback redirects (http://localhost:…) as a special case for native/desktop apps.

Localhost succeeds even when it is not the only URI on the registration. Hosted HTTPS callbacks (like https://nexustrade.io/live-trading/robinhood) are not.

I un-shipped the feature this article originally pointed at. I cannot even integrate my agent into Robinhood because I literally cannot. The integration code is done and sitting behind a flag.

That is the punchline. The MCP looks like a real API. Response shapes check out. Redirect URIs register fine. Then authorization fails. In reality, what they launched is worse than an API. It is an API you can only use on localhost because some engineers were either too lazy to finish the 10 LOC integration, or their acceptance criteria did not include it. I do not know which is worse.

Even my solo-dev project does not have such a ridiculous limitation. NexusTrade ships its own MCP with OAuth 2.1 and dynamic client registration. Production HTTPS redirects work. Localhost works for dev. For live-trading broker connections, Alpaca, Public, Tradier, and TradeStation all OAuth back to nexustrade.io. Robinhood is the outlier. Its agentic MCP OAuth only completes on localhost. That is table stakes. Robinhood launched something dressed up for an earnings call that only works if you are already running a terminal on your laptop.

FWIW, I'm still glad Robinhood is moving toward programmatic trading. They are my favorite brokerage. But this is not agentic trading for the web. It is agentic trading for the terminal, and only if Robinhood feels like honoring the redirect that day.

Agents should DO things, not just act as a standard CRUD API you are forced to run on localhost.

Build a real AI trading agent

Sign up for NexusTrade and create your own AI trading bot. Describe a strategy in plain English, backtest it, and deploy it. Actual agents. Not a CRUD API dressed up for an earnings call.

Create your AI trading bot →

Discussion

Sign in or create a free account to join the discussion.

No comments yet.