ProCyclingStats MCP Server
README.md
# ProCyclingStats MCP Server
An MCP (Model Context Protocol) server that provides professional cycling data from [ProCyclingStats](https://www.procyclingstats.com).
## Tools
| Tool | Description |
|------|-------------|
| `discover_races` | Find races from the PCS calendar for a given year and tier |
| `get_race_overview` | Get race metadata — name, dates, category, stages list |
| `get_stage_results` | Get full stage/one-day race results with metadata |
| `get_rider_profile` | Get rider bio, physical stats, specialty scores, palmares |
| `get_race_startlist` | Get the startlist for a race grouped by team |
| `search_pcs` | Free-text search for riders, races, and teams |
## Installation
```bash
pip install git+https://github.com/lewis-mcgillion/procyclingstats-mcp-server.git
```
Or clone and install locally:
```bash
git clone https://github.com/lewis-mcgillion/procyclingstats-mcp-server.git
cd procyclingstats-mcp-server
pip install -e .
```
## Usage
### Run the server directly
```bash
procyclingstats-mcp
```
### Configure in your MCP client
Add to your MCP client config (e.g. Claude Desktop, VS Code GitHub Copilot).
**Recommended — using `uvx`** (no manual install needed):
```json
{
"mcpServers": {
"procyclingstats": {
"command": "uvx",
"args": ["--from", "git+https://github.com/lewis-mcgillion/procyclingstats-mcp-server.git", "procyclingstats-mcp"]
}
}
}
```
**Using a local clone with `uv`:**
```json
{
"mcpServers": {
"procyclingstats": {
"command": "uv",
"args": ["run", "--directory", "/path/to/procyclingstats-mcp-server", "procyclingstats-mcp"]
}
}
}
```
**Using a global install:**
```json
{
"mcpServers": {
"procyclingstats": {
"command": "procyclingstats-mcp",
"args": []
}
}
}
```
## Example Queries
- "What WorldTour races are happening in 2025?"
- "Show me the results of Tour de France 2025 Stage 1"
- "What's Tadej Pogačar's rider profile?"
- "Who's on the startlist for the Giro d'Italia 2025?"
- "Search for Remco Evenepoel"
## URL Format
All PCS URLs use the slug format:
- Races: `race/tour-de-france/2025`
- Stages: `race/tour-de-france/2025/stage-1`
- One-day results: `race/milano-sanremo/2025/result`
- Riders: `rider/tadej-pogacar`
## Rate Limiting
The server enforces a 0.5s delay between requests to PCS and retries automatically on server errors (500/502/503/429).
## Credits
Built on top of the [procyclingstats](https://pypi.org/project/procyclingstats/) Python library.
TDQS
A3.7/5.0
Scored across 6 tools
Disambiguation5/5
Each tool has a distinct purpose: discovering races, getting race overview, startlist, rider profile, stage results, and general search. No overlap or ambiguity.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern with snake_case, e.g., discover_races, get_race_overview, get_rider_profile. No deviations.
Tool Count5/5
6 tools is well-scoped for a cycling statistics server. Each tool covers a necessary operation without being excessive or insufficient.
Completeness4/5
The set covers core operations: race discovery, details, participants, rider profiles, stage results, and search. Missing team profiles and detailed rider season results, but the essential domain is covered.
Maintenance
ActivityInactive
ResponsivenessNo issues