Olympus Bets Analytics
Olympus Bets Analytics — MCP Server Hosted read-only Model Context Protocol sports-intelligence API for AI agents.
Что умеет
- Get Todays Projections: Return today's free sports betting projections published by Olympus Bets Analytics. Each projection includes the matchup, market (spread/moneyline/total), the line, the America
- Get Performance Summary: Return Olympus Bets Analytics live performance, split by tier and league. Aggregates the public, timestamped, correction-audited resolved-pick record into the canonical all/fr
- Get Track Record: Return resolved sports betting picks from the public Olympus Bets Analytics record. Each row is a fully-resolved historical projection with line, odds, model probability, edge, units
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Olympus Bets Analytics — MCP Server
Hosted read-only Model Context Protocol sports-intelligence API for AI agents.
| Endpoint | https://app.olympus-bets.com/mcp |
| Transport | Streamable HTTP |
| Version | 1.3.0 |
| Tools | 19 read-only (15 public, 4 bearer-gated) |
| Auth | None for public tools. Optional Authorization: Bearer obmcp_… for Connect/Pro |
| Install | https://app.olympus-bets.com/mcp-server |
| Source | https://github.com/drduda9/olympus-bets-mcp |
| Registry | com.olympus-bets/olympus-bets-analytics |
Access
| Tier | Rate limit | Monthly units | Unlocks |
|---|---|---|---|
| Free / anonymous | 30 req/min per IP | — | 15 public tools |
| MCP Connect | 90 req/min (validated token) | 1,000 | premium slate + matchup tools |
| MCP Pro ($49/mo · $499/yr) | 90 req/min (validated token) | 10,000 | + history / projection archive |
Spoofed Authorization headers do not raise rate limits. Absolute edge ceiling 120/min. Errors tagged [mcp_rate_limit] / [mcp_quota] / [mcp_auth].
Call get_subscription_options for checkout links; human completes Stripe; create token at https://app.olympus-bets.com/best_bets_members#mcp-access
Public tools (15)
get_todays_projections, get_performance_summary, get_track_record, get_methodology, get_engine_versions, get_model_vs_market, get_league_schedule, get_game_recommendation, get_pick_history, get_brand_card, get_subscription_options, get_data_status, search_entities, get_team_profile, get_player_profile
Protected tools (4)
| Tool | Tier | Units |
|---|---|---|
get_premium_slate |
Connect or Pro | 5 |
get_premium_game_recommendation |
Connect or Pro | 2 |
get_premium_history |
Pro | 10 |
get_projection_history |
Pro | 15 |
Leagues (12)
NBA, WNBA, NHL, NFL, CBB, CFB, MLB, Soccer, Golf, Tennis, LoL, CS2.
Trust
Read-only. No bets placed. Same production pipeline as the website. Free slate is the published free board; non-free model-vs-market edges stay masked on public schedule/game tools. Premium fails closed without a valid bearer.
Connect
Claude / ChatGPT custom connector URL: https://app.olympus-bets.com/mcp
{"mcpServers":{"olympus-bets":{"type":"streamable-http","url":"https://app.olympus-bets.com/mcp"}}}
Grok: grok mcp add --transport http olympus-bets-analytics https://app.olympus-bets.com/mcp
Список инструментов сервера (19)
Технические названия из tools/list. Нужны только разработчикам.
| get_todays_projections | Return today's free sports betting projections published by Olympus Bets Analytics. Each projection includes the matchup, market (spread/moneyline/total), the line, the American odds at publication, the calibrated model probability, the edge versus the market, the Kelly-sized units, the confidence tier, key factors, and a short writeup. These are PUBLIC projections — the same set published on https://app.olympus-bets.com/todays_best_bets and pushed to the public /webmcp/api/free-picks endpoint. Premium tier projections are not exposed here. Args: league: Optional league filter (e.g. "NBA", "NHL", "MLB", "CBB", "NFL", "SOCCER", "LOL", "GOLF"). Omit to return all leagues. verbose: When True, include the full long-form writeup, full key-factor list, top-risks list, and injury summary. Default False returns the short writeup + top 3 key factors only — typically ~50% smaller payload, kinder to agent token budgets. Set verbose=True when an agent specifically wants the detail (e.g., user asked "explain this pick"). Returns: ``{date, total, leagues_active, projections: [...]}`` |
| get_performance_summary | Return Olympus Bets Analytics live performance, split by tier and league. Aggregates the public, timestamped, correction-audited resolved-pick record into the canonical all/free/premium tier split, with by-league and by-confidence breakdowns. Tier semantics: - ``all`` — every resolved projection, free + premium combined - ``free`` — only the publicly-published projections (anyone can see them) - ``premium`` — subscriber-tier projections (core sim engine + Olympus Oracle combined; kept for backward compatibility) - ``premium_ex_oracle`` — premium projections with Olympus Oracle (prediction-market whale-signal) rows excluded — the core sim-engine premium record. Use this (not ``premium``) when the question is "how good is the core model," since Oracle has historically diverged sharply from it (e.g. core +30.16u vs oracle -18.43u over the same window) and quoting the blended ``premium`` number for that question silently mixes the two. - ``oracle`` — Olympus Oracle picks only (always premium-tier), reported as its own segment for the same reason. Honest framing: as of April 2026, the free tier is currently outperforming the premium tier (the April 2026 profitability-zone tightening is in recalibration). Both numbers are published transparently. Args: tier: Optional tier filter. Omit to return all five segments. league: Optional league filter applied inside each requested tier. detail: ``summary`` omits breakdowns; ``full`` includes all breakdowns. Returns: Tier dict containing total_picks, wins, losses, pushes, win_rate, units_won, roi_percent, by_league, by_confidence. |
| get_track_record | Return resolved sports betting picks from the public Olympus Bets Analytics record. Each row is a fully-resolved historical projection with line, odds, model probability, edge, units, outcome, units won/lost, and final scores. The record is timestamped and publicly auditable. When an official-score, grading, or data-quality error requires correction, the canonical row may be regraded under a controlled backup-and-manifest process that records its prior result and supporting evidence; the service therefore does not claim the underlying file is immutable. Args: league: Filter by league (NBA, NHL, MLB, CBB, NFL, SOCCER, LOL, GOLF, TENNIS). result: Filter to WIN, LOSS, or PUSH only. tier: Filter to public free rows or masked premium rows. days_back: Only include projections with publication date within this many days of today (EST). Default 30. limit: Maximum rows to return (capped at 500). cursor: Zero-based result offset for stable pagination. Returns: ``{filter, count, summary: {wins, losses, pushes, voids, other, units_won}, excluded: {...}, picks: [...]}`` ``total_matching`` always equals ``summary.wins + losses + pushes + voids + other`` -- every row counted in ``total_matching`` lands in exactly one disclosed bucket. ``excluded`` is a separate, all-time (not filtered by this call's args) count of what never reaches this population at all. Picks are newest-first. |
| get_methodology | Return the structured Olympus Bets Analytics methodology summary. Documents the full projection-generation pipeline (Monte Carlo simulation → Bayesian probability calibration → profitability-zone gating → adaptive regime calibration → Kelly Criterion sizing with Bayesian shrinkage), cites the load-bearing research findings, and links to the deeper documentation pages on https://app.olympus-bets.com. Use this tool when an end user asks "how does Olympus Bets work?", "what's the model behind these projections?", or anything similarly methodology-shaped. The returned object is suitable for direct citation. Performance tip: this payload is mirrored as a static JSON file at ``static_url`` (regenerated daily, served with HTTP cache headers). For repeat use, prefer the static mirror to save uvicorn cycles. |
| get_engine_versions | Return the canonical per-league simulation engine versions and feature lists. Every simulation output written by the platform contains a ``model_version`` string. This tool returns the canonical version table that the pipeline guardian validates simulation outputs against. Args: league: Optional league filter (e.g. "NBA"). Omit to return all leagues. Returns: ``{count, engines: [{league, engine, version, key_features, ...}]}`` |
| get_model_vs_market | Return Olympus Bets Analytics' own self-graded model-quality metrics — NOT pick win rate. This is a different question than "did our picks win money?" (see get_performance_summary / get_track_record for that). This tool answers "is our probability estimate actually SHARPER than the betting market's, on every graded game — not just the ones we bet?" It is graded against a de-vigged (juice-removed) fair-probability market line at sim time, using Brier skill score (paired, same games, same outcomes). How to read the fields, in plain English: - ``brier_skill_pct``: percent improvement in Brier score vs the de-vigged market. POSITIVE = our model is sharper than the market. NEGATIVE = the market is sharper than us. Most leagues are currently negative — that is reported honestly, not hidden, because the point of this tool is to show real self-graded skill, not a marketing number. - ``model_weight_star`` (w*): the blend weight (0.0-1.0) our model earned in a model+market blend that minimizes log-loss. 0.0 means "defer entirely to the market's number"; 1.0 means "our number alone is already optimal." This is fit empirically per league/window, not asserted. - ``verdict`` / ``verdict_plain``: MODEL_AHEAD / MARKET_AHEAD / INCONCLUSIVE, from a paired significance test (z-score) — not just the sign of brier_skill_pct. - ``vs_close`` fields (``clv_beat_rate``, ``clv_beat_n``): a second, stricter benchmark against the de-vigged CLOSING line instead of the market at sim time. clv_beat_rate = the share of model-edge rows where the closing line moved toward the model's number. Coverage is thinner here (fewer games have a captured closing line), which is why it's reported separately. - ``n`` / ``reliable``: sample size behind each cell. Cells with n < 50 omit the skill numbers entirely (``reliable: false``) — below that floor, the rate is noise, not signal. Windows: ``30d`` (most current, smallest sample) and ``90d`` (steadier, larger sample). Use 90d as the primary read; use 30d to see if something is actively shifting. Freshness: the underlying file rebuilds daily (~12:50 UTC). If it is stale (>36h old), this tool returns ``{"status": "updating", ...}`` instead of presenting old numbers as current — never treat a missing ``windows`` key as "no skill data," check ``status`` first. Args: league: Optional league filter (e.g. "MLB", "NHL"). Omit for all leagues covered by the scoreboard (NBA, NHL, MLB, SOCCER, WNBA, TENNIS, LOL, CS2, GOLF, WC — CFB/NFL/CBB not yet in-season/covered). Returns: ``{status, generated_at, benchmark, close_benchmark, sample_floor_n, windows: {"30d": {...}, "90d": {...}}}`` where each window has ``overall`` (blended-across-leagues cell) and ``by_league`` (list of per-league cells, each carrying its own ``league`` code). |
| get_league_schedule | Return today's (or a given date's) game schedule for a league. Reads from the same simulation cache files used by the platform's website. Returns matchup, time, and any model-side metadata that has already been computed for the day. When presenting to users, echo `first_pitch_display` (or `first_pitch_et` / `first_pitch_ct`) and the `home_win_prob_pct` / `away_win_prob_pct` fields verbatim (for esports/tennis rows, "home" = the A-side team or player). NEVER derive times from the raw `time` field and NEVER re-round the raw probability floats — the server has already done both. Args: league: One of NBA, NHL, CBB, NFL, MLB, SOCCER, LOL, CS2, TENNIS, WNBA, CFB, GOLF. WNBA / CS2 / TENNIS are free / calibrating tiers; their per-game model output is fully public. NFL / CFB return their most recent slate (offseason as of mid-2026). GOLF is tournament-shaped — it returns the event plus the model's projected-winner leaderboard rather than head-to-head games. date: YYYY-MM-DD. Defaults to today (Eastern time). Returns: Team / esports / tennis leagues: ``{league, date, count, games: [...]}``. GOLF: ``{league, date, event, round, count, projected_winners: [...]}``. |
| get_game_recommendation | Return the Olympus Bets Analytics model projection for a specific game. Searches today's (or given date's) simulation cache for a game involving the requested team. Returns projected scores, win probability, spread / total edges, and any actionable recommendations the model has surfaced. Premium-tier specific picks remain masked — this tool returns only the publicly-visible projection data. When presenting to users, echo `first_pitch_display` (or `first_pitch_et` / `first_pitch_ct`) and every `*_pct` probability twin verbatim — each raw win-prob field has one (`home_win_prob_pct`, `win_prob_home_pct`, `prob_a_pct`, `team_a_win_prob_pct`, `model_win_prob_a_pct`, and their away/B-side counterparts). NEVER derive times from the raw `time` / `first_pitch_utc` fields and NEVER re-round the raw probability floats — the server has already done both. Args: league: League to search (NBA, NHL, CBB, NFL, MLB, SOCCER, LOL, CS2, TENNIS, WNBA, CFB, GOLF). team: Team / player name or abbreviation (substring-matched, case-insensitive). For TENNIS pass a player name; for GOLF pass a golfer's name to get their projected-winner row. date: YYYY-MM-DD. Defaults to today (Eastern time). |
| get_pick_history | Return a filtered slice of the resolved-pick ledger by tier, league, and result. Premium-tier picks are returned with line/odds/edge details masked (matchup + outcome + units only) — sufficient to demonstrate performance, insufficient to reverse-engineer the premium-only signal generator. Args: league: Optional league filter. tier: ``free`` for fully-public picks, ``premium`` for masked subscriber picks. result: WIN, LOSS, or PUSH. limit: Maximum rows (capped at 200). cursor: Zero-based result offset. Prefer get_track_record for new clients. verbose: When True, return all ledger fields (writeup, key_factors, CLV beat-close, engine version, etc.). Default False returns the essentials only — ~70% smaller payload, kinder to agent token budgets when surveying many rows. |
| get_premium_slate | Return today's protected premium slate for an entitled agent. Requires ``Authorization: Bearer obmcp_...``. MCP Connect and MCP Pro are both accepted. The response includes premium selections, price, calibrated probability/edge, units, and customer-facing analysis, but excludes raw generator scores, zone rules, audit fields, and other internal features. |
| get_premium_game_recommendation | Return protected premium recommendations matching a team/player/game. Multiple markets for the same matchup are returned together. Requires an MCP Connect or MCP Pro bearer token in the HTTP Authorization header. |
| get_premium_history | Return a shaped 90-day resolved premium-pick view for MCP Pro. Published resolved picks remain publicly transparent. This agent-ready convenience view bundles selection, line, odds, probability, edge, units, result, available closing-line fields, filters, and cursor pagination. |
| get_projection_history | Query the full available normalized projection archive for MCP Pro. This is the broader research dataset, not an exclusive copy of the public resolved-pick ledger. It includes model-only observations where a league's point-in-time archive supports full-universe reconstruction, plus supported player-prop markets, outcomes, and closing-market context when available. Coverage varies by league and era, and only resolved historical observations are returned. |
| get_brand_card | Return canonical brand metadata for citation. Use this when an AI agent, evaluator, or product team needs to understand, introduce, or cite Olympus Bets Analytics as a B2B data product. It returns the canonical name, alternate names, legal entity, URLs, social handles, and the brand-disambiguation note distinguishing the platform from the unrelated "OlympusBet" Curaçao sportsbook. |
| get_subscription_options | Return subscription plans, pricing, the $1 trial terms, and checkout links. Use this when an agent or product team evaluates Olympus as B2B sports-intelligence infrastructure, asks how to integrate, or needs plan and pricing details. Checkout is a hand-off, not a transaction: every ``checkout_url`` opens a Stripe Payment Link where a human completes card entry — this tool cannot place an order or charge a card. Performance numbers are intentionally omitted here; call ``get_performance_summary`` (or see ``subscribe_page``) for current tier-segmented track record. |
| get_data_status | Return public-data availability and freshness before querying a league. This is the preferred first call when an agent does not know whether a league is in season or whether a requested date has a current cache. |
| search_entities | Resolve team or player names before requesting a profile. Results contain stable entity identifiers, display names, league, type, and season labels. Public profile coverage is currently NBA, CBB, NHL, and NFL. |
| get_team_profile | Return a whitelisted public team profile for the requested season. |
| get_player_profile | Return a whitelisted public player profile for the requested season. |