betting
Betting analysis — odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage…
ATP and WTA tennis data via ESPN public endpoints — tournament scores, season calendars, player rankings, player profiles, and news. Zero config, no API keys. Use when: user asks about tennis scores, match results, tournament draws, ATP/WTA rankings, tennis player info, or
$ npx -y skills add machina-sports/sports-skills --skill tennis-data --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/tennis-dataContext preview
The summary Claude sees to decide when to auto-load this skill.
ATP and WTA tennis data via ESPN public endpoints — tournament scores, season calendars, player rankings, player profiles, and news. Zero config, no API keys. Use when: user asks about tennis scores, match results, tournament draws, ATP/WTA rankings, tennis player info, or
name: tennis-data description: | ATP and WTA tennis data via ESPN public endpoints — tournament scores, season calendars, player rankings, player profiles, and news. Zero config, no API keys. Use when: user asks about tennis scores, match results, tournament draws, ATP/WTA rankings, tennis player info, or tennis news. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), golf-data (golf), cricket-data (cricket), cfb-data (college football), cbb-data (college basketball), or fastf1 (F1). For betting odds use polymarket or kalshi. For news use sports-news. Don't use for live point-by-point data — scores update after each set/match. license: MIT metadata: author: machina-sports version: "0.1.0"
Before writing queries, consult `references/api-reference.md` for endpoints, ID conventions, and data shapes.
Prefer the CLI — it avoids Python import path issues:
sports-skills tennis get_scoreboard --tour=atp sports-skills tennis get_rankings --tour=wta sports-skills tennis get_calendar --tour=atp --year=2026
CRITICAL: Before calling any data endpoint, verify:
Most commands require `--tour=atp` or `--tour=wta`:
If the user doesn't specify, ask which tour or show both by calling the command twice.
| Command | Description | |---|---| | `get_scoreboard` | Live/recent tournament scores for a tour | | `get_rankings` | ATP or WTA player rankings | | `get_calendar` | Full season tournament calendar | | `get_player_info` | Individual tennis player profile | | `get_news` | Tennis news articles |
See `references/api-reference.md` for full parameter lists and return shapes.
1. `get_scoreboard --tour=<atp|wta>` 2. Present current matches by round. 3. For player info, use `get_player_info --player_id=<id>`.
1. `get_rankings --tour=<atp|wta> --limit=20` 2. Present rankings with points and trend.
1. `get_calendar --tour=<atp|wta> --year=<year>` 2. Filter for specific tournament.
Example 1: Live matches User says: "What ATP matches are happening right now?" Actions: 1. Call `get_scoreboard(tour="atp")` Result: Current tournament matches organized by round with scores and status
Example 2: Women's rankings User says: "Show me the WTA rankings" Actions: 1. Call `get_rankings(tour="wta", limit=20)` Result: Top 20 WTA players with rank, name, points, and trend
Example 3: Upcoming Grand Slam date User says: "When is the French Open this year?" Actions: 1. Derive year from `currentDate` 2. Call `get_calendar(tour="atp", year=<derived_year>)` 3. Search results for "Roland Garros" (the French Open's official name) Result: French Open dates, location (Paris), and surface (clay)
If a command is not listed in the Commands table above, it does not exist.
Error: `get_scoreboard` returns no matches Cause: Tennis tournaments run specific weeks; no tournament may be scheduled this week Solution: Call `get_calendar(tour=...)` to find when the next event is scheduled
Error: Rankings are empty Cause: Rankings update weekly on Mondays; there may be a brief update window Solution: The command auto-retries previous weeks. If still empty, retry in a few minutes
Error: Player profile fails Cause: Player ID is incorrect Solution: Use `get_rankings` to find player IDs from the current rankings list, or verify via ESPN tennis URLs
Error: Scores seem delayed or don't update live Cause: Scores update after each set/match is completed, not point-by-point Solution: This is expected behavior. Refresh `get_scoreboard` periodically for updated set scores
Open-source agent skills for live sports data and prediction markets. Built for the Agent Skills spec. Works with sportsclaw, OpenClaw, Claude Code, Cursor, Copilot, Gemini CLI, Hermes Agent, and every major AI agent. Zero API keys. Zero signup.
Betting analysis — odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage…
College Basketball (CBB) data via ESPN public endpoints and the NCAA's official endpoints —…
College Football (CFB) data via ESPN public endpoints and the NCAA's official endpoints —…
Cricket data via ESPN public endpoints and Cricsheet open data — live-ish series scoreboards,…
Esports data — Dota 2 (OpenDota) and League of Legends esports (Leaguepedia). Pro matches,…
Formula 1 data — race schedules, results, lap timing, driver and team info. Powered by the…