К основному содержанию
скилл CX Codex

tennis-data — скилл для Claude Code: данные ATP и WTA

Скилл для ИИ-агента, который тянет счёты турниров, рейтинги, календарь сезона, профили игроков и новости ATP и WTA через публичные эндпоинты ESPN.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add machina-sports/sports-skills --skill tennis-data -a claude-code
Открыть на GitHub

Что делает tennis-data

Скилл даёт агенту семь команд: get_scoreboard для счётов текущих турниров, get_rankings для рейтингов, get_calendar для календаря сезона, get_player_info для профиля игрока и get_news для новостей. Ещё две команды — get_wta_entry_list и get_wta_player_results — читают публичный WTA API, а не ESPN.

Почти везде нужен параметр --tour=atp или --tour=wta: значения по умолчанию нет, поэтому без явного указания тура команда не отработает. Год скилл советует брать из currentDate системного промпта, а не вписывать руками. Внутри — CLI sports-skills и справочник references/api-reference.md с эндпоинтами и форматами ответов.

Важная развилка: get_wta_entry_list и get_wta_player_results принимают только родные числовые id WTA (tournament_id, player_id), и id из ESPN здесь не сработают — сопоставления между ними нет. Результаты игрока приходят ограниченным окном последних матчей, а не всей карьерой, и датируются датой начала турнира. Точных данных по очкам за матч тоже нет: ESPN не публикует статистику вроде эйсов или брейк-пойнтов даже для финалов Grand Slam, доступны только счёты по сетам. Живой счёт по очкам скилл не отдаёт — счёты обновляются после сета или матча.

Какие задачи решает

  • посмотреть счёты текущих матчей ATP или WTA
  • вытащить топ рейтинга с очками и динамикой
  • найти дату и покрытие конкретного турнира в календаре сезона
  • собрать список заявок на турнир WTA по singles и doubles
  • показать последние результаты игрока WTA по турнирам

Примеры запросов агенту

  • Какие матчи ATP идут прямо сейчас?
  • Покажи топ-20 рейтинга WTA
  • Когда в этом году French Open и на каком покрытии?

Как установить tennis-data

1Через Skills CLI (Vercel)

npx skills add machina-sports/sports-skills --skill tennis-data -a claude-code

2Вручную: положить файлы

~/.claude/skills/tennis-data/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/tennis-data/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о tennis-data

Как установить tennis-data в Claude?

Через маркетплейс скиллов: сначала npx skills add machina-sports/sports-skills --skill tennis-data -a claude-code, затем файл скилла окажется по пути ~/.claude/skills/tennis-data/SKILL.md.

Что делает tennis-data?

Отдаёт агенту счёты турниров, рейтинги ATP и WTA, календарь сезона, профили игроков и новости через публичные эндпоинты ESPN. Отдельно умеет читать заявки и последние результаты игроков из WTA API.

Почему get_wta_entry_list не принимает id из рейтингов?

Эти команды работают с публичным WTA API, а get_rankings и get_player_info — с ESPN. Числовые id у них свои, и сопоставления между наборами нет, поэтому id из ESPN вернёт ошибку или 404.

Исходный текст

SKILL.md · MIT
---
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, tennis news, a WTA tournament's entry list, or a WTA player's match history.
  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"
---

# Tennis Data (ATP + WTA)

Before writing queries, consult `references/api-reference.md` for endpoints, ID conventions, and data shapes.

## Quick Start

Prefer the CLI — it avoids Python import path issues:
```bash
sports-skills tennis get_scoreboard --tour=atp
sports-skills tennis get_rankings --tour=wta
sports-skills tennis get_calendar --tour=atp --year=2026
sports-skills tennis get_wta_entry_list --tournament_id=901 --year=2025
sports-skills tennis get_wta_player_results --player_id=320760 --year=2025 --limit=10
```

## CRITICAL: Before Any Query

CRITICAL: Before calling any data endpoint, verify:
- The `tour` parameter is specified (`atp` or `wta`) — there is no default.
- Year is derived from the system prompt's `currentDate` — never hardcoded.

## The `tour` Parameter

Most ESPN-backed commands require `--tour=atp` or `--tour=wta`:
- **ATP**: Men's professional tennis tour
- **WTA**: Women's professional tennis tour

If the user doesn't specify, ask which tour or show both by calling the command twice.

## Commands

| 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 |
| `get_wta_entry_list` | WTA entry list (singles players and doubles teams) for one tournament edition — WTA API |
| `get_wta_player_results` | A WTA player's most recent match results (bounded window), newest first — WTA API |

See `references/api-reference.md` for full parameter lists and return shapes.

## WTA API Commands Use Native WTA IDs

`get_wta_entry_list` and `get_wta_player_results` read the public WTA API (api.wtatennis.com), not ESPN:
- `tournament_id` and `player_id` are the WTA's own numeric ids, positive decimals with no leading zeros (e.g. tournament `901`, player `320760`). ESPN ids from `get_rankings` / `get_player_info` / `get_scoreboard` do not work here, and there is no id mapping between the two.
- `get_wta_player_results` returns a **bounded window of the most recent results** (at most `limit`, optionally within one `year`), not a career history. There is no total count: `has_more` only says further matches exist, and `history_complete` is always `false`. Never present `count` as a career or season total.
- Results are dated by **tournament start date** (`tournament_start_date`), not the day each match was played. Never present it as a match date.
- Matches within one tournament keep the provider's order, which is not guaranteed to be playing order. Don't claim exact within-tournament chronology.
- `winner_code` is the provider's raw side code; no win/loss is derived from it. Don't state who won from it.
- Both commands are WTA-published snapshots (`source.fetched_at`, cached up to 10 minutes). Don't call them complete or live. Under `SPORTS_SKILLS_REPLAY=replay`/`fill`, `source.fetched_at` is `null` and `source.served_at` is only local serving time — not data freshness.

