volleyball-data — Claude Code skill: Dutch volleyball data
Pulls standings, schedules, results, clubs and news for Dutch volleyball from the open Nevobo API. No keys, no config.
npx skills add machina-sports/sports-skills --skill volleyball-data -a claude-codeWhat volleyball-data does
This skill covers Dutch volleyball: Eredivisie, Topdivisie, Superdivisie and the lower tiers of the pyramid. Everything comes from the Nevobo (Nederlandse Volleybalbond) open API, so there are no API keys to manage. Under the hood it ships a sports-skills CLI and a Python SDK, plus reference files for endpoints and competition IDs.
Eight leagues across the top three tiers are pre-configured: nevobo-eredivisie-heren, nevobo-eredivisie-dames, four Topdivisie pools and two Superdivisie entries. For 1e/2e/3e Divisie, regional, youth and beach competitions (6,400+ poules), you discover IDs through get_poules. Never guess a club or competition ID — call get_competitions or get_clubs first.
One hard limit: Nevobo removes past-season poules and exports, so standings, schedules and results always cover the current season only. A season value for anything else returns a clear error. Matches without a date come back as date: null, cancelled ones as status: "vervallen". Setup needs Python 3.10+; on an older default interpreter, install the package under a specific version instead.
What it helps with
- check the Eredivisie table for men and women
- see recent match results with set-by-set scores
- list upcoming fixtures for every LSV team
- find a club's organisatiecode by name
- explore which divisions exist in the Dutch pyramid
Example prompts for the agent
- Show me the current Eredivisie volleyball standings for men and women
- What matches does LSV have coming up?
- Give me recent Topdivisie results for men's pool A
How to install volleyball-data
1Skills CLI (Vercel)
npx skills add machina-sports/sports-skills --skill volleyball-data -a claude-code2Manually: put the files in place
~/.claude/skills/volleyball-data/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/volleyball-data/
1Skills CLI (Vercel)
npx skills add machina-sports/sports-skills --skill volleyball-data -a codex2Manually: put the files in place
.agents/skills/volleyball-data/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add machina-sports/sports-skills --skill volleyball-data -a cursor2Manually: put the files in place
.cursor/skills/volleyball-data/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install machina-sports/sports-skills volleyball-data2Manually: put the files in place
.github/skills/volleyball-data/SKILL.md1Skills CLI (Vercel)
npx skills add machina-sports/sports-skills --skill volleyball-data -a gemini-cli2Platform CLI
gemini skills install https://github.com/machina-sports/sports-skills --path skills/volleyball-dataManually: put the files in place
.devin/skills/volleyball-data/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add machina-sports/sports-skills --skill volleyball-data -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about volleyball-data
How do I install volleyball-data in Claude?
Run npx skills add machina-sports/sports-skills --skill volleyball-data -a claude-code. The skill then lands at ~/.claude/skills/volleyball-data/SKILL.md.
What does volleyball-data do?
It returns standings, schedules, results, clubs, tournaments and news for Dutch volleyball via the Nevobo API. You drive it through the sports-skills CLI or the Python SDK.
Can I get data for a past season?
No. Nevobo removes past-season poules and exports, so standings, schedules and results only cover the current season. Passing any other season value returns a clear error.
Source text
SKILL.md · MIT
---
name: volleyball-data
description: |
Dutch volleyball data (Eredivisie, Topdivisie, Superdivisie, and the full Dutch pyramid) via the Nevobo API. Standings, schedules, results, clubs, tournaments, and news. Zero config, no API keys.
Use when: user asks about Dutch volleyball, Eredivisie volleyball, Nevobo, volleyball standings, volleyball match results, volleyball schedules, or Dutch volleyball clubs.
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), tennis-data (tennis), or fastf1 (F1). For betting odds use polymarket or kalshi. For general news use sports-news.
license: MIT
metadata:
author: machina-sports
version: "0.1.0"
---
# Volleyball Data (Nevobo — Dutch Volleyball)
Before writing queries, consult `references/api-reference.md` for endpoints, ID conventions, and data shapes.
## Setup
Before first use, check if the CLI is available:
```bash
which sports-skills || pip install sports-skills
```
If `pip install` fails (package not found or Python version error), install from GitHub:
```bash
pip install git+https://github.com/machina-sports/sports-skills.git
```
The package requires Python 3.10+. If your default Python is older, use a specific version:
```bash
python3 --version # check version
# If < 3.10, try: python3.12 -m pip install sports-skills
# On macOS with Homebrew: /opt/homebrew/bin/python3.12 -m pip install sports-skills
```
No API keys required. All data comes from the Nevobo (Nederlandse Volleybalbond) open API.
## Quick Start
Prefer the CLI — it avoids Python import path issues:
```bash
sports-skills volleyball get_competitions
sports-skills volleyball get_standings --competition_id=nevobo-eredivisie-heren
sports-skills volleyball get_results --competition_id=nevobo-eredivisie-dames
sports-skills volleyball get_schedule --competition_id=nevobo-topdivisie-heren-a
```
Python SDK (alternative):
```python
from sports_skills import volleyball
standings = volleyball.get_standings(competition_id="nevobo-eredivisie-heren")
results = volleyball.get_results(competition_id="nevobo-eredivisie-dames")
```
## CRITICAL: Before Any Query
CRITICAL: Before calling any data endpoint, verify:
- The `competition_id` uses a valid value from `references/competition-ids.md` — never guess.
- For club-specific commands, you have a valid Nevobo `club_id` (use `get_clubs` to find one — the `organisatiecode` field).
- Do NOT guess club IDs or competition IDs. Use `get_competitions` or `get_clubs` to discover them.
## The `competition_id` Parameter
8 leagues across the top 3 tiers of Dutch volleyball are pre-configured. The `competition_id` follows the pattern `nevobo-<league>-<gender>[-<pool>]`:
- **Eredivisie** (Tier 1, 8 teams): `nevobo-eredivisie-heren`, `nevobo-eredivisie-dames`
- **Topdivisie** (Tier 2, 10 teams/pool): `nevobo-topdivisie-heren-a`, `nevobo-topdivisie-heren-b`, `nevobo-topdivisie-dames-a`, `nevobo-topdivisie-dames-b`
- **Superdivisie** (Tier 3, 10 teams): `nevobo-superdivisie-heren`, `nevobo-superdivisie-dames`
For lower divisions (1e/2e/3e Divisie, regional, youth, beach — 6,400+ poules), use `get_poules` to discover them.
See `references/competition-ids.md` for the full reference with team counts and the Dutch volleyball pyramid.
## Commands
| Command | Description |
|---|---|
| `get_competitions` | List all available competitions and leagues |
| `get_standings` | League table (rank, team, matches, points) |
| `get_schedule` | Upcoming matches (teams, venue, date) |
| `get_results` | Match results (score, set-by-set scores) |
| `get_clubs` | List volleyball clubs (name, city, province) |
| `get_club_schedule` | Club's upcoming matches across all teams |
| `get_club_results` | Club's results across all teams |
| `get_poules` | Browse Nevobo poules (for lower divisions discovery) |
| `get_tournaments` | Tournament calendar |
| `get_news` | Federation news |
See `references/api-reference.md` for full parameter lists and return shapes.
**Current season only.** Nevobo removes past-season poules and exports, so `get_standings`, `get_schedule` and `get_results` always cover the current season. Their optional `season` ("2026-2027" or 2026) returns a clear error for any other season. Matches without a date yet have `date: null`; cancelled matches carry `status: "vervallen"`.
## Examples
Example 1: Eredivisie standings
User says: "What are the current Dutch volleyball standings?"
Actions:
1. Call `get_standings(competition_id="nevobo-eredivisie-heren")` for men
2. Call `get_standings(competition_id="nevobo-eredivisie-dames")` for women
Result: League tables with rank, team name, matches played, and points
Example 2: Recent match results
User says: "Show me recent Eredivisie volleyball results"
Actions:
1. Call `get_results(competition_id="nevobo-eredivisie-heren")`
Result: Match results with home/away teams, match score (e.g. "3-1"), and set scores (e.g. ["25-21", "25-18", "21-25", "25-20"])
Example 3: Club schedule
User says: "What matches does LSV have coming up?"
Actions:
1. Call `get_clubs(limit=10)` and find LSV's organisatiecode (CKL5C67)
2. Call `get_club_schedule(club_id="CKL5C67")`
Result: Upcoming matches for all of LSV's teams with venues and dates
Example 4: Second tier standings
User says: "Show me the Topdivisie standings"
Actions:
1. Call `get_standings(competition_id="nevobo-topdivisie-heren-a")` for men pool A
2. Call `get_standings(competition_id="nevobo-topdivisie-heren-b")` for men pool B
Result: Two pool tables with 10 teams each
Example 5: Discover lower divisions
User says: "What divisions are available in Dutch volleyball?"
Actions:
1. Call `get_poules(regio="nationale-competitie", limit=20)`
Result: List of national-level poules including 1e/2e/3e Divisie with their abbreviations and descriptions
## Commands that DO NOT exist — never call these
- ~~`get_scoreboard`~~ — does not exist. Use `get_results` for recent match results.
- ~~`get_rankings`~~ — does not exist. Volleyball uses `get_standings` for league tables.
- ~~`get_team_roster`~~ — does not exist. Use `get_clubs` for club information.
- ~~`get_player_info`~~ — does not exist. Player-level data is not available via this API.
If a command is not listed in the Commands table above, it does not exist.
## Error Handling
When a command fails, **do not surface raw errors to the user**. Instead:
1. Catch silently and try alternatives
2. If a club name is given instead of ID, use `get_clubs` to find the `organisatiecode` first
3. If a competition_id returns no data, use `get_competitions` to verify available leagues
4. Only report failure with a clean message after exhausting alternatives
## Troubleshooting
Error: `sports-skills` command not found
Cause: Package not installed
Solution: Run `pip install sports-skills`. If not on PyPI, install from GitHub: `pip install git+https://github.com/machina-sports/sports-skills.git`
Error: Standings returns empty list
Cause: The competition's regular season phase may have ended, or the season hasn't started yet
Solution: Use `get_results` to check recent results, or `get_poules` to discover current active poule paths
Error: Schedule returns 0 matches
Cause: The competition phase has completed and no more matches are scheduled for that poule
Solution: This is expected between season phases. Check other leagues (Topdivisie/Superdivisie may still be active)
Error: Club schedule/results returns error
Cause: The club_id may be incorrect
Solution: Use `get_clubs` to find valid club IDs (the `organisatiecode` field, e.g. "CKL5C67")
Error: Connection errors or timeouts
Cause: The Nevobo API may be temporarily unavailable
Solution: Wait a moment and retry. The API is public and unauthenticated but may have brief outages
© machina-sports · MIT · machina-sports/sports-skills