# Otto Data — Robinhood Chain

> Live Robinhood Chain tokenized-stock data: basis vs NASDAQ, gaps, pools, whale flows.

- name: app.ottodata/otto
- version: 0.2.0
- connection class: R0 (autonomous)
- trust: 89/100
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/app.ottodata%2Fotto
- tools: https://api.protogrid.dev/v1/servers/app.ottodata%2Fotto/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "otto": {
      "type": "http",
      "url": "https://api.ottodata.app/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 65
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% ~updated-96d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 39 of 39 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 6,276 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 39, about 6,276 tokens to load them all
- tool set hash: 7f1b21f081164f293d897f17306a888c
- badge: [![protogrid quality](https://protogrid.dev/badge/app.ottodata/otto.svg)](https://protogrid.dev/servers/app.ottodata/otto)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.ottodata.app/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (39)

- `agent_performance`: Realized trading performance for an agent, derived from
    position_closed events: trade count, win rate, total/average P&L (bps),
    total P&L (USD), average holding hours, per-ticker breakdown and the last
    20 closed trades. agent: gap-trader | narrative-trader.
    mode: '' (all) | paper | live | onchain — filter trades by execution mode.
- `agent_position_book`: Server-side derived open position book for a trading agent:
    every order_filled event without a later matching position_closed on the
    same ticker counts as open, joined with the live Chainlink price for
    unrealized P&L (bps and USD). Replaces rebuilding the book from raw
    agent events. agent: gap-trader | narrative-trader.
    mode: '' (all) | paper | live | onchain — filter positions by execution mode.
- `chain_deployments`: New contract deployments on Robinhood Chain (Ottoscan; full history
    since genesis). tokens_only=True returns only new token contracts.
- `chain_stats`: Robinhood Chain deployment statistics: daily deploy/token counts, top
    deployers, total contract/verified counts (Ottoscan analytics).
- `competition_leaderboard`: Public leaderboard of Otto's paper trading competition: every
    participant ranked by return % on the shared $10,000 starting budget,
    with equity, P&L, open position count, trade count and last activity.
    No key required. Fills are server-priced from Chainlink, so rankings
    cannot be gamed with self-reported prices.
- `competition_my_portfolio`: The competition paper portfolio behind an otto_pk_ key: cash, equity,
    return %, realized/unrealized P&L, open positions with live prices,
    recent trades (each tagged with its source: your MCP agent or Otto's
    hosted gap/narrative engine) and the entry's strategy prefs. Check this
    before sizing a new competition_paper_trade.
- `competition_paper_trade`: Place a PAPER fill in Otto's trading competition on behalf of the
    key's owner. No real funds move — the fill is priced server-side at the
    latest Chainlink price (callers can never supply a price). api_key: the
    personal otto_pk_ key issued when the wallet joined at
    ottodata.app/competition. side: buy | sell. qty: token quantity (shares).
    Include a short `reason` — it shows up in the owner's trade history.
    Rules enforced server-side: $10,000 starting budget, long-only, max
    $2,000 notional per trade, max 10 open positions, max 40 trades/day.
    On a rule violation the response is {"error": "..."} — read it and
    adjust instead of retrying blindly.
- `execute_onchain_swap`: Execute a REAL on-chain swap on Robinhood Chain via the Rialto router,
    signed by Otto's server-side trading wallet. side=buy spends `usd_amount`
    USDG to buy the ticker's Hood token; side=sell sells `qty` tokens back to
    USDG. The server enforces hard guardrails independently of the caller:
    USDG<->allowlisted-token pairs only, per-trade and daily USD caps, and a
    slippage cap. On success the matching order_filled/position_closed event
    (payload mode=onchain, with tx_hash) is written automatically — the
    position book, performance stats and trade chart update without a
    separate report_agent_status call. key: the operator's OTTO_AGENT_KEY.
    agent: gap-trader | narrative-trader. Returns tx_hash, fill qty/price/usd
    and pnl_bps (sells with a known entry).
- `flow_summary`: Whale-flow summary per ticker: transfer count, total USD volume,
    mint/burn USD (supply change) and the largest transfer.
- `funding_carry_signals`: Deterministic funding-carry candidates joining perp funding
    (Arcus/Lighter) with perp-vs-spot basis. Per ticker: funding rate +
    annualized funding_apr_pct, perp-vs-Chainlink gap (bps) and a label —
    carry_long_spot_short_perp (hold Hood spot, short the perp, collect
    positive funding), carry_short_spot_long_perp (inverse) or no_carry —
    plus the standard risk flags. min_abs_bps filters on
    |perp_vs_chainlink_bps|. Signals are NOT orders.
- `gap_trade_signals`: Deterministic signals for the gap-trader strategy: per Hood ticker the
    overnight gap it currently carries (bps), a signal (long_at_open |
    avoid_or_reduce | none), 14-day gap statistics, the hit rate of pre-open
    gap direction vs open direction (hit_rate_14d) and risk flags
    (oracle_paused, stale, low_liquidity, earnings_within_48h). Signals are
    NOT orders — sizing and approval belong to the user. The most informative
    window is pre-open 09:15-09:29 ET; signals are suppressed while the market
    is open (session=regular).
- `hood_attention`: Reddit attention/alpha score joined with live basis for Hood tokenized
    stocks: which tokens have social interest AND an on-chain premium/discount
    at the same time. Fan-out (same post, many tickers) is deduplicated.
- `hood_basis_history`: Minute-level basis history for one ticker (newest first). Example
    tickers: NVDA, TSLA, SPY. limit max 5000.
- `hood_basis_snapshot`: Current basis (premium/discount) snapshot for all Robinhood Chain
    tokenized stocks. Per ticker: chainlink_px (on-chain price), ref_last
    (NASDAQ), basis_bps (+ = token trades at a premium), overnight_bps (move
    vs last close) and the oracle_paused flag.
- `hood_earnings_risk`: Earnings risk for Hood tokenized stocks (weekly earnings radar): per
    ticker report_date/time, days_to_earnings, implied_move_pct (option-implied
    expected move), beat_probability (0-100), PEAD status + live basis join.
    Earnings released while NASDAQ is closed make the token gap — watch small
    days_to_earnings for off-hours risk management. tickers: CSV filter
    (empty = full Hood universe).
- `hood_feeds`: Registry of all tokenized stock and crypto feeds tracked on Robinhood
    Chain (Chainlink proxy + token contract addresses).
- `hood_gap_sessions`: Session-by-session gap history for one ticker (each overnight/weekend
    session is a separate row).
- `hood_gaps_live`: Live view of the current off-hours session: which tickers trade at the
    largest premium/discount vs their last close. Returns 'regular' when the
    stock market is open.
- `hood_gaps_summary`: Overnight and weekend premium/discount statistics for all tickers:
    average, min/max and latest value (bps). Tokens trade 24/5, so this
    measures the drift that builds up while NASDAQ is closed.
- `hood_off_hours_catalysts`: Dated catalysts that can move token prices while NASDAQ is closed
    (nights/weekends) — flattened from all research cards, sorted by date.
    For agents watching overnight gap and weekend risk.
- `hood_pools`: Tracked Uniswap (Hood) pools: pool price per token, liquidity (USD) and
    deviation vs the Chainlink oracle price (dev_bps). Refreshed every 5 min.
- `hood_quote`: Minimal fast quote for one Hood ticker: Chainlink price (token +
    per-share), NASDAQ references (ref_last, ref_prev_close), basis/overnight
    bps, the most liquid pool's price/liquidity/deviation and
    oracle_paused/stale flags. Use for sizing and fill pricing instead of
    pulling the full 32-ticker snapshot.
- `hood_sector_rotation`: Sector rotation context for Hood tokenized stocks (API-only tracker
    refreshed every 3h): market regime (risk_on|risk_off|mixed), an 11-SPDR
    sector score/label/flow board and a per-ticker join — sector score
    (0-100), label (inflow|interest|neutral|outflow_leaning|outflow), flow
    trend, theme matches + live basis. Answers where money is rotating and
    whether your token's sector is in inflow or outflow. tickers: CSV filter
    (empty = full Hood universe).
- `hood_stock_research`: Daily deep-research report: score (0-100), rating (strong_buy|buy|hold|
    avoid) and 4 analysis columns per Hood tokenized stock: thesis, dated
    catalysts (off_hours-flagged, verified earnings dates), financials (PE
    ttm/fwd, growth, margins, valuation_label: expensive|fair|discount|n_a),
    competitors (peers + positioning) and news_summary ([+]/[=]/[-] tagged).
    The api_data field carries exact API numbers (price, market cap, 1d/7d/30d,
    52w, target mean/hi/lo, analyst rec counts) — use it when precision
    matters. With ticker: one card + live basis join; empty: full report.
- `hood_ticker_brief`: One-call brief for a single Hood ticker: live quote (price, basis,
    pool, risk flags), research card (rating/score/thesis/catalysts), earnings
    risk, sector rotation context, best Reddit attention signal, 24h
    whale-flow summary and recent tagged news. Replaces 6-7 separate tool
    calls when an agent researches one ticker. Missing upstream sources
    fail-soft: the field is null.
- `market_events`: Machine-readable news events (crypto + stocks). symbols is
    comma-separated (NVDA,BTC), event_type: listing|hack|regulation|earnings|
    etf|partnership|macro|liquidation|stablecoin|general. importance 0-100.
- `narrative_trade_signals`: Deterministic candidates for the narrative-trader strategy: per Hood
    ticker the highest-alpha Reddit signal (alpha_score, evidence, themes), a
    signal bias (long_candidate = rising attention | avoid_or_fade = crowded
    trade | context = regime info), live Chainlink price, basis and risk
    flags. The `reason` field is the Reddit summary — carry it into status
    reports and the chart as the buy/sell rationale. Signals are NOT orders.
- `oracle_deviation`: Chainlink-vs-Uniswap pool price deviation (bps, sorted by absolute
    value). status: ok (<100), warning (100-500), alert (>500). Large
    deviations are normal in low-liquidity pools — check liquidity_usd.
- `partner_my_trades`: Recent fills you've reported with partner_report_fill, most recent
    first.
- `partner_report_fill`: Report a fill you already signed and broadcast yourself (via
    partner_swap_quote) so it appears in Otto's records. Otto does NOT
    verify the transaction on-chain in this version — it trusts the
    partner it already approved. side: buy | sell. tx_hash: the
    transaction hash from your own broadcast.
- `partner_swap_quote`: Get an UNSIGNED Rialto swap quote for an approved partner. YOU sign
    and broadcast the returned transaction yourself, with your own wallet's
    private key, on your own infrastructure — Otto never sees or holds your
    key and never submits anything on your behalf. api_key: the otto_pn_
    key Otto's admin issued you directly. sell_token/buy_token: Hood token
    contract addresses (0x...). sell_amount: human units of sell_token (e.g.
    "25" USDG, not wei). taker: the wallet address that will actually sign
    and hold the position. Returns the raw Rialto quote including tx.to,
    tx.data, tx.value and min_buy_amount — everything needed to build and
    sign the transaction. After broadcasting, call partner_report_fill so
    the trade shows up in Otto's records.
- `perp_funding`: Hourly funding rates on tokenized-stock perps (Arcus + Lighter). Without
    params: latest value per venue+ticker pair (funding_apr_pct = annualized
    %). With ticker: history. Tokens trade 24/7 while the stock market does
    not — weekend/overnight funding is the price of that mismatch.
- `perp_spot_basis`: Perp mark price vs Hood on-chain spot (Chainlink per-share + pool),
    deviation in bps per ticker. A large |perp_vs_chainlink_bps| means the
    perp and spot price the same stock differently — a cross-venue opportunity
    or a stale-oracle signal. Fields are null for markets without a Hood spot.
- `reddit_alpha_signals`: Ticker alpha signals extracted from Reddit (novelty, mention velocity
    and cross-sub spread components). signal_type: ticker_alpha|crowded_trade|
    event_mispricing|squeeze_watch. tickers is comma-separated (NVDA,TSLA).
- `reddit_market_regime`: Current market regime inferred from Reddit chatter (e.g.
    mag7_only_rally, risk_on_call_chase) + confidence + flags to watch.
- `report_agent_status`: Status report from a trading agent — the live panel on
    ottodata.app/agents renders this stream. kind: run_started | signals |
    order_proposed | order_approved | order_filled | order_skipped |
    position_closed | run_summary | error. agent: gap-trader |
    narrative-trader. key: the operator's OTTO_AGENT_KEY value (wrong keys are
    rejected). Call at every runbook step; keep message short and
    human-readable (e.g. 'BUY 3 NVDA @ 184.20 limit — gap +82bps').
- `service_status`: Trust status of the Otto data layer: per-feed freshness (age_sec/stale),
    24h tick coverage, NASDAQ reference availability and oracle-pause count.
    Call before making trading decisions — status: ok|degraded|down.
- `stable_risk`: Deviation of USDG and other stablecoins from $1 parity (depeg risk, bps).
- `token_flows`: Large on-chain token transfers (whale flows): 32 stock tokens + USDG
    above the USD threshold. direction: mint|burn|transfer. Mints/burns show
    the tokenized stock supply changing (issuance/redemption).
