MCP server
A remote MCP server over HTTP. Nothing to install and nothing to run: point your client at the endpoint, pass your key as a bearer header, and the tools appear.
https://api.rivo.markets/mcpCursor, Claude Desktop and JSON-config clients
Most clients take the standard mcpServers JSON with a remote URL and a bearer header. Cursor reads it from ~/.cursor/mcp.json; Claude Desktop and hosted assistants add remote servers through their connector settings, where the endpoint and header go in the same fields.
{
"mcpServers": {
"rivo": {
"url": "https://api.rivo.markets/mcp",
"headers": { "Authorization": "Bearer rivo_live_..." }
}
}
}Claude Code
claude mcp add --transport http rivo-markets https://api.rivo.markets/mcp \
--header "Authorization: Bearer rivo_live_..."Client references: Claude Code MCP and Cursor MCP. After adding the server, ask the client to call describe_universe; a populated response confirms the key and the connection.
How it behaves
- Auth is per request with the same keys as the REST API; see Authentication.
- The rate limit is shared with REST. Tool fan-out (sweep, compare) is charged per variant on both sides.
- Tools only ever touch the account behind the key. Strategies cannot be edited or deleted through the server, so a confused agent cannot destroy a history you built.
- Every order defaults to
dryRun: true. A model has to passdryRun: falsedeliberately to spend anything.
Scopes decide which tools appear
A key's scopes do not just gate calls, they gate registration. A tool your key cannot use is never listed, so a read key sees 18 tools and a key holding read write trade sees 26.
This is deliberate. Refusing a call a model can see is an invitation to retry it; not showing the tool means the model never forms the plan. Give a key the least it needs and the agent behaves accordingly.
Prompts
Three prompts encode the order these tools want to be called in, which is where most of the mistakes live. Clients that surface prompts will list them; you can also ask for one by name.
find_a_trader_to_copy: leaderboard to shortlist to flat-stake replay, then a recommendation with its weak points namedaudit_my_autopilot: what autopilot has done, what it skipped and why, split into what you can fix and what you cannotbuild_a_rule: explore criteria, then validate out of sample and stop if it does not hold
Resources
Two resources expose state without spending a tool call: rivo://universe for what data exists to test against, and rivo://portfolio for current positions and whether trading and autopilot can run.
Tools
Each is backed by the same handler as its REST endpoint. The endpoint pages carry the full parameter and response reference; the notes here are what differs when calling through MCP.
What data exists to test against: categories and their trade counts, date coverage, settled counts, and the price and size distributions.
Call this first. Writing a rule without it usually produces criteria that match nothing.
Score a rule against markets that already resolved. Saves nothing, so it is safe to call repeatedly while exploring.
Set holdout: true to score the earlier period and validate on the later one. Use it before recommending a rule.
Score one rule across a range of values for a single numeric field, in one call.
Charged per value against the rate limit: a sweep across five values costs five requests.
Score several unrelated rules side by side in one call, each with a label.
Charged per variant against the rate limit.
Split one rule's results by category, platform, month or price band, to see where it works and where it does not.
Find recently active markets by name, with the whale trades behind each.
The individual trades a rule matches, for inspecting specifics rather than aggregates.
Prefer backtest when you want a score; this returns rows and is slower.
Turn a rule into a live strategy on the account. It keeps claiming matching trades as they happen and alerts you.
Create-only: strategies cannot be edited or deleted through the API, so a confused agent cannot destroy a history you built.
The account's strategies with their current record.
Full performance for one saved strategy: settled record, realized and open PnL, and the return curve.
Returns the rollup, event count and curve only. The full event list is large and rarely what a model needs; use the REST endpoint for rows.
The tracked traders, ranked. copyScore and copyGrade are our own quality measure and a better default than raw profit.
Start here when the question is who to copy.
One trader's profile and, by default, what copying them at a flat stake would have returned over the last 90 days.
Defaults to include ["profile", "backtest"]. The leaderboard ranks traders; the replay says whether the record holds up.
Each extra section costs one more call against the rate limit.
Replay two to ten traders at the same stake and window, side by side.
Charged per trader. Prefer this over repeated get_trader calls when choosing between candidates, so the comparison is like for like.
The live tape, newest first. Lane whale is large trades regardless of who placed them; lane tracked is any trade by an identified trader regardless of size.
Every event carries priorSameSideCount and priorOppositeSideCount: how many other tracked traders took the same or opposite side of that market in the last 24 hours. That is the consensus signal.
Each event also carries a marketRef, which is the handle get_market takes.
One market: prices, spread, liquidity, open interest, close time, rules, and the recent trades in it.
Takes a marketRef from get_live_feed or search_markets. The ref is opaque and carries no venue identifier.
Set live true to refresh the price from the venue. That is slower, so reserve it for the moment a decision depends on the current price.
What you hold, what you have ordered, your standing exit rules, and whether autopilot can actually run.
Call this with include ["readiness"] before configuring autopilot or placing an order.
canManualTrade governs place_order and sell_position; readiness.liveCopy governs turning autopilot on, per venue, with one entry per registered venue. A key-based venue needs its own connected account rather than a funded trading wallet. They routinely disagree, so branch on manualTradeBlockers rather than blockers when deciding whether an order can go through. The Venues reference lists what each venue supports.
The autopilot audit log, including the copies that did not happen, each with a skipReason.
The only way to answer why a particular trade was not copied.
Autopilot only. A skip here does not mean a manual place_order would fail.
Followed-trader trades, watched-market alerts and strategy rollups, newest first.
Marking alerts read is REST only; there is no tool for it.
The markets you have alerts on and what each one sends.
Each row carries the marketRef that set_market_alert and get_market take.
Alert on a market's large trades, a price level, a price move, an activity surge or its resolution.
Requires the write scope. Settings you leave out keep their current value.
Buy or sell one side of a market on paper, at the venue's live prices and fees.
Requires the write scope. No real order is placed and no venue account is needed.
Follow a trader, unfollow them, or turn their alerts on and off.
Requires the write scope. Following is a prerequisite for autopilot.
Put a standing stop-loss, take-profit or trailing stop on a position, or cancel one.
Requires the write scope rather than trade, because these only ever reduce a position.
set_autopilotConfigure autopilot for a followed traderPATCH/v1/traders/{platform}/{traderId}/autopilotTurn autopilot on, pause it, or turn it off for one followed trader.
paper defaults to true and spends nothing. Going live additionally needs the trade scope and confirmLive true.
Turning autopilot off or pausing it needs only the write scope.
lossLimitUsd stops a live follow once it is down that much since it went live or was last resumed; onLossLimit pause_and_close also sells what it bought. Saving an active config restarts the loss count.
Buy the same side of the same market as an observed trade.
Requires the trade scope. dryRun defaults to true and returns the quote without spending.
Independent of autopilot: this works while autopilot is paused, and is governed by readiness.canManualTrade.
MCP has no headers to carry an Idempotency-Key, so one is derived and bucketed per ten minutes: a timed-out retry will not buy twice, a deliberate repeat buy later still goes through.
Sell a held position, all of it or part.
Requires the trade scope. dryRun defaults to true.