{"name":"app.ottodata/otto","slug":"ottodata-otto","title":"Otto Data — Robinhood Chain","description":"Live Robinhood Chain tokenized-stock data: basis vs NASDAQ, gaps, pools, whale flows.","url":"https://mcp.market/server/ottodata-otto","rating":null,"grade":"F","score":27,"certified":false,"status":"active","category":"finance","tags":["finance"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":82,"checks":28,"ok":23,"last_checked_at":"2026-11-04T03:00:51.287Z","last_ok_at":"2026-11-02T06:35:42.518Z","latency_ms":189},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/Degergokalp/otto-data","website":"https://ottodata.app","version":"0.2.0","remotes":[{"type":"streamable-http","url":"https://api.ottodata.app/mcp"}],"packages":[],"tools":[{"name":"agent_performance","description":"Realized trading performance for an agent, derived from\n    position_closed events: trade count, win rate, total/average P&L (bps),\n    total P&L (USD), average holding hours, per-ticker breakdown and the last\n    20 closed trades. agent: gap-trader | narrative-trader.\n    mode: '' (all) | paper | live | onchain — filter trades by execution mode.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"agent":{"default":"gap-trader","title":"Agent","type":"string"},"days":{"default":30,"title":"Days","type":"integer"},"mode":{"default":"","title":"Mode","type":"string"}},"title":"agent_performanceArguments"}},{"name":"agent_position_book","description":"Server-side derived open position book for a trading agent:\n    every order_filled event without a later matching position_closed on the\n    same ticker counts as open, joined with the live Chainlink price for\n    unrealized P&L (bps and USD). Replaces rebuilding the book from raw\n    agent events. agent: gap-trader | narrative-trader.\n    mode: '' (all) | paper | live | onchain — filter positions by execution mode.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"agent":{"default":"gap-trader","title":"Agent","type":"string"},"mode":{"default":"","title":"Mode","type":"string"}},"title":"agent_position_bookArguments"}},{"name":"chain_deployments","description":"New contract deployments on Robinhood Chain (Ottoscan; full history\n    since genesis). tokens_only=True returns only new token contracts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"default":50,"title":"Limit","type":"integer"},"verified_only":{"default":false,"title":"Verified Only","type":"boolean"},"tokens_only":{"default":false,"title":"Tokens Only","type":"boolean"}},"title":"chain_deploymentsArguments"}},{"name":"chain_stats","description":"Robinhood Chain deployment statistics: daily deploy/token counts, top\n    deployers, total contract/verified counts (Ottoscan analytics).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"default":30,"title":"Days","type":"integer"}},"title":"chain_statsArguments"}},{"name":"competition_leaderboard","description":"Public leaderboard of Otto's paper trading competition: every\n    participant ranked by return % on the shared $10,000 starting budget,\n    with equity, P&L, open position count, trade count and last activity.\n    No key required. Fills are server-priced from Chainlink, so rankings\n    cannot be gamed with self-reported prices.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"default":25,"title":"Limit","type":"integer"}},"title":"competition_leaderboardArguments"}},{"name":"competition_my_portfolio","description":"The competition paper portfolio behind an otto_pk_ key: cash, equity,\n    return %, realized/unrealized P&L, open positions with live prices,\n    recent trades (each tagged with its source: your MCP agent or Otto's\n    hosted gap/narrative engine) and the entry's strategy prefs. Check this\n    before sizing a new competition_paper_trade.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"title":"Api Key","type":"string"}},"required":["api_key"],"title":"competition_my_portfolioArguments"}},{"name":"competition_paper_trade","description":"Place a PAPER fill in Otto's trading competition on behalf of the\n    key's owner. No real funds move — the fill is priced server-side at the\n    latest Chainlink price (callers can never supply a price). api_key: the\n    personal otto_pk_ key issued when the wallet joined at\n    ottodata.app/competition. side: buy | sell. qty: token quantity (shares).\n    Include a short `reason` — it shows up in the owner's trade history.\n    Rules enforced server-side: $10,000 starting budget, long-only, max\n    $2,000 notional per trade, max 10 open positions, max 40 trades/day.\n    On a rule violation the response is {\"error\": \"...\"} — read it and\n    adjust instead of retrying blindly.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"title":"Api Key","type":"string"},"ticker":{"title":"Ticker","type":"string"},"side":{"title":"Side","type":"string"},"qty":{"title":"Qty","type":"number"},"reason":{"default":"","title":"Reason","type":"string"}},"required":["api_key","ticker","side","qty"],"title":"competition_paper_tradeArguments"}},{"name":"execute_onchain_swap","description":"Execute a REAL on-chain swap on Robinhood Chain via the Rialto router,\n    signed by Otto's server-side trading wallet. side=buy spends `usd_amount`\n    USDG to buy the ticker's Hood token; side=sell sells `qty` tokens back to\n    USDG. The server enforces hard guardrails independently of the caller:\n    USDG<->allowlisted-token pairs only, per-trade and daily USD caps, and a\n    slippage cap. On success the matching order_filled/position_closed event\n    (payload mode=onchain, with tx_hash) is written automatically — the\n    position book, performance stats and trade chart update without a\n    separate report_agent_status call. key: the operator's OTTO_AGENT_KEY.\n    agent: gap-trader | narrative-trader. Returns tx_hash, fill qty/price/usd\n    and pnl_bps (sells with a known entry).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"title":"Key","type":"string"},"ticker":{"title":"Ticker","type":"string"},"side":{"title":"Side","type":"string"},"usd_amount":{"default":0,"title":"Usd Amount","type":"number"},"qty":{"default":0,"title":"Qty","type":"number"},"reason":{"default":"","title":"Reason","type":"string"},"run_id":{"default":"","title":"Run Id","type":"string"},"agent":{"default":"gap-trader","title":"Agent","type":"string"},"slippage_bps":{"default":50,"title":"Slippage Bps","type":"integer"}},"required":["key","ticker","side"],"title":"execute_onchain_swapArguments"}},{"name":"flow_summary","description":"Whale-flow summary per ticker: transfer count, total USD volume,\n    mint/burn USD (supply change) and the largest transfer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"hours":{"default":24,"title":"Hours","type":"integer"}},"title":"flow_summaryArguments"}},{"name":"funding_carry_signals","description":"Deterministic funding-carry candidates joining perp funding\n    (Arcus/Lighter) with perp-vs-spot basis. Per ticker: funding rate +\n    annualized funding_apr_pct, perp-vs-Chainlink gap (bps) and a label —\n    carry_long_spot_short_perp (hold Hood spot, short the perp, collect\n    positive funding), carry_short_spot_long_perp (inverse) or no_carry —\n    plus the standard risk flags. min_abs_bps filters on\n    |perp_vs_chainlink_bps|. Signals are NOT orders.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_abs_bps":{"default":0,"title":"Min Abs Bps","type":"number"}},"title":"funding_carry_signalsArguments"}},{"name":"gap_trade_signals","description":"Deterministic signals for the gap-trader strategy: per Hood ticker the\n    overnight gap it currently carries (bps), a signal (long_at_open |\n    avoid_or_reduce | none), 14-day gap statistics, the hit rate of pre-open\n    gap direction vs open direction (hit_rate_14d) and risk flags\n    (oracle_paused, stale, low_liquidity, earnings_within_48h). Signals are\n    NOT orders — sizing and approval belong to the user. The most informative\n    window is pre-open 09:15-09:29 ET; signals are suppressed while the market\n    is open (session=regular).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_abs_bps":{"default":50,"title":"Min Abs Bps","type":"number"},"days":{"default":14,"title":"Days","type":"integer"}},"title":"gap_trade_signalsArguments"}},{"name":"hood_attention","description":"Reddit attention/alpha score joined with live basis for Hood tokenized\n    stocks: which tokens have social interest AND an on-chain premium/discount\n    at the same time. Fan-out (same post, many tickers) is deduplicated.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_alpha":{"default":0,"title":"Min Alpha","type":"number"}},"title":"hood_attentionArguments"}},{"name":"hood_basis_history","description":"Minute-level basis history for one ticker (newest first). Example\n    tickers: NVDA, TSLA, SPY. limit max 5000.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"title":"Ticker","type":"string"},"limit":{"default":200,"title":"Limit","type":"integer"}},"required":["ticker"],"title":"hood_basis_historyArguments"}},{"name":"hood_basis_snapshot","description":"Current basis (premium/discount) snapshot for all Robinhood Chain\n    tokenized stocks. Per ticker: chainlink_px (on-chain price), ref_last\n    (NASDAQ), basis_bps (+ = token trades at a premium), overnight_bps (move\n    vs last close) and the oracle_paused flag.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"hood_basis_snapshotArguments"}},{"name":"hood_earnings_risk","description":"Earnings risk for Hood tokenized stocks (weekly earnings radar): per\n    ticker report_date/time, days_to_earnings, implied_move_pct (option-implied\n    expected move), beat_probability (0-100), PEAD status + live basis join.\n    Earnings released while NASDAQ is closed make the token gap — watch small\n    days_to_earnings for off-hours risk management. tickers: CSV filter\n    (empty = full Hood universe).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"tickers":{"default":"","title":"Tickers","type":"string"},"days_ahead":{"default":30,"title":"Days Ahead","type":"integer"}},"title":"hood_earnings_riskArguments"}},{"name":"hood_feeds","description":"Registry of all tokenized stock and crypto feeds tracked on Robinhood\n    Chain (Chainlink proxy + token contract addresses).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"hood_feedsArguments"}},{"name":"hood_gap_sessions","description":"Session-by-session gap history for one ticker (each overnight/weekend\n    session is a separate row).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"title":"Ticker","type":"string"},"days":{"default":14,"title":"Days","type":"integer"}},"required":["ticker"],"title":"hood_gap_sessionsArguments"}},{"name":"hood_gaps_live","description":"Live view of the current off-hours session: which tickers trade at the\n    largest premium/discount vs their last close. Returns 'regular' when the\n    stock market is open.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"hood_gaps_liveArguments"}},{"name":"hood_gaps_summary","description":"Overnight and weekend premium/discount statistics for all tickers:\n    average, min/max and latest value (bps). Tokens trade 24/5, so this\n    measures the drift that builds up while NASDAQ is closed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"default":14,"title":"Days","type":"integer"}},"title":"hood_gaps_summaryArguments"}},{"name":"hood_off_hours_catalysts","description":"Dated catalysts that can move token prices while NASDAQ is closed\n    (nights/weekends) — flattened from all research cards, sorted by date.\n    For agents watching overnight gap and weekend risk.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"hood_off_hours_catalystsArguments"}},{"name":"hood_pools","description":"Tracked Uniswap (Hood) pools: pool price per token, liquidity (USD) and\n    deviation vs the Chainlink oracle price (dev_bps). Refreshed every 5 min.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"hood_poolsArguments"}},{"name":"hood_quote","description":"Minimal fast quote for one Hood ticker: Chainlink price (token +\n    per-share), NASDAQ references (ref_last, ref_prev_close), basis/overnight\n    bps, the most liquid pool's price/liquidity/deviation and\n    oracle_paused/stale flags. Use for sizing and fill pricing instead of\n    pulling the full 32-ticker snapshot.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"hood_quoteArguments"}},{"name":"hood_sector_rotation","description":"Sector rotation context for Hood tokenized stocks (API-only tracker\n    refreshed every 3h): market regime (risk_on|risk_off|mixed), an 11-SPDR\n    sector score/label/flow board and a per-ticker join — sector score\n    (0-100), label (inflow|interest|neutral|outflow_leaning|outflow), flow\n    trend, theme matches + live basis. Answers where money is rotating and\n    whether your token's sector is in inflow or outflow. tickers: CSV filter\n    (empty = full Hood universe).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"tickers":{"default":"","title":"Tickers","type":"string"}},"title":"hood_sector_rotationArguments"}},{"name":"hood_stock_research","description":"Daily deep-research report: score (0-100), rating (strong_buy|buy|hold|\n    avoid) and 4 analysis columns per Hood tokenized stock: thesis, dated\n    catalysts (off_hours-flagged, verified earnings dates), financials (PE\n    ttm/fwd, growth, margins, valuation_label: expensive|fair|discount|n_a),\n    competitors (peers + positioning) and news_summary ([+]/[=]/[-] tagged).\n    The api_data field carries exact API numbers (price, market cap, 1d/7d/30d,\n    52w, target mean/hi/lo, analyst rec counts) — use it when precision\n    matters. With ticker: one card + live basis join; empty: full report.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"default":"","title":"Ticker","type":"string"}},"title":"hood_stock_researchArguments"}},{"name":"hood_ticker_brief","description":"One-call brief for a single Hood ticker: live quote (price, basis,\n    pool, risk flags), research card (rating/score/thesis/catalysts), earnings\n    risk, sector rotation context, best Reddit attention signal, 24h\n    whale-flow summary and recent tagged news. Replaces 6-7 separate tool\n    calls when an agent researches one ticker. Missing upstream sources\n    fail-soft: the field is null.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"hood_ticker_briefArguments"}},{"name":"market_events","description":"Machine-readable news events (crypto + stocks). symbols is\n    comma-separated (NVDA,BTC), event_type: listing|hack|regulation|earnings|\n    etf|partnership|macro|liquidation|stablecoin|general. importance 0-100.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"symbols":{"default":"","title":"Symbols","type":"string"},"event_type":{"default":"","title":"Event Type","type":"string"},"min_importance":{"default":0,"title":"Min Importance","type":"integer"},"limit":{"default":50,"title":"Limit","type":"integer"}},"title":"market_eventsArguments"}},{"name":"narrative_trade_signals","description":"Deterministic candidates for the narrative-trader strategy: per Hood\n    ticker the highest-alpha Reddit signal (alpha_score, evidence, themes), a\n    signal bias (long_candidate = rising attention | avoid_or_fade = crowded\n    trade | context = regime info), live Chainlink price, basis and risk\n    flags. The `reason` field is the Reddit summary — carry it into status\n    reports and the chart as the buy/sell rationale. Signals are NOT orders.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_alpha":{"default":0.5,"title":"Min Alpha","type":"number"},"hours":{"default":48,"title":"Hours","type":"integer"}},"title":"narrative_trade_signalsArguments"}},{"name":"oracle_deviation","description":"Chainlink-vs-Uniswap pool price deviation (bps, sorted by absolute\n    value). status: ok (<100), warning (100-500), alert (>500). Large\n    deviations are normal in low-liquidity pools — check liquidity_usd.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_abs_bps":{"default":0,"title":"Min Abs Bps","type":"number"}},"title":"oracle_deviationArguments"}},{"name":"partner_my_trades","description":"Recent fills you've reported with partner_report_fill, most recent\n    first.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"title":"Api Key","type":"string"},"limit":{"default":50,"title":"Limit","type":"integer"}},"required":["api_key"],"title":"partner_my_tradesArguments"}},{"name":"partner_report_fill","description":"Report a fill you already signed and broadcast yourself (via\n    partner_swap_quote) so it appears in Otto's records. Otto does NOT\n    verify the transaction on-chain in this version — it trusts the\n    partner it already approved. side: buy | sell. tx_hash: the\n    transaction hash from your own broadcast.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"title":"Api Key","type":"string"},"ticker":{"title":"Ticker","type":"string"},"side":{"title":"Side","type":"string"},"tx_hash":{"title":"Tx Hash","type":"string"},"qty":{"default":0,"title":"Qty","type":"number"},"price":{"default":0,"title":"Price","type":"number"},"usd":{"default":0,"title":"Usd","type":"number"},"reason":{"default":"","title":"Reason","type":"string"}},"required":["api_key","ticker","side","tx_hash"],"title":"partner_report_fillArguments"}},{"name":"partner_swap_quote","description":"Get an UNSIGNED Rialto swap quote for an approved partner. YOU sign\n    and broadcast the returned transaction yourself, with your own wallet's\n    private key, on your own infrastructure — Otto never sees or holds your\n    key and never submits anything on your behalf. api_key: the otto_pn_\n    key Otto's admin issued you directly. sell_token/buy_token: Hood token\n    contract addresses (0x...). sell_amount: human units of sell_token (e.g.\n    \"25\" USDG, not wei). taker: the wallet address that will actually sign\n    and hold the position. Returns the raw Rialto quote including tx.to,\n    tx.data, tx.value and min_buy_amount — everything needed to build and\n    sign the transaction. After broadcasting, call partner_report_fill so\n    the trade shows up in Otto's records.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"api_key":{"title":"Api Key","type":"string"},"sell_token":{"title":"Sell Token","type":"string"},"buy_token":{"title":"Buy Token","type":"string"},"sell_amount":{"title":"Sell Amount","type":"string"},"taker":{"title":"Taker","type":"string"},"slippage_bps":{"default":50,"title":"Slippage Bps","type":"integer"}},"required":["api_key","sell_token","buy_token","sell_amount","taker"],"title":"partner_swap_quoteArguments"}},{"name":"perp_funding","description":"Hourly funding rates on tokenized-stock perps (Arcus + Lighter). Without\n    params: latest value per venue+ticker pair (funding_apr_pct = annualized\n    %). With ticker: history. Tokens trade 24/7 while the stock market does\n    not — weekend/overnight funding is the price of that mismatch.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"default":"","title":"Ticker","type":"string"},"venue":{"default":"","title":"Venue","type":"string"},"limit":{"default":200,"title":"Limit","type":"integer"}},"title":"perp_fundingArguments"}},{"name":"perp_spot_basis","description":"Perp mark price vs Hood on-chain spot (Chainlink per-share + pool),\n    deviation in bps per ticker. A large |perp_vs_chainlink_bps| means the\n    perp and spot price the same stock differently — a cross-venue opportunity\n    or a stale-oracle signal. Fields are null for markets without a Hood spot.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_abs_bps":{"default":0,"title":"Min Abs Bps","type":"number"}},"title":"perp_spot_basisArguments"}},{"name":"reddit_alpha_signals","description":"Ticker alpha signals extracted from Reddit (novelty, mention velocity\n    and cross-sub spread components). signal_type: ticker_alpha|crowded_trade|\n    event_mispricing|squeeze_watch. tickers is comma-separated (NVDA,TSLA).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"tickers":{"default":"","title":"Tickers","type":"string"},"signal_type":{"default":"","title":"Signal Type","type":"string"},"min_alpha":{"default":0.3,"title":"Min Alpha","type":"number"},"limit":{"default":50,"title":"Limit","type":"integer"}},"title":"reddit_alpha_signalsArguments"}},{"name":"reddit_market_regime","description":"Current market regime inferred from Reddit chatter (e.g.\n    mag7_only_rally, risk_on_call_chase) + confidence + flags to watch.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"reddit_market_regimeArguments"}},{"name":"report_agent_status","description":"Status report from a trading agent — the live panel on\n    ottodata.app/agents renders this stream. kind: run_started | signals |\n    order_proposed | order_approved | order_filled | order_skipped |\n    position_closed | run_summary | error. agent: gap-trader |\n    narrative-trader. key: the operator's OTTO_AGENT_KEY value (wrong keys are\n    rejected). Call at every runbook step; keep message short and\n    human-readable (e.g. 'BUY 3 NVDA @ 184.20 limit — gap +82bps').","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"title":"Key","type":"string"},"kind":{"title":"Kind","type":"string"},"message":{"title":"Message","type":"string"},"ticker":{"default":"","title":"Ticker","type":"string"},"run_id":{"default":"","title":"Run Id","type":"string"},"agent":{"default":"gap-trader","title":"Agent","type":"string"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Payload"}},"required":["key","kind","message"],"title":"report_agent_statusArguments"}},{"name":"service_status","description":"Trust status of the Otto data layer: per-feed freshness (age_sec/stale),\n    24h tick coverage, NASDAQ reference availability and oracle-pause count.\n    Call before making trading decisions — status: ok|degraded|down.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"service_statusArguments"}},{"name":"stable_risk","description":"Deviation of USDG and other stablecoins from $1 parity (depeg risk, bps).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"title":"stable_riskArguments"}},{"name":"token_flows","description":"Large on-chain token transfers (whale flows): 32 stock tokens + USDG\n    above the USD threshold. direction: mint|burn|transfer. Mints/burns show\n    the tokenized stock supply changing (issuance/redemption).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ticker":{"default":"","title":"Ticker","type":"string"},"min_usd":{"default":0,"title":"Min Usd","type":"number"},"direction":{"default":"","title":"Direction","type":"string"},"hours":{"default":24,"title":"Hours","type":"integer"},"limit":{"default":50,"title":"Limit","type":"integer"}},"title":"token_flowsArguments"}}],"scan":{"score":27,"grade":"F","scanned_at":"2026-11-03T19:40:57.279Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-03T19:40:57.209Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":0,"max":20,"notes":["remote unreachable: HTTP 503"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (endpoint requires auth); not counted"]},"auth":{"score":5,"max":15,"notes":["no auth information"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[{"id":"reliability.unreachable","severity":"high","component":"reliability","title":"Remote endpoint did not respond","detail":"HTTP 503"}],"inputs":{"probes":[{"url":"https://api.ottodata.app/mcp","reachable":false,"authRequired":false,"latencyMs":344,"error":"HTTP 503"}],"packages":[],"repo":{"found":false,"owner":"Degergokalp","repo":"otto-data","error":"repo not found"},"icon":{"url":"https://ottodata.app/otto-icon.png","source":"registry","width":816,"height":816},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[{"kind":"revoke","fromGrade":"C","toGrade":"F","reason":"score 27: Remote endpoint did not respond","createdAt":"2026-11-03T19:40:57.830Z"}],"reviews":[]}