ninjabeam20 avatar

Sportiq Mcp

ninjabeam20/sportiq-mcp

Three sports, three flagship tools: Monte Carlo bracket simulation for the 48-team World Cup 2026 format using Poisson xG, F1 pit strategy prediction with tyre degradation models over OpenF1 telemetry, and a PuLP constraint solver that builds valid Dream11 cricket lineups under salary and role caps. Beyond the headliners you get 44 raw and intelligence tools pulling from API-Football, Jolpica, CricAPI, and live bookmaker odds. The server includes value bet finders that compare model probabilities against market lines. A hosted instance runs on Cloud Run if you want to skip local setup. Useful when you need structured sports intelligence beyond static lookups.

GitHub stars
10
tools
46
transport
STDIO, HTTP
last updated
Oct 23, 2026

Install

From registry metadata
$ npx add-mcp https://sportiq.utkarshgupta.org/mcp --name sportiq-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http sportiq-mcp https://sportiq.utkarshgupta.org/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 46 tools

Verified live against the running server on Nov 13, 2026.

sportiq_healthReport cache backend, per-adapter healthcheck, and quota status. Returns: HealthReport-shaped dict with `cache_backend`, `cache_ok`, `adapters` (per-source ok/detail), and `quotas`.

Report cache backend, per-adapter healthcheck, and quota status. Returns: HealthReport-shaped dict with `cache_backend`, `cache_ok`, `adapters` (per-source ok/detail), and `quotas`.

No parameters. Call it with no arguments.

football_get_groupsReturn the FIFA World Cup 2026 group draw and advancement format. Returns: data.groups: {group_letter: [4 team codes]} for all 12 groups. data.format: 48-team / 12-group / top-2 + 8-best-thirds rule. data.teams: team-code -> {name, fifa_code} metadata. meta.source: adapter tha...

Return the FIFA World Cup 2026 group draw and advancement format. Returns: data.groups: {group_letter: [4 team codes]} for all 12 groups. data.format: 48-team / 12-group / top-2 + 8-best-thirds rule. data.teams: team-code -> {name, fifa_code} metadata. meta.source: adapter tha...

No parameters. Call it with no arguments.

football_get_fixturesReturn World Cup 2026 fixtures (live providers, else the group schedule). Args: limit: Max fixtures to return, 1..200 (default 50). offset: Number of fixtures to skip for paging (default 0). Returns: data.fixtures: page of {home, away, date/group, status, home_goals, away_goal...2 params

Return World Cup 2026 fixtures (live providers, else the group schedule). Args: limit: Max fixtures to return, 1..200 (default 50). offset: Number of fixtures to skip for paging (default 0). Returns: data.fixtures: page of {home, away, date/group, status, home_goals, away_goal...

Parameters* required
limitinteger
Max fixtures to return, 1..200 (default 50).default: 50
offsetinteger
Number of fixtures to skip for paging (default 0).default: 0
football_get_standingsReturn current World Cup 2026 group standings. Args: limit: Max standing rows to return, 1..200 (default 50). offset: Number of rows to skip for paging (default 0). Returns: data.standings: page of {rank, team, group, points, played, goals_diff}. data.pagination: {total, count...2 params

Return current World Cup 2026 group standings. Args: limit: Max standing rows to return, 1..200 (default 50). offset: Number of rows to skip for paging (default 0). Returns: data.standings: page of {rank, team, group, points, played, goals_diff}. data.pagination: {total, count...

Parameters* required
limitinteger
Max standing rows to return, 1..200 (default 50).default: 50
offsetinteger
Number of rows to skip for paging (default 0).default: 0
football_get_squadReturn a national team's World Cup squad. Args: team: Team code or name (e.g. "ARG"). Live rosters need an API-Football key; without one the static seed serves an empty-but-valid squad (no rosters are bundled). Returns: data.squad: list of {name, number, position, age} (empty...1 params

Return a national team's World Cup squad. Args: team: Team code or name (e.g. "ARG"). Live rosters need an API-Football key; without one the static seed serves an empty-but-valid squad (no rosters are bundled). Returns: data.squad: list of {name, number, position, age} (empty...

Parameters* required
team*string
Team code or name (e.g. "ARG"). Live rosters need an API-Football key; without one the static seed serves an empty-but-valid squad (no rosters are bundled).
football_get_match_statsReturn a team's aggregate World Cup tournament statistics. Network-only enrichment: requires a configured API-Football (or football-data.org) key. There is no offline static fallback, so without a key the call returns a clean ALL_SOURCES_FAILED envelope. Args: team: API-Footba...1 params

Return a team's aggregate World Cup tournament statistics. Network-only enrichment: requires a configured API-Football (or football-data.org) key. There is no offline static fallback, so without a key the call returns a clean ALL_SOURCES_FAILED envelope. Args: team: API-Footba...

Parameters* required
team*integer
API-Football numeric team id (not a country code).
football_get_top_scorersReturn the World Cup 2026 top scorers. Returns: data.scorers: list of {name, team, goals, assists}. meta.source: adapter that served the data.

Return the World Cup 2026 top scorers. Returns: data.scorers: list of {name, team, goals, assists}. meta.source: adapter that served the data.

No parameters. Call it with no arguments.

football_get_oddsReturn market head-to-head odds for any World Cup 2026 events the odds feed still lists. Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing. The tournament ended with the 2026-07-19 final, s...1 params

Return market head-to-head odds for any World Cup 2026 events the odds feed still lists. Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing. The tournament ended with the 2026-07-19 final, s...

Parameters* required
teamvalue
Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every WC event.
football_xg_modelEstimate a match's expected goals and win/draw/loss probabilities. Args: home_team: First team, FIFA code or name (e.g. "ARG" or "Argentina"). away_team: Second team, FIFA code or name (e.g. "BRA" or "Brazil"). neutral: True for a neutral venue (no home advantage). World Cup d...3 params

Estimate a match's expected goals and win/draw/loss probabilities. Args: home_team: First team, FIFA code or name (e.g. "ARG" or "Argentina"). away_team: Second team, FIFA code or name (e.g. "BRA" or "Brazil"). neutral: True for a neutral venue (no home advantage). World Cup d...

Parameters* required
away_team*string
Second team, FIFA code or name (e.g. "BRA" or "Brazil").
home_team*string
First team, FIFA code or name (e.g. "ARG" or "Argentina").
neutralboolean
True for a neutral venue (no home advantage). World Cup default.default: true
football_match_predictorPredict a single match: most likely scoreline + outcome probabilities. Args: home_team: First team, FIFA code or name (e.g. "ESP" or "Spain"). away_team: Second team, FIFA code or name. neutral: True for a neutral venue (World Cup default). Returns: data: {most_likely_score, h...3 params

Predict a single match: most likely scoreline + outcome probabilities. Args: home_team: First team, FIFA code or name (e.g. "ESP" or "Spain"). away_team: Second team, FIFA code or name. neutral: True for a neutral venue (World Cup default). Returns: data: {most_likely_score, h...

Parameters* required
away_team*string
Second team, FIFA code or name.
home_team*string
First team, FIFA code or name (e.g. "ESP" or "Spain").
neutralboolean
True for a neutral venue (World Cup default).default: true
football_simulate_groupMonte Carlo one group within the full 12-group qualification context. Args: group: Group letter A-L (also accepts "Group A"). iterations: Number of simulations (clamped to 100..20000). Returns: data.teams: Per-team position probabilities, p_auto_advance, p_best_third_advance,...2 params

Monte Carlo one group within the full 12-group qualification context. Args: group: Group letter A-L (also accepts "Group A"). iterations: Number of simulations (clamped to 100..20000). Returns: data.teams: Per-team position probabilities, p_auto_advance, p_best_third_advance,...

Parameters* required
group*string
Group letter A-L (also accepts "Group A").
iterationsinteger
Number of simulations (clamped to 100..20000).default: 5000
football_simulate_bracketMonte Carlo the full World Cup 2026 — per-team round + title probabilities. Simulates all 12 groups, advances the top 2 + 8 best third-placed teams to a 32-team knockout, and plays it to a champion, ``iterations`` times. Args: iterations: Number of tournament simulations (clam...2 params

Monte Carlo the full World Cup 2026 — per-team round + title probabilities. Simulates all 12 groups, advances the top 2 + 8 best third-placed teams to a 32-team knockout, and plays it to a champion, ``iterations`` times. Args: iterations: Number of tournament simulations (clam...

Parameters* required
iterationsinteger
Number of tournament simulations (clamped to 100..20000; ~10000 gives stable ±2% probabilities).default: 10000
seedvalue
Optional RNG seed for reproducible output.
football_knockout_pathRound-by-round survival probabilities for one team in the full sim. Args: team: FIFA code or name (e.g. "FRA" or "France"). iterations: Number of tournament simulations (clamped to 100..20000). seed: Optional RNG seed. Returns: data: {team, reach_r32, reach_r16, reach_qf, reac...3 params

Round-by-round survival probabilities for one team in the full sim. Args: team: FIFA code or name (e.g. "FRA" or "France"). iterations: Number of tournament simulations (clamped to 100..20000). seed: Optional RNG seed. Returns: data: {team, reach_r32, reach_r16, reach_qf, reac...

Parameters* required
iterationsinteger
Number of tournament simulations (clamped to 100..20000).default: 10000
seedvalue
Optional RNG seed.
team*string
FIFA code or name (e.g. "FRA" or "France").
football_what_ifReplay World Cup 2026 from a chosen stage, optionally flipping one real knockout result. Keeps every real result played before ``replay_from`` and Monte-Carlos the rest of the tournament from there. ``flip_winner_of`` makes one decided knockout tie in the kept results go the o...4 params

Replay World Cup 2026 from a chosen stage, optionally flipping one real knockout result. Keeps every real result played before ``replay_from`` and Monte-Carlos the rest of the tournament from there. ``flip_winner_of`` makes one decided knockout tie in the kept results go the o...

Parameters* required
flip_winner_ofvalue
Optional tie to flip, as two FIFA codes or names joined by a hyphen in any order (e.g. "ESP-FRA"). It must be a decided knockout tie before ``replay_from``.
iterationsinteger
Number of tournament simulations (clamped to 100..20000).default: 10000
replay_fromstring
Stage to re-simulate from: "group" (whole tournament, no real results kept), "r32", "r16", "qf", "sf" or "final" (keeps every result before the final and simulates only the final).one of group · r32 · r16 · qf · sf · finaldefault: group
seedvalue
Optional RNG seed for reproducible output.
football_find_value_betsSurface the largest gaps between the model's win probability and the market. De-vigs each market's 1X2 decimal odds (removes the margin so implied probabilities sum to 1) and compares them to this server's own match-outcome probabilities — the same Elo/Poisson path ``football_...2 params

Surface the largest gaps between the model's win probability and the market. De-vigs each market's 1X2 decimal odds (removes the margin so implied probabilities sum to 1) and compares them to this server's own match-outcome probabilities — the same Elo/Poisson path ``football_...

Parameters* required
min_edgenumber
Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05 (5 percentage points).default: 0.05
teamvalue
Optional FIFA code or team name to filter events (matched against both sides; an unrecognised value falls back to a case-insensitive substring match). Omit to scan every WC 2026 odds event.
football_form_trendsReturn rolling form, goal record, and xG trend for a football team. Args: team: FIFA code (e.g. ARG) or name (e.g. "Argentina", "South Korea"). Returns: data: {form_string, wins, draws, losses, goals_scored, goals_conceded, xg_for, xg_against, recent_trend, matches_analysed}....1 params

Return rolling form, goal record, and xG trend for a football team. Args: team: FIFA code (e.g. ARG) or name (e.g. "Argentina", "South Korea"). Returns: data: {form_string, wins, draws, losses, goals_scored, goals_conceded, xg_for, xg_against, recent_trend, matches_analysed}....

Parameters* required
team*string
FIFA code (e.g. ARG) or name (e.g. "Argentina", "South Korea").
football_build_accumulatorModel the joint probability of several match outcomes from the top model-vs-market gaps. Calls ``football_find_value_bets`` internally to fetch live odds, then selects the strongest legs and combines them under the joint-probability model. Args: legs: Number of legs (2-8). Def...2 params

Model the joint probability of several match outcomes from the top model-vs-market gaps. Calls ``football_find_value_bets`` internally to fetch live odds, then selects the strongest legs and combines them under the joint-probability model. Args: legs: Number of legs (2-8). Def...

Parameters* required
legsinteger
Number of legs (2-8). Default 3.default: 3
min_edgenumber
Minimum edge threshold per leg. Default 0.05.default: 0.05
f1_get_sessionsReturn F1 sessions for a given year, optionally filtered by country or session name. Args: year: Championship year (e.g. 2026). country: Optional country name to filter (e.g. "Netherlands"). session_name: Optional session name to keep, case-insensitive (e.g. "Race", "Qualifyin...4 params

Return F1 sessions for a given year, optionally filtered by country or session name. Args: year: Championship year (e.g. 2026). country: Optional country name to filter (e.g. "Netherlands"). session_name: Optional session name to keep, case-insensitive (e.g. "Race", "Qualifyin...

Parameters* required
countryvalue
Optional country name to filter (e.g. "Netherlands").
latest_completedboolean
When true, return only the single session that ended most recently (greatest date_end before now, UTC) — e.g. with session_name="Race", the latest finished Grand Prix.default: false
session_namevalue
Optional session name to keep, case-insensitive (e.g. "Race", "Qualifying", "Sprint").
year*integer
Championship year (e.g. 2026).
f1_get_driversReturn driver list for a specific F1 session. Args: session_key: OpenF1 session identifier. Returns: data.drivers: list of driver objects with driver_number, full_name, team. meta.source: adapter that served the data.1 params

Return driver list for a specific F1 session. Args: session_key: OpenF1 session identifier. Returns: data.drivers: list of driver objects with driver_number, full_name, team. meta.source: adapter that served the data.

Parameters* required
session_key*integer
OpenF1 session identifier.
f1_get_lap_timesReturn lap times for a driver in a specific F1 session. Args: session_key: OpenF1 session identifier. driver_number: Driver's race number (driver numbers change by season; use f1_get_drivers). limit: Max laps to return, 1..200 (default 100 — covers most full races). offset: Nu...4 params

Return lap times for a driver in a specific F1 session. Args: session_key: OpenF1 session identifier. driver_number: Driver's race number (driver numbers change by season; use f1_get_drivers). limit: Max laps to return, 1..200 (default 100 — covers most full races). offset: Nu...

Parameters* required
driver_number*integer
Driver's race number (driver numbers change by season; use f1_get_drivers).
limitinteger
Max laps to return, 1..200 (default 100 — covers most full races).default: 100
offsetinteger
Number of laps to skip for paging (default 0).default: 0
session_key*integer
OpenF1 session identifier.
f1_get_standingsReturn F1 driver and constructor championship standings for a year. Use this for "who is leading / who will win the F1 championship this year". For title probabilities use f1_simulate_championship. This is not a cricket or football tool. Args: year: Championship year (e.g. 202...1 params

Return F1 driver and constructor championship standings for a year. Use this for "who is leading / who will win the F1 championship this year". For title probabilities use f1_simulate_championship. This is not a cricket or football tool. Args: year: Championship year (e.g. 202...

Parameters* required
year*integer
Championship year (e.g. 2026).
f1_get_race_resultsReturn the final classification for one F1 race, keyed by year and round. Args: year: Championship year (e.g. 2025). round: Round number within the season (1-based; e.g. 1 for the opener). Returns: data.results: Ergast/Jolpica RaceTable payload — finishing order, times, grid p...2 params

Return the final classification for one F1 race, keyed by year and round. Args: year: Championship year (e.g. 2025). round: Round number within the season (1-based; e.g. 1 for the opener). Returns: data.results: Ergast/Jolpica RaceTable payload — finishing order, times, grid p...

Parameters* required
round*integer
Round number within the season (1-based; e.g. 1 for the opener).
year*integer
Championship year (e.g. 2025).
f1_get_weatherReturn weather data for a specific F1 session. Args: session_key: OpenF1 session identifier. Returns: data.weather: list of weather snapshots with temperature, rainfall, wind. meta.source: adapter that served the data.1 params

Return weather data for a specific F1 session. Args: session_key: OpenF1 session identifier. Returns: data.weather: list of weather snapshots with temperature, rainfall, wind. meta.source: adapter that served the data.

Parameters* required
session_key*integer
OpenF1 session identifier.
f1_tyre_degradationFit a tyre degradation model for a driver + compound in a session. Args: session_key: OpenF1 session identifier. driver_number: Driver's race number. compound: Tyre compound (SOFT, MEDIUM, HARD, INTER, WET; "INTERMEDIATE" = INTER). Returns: data: {intercept, slope, residual_st...3 params

Fit a tyre degradation model for a driver + compound in a session. Args: session_key: OpenF1 session identifier. driver_number: Driver's race number. compound: Tyre compound (SOFT, MEDIUM, HARD, INTER, WET; "INTERMEDIATE" = INTER). Returns: data: {intercept, slope, residual_st...

Parameters* required
compound*string
Tyre compound (SOFT, MEDIUM, HARD, INTER, WET; "INTERMEDIATE" = INTER).
driver_number*integer
Driver's race number.
session_key*integer
OpenF1 session identifier.
f1_undercut_windowEstimate whether an undercut is viable for the attacker against the target. Args: session_key: OpenF1 session identifier. attacker_number: Attacking driver's race number. target_number: Target driver's race number. current_lap: Current lap number in the race. Returns: data: {l...4 params

Estimate whether an undercut is viable for the attacker against the target. Args: session_key: OpenF1 session identifier. attacker_number: Attacking driver's race number. target_number: Target driver's race number. current_lap: Current lap number in the race. Returns: data: {l...

Parameters* required
attacker_number*integer
Attacking driver's race number.
current_lap*integer
Current lap number in the race.
session_key*integer
OpenF1 session identifier.
target_number*integer
Target driver's race number.
f1_head_to_head_paceCompare lap-time pace distribution between two drivers in a session. Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number. Returns: data: {driver_a_avg_s, driver_b_avg_s, delta_s, faster_driver}. The "avg" va...3 params

Compare lap-time pace distribution between two drivers in a session. Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number. Returns: data: {driver_a_avg_s, driver_b_avg_s, delta_s, faster_driver}. The "avg" va...

Parameters* required
driver_a*integer
First driver's race number.
driver_b*integer
Second driver's race number.
session_key*integer
OpenF1 session identifier.
f1_weather_strategy_impactAnalyse weather data and recommend compound or pit-window adjustments. Args: session_key: OpenF1 session identifier. Returns: data: {has_rain, avg_track_temp_c, compound_recommendation, recommendation}. meta.estimated: true.1 params

Analyse weather data and recommend compound or pit-window adjustments. Args: session_key: OpenF1 session identifier. Returns: data: {has_rain, avg_track_temp_c, compound_recommendation, recommendation}. meta.estimated: true.

Parameters* required
session_key*integer
OpenF1 session identifier.
f1_predict_pit_strategyPredict the optimal pit-stop strategy for a driver in an F1 race session. Args: session_key: OpenF1 session identifier for a recorded race. driver_number: Driver's race number (driver numbers change by season; use f1_get_drivers). current_lap: Current lap to project from (defa...4 params

Predict the optimal pit-stop strategy for a driver in an F1 race session. Args: session_key: OpenF1 session identifier for a recorded race. driver_number: Driver's race number (driver numbers change by season; use f1_get_drivers). current_lap: Current lap to project from (defa...

Parameters* required
current_lapinteger
Current lap to project from (default 1 = full race ahead).default: 1
driver_number*integer
Driver's race number (driver numbers change by season; use f1_get_drivers).
session_key*integer
OpenF1 session identifier for a recorded race.
total_lapsvalue
Total race laps. If omitted, estimated from the regulation minimum race distance (305 km; Monaco 260 km) over the circuit's lap length; INVALID_INPUT when the circuit is unknown. An explicit value...
f1_simulate_championshipEstimate each driver's F1 drivers' title probability for the rest of a season. Monte Carlo over the remaining races and sprints (Plackett-Luce finishing orders weighted by each driver's season points rate), plus exact elimination maths: a driver who cannot catch the leader's c...3 params

Estimate each driver's F1 drivers' title probability for the rest of a season. Monte Carlo over the remaining races and sprints (Plackett-Luce finishing orders weighted by each driver's season points rate), plus exact elimination maths: a driver who cannot catch the leader's c...

Parameters* required
iterationsinteger
Monte Carlo iterations, clamped to 1000-20000 (default 10000).default: 10000
seedvalue
Optional RNG seed for reproducible probabilities.
yearinteger
Championship season (2018-2030, default 2026).default: 2026
f1_qualifying_analysisAnalyse a qualifying session: best lap per driver, gap to pole, projected grid. Args: session_key: OpenF1 session identifier for a Qualifying session. Returns: data.grid: [{position, driver_number, full_name, team_name, best_lap_gap_s}]. data.pole_time_s: pole lap duration in...1 params

Analyse a qualifying session: best lap per driver, gap to pole, projected grid. Args: session_key: OpenF1 session identifier for a Qualifying session. Returns: data.grid: [{position, driver_number, full_name, team_name, best_lap_gap_s}]. data.pole_time_s: pole lap duration in...

Parameters* required
session_key*integer
OpenF1 session identifier for a Qualifying session.
f1_race_pace_compareCompare race-pace and tyre degradation between two F1 drivers in a session. Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number. Returns: data: {by_compound, overall_faster, compounds_compared}. meta.estimat...3 params

Compare race-pace and tyre degradation between two F1 drivers in a session. Args: session_key: OpenF1 session identifier. driver_a: First driver's race number. driver_b: Second driver's race number. Returns: data: {by_compound, overall_faster, compounds_compared}. meta.estimat...

Parameters* required
driver_a*integer
First driver's race number.
driver_b*integer
Second driver's race number.
session_key*integer
OpenF1 session identifier.
cricket_get_live_matchesReturn all currently live cricket matches across all series. Returns: data.matches: list of live match objects (team names, score, status). meta.source: which adapter served the response. meta.is_stale: true if data is from stale cache.

Return all currently live cricket matches across all series. Returns: data.matches: list of live match objects (team names, score, status). meta.source: which adapter served the response. meta.is_stale: true if data is from stale cache.

No parameters. Call it with no arguments.

cricket_get_scorecardReturn the full scorecard for a specific match. Args: match_id: The match identifier (e.g. from cricket_get_live_matches). Returns: data: full scorecard with innings, partnerships, bowling figures. meta.source: adapter that served the data.1 params

Return the full scorecard for a specific match. Args: match_id: The match identifier (e.g. from cricket_get_live_matches). Returns: data: full scorecard with innings, partnerships, bowling figures. meta.source: adapter that served the data.

Parameters* required
match_id*string
The match identifier (e.g. from cricket_get_live_matches).
cricket_get_points_tableReturn the points table / standings for a cricket series. Args: series_id: The series identifier (e.g. IPL 2026 series ID from CricAPI). Returns: data: points table rows with team, P, W, L, NRR, Points. meta.source: adapter that served the data.1 params

Return the points table / standings for a cricket series. Args: series_id: The series identifier (e.g. IPL 2026 series ID from CricAPI). Returns: data: points table rows with team, P, W, L, NRR, Points. meta.source: adapter that served the data.

Parameters* required
series_id*string
The series identifier (e.g. IPL 2026 series ID from CricAPI).
cricket_get_scheduleReturn the upcoming match schedule, optionally filtered by series. Args: series_id: Optional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series. limit: Max matches to return, 1..200 (default 50). offset: Number of matches to skip f...3 params

Return the upcoming match schedule, optionally filtered by series. Args: series_id: Optional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series. limit: Max matches to return, 1..200 (default 50). offset: Number of matches to skip f...

Parameters* required
limitinteger
Max matches to return, 1..200 (default 50).default: 50
offsetinteger
Number of matches to skip for paging (default 0).default: 0
series_idvalue
Optional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series.
cricket_get_squadReturn the squad roster for a cricket team, optionally for a specific series. Args: team: Team code or name (e.g. "MI", "CSK", "IND", "AUS"). series_id: Optional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data. Returns: data.players...2 params

Return the squad roster for a cricket team, optionally for a specific series. Args: team: Team code or name (e.g. "MI", "CSK", "IND", "AUS"). series_id: Optional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data. Returns: data.players...

Parameters* required
series_idvalue
Optional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data.
team*string
Team code or name (e.g. "MI", "CSK", "IND", "AUS").
cricket_get_live_oddsReturn live market head-to-head odds for upcoming/live IPL matches. IPL only (~March-May). An empty ``events`` list outside that window is a successful empty market, not an outage. Not international/Test/other T20 leagues. For World Cup 2026 football odds use ``football_get_od...1 params

Return live market head-to-head odds for upcoming/live IPL matches. IPL only (~March-May). An empty ``events`` list outside that window is a successful empty market, not an outage. Not international/Test/other T20 leagues. For World Cup 2026 football odds use ``football_get_od...

Parameters* required
teamvalue
Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every IPL event. The Odds API uses its own opaque event ids, so a CricAPI match_id canno...
cricket_build_dream11_teamRecommend an optimal fantasy XI + captain + vice-captain for one fixture. Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name (e.g. ``MI``). Required if match_id is absent. team_b: Second team code/name (e.g. ``CSK...5 params

Recommend an optimal fantasy XI + captain + vice-captain for one fixture. Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name (e.g. ``MI``). Required if match_id is absent. team_b: Second team code/name (e.g. ``CSK...

Parameters* required
match_idvalue
CricAPI match identifier; resolves team_a/team_b/venue automatically.
strategystring
``"balanced"`` only in Phase 2; future variants reserved.default: balanced
team_avalue
First team code/name (e.g. ``MI``). Required if match_id is absent.
team_bvalue
Second team code/name (e.g. ``CSK``). Required if match_id is absent.
venuevalue
Venue key/name (e.g. ``wankhede``). Required if match_id is absent.
cricket_captain_recommendationReturn the top-3 captain candidates ranked by projected points. IPL venues only (pitch seed is IPL grounds). Test/international matches and unknown venues fail rather than inventing a ranking. Same-role players often tie: projections use default form 55 and default opposition...4 params

Return the top-3 captain candidates ranked by projected points. IPL venues only (pitch seed is IPL grounds). Test/international matches and unknown venues fail rather than inventing a ranking. Same-role players often tie: projections use default form 55 and default opposition...

Parameters* required
match_idvalue
CricAPI match identifier; resolves team_a/team_b/venue automatically.
team_avalue
First team code/name. Required if match_id is absent.
team_bvalue
Second team code/name. Required if match_id is absent.
venuevalue
Venue key/name (IPL ground, e.g. ``wankhede``). Required if match_id is absent.
cricket_differential_picksSuggest low-ownership picks with positive projected upside. Ownership is *estimated* — proxied by credit weight (lower-credit players tend to have lower ownership), not real ownership data. Flagged ``estimated: true`` in the response. Args: match_id: CricAPI match identifier;...5 params

Suggest low-ownership picks with positive projected upside. Ownership is *estimated* — proxied by credit weight (lower-credit players tend to have lower ownership), not real ownership data. Flagged ``estimated: true`` in the response. Args: match_id: CricAPI match identifier;...

Parameters* required
match_idvalue
CricAPI match identifier; resolves team_a/team_b/venue automatically.
ownership_thresholdinteger
percent ownership cap; affects estimated label.default: 20
team_avalue
First team code/name. Required if match_id is absent.
team_bvalue
Second team code/name. Required if match_id is absent.
venuevalue
Venue key/name. Required if match_id is absent.
cricket_player_form_indexReport a 0-100 form score for a player using the player_stats chain. Args: player_id: Upstream player identifier (CricAPI/Cricbuzz id). Returns: data.form_score: 0..100 indicator. data.trend: "rising" / "stable" / "falling". data.samples: how many recent innings were available...1 params

Report a 0-100 form score for a player using the player_stats chain. Args: player_id: Upstream player identifier (CricAPI/Cricbuzz id). Returns: data.form_score: 0..100 indicator. data.trend: "rising" / "stable" / "falling". data.samples: how many recent innings were available...

Parameters* required
player_id*string
Upstream player identifier (CricAPI/Cricbuzz id).
cricket_get_pitch_reportSummarise pitch characteristics for a venue. Args: venue: Venue key (e.g. ``wankhede``), official name, or city. Returns: data: {batting_friendly 0..1, expected_first_inn, recommendation, venue, pitch_type}. meta.source: which adapter served the venue record.1 params

Summarise pitch characteristics for a venue. Args: venue: Venue key (e.g. ``wankhede``), official name, or city. Returns: data: {batting_friendly 0..1, expected_first_inn, recommendation, venue, pitch_type}. meta.source: which adapter served the venue record.

Parameters* required
venue*string
Venue key (e.g. ``wankhede``), official name, or city.
cricket_find_value_betsCompare model probabilities against market-implied IPL odds. Requires THEODDS_KEY. NOTE: cricket has no calibrated team-strength model wired yet (unlike the football Elo/Poisson path), so this tool currently returns an EMPTY ``value_bets`` list — scoring an edge against a neut...2 params

Compare model probabilities against market-implied IPL odds. Requires THEODDS_KEY. NOTE: cricket has no calibrated team-strength model wired yet (unlike the football Elo/Poisson path), so this tool currently returns an EMPTY ``value_bets`` list — scoring an edge against a neut...

Parameters* required
min_edgenumber
Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05. Currently informational only (no bets emitted).default: 0.05
teamvalue
Optional team name to filter events (case-insensitive substring). Omit to scan every IPL odds event.
cricket_head_to_headCompare two cricket teams head-to-head using squad form and player stats. Args: team_a: First team code or name (e.g. "MI", "India"). team_b: Second team code or name (e.g. "CSK", "Australia"). Returns: data: {team_a, team_b, team_a_edge_count, team_b_edge_count, key_players_a...2 params

Compare two cricket teams head-to-head using squad form and player stats. Args: team_a: First team code or name (e.g. "MI", "India"). team_b: Second team code or name (e.g. "CSK", "Australia"). Returns: data: {team_a, team_b, team_a_edge_count, team_b_edge_count, key_players_a...

Parameters* required
team_a*string
First team code or name (e.g. "MI", "India").
team_b*string
Second team code or name (e.g. "CSK", "Australia").
cricket_player_matchupAnalyse the head-to-head matchup between two cricket players based on role and career stats. Args: player_a: CricAPI player ID for the first player (names are not resolved). player_b: CricAPI player ID for the second player (names are not resolved). Returns: data: {matchup_typ...2 params

Analyse the head-to-head matchup between two cricket players based on role and career stats. Args: player_a: CricAPI player ID for the first player (names are not resolved). player_b: CricAPI player ID for the second player (names are not resolved). Returns: data: {matchup_typ...

Parameters* required
player_a*string
CricAPI player ID for the first player (names are not resolved).
player_b*string
CricAPI player ID for the second player (names are not resolved).
cross_sport_build_accumulatorModel the joint probability of multiple outcomes across football and cricket. Args: legs: Total legs across both sports (2-8). Default 3. min_edge: Minimum edge per leg. Default 0.05. Returns: data: same shape as football_build_accumulator, with sport field per leg. meta.estim...2 params

Model the joint probability of multiple outcomes across football and cricket. Args: legs: Total legs across both sports (2-8). Default 3. min_edge: Minimum edge per leg. Default 0.05. Returns: data: same shape as football_build_accumulator, with sport field per leg. meta.estim...

Parameters* required
legsinteger
Total legs across both sports (2-8). Default 3.default: 3
min_edgenumber
Minimum edge per leg. Default 0.05.default: 0.05

Sponsors

Readme

Details

Repository
github.com/ninjabeam20/sportiq-mcp
Package
sportiq-mcp
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
7
Prompts
10
Tools verified
Nov 13, 2026