# infersports MCP server

Sharp Asian odds + opening-line (初盘) movement for agents: 6 Asian books + Pinnacle. Read-only.

## Links
- Registry page: https://www.getdrio.com/mcp/dev-infersports-infersports
- Website: https://infersports.dev

## Install
- Endpoint: https://api.infersports.dev/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://api.infersports.dev/mcp

## Tools
- get_sharp_line (Get Sharp Line) - Answer an odds question about a fixture in ONE call (natural language in, worked line out).

    Resolves the fixture, picks the consensus line, the best price per outcome across books, and
    de-vigged fair odds from the sharpest book — returning a ready-to-read ``summary`` plus the
    full ``comparison``. Prefer this over chaining find_match → compare_lines.

    Args:
        query: natural-language fixture, e.g. "Arsenal vs Man City" or a single team.
        market_type: "1x2", "asian_handicap" (default) or "totals".
        period: "full_time" (default) or "half_time".
        format: odds format — decimal | hk | malay | american | indonesian | probability.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.
        verbosity: "full" (default) or "terse". "terse" empties the per-book ``books`` array inside
            ``comparison`` to save tokens; the ``summary`` and worked numbers are kept either way.

    On an ambiguous query, ``status`` is "ambiguous" and ``ask_user`` carries a disambiguation
    prompt — do not assume a match; ask the user or re-call with a more specific query. A
    ``decision`` block (``safe_to_proceed`` / ``ask_user`` / ``next_action``) pre-computes the
    go/no-go — branch on it instead of re-judging the result.
     Endpoint: https://api.infersports.dev/mcp
- find_match (Find Match) - Find a football/basketball fixture by natural-language name.

    Args:
        query: e.g. "Man City vs Arsenal" or a single team name.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.

    Returns the best-matching event (with id, teams, league, kickoff, live score, the live match
    ``clock`` e.g. "2h 47" or "ht", and a confidence score) plus alternatives. Use the returned
    ``event_id`` with get_match_odds / compare_lines.
    A ``decision`` block tells you whether it's ``safe_to_proceed`` and the suggested
    ``next_action`` (or ``ask_user`` when ambiguous).
     Endpoint: https://api.infersports.dev/mcp
- get_match_odds (Get Match Odds) - Get all current odds for a match across bookmakers.

    Args:
        event_id: event id from find_match / list_today_matches (e.g. "evt_…").
        markets: optional filter — any of "1x2", "asian_handicap", "totals".
        bookmakers: optional filter — bookmaker keys, e.g. ["pinnacle", "crown"].
        period: optional — "full_time" or "half_time" (default: both).
        format: odds format — decimal | hk | malay | american | indonesian | probability.
     Endpoint: https://api.infersports.dev/mcp
- compare_lines (Compare Lines) - Compare one market across all bookmakers for a match.

    Returns each book's quote line-by-line, the consensus line, the best price per outcome, each
    book's overround, and de-vigged fair odds from the sharpest (lowest-margin) book.

    Args:
        event_id: event id (e.g. "evt_…").
        market_type: "1x2", "asian_handicap" (default) or "totals".
        period: "full_time" (default) or "half_time".
        format: display odds format (analytics are computed in decimal regardless).
        verbosity: "full" (default) or "terse". "terse" drops the per-book ``books`` array (the bulk
            of the payload) and returns only the worked answer (best_prices / consensus_line /
            fair_odds / summary).
     Endpoint: https://api.infersports.dev/mcp
- explain_handicap (Explain Asian Handicap) - Explain an Asian handicap line.

    Splits a quarter line into its components (e.g. -0.75 → -0.5 / -1.0) and states the
    full-win / half-win / push / half-loss / full-loss conditions. ``line`` must be a multiple
    of 0.25.
     Endpoint: https://api.infersports.dev/mcp