## Workflows

### Live Tournament Check
1. `get_scoreboard --tour=<atp|wta>`
2. Present current matches by round.
3. For player info, use `get_player_info --player_id=<id>`.

### Rankings Lookup
1. `get_rankings --tour=<atp|wta> --limit=20`
2. Present rankings with points and trend.

### Season Calendar
1. `get_calendar --tour=<atp|wta> --year=<year>`
2. Filter for specific tournament.

### WTA Entry List
1. `get_wta_entry_list --tournament_id=<wta_id> --year=<year>`
2. Present each event (`format`: singles/doubles) with seeds and entry types. It is an entry list, not a draw.

### WTA Player Form
1. `get_wta_player_results --player_id=<wta_id> --year=<year> --limit=20`
2. Group by tournament; say these are the most recent `count` matches, and when `has_more` is true that earlier matches exist but were not fetched.

## Examples

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)

## Commands that DO NOT exist — never call these

- ~~`get_matches`~~ — does not exist. Use `get_scoreboard` for current match scores.
- ~~`get_draw`~~ — does not exist. Tournament draw data is not available via this API.
- ~~`get_head_to_head`~~ — does not exist. Head-to-head records are not available via this API.
- ~~`get_standings`~~ — does not exist. Tennis uses `get_rankings`, not standings.
- ~~`get_match_stats`~~ — does not exist. ESPN publishes no per-match statistics for tennis (aces, double faults, break points): scoreboard `statistics` lists are empty and the per-match stats endpoint returns "No competitor stats found", even for Grand Slam finals. Only set scores are available.

If a command is not listed in the Commands table above, it does not exist.

## Troubleshooting

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: `get_wta_entry_list` / `get_wta_player_results` rejects the id or returns HTTP 404
Cause: An ESPN id (or a non-numeric value) was passed; these commands take native WTA numeric ids only
Solution: Use the WTA's own tournament/player id. Don't substitute ESPN ids

Error: `get_wta_player_results --year=...` fails with "outside year ... inconclusive"
Cause: The WTA API returned matches from other years, so it likely ignored the year filter
Solution: Report that the season's results could not be confirmed. Don't retry without `year` and present those matches as that season

Error: `get_wta_entry_list` succeeds with `count: 0`
Cause: The WTA has not published an entry list for that tournament and year, or the id/year pair does not exist
Solution: Read the `note` field and tell the user no entry list is available — don't report an empty field of players

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

© machina-sports · MIT · machina-sports/sports-skills

Похожие скиллы

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →
pp-espn Matt Van Horn Отвечает на вопросы про счёт, таблицы, расписание и бокс-скоры через CLI espn-pp-cli. Десять лиг, очные встречи, поиск по локальной базе. CX Codex +1 3 800установок data-analyst cline Скилл превращает агента в аналитика: уточняет вопрос, пишет ограниченный SQL к ClickHouse и объясняет, что стоит за цифрой. CX Codex +1 2 200установок data-feeds brightdata Достаёт структурированные данные с известных сайтов через готовые скраперы Bright Data. Пригодится, когда нужен чистый JSON, а не сырой HTML. CX Codex +1 415установок cx-data-pipeline coralogix Скилл для настройки парсинга, обогащения и Events2Metrics в Coralogix через CLI. Пригодится, когда логи надо превратить в поля и метрики. CX Codex +1 3 300установок revenue-data-governance-strategy Maya-Beth Finotti Скилл помогает договориться, какая система считает выручку, а какая её хранит, и кто отвечает за метрики. Пригодится, когда финансы и продажи показывают разные ARR. CX Codex +1 21 000установок parallel-data-enrichment parallel Добавляет в список компаний, людей или продуктов поля из веба: имя CEO, финансирование, контакты. Работает с CSV и данными прямо в запросе. CX Codex +1 13 500установок

Из того же набора22

nba-data Скилл для загрузки статистики NBA, счёта матчей и координат бросков через CLI без API-ключей. Пригодится при анализе игр, составов и истории лиги с 1946 года. CX Codex +1 989установок markets Скилл связывает расписания ESPN с рынками прогнозов Kalshi и Polymarket: единые дашборды, сравнение цен и оценка ставки. CX Codex +1 861установок nfl-data Скилл даёт агенту доступ к расписаниям, составам, статистике и play-by-play NFL через публичные эндпоинты ESPN и nflverse. Ключи API не нужны. CX Codex +1 752установок mlb-data Скилл даёт доступ к текущим и архивным данным MLB из ESPN и официального API лиги. Пригодится, когда агенту нужны счета матчей, ростеры, списки травм или метрики бросков. CX Codex +1 737установок cfb-data Скилл даёт агенту доступ к данным студенческого футбола США: счёты, таблицы, рейтинги, составы, травмы и статистика. Без ключей API. CX Codex +1 690установок sports-reporter Скилл пишет оригинальные спортивные тексты — превью, отчёты, разборы — на основе реальных данных, которые сам же и запрашивает через CLI. CX Codex +1 685установок nhl-data Скилл загружает статистику, расписание и результаты матчей НХЛ через эндпоинты ESPN и официальный API лиги. Работает без ключей авторизации. CX Codex +1 681установок cbb-data Скилл вытаскивает счёта, таблицы, ростеры и сетку March Madness из публичных эндпоинтов ESPN и NCAA. Ключи не нужны. CX Codex +1 670установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой