sportiq-mcp

MCP tools for FIFA World Cup 2026 football, Formula 1, and IPL cricket — sims, strategy, fantasy.

我该使用它吗

质量与安全性

A
描述质量
98%
模式完整度
87%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(3)

  • LOWTool 'football_knockout_path' description lacks action verb在 football_knockout_path 中
  • LOWTool 'f1_get_standings' description lacks action verb在 f1_get_standings 中
  • LOWTool 'cricket_get_points_table' description lacks action verb在 cricket_get_points_table 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~15,375token 数(工具定义)
~2.2 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 12.01%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "sportiq-mcp": {
      "command": "uvx",
      "args": [
        "sportiq-mcp"
      ]
    }
  }
}

可运行的软件包

pypisportiq-mcp0.3.2stdio

远程端点

https://sportiq.utkarshgupta.org/mcpstreamable-http

它能做什么

工具清单

工具(44)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢sportiq_health

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`.

输入模式

{
  "type": "object",
  "properties": {},
  "title": "sportiq_healthArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_groups

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 that served the data.

输入模式

{
  "type": "object",
  "properties": {},
  "title": "football_get_groupsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_fixtures(limit, offset)

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_goals}. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data (static_seed = group schedule only).

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer",
      "description": "Max fixtures to return, 1..200 (default 50)."
    },
    "offset": {
      "default": 0,
      "title": "Offset",
      "type": "integer",
      "description": "Number of fixtures to skip for paging (default 0)."
    }
  },
  "title": "football_get_fixturesArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_standings(limit, offset)

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, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer",
      "description": "Max standing rows to return, 1..200 (default 50)."
    },
    "offset": {
      "default": 0,
      "title": "Offset",
      "type": "integer",
      "description": "Number of rows to skip for paging (default 0)."
    }
  },
  "title": "football_get_standingsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_squad(team)

Return a national team's World Cup squad. Args: team: Team code or name (e.g. "ARG"). Without an API-Football key, the static seed serves an empty-but-valid squad (rosters are a follow-up). Returns: data.squad: list of {name, number, position, age}. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "title": "Team",
      "type": "string",
      "description": "Team code or name (e.g. \"ARG\"). Without an API-Football key, the static seed serves an empty-but-valid squad (rosters are a follow-up)."
    }
  },
  "required": [
    "team"
  ],
  "title": "football_get_squadArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_match_stats(team)

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-Football numeric team id (not a country code). Returns: data.team_stats: {team, played, wins, goals_for, goals_against}. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "title": "Team",
      "type": "integer",
      "description": "API-Football numeric team id (not a country code)."
    }
  },
  "required": [
    "team"
  ],
  "title": "football_get_match_statsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_top_scorers

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

输入模式

{
  "type": "object",
  "properties": {},
  "title": "football_get_top_scorersArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_get_odds(team)

Return live market head-to-head odds for upcoming World Cup 2026 matches. Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing. Args: team: Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every WC event. Returns: data.events: list of {event_id, home, away, commence_time, bookmakers: [{name, home, draw, away}]} with decimal 1X2 prices per bookmaker. meta.source: adapter that served the data (theodds / cache:stale).

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team",
      "description": "Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to return every WC event."
    }
  },
  "title": "football_get_oddsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_xg_model(home_team, away_team, neutral)

Estimate a match's expected goals and win/draw/loss probabilities. Args: home_team: First team code (e.g. "ARG"). away_team: Second team code (e.g. "BRA"). neutral: True for a neutral venue (no home advantage). World Cup default. Returns: data: {expected_home_goals, expected_away_goals, home_win, draw, away_win}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "home_team": {
      "title": "Home Team",
      "type": "string",
      "description": "First team code (e.g. \"ARG\")."
    },
    "away_team": {
      "title": "Away Team",
      "type": "string",
      "description": "Second team code (e.g. \"BRA\")."
    },
    "neutral": {
      "default": true,
      "title": "Neutral",
      "type": "boolean",
      "description": "True for a neutral venue (no home advantage). World Cup default."
    }
  },
  "required": [
    "home_team",
    "away_team"
  ],
  "title": "football_xg_modelArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_match_predictor(home_team, away_team, neutral)

Predict a single match: most likely scoreline + outcome probabilities. Args: home_team: First team code. away_team: Second team code. neutral: True for a neutral venue (World Cup default). Returns: data: {most_likely_score, home_win, draw, away_win, predicted_winner}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "home_team": {
      "title": "Home Team",
      "type": "string",
      "description": "First team code."
    },
    "away_team": {
      "title": "Away Team",
      "type": "string",
      "description": "Second team code."
    },
    "neutral": {
      "default": true,
      "title": "Neutral",
      "type": "boolean",
      "description": "True for a neutral venue (World Cup default)."
    }
  },
  "required": [
    "home_team",
    "away_team"
  ],
  "title": "football_match_predictorArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_simulate_group(group, iterations)

Monte Carlo one group within the full 12-group qualification context. Args: group: Group letter A-L. iterations: Number of simulations (clamped to 100..20000). Returns: data.teams: Per-team position probabilities, p_auto_advance, p_best_third_advance, truthful combined p_advance, and avg_points. data.iterations: iterations actually run. meta.estimated: true. meta.conditioned_matches: completed matches locked in.

输入模式

{
  "type": "object",
  "properties": {
    "group": {
      "title": "Group",
      "type": "string",
      "description": "Group letter A-L."
    },
    "iterations": {
      "default": 5000,
      "title": "Iterations",
      "type": "integer",
      "description": "Number of simulations (clamped to 100..20000)."
    }
  },
  "required": [
    "group"
  ],
  "title": "football_simulate_groupArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_simulate_bracket(iterations, seed)

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 (clamped to 100..20000; ~10000 gives stable ±2% probabilities). seed: Optional RNG seed for reproducible output. Returns: data.teams: {code: {reach_r32, reach_r16, reach_qf, reach_sf, reach_final, win}} sorted by win probability descending. data.champion: most likely winner. data.iterations: iterations run. meta.estimated: true. meta.conditioned_matches: completed matches locked in (played group results fixed, decided knockout ties locked). Example: football_simulate_bracket() football_simulate_bracket(iterations=20000, seed=42)

输入模式

{
  "type": "object",
  "properties": {
    "iterations": {
      "default": 10000,
      "title": "Iterations",
      "type": "integer",
      "description": "Number of tournament simulations (clamped to 100..20000; ~10000 gives stable ±2% probabilities)."
    },
    "seed": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Seed",
      "description": "Optional RNG seed for reproducible output."
    }
  },
  "title": "football_simulate_bracketArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_knockout_path(team, iterations, seed)

Round-by-round survival probabilities for one team in the full sim. Args: team: Team code (e.g. "FRA"). iterations: Number of tournament simulations (clamped to 100..20000). seed: Optional RNG seed. Returns: data: {team, reach_r32, reach_r16, reach_qf, reach_sf, reach_final, win}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "title": "Team",
      "type": "string",
      "description": "Team code (e.g. \"FRA\")."
    },
    "iterations": {
      "default": 10000,
      "title": "Iterations",
      "type": "integer",
      "description": "Number of tournament simulations (clamped to 100..20000)."
    },
    "seed": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Seed",
      "description": "Optional RNG seed."
    }
  },
  "required": [
    "team"
  ],
  "title": "football_knockout_pathArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_find_value_bets(team, min_edge)

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_match_predictor`` uses. Where the model probability exceeds the de-vigged market probability by at least ``min_edge``, the outcome is flagged with its edge and the model's fair odds. Args: team: Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to scan every WC 2026 odds event. min_edge: Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05 (5 percentage points). Returns: data.value_bets: list of {event_id, home, away, outcome, model_prob, fair_odds, market_odds, edge, bookmaker}, sorted by edge descending. data.events_analysed: events with both teams rated (model-comparable). meta.estimated: true. meta.is_stale reflects the odds freshness.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team",
      "description": "Optional team name to filter events (case-insensitive substring, matched against both sides). Omit to scan every WC 2026 odds event."
    },
    "min_edge": {
      "default": 0.05,
      "title": "Min Edge",
      "type": "number",
      "description": "Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05 (5 percentage points)."
    }
  },
  "title": "football_find_value_betsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_form_trends(team)

Return rolling form, goal record, and xG trend for a football team. Args: team: Team name (e.g. "Brazil", "Argentina"). Returns: data: {form_string, wins, draws, losses, goals_scored, goals_conceded, xg_for, xg_against, recent_trend, matches_analysed}. meta.estimated: true — derived from available fixture data.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "title": "Team",
      "type": "string",
      "description": "Team name (e.g. \"Brazil\", \"Argentina\")."
    }
  },
  "required": [
    "team"
  ],
  "title": "football_form_trendsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢football_build_accumulator(legs, min_edge)

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). Default 3. min_edge: Minimum edge threshold per leg. Default 0.05. Returns: data: {legs, legs_used, combined_odds, combined_model_prob, combined_edge, risk_flag, independence_warning}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "legs": {
      "default": 3,
      "title": "Legs",
      "type": "integer",
      "description": "Number of legs (2-8). Default 3."
    },
    "min_edge": {
      "default": 0.05,
      "title": "Min Edge",
      "type": "number",
      "description": "Minimum edge threshold per leg. Default 0.05."
    }
  },
  "title": "football_build_accumulatorArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_sessions(year, country)

Return F1 sessions for a given year, optionally filtered by country. Args: year: Championship year (e.g. 2025). country: Optional country name to filter (e.g. "Monaco"). Returns: data.sessions: list of session objects with session_key, session_type, date. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "year": {
      "title": "Year",
      "type": "integer",
      "description": "Championship year (e.g. 2025)."
    },
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Country",
      "description": "Optional country name to filter (e.g. \"Monaco\")."
    }
  },
  "required": [
    "year"
  ],
  "title": "f1_get_sessionsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_drivers(session_key)

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.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    }
  },
  "required": [
    "session_key"
  ],
  "title": "f1_get_driversArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_lap_times(session_key, driver_number, limit, offset)

Return lap times for a driver in a specific F1 session. Args: session_key: OpenF1 session identifier. driver_number: Driver's race number (e.g. 1 for Verstappen). limit: Max laps to return, 1..200 (default 100 — covers most full races). offset: Number of laps to skip for paging (default 0). Returns: data.laps: page of lap objects with lap_number and lap_duration. OpenF1 does not put compound/tyre_life here — those live on the stints endpoint. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    },
    "driver_number": {
      "title": "Driver Number",
      "type": "integer",
      "description": "Driver's race number (e.g. 1 for Verstappen)."
    },
    "limit": {
      "default": 100,
      "title": "Limit",
      "type": "integer",
      "description": "Max laps to return, 1..200 (default 100 — covers most full races)."
    },
    "offset": {
      "default": 0,
      "title": "Offset",
      "type": "integer",
      "description": "Number of laps to skip for paging (default 0)."
    }
  },
  "required": [
    "session_key",
    "driver_number"
  ],
  "title": "f1_get_lap_timesArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_standings(year)

Return F1 driver and constructor championship standings for a year. Use this for "who is leading / who will win the F1 championship this year". There is no F1 title Monte Carlo — current points and position are the answer. This is not a cricket or football tool. Args: year: Championship year (e.g. 2026). Returns: data.driver_standings: driver championship positions and points. data.constructor_standings: constructor championship positions and points. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "year": {
      "title": "Year",
      "type": "integer",
      "description": "Championship year (e.g. 2026)."
    }
  },
  "required": [
    "year"
  ],
  "title": "f1_get_standingsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_race_results(year, round)

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 positions, points, and fastest laps for the race. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "year": {
      "title": "Year",
      "type": "integer",
      "description": "Championship year (e.g. 2025)."
    },
    "round": {
      "title": "Round",
      "type": "integer",
      "description": "Round number within the season (1-based; e.g. 1 for the opener)."
    }
  },
  "required": [
    "year",
    "round"
  ],
  "title": "f1_get_race_resultsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_get_weather(session_key)

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.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    }
  },
  "required": [
    "session_key"
  ],
  "title": "f1_get_weatherArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_tyre_degradation(session_key, driver_number, compound)

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). Returns: data: {intercept, slope, residual_std, sample_count}. meta.estimated: true — model output, not telemetry oracle.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    },
    "driver_number": {
      "title": "Driver Number",
      "type": "integer",
      "description": "Driver's race number."
    },
    "compound": {
      "title": "Compound",
      "type": "string",
      "description": "Tyre compound (SOFT, MEDIUM, HARD, INTER, WET)."
    }
  },
  "required": [
    "session_key",
    "driver_number",
    "compound"
  ],
  "title": "f1_tyre_degradationArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_undercut_window(session_key, attacker_number, target_number, current_lap)

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: {laps_to_clear, viable, marginal}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    },
    "attacker_number": {
      "title": "Attacker Number",
      "type": "integer",
      "description": "Attacking driver's race number."
    },
    "target_number": {
      "title": "Target Number",
      "type": "integer",
      "description": "Target driver's race number."
    },
    "current_lap": {
      "title": "Current Lap",
      "type": "integer",
      "description": "Current lap number in the race."
    }
  },
  "required": [
    "session_key",
    "attacker_number",
    "target_number",
    "current_lap"
  ],
  "title": "f1_undercut_windowArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_head_to_head_pace(session_key, driver_a, driver_b)

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}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    },
    "driver_a": {
      "title": "Driver A",
      "type": "integer",
      "description": "First driver's race number."
    },
    "driver_b": {
      "title": "Driver B",
      "type": "integer",
      "description": "Second driver's race number."
    }
  },
  "required": [
    "session_key",
    "driver_a",
    "driver_b"
  ],
  "title": "f1_head_to_head_paceArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_weather_strategy_impact(session_key)

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.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    }
  },
  "required": [
    "session_key"
  ],
  "title": "f1_weather_strategy_impactArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_predict_pit_strategy(session_key, driver_number, current_lap, total_laps)

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 (e.g. 1 for Verstappen). current_lap: Current lap to project from (default 1 = full race ahead). total_laps: Total race laps. If omitted, inferred from the highest observed lap_number in the fetched laps (correct for Monaco 78 / Spa 44), falling back to 57 when no laps are available. An explicit value always wins. Returns: data.stop_laps: recommended pit laps. data.compound_sequence: tyre compounds for each stint. data.expected_finish_position: currently always None (not modelled). data.confidence: 0.0-1.0 model confidence. meta.total_laps: race length used (explicit arg, else inferred from laps). meta.estimated: true. Example: f1_predict_pit_strategy(session_key=9158, driver_number=1) f1_predict_pit_strategy(session_key=9158, driver_number=16, current_lap=20, total_laps=78)

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier for a recorded race."
    },
    "driver_number": {
      "title": "Driver Number",
      "type": "integer",
      "description": "Driver's race number (e.g. 1 for Verstappen)."
    },
    "current_lap": {
      "default": 1,
      "title": "Current Lap",
      "type": "integer",
      "description": "Current lap to project from (default 1 = full race ahead)."
    },
    "total_laps": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Total Laps",
      "description": "Total race laps. If omitted, inferred from the highest observed lap_number in the fetched laps (correct for Monaco 78 / Spa 44), falling back to 57 when no laps are available. An explicit value always wins."
    }
  },
  "required": [
    "session_key",
    "driver_number"
  ],
  "title": "f1_predict_pit_strategyArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_qualifying_analysis(session_key)

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 seconds. data.drivers_analysed: count of drivers with valid laps. meta.estimated: true — grid derived from session laps, not official timing.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier for a Qualifying session."
    }
  },
  "required": [
    "session_key"
  ],
  "title": "f1_qualifying_analysisArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢f1_race_pace_compare(session_key, driver_a, driver_b)

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.estimated: true — degradation model fit, not official timing.

输入模式

{
  "type": "object",
  "properties": {
    "session_key": {
      "title": "Session Key",
      "type": "integer",
      "description": "OpenF1 session identifier."
    },
    "driver_a": {
      "title": "Driver A",
      "type": "integer",
      "description": "First driver's race number."
    },
    "driver_b": {
      "title": "Driver B",
      "type": "integer",
      "description": "Second driver's race number."
    }
  },
  "required": [
    "session_key",
    "driver_a",
    "driver_b"
  ],
  "title": "f1_race_pace_compareArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_live_matches

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.

输入模式

{
  "type": "object",
  "properties": {},
  "title": "cricket_get_live_matchesArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_scorecard(match_id)

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.

输入模式

{
  "type": "object",
  "properties": {
    "match_id": {
      "title": "Match Id",
      "type": "string",
      "description": "The match identifier (e.g. from cricket_get_live_matches)."
    }
  },
  "required": [
    "match_id"
  ],
  "title": "cricket_get_scorecardArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_points_table(series_id)

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.

输入模式

{
  "type": "object",
  "properties": {
    "series_id": {
      "title": "Series Id",
      "type": "string",
      "description": "The series identifier (e.g. IPL 2026 series ID from CricAPI)."
    }
  },
  "required": [
    "series_id"
  ],
  "title": "cricket_get_points_tableArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_schedule(series_id, limit, offset)

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 for paging (default 0). Returns: data.matches: page of upcoming matches with teams, date, venue. data.pagination: {total, count, offset, limit, has_more, next_offset}. meta.source: adapter that served the data.

输入模式

{
  "type": "object",
  "properties": {
    "series_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Series Id",
      "description": "Optional. Filter to a specific series. If omitted, returns all upcoming fixtures across all active series."
    },
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer",
      "description": "Max matches to return, 1..200 (default 50)."
    },
    "offset": {
      "default": 0,
      "title": "Offset",
      "type": "integer",
      "description": "Number of matches to skip for paging (default 0)."
    }
  },
  "title": "cricket_get_scheduleArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_squad(team, series_id)

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: list of players with name, role, and credits. meta.source: adapter that served the data (cricapi / static_seed).

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "title": "Team",
      "type": "string",
      "description": "Team code or name (e.g. \"MI\", \"CSK\", \"IND\", \"AUS\")."
    },
    "series_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Series Id",
      "description": "Optional. Series ID to pull the tournament-specific squad. If omitted, falls back to static seed data."
    }
  },
  "required": [
    "team"
  ],
  "title": "cricket_get_squadArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_live_odds(team)

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_odds``. Sourced from The Odds API (requires THEODDS_KEY). Without a key the call returns a clean ALL_SOURCES_FAILED envelope rather than crashing. Args: team: 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 cannot be resolved to an event yet — filtering is by team name. Returns: data.events: list of {event_id, home, away, commence_time, bookmakers: [{name, home, away}]} with decimal h2h prices per bookmaker. Empty when no IPL events are listed (typical off-season). meta.source: adapter that served the data (theodds / cache:stale).

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team",
      "description": "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 cannot be resolved to an event yet — filtering is by team name."
    }
  },
  "title": "cricket_get_live_oddsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_build_dream11_team(match_id, team_a, team_b, venue, strategy)

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``). Required if match_id is absent. venue: Venue key/name (e.g. ``wankhede``). Required if match_id is absent. strategy: ``"balanced"`` only in Phase 2; future variants reserved. Returns: data.players: 11 picked players with name/role/credits/team/projected_points. data.captain: name of the chosen captain. data.vice_captain: name of the chosen VC. data.total_credits: sum of credits used (<= 100). data.total_projected_points: fantasy points including C x2 and VC x1.5 boosts. meta.estimated: true — projections are model output, not a fantasy oracle. Example: cricket_build_dream11_team(team_a="MI", team_b="CSK", venue="wankhede") cricket_build_dream11_team(match_id="abc123")

输入模式

{
  "type": "object",
  "properties": {
    "match_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Match Id",
      "description": "CricAPI match identifier; resolves team_a/team_b/venue automatically."
    },
    "team_a": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team A",
      "description": "First team code/name (e.g. ``MI``). Required if match_id is absent."
    },
    "team_b": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team B",
      "description": "Second team code/name (e.g. ``CSK``). Required if match_id is absent."
    },
    "venue": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Venue",
      "description": "Venue key/name (e.g. ``wankhede``). Required if match_id is absent."
    },
    "strategy": {
      "default": "balanced",
      "title": "Strategy",
      "type": "string",
      "description": "``\"balanced\"`` only in Phase 2; future variants reserved."
    }
  },
  "title": "cricket_build_dream11_teamArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_captain_recommendation(match_id, team_a, team_b, venue)

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 0.5, not per-player history. Args: match_id: CricAPI match identifier; resolves team_a/team_b/venue automatically. team_a: First team code/name. Required if match_id is absent. team_b: Second team code/name. Required if match_id is absent. venue: Venue key/name (IPL ground, e.g. ``wankhede``). Required if match_id is absent. Returns: data.candidates: list of 3 dicts with name/role/team/projected_points. meta.source: model:captain_score. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "match_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Match Id",
      "description": "CricAPI match identifier; resolves team_a/team_b/venue automatically."
    },
    "team_a": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team A",
      "description": "First team code/name. Required if match_id is absent."
    },
    "team_b": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team B",
      "description": "Second team code/name. Required if match_id is absent."
    },
    "venue": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Venue",
      "description": "Venue key/name (IPL ground, e.g. ``wankhede``). Required if match_id is absent."
    }
  },
  "title": "cricket_captain_recommendationArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_differential_picks(match_id, team_a, team_b, venue, ownership_threshold)

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; resolves team_a/team_b/venue automatically. team_a: First team code/name. Required if match_id is absent. team_b: Second team code/name. Required if match_id is absent. venue: Venue key/name. Required if match_id is absent. ownership_threshold: percent ownership cap; affects estimated label. Returns: data.picks: list of {name, role, team, credits, projected_points, estimated_ownership_pct}. meta.source: model:captain_score (filtered). meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "match_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Match Id",
      "description": "CricAPI match identifier; resolves team_a/team_b/venue automatically."
    },
    "team_a": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team A",
      "description": "First team code/name. Required if match_id is absent."
    },
    "team_b": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team B",
      "description": "Second team code/name. Required if match_id is absent."
    },
    "venue": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Venue",
      "description": "Venue key/name. Required if match_id is absent."
    },
    "ownership_threshold": {
      "default": 20,
      "title": "Ownership Threshold",
      "type": "integer",
      "description": "percent ownership cap; affects estimated label."
    }
  },
  "title": "cricket_differential_picksArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_player_form_index(player_id)

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. meta.source: which adapter served the underlying stats. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "player_id": {
      "title": "Player Id",
      "type": "string",
      "description": "Upstream player identifier (CricAPI/Cricbuzz id)."
    }
  },
  "required": [
    "player_id"
  ],
  "title": "cricket_player_form_indexArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_get_pitch_report(venue)

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.

输入模式

{
  "type": "object",
  "properties": {
    "venue": {
      "title": "Venue",
      "type": "string",
      "description": "Venue key (e.g. ``wankhede``), official name, or city."
    }
  },
  "required": [
    "venue"
  ],
  "title": "cricket_get_pitch_reportArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_find_value_bets(team, min_edge)

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 neutral 50/50 prior would flag every market underdog, which would be misleading. It still reports how many events were screened so callers know odds were available. For raw de-vigged prices use ``cricket_get_live_odds``. Real edge detection lands when a cricket win model is wired (see cricket_head_to_head). Args: team: Optional team name to filter events (case-insensitive substring). Omit to scan every IPL odds event. min_edge: Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05. Currently informational only (no bets emitted). Returns: data.value_bets: always ``[]`` until a cricket model is wired. data.events_analysed: count of events screened (both teams present). data.model: ``"neutral_baseline"``. data.note: why no bets are emitted. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "team": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Team",
      "description": "Optional team name to filter events (case-insensitive substring). Omit to scan every IPL odds event."
    },
    "min_edge": {
      "default": 0.05,
      "title": "Min Edge",
      "type": "number",
      "description": "Minimum edge (model_prob - devigged_market_prob), 0..1. Default 0.05. Currently informational only (no bets emitted)."
    }
  },
  "title": "cricket_find_value_betsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_head_to_head(team_a, team_b)

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, key_players_b, h2h_win_rate_a, h2h_win_rate_b, win_prob_a, win_prob_b}. meta.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "team_a": {
      "title": "Team A",
      "type": "string",
      "description": "First team code or name (e.g. \"MI\", \"India\")."
    },
    "team_b": {
      "title": "Team B",
      "type": "string",
      "description": "Second team code or name (e.g. \"CSK\", \"Australia\")."
    }
  },
  "required": [
    "team_a",
    "team_b"
  ],
  "title": "cricket_head_to_headArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cricket_player_matchup(player_a, player_b)

Analyse the head-to-head matchup between two cricket players based on role and career stats. Args: player_a: Player ID or name for the first player. player_b: Player ID or name for the second player. Returns: data: {matchup_type, edge_holder, edge_reason, signals, role_a, role_b}. meta.estimated: true — heuristic model, not ball-by-ball H2H data.

输入模式

{
  "type": "object",
  "properties": {
    "player_a": {
      "title": "Player A",
      "type": "string",
      "description": "Player ID or name for the first player."
    },
    "player_b": {
      "title": "Player B",
      "type": "string",
      "description": "Player ID or name for the second player."
    }
  },
  "required": [
    "player_a",
    "player_b"
  ],
  "title": "cricket_player_matchupArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}
🟢cross_sport_build_accumulator(legs, min_edge)

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.estimated: true.

输入模式

{
  "type": "object",
  "properties": {
    "legs": {
      "default": 3,
      "title": "Legs",
      "type": "integer",
      "description": "Total legs across both sports (2-8). Default 3."
    },
    "min_edge": {
      "default": 0.05,
      "title": "Min Edge",
      "type": "number",
      "description": "Minimum edge per leg. Default 0.05."
    }
  },
  "title": "cross_sport_build_accumulatorArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Data"
    },
    "meta": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Meta"
    },
    "error": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    }
  },
  "title": "Envelope"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本44 个工具
观测失败未记录版本—