- list_today_matches (List Today's Matches) - List today's (UTC) fixtures — "what games are on today / right now?".

    Each fixture carries its status, live score, the live match ``clock`` (upstream minute text,
    verbatim e.g. "1h 25" / "2h 47" / "ht") when in-running, and a ready-to-read ``summary`` (live
    score & clock, or the kickoff time). Read ``clock`` for the real minute rather than estimating it
    from kickoff. ``clock`` is null pre-match.

    Args:
        sport: optional filter — "football" or "basketball".
        status: optional filter — "live", "scheduled" or "finished".
        league: optional external league id ("lg_…").
        limit: max fixtures to return (1–200, default 50).
        timezone: optional IANA timezone (e.g. "America/New_York", "Asia/Shanghai") to render each
            fixture's kickoff in its ``summary`` as local time; default UTC.
     Endpoint: https://api.infersports.dev/mcp
- match_info (Match Info) - Get the basics for a match in ONE call: the score, whether it's live, when it kicks off, and who's favored.

    No betting knowledge needed — this answers "who's winning?", "what's the score?", "what time does
    Brazil play (in my timezone)?", "who's the favorite?". Returns the live score + match clock, the
    status, the kickoff time (in ``timezone`` if you pass an IANA name like "America/New_York"), the
    favored team with a plain win probability (de-vigged from the 1x2 line), and a ready-to-read
    ``summary`` you can quote directly.

    Args:
        query: natural-language fixture or team, e.g. "Brazil vs Argentina" or just "Brazil".
        timezone: optional IANA timezone (e.g. "America/New_York", "Asia/Shanghai") for the kickoff
            time; default UTC.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.

    On an ambiguous query, ``status`` is "ambiguous" and ``ask_user`` carries a prompt — do not guess.
    ``favorite`` is best-effort (null when no 1x2 is on file for the fixture).
     Endpoint: https://api.infersports.dev/mcp
- list_bookmakers (List Bookmakers) - List the bookmakers available on your tier.

    Returns the curated catalogue (each with ``key``, ``name`` and ``class`` = "sharp" | "asian")
    plus a ``note`` on tier coverage. Free tier excludes the sharp book (Pinnacle). Use the returned
    ``key`` values in the ``bookmakers`` filter of get_match_odds / compare_lines.
     Endpoint: https://api.infersports.dev/mcp
- get_opening_line (Get Opening Line) - Get the opening odds (初盘) for a fixture, paired with the current price, in ONE call.

    Resolves the fixture, then for each book returns its **true opening** (first-seen) quote alongside
    the current quote — so you can read movement directly. For 1x2 that's a price move; for totals/AH
    compare ``line`` (the opening line) vs ``current_line`` to read the line move (the sharp book often
    opens days earlier). A market with no opening yet on file is omitted.

    Args:
        query: natural-language fixture, e.g. "Real Madrid vs Barcelona" or a single team.
        markets: optional filter — any of "1x2", "asian_handicap", "totals".
        bookmakers: optional filter — bookmaker keys, e.g. ["pinnacle", "crown"].
        period: optional — "full_time" or "half_time" (default: both).
        format: odds format — decimal | hk | malay | american | indonesian | probability.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.

    On an ambiguous query, ``status`` is "ambiguous" and ``ask_user`` carries a disambiguation
    prompt — do not assume a match. Best-effort: a book/line with no opening on file is omitted.
     Endpoint: https://api.infersports.dev/mcp
- find_value (Find Value Bets) - Find +EV value bets in a fixture — where a book's price beats the sharp fair line — in ONE call.

    Resolves the fixture, de-vigs the sharp book (Pinnacle) at each line to get the fair price, then
    flags every outcome whose best available price across books exceeds that fair price. DETECTION
    ONLY: this surfaces the edge and which book holds it; it does NOT size stakes or link out to bet.

    Args:
        query: natural-language fixture, e.g. "Netherlands vs Algeria" or a single team.
        markets: optional filter — any of "1x2", "asian_handicap", "totals" (default: all).
        period: optional — "full_time" or "half_time" (default: both).
        min_edge_pct: only report outcomes beating fair by at least this % (default 1.0).
        format: odds format — decimal | hk | malay | american | indonesian | probability.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.

    On an ambiguous query, ``status`` is "ambiguous" and ``ask_user`` carries a prompt — do not
    guess. Needs the sharp book to de-vig; on the Free tier ``note`` flags that fair is approximate.
     Endpoint: https://api.infersports.dev/mcp
- find_arbitrage (Find Arbitrage) - Find cross-book arbitrage in a fixture — a guaranteed-profit price split — in ONE call.

    Resolves the fixture, then for each market/line takes the best price per outcome across books;
    when the inverse prices sum to < 1 there is a locked margin regardless of result. Reports the
    margin % and which book holds each leg (legs must come from ≥2 distinct books). DETECTION ONLY:
    no stake sizing, no bet links — InferSports is read-only.

    Args:
        query: natural-language fixture, e.g. "Netherlands vs Algeria" or a single team.
        markets: optional filter — any of "1x2", "asian_handicap", "totals" (default: all).
        period: optional — "full_time" or "half_time" (default: both).
        min_margin_pct: only report opportunities with at least this guaranteed margin (default 0).
        format: odds format — decimal | hk | malay | american | indonesian | probability.
        sport: optional filter — "football" or "basketball".
        date: optional UTC date "YYYY-MM-DD" to disambiguate same-name fixtures.

    On an ambiguous query, ``status`` is "ambiguous" and ``ask_user`` carries a prompt — do not guess.
     Endpoint: https://api.infersports.dev/mcp
- scan_slate (Scan Slate) - Scan today's whole slate in ONE call — each fixture with honest status + value/arb signal.

    The batch alternative to looping find_match → get_sharp_line per match. Returns every fixture in
    the filter with its status (finished is excluded from "live"), live score/clock, and a
    pre-computed value/arb signal; value/arb matches are sorted to the top and the list is truncated
    to ``limit`` (so truncation drops the quiet ones). Line movement is NOT included (that needs the
    opening lookup) — drill into a single fixture with get_opening_line. DETECTION ONLY / read-only.

    Args:
        sport: optional filter — "football" or "basketball".
        status: optional filter — "live" | "scheduled" | "finished".
        league: optional external league id (lg_…).
        markets: optional — limit the value/arb scan to "1x2"/"asian_handicap"/"totals" (default all).
        period: optional — "full_time" or "half_time" (default both).
        min_edge_pct: value threshold for the per-match signal (default 1.0).
        min_margin_pct: arbitrage threshold for the per-match signal (default 0.0).
        only_signal: if true, return only fixtures that have a value or arb signal.
        format: odds format — decimal | hk | malay | american | indonesian | probability.
        limit: max entries to return, signal-first (default 20, max 100).
     Endpoint: https://api.infersports.dev/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: dev.infersports
- Version: 1.0.0
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 6, 2026
- Source: https://registry.modelcontextprotocol.io
