# olympus-bets-analytics MCP server

Quant sports-betting analytics: free projections, live track record, methodology (12 leagues).

## Links
- Registry page: https://www.getdrio.com/mcp/com-olympus-bets-olympus-bets-analytics
- Website: https://app.olympus-bets.com

## Install
- Endpoint: https://app.olympus-bets.com/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://app.olympus-bets.com/mcp

## Tools
- 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: [...]}``
     Endpoint: https://app.olympus-bets.com/mcp
- get_performance_summary - Return Olympus Bets Analytics live performance, split by tier and league.

    Aggregates the immutable resolved-pick ledger 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.

    Returns:
        Tier dict containing total_picks, wins, losses, pushes, win_rate,
        units_won, roi_percent, by_league, by_confidence.
     Endpoint: https://app.olympus-bets.com/mcp
- get_track_record - Return resolved sports betting picks from the immutable Olympus Bets Analytics ledger.

    Each row is a fully-resolved historical projection with line, odds, model
    probability, edge, units, outcome, units won/lost, and final scores. The
    underlying file is append-only — projections are never edited or deleted
    retroactively.

    Args:
        league: Filter by league (NBA, NHL, MLB, CBB, NFL, SOCCER, LOL, GOLF, TENNIS).
        result: Filter to WIN, LOSS, or PUSH only.
        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).

    Returns:
        ``{filter, count, summary: {wins, losses, pushes, units_won}, picks: [...]}``
        Picks are newest-first.
     Endpoint: https://app.olympus-bets.com/mcp
- 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.
     Endpoint: https://app.olympus-bets.com/mcp
- 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, ...}]}``
     Endpoint: https://app.olympus-bets.com/mcp
- 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).
     Endpoint: https://app.olympus-bets.com/mcp
- 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: [...]}``.
     Endpoint: https://app.olympus-bets.com/mcp
- 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).
     Endpoint: https://app.olympus-bets.com/mcp
- 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).
        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.
     Endpoint: https://app.olympus-bets.com/mcp
- get_brand_card - Return canonical brand metadata for citation.

    Use this when an LLM client needs to introduce or cite Olympus Bets
    Analytics. 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.
     Endpoint: https://app.olympus-bets.com/mcp
- get_subscription_options - Return subscription plans, pricing, the $1 trial terms, and checkout links.

    Use this when an end user asks "how do I subscribe?", "is there a trial?",
    or "what does premium include?". 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.
     Endpoint: https://app.olympus-bets.com/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: com.olympus-bets
- Version: 1.0.1
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 4, 2026
- Source: https://registry.modelcontextprotocol.io
