FirstCycling MCP Server
by r-huijts
# FirstCycling MCP Server
This is a Model Context Protocol (MCP) server that provides professional cycling data from FirstCycling. It allows you to retrieve comprehensive information about professional cyclists, race results, race details, and historical cycling data.
## Features
This MCP server offers rich access to professional cycling data, providing tools for:
- Finding information about professional cyclists
- Retrieving race results and details
- Exploring historical race data
- Analyzing rider performance and career progression
- Accessing information about cycling teams and competitions
## Real-World Use Cases
With this MCP server, you can use Claude to:
### Rider Analysis
- **Performance Tracking**: "How has Tadej Pogačar performed in the Tour de France over the years?"
- **Career Progression**: "Show me the team history and career progression of Wout van Aert."
- **Specialization Analysis**: "What are Mathieu van der Poel's results in Monument classics?"
- **Victory Analysis**: "List all WorldTour victories for Jonas Vingegaard."
- **Historical Comparison**: "Compare the Grand Tour results of Primož Roglič and Jonas Vingegaard."
### Race Research
- **Recent Results**: "Show me the results of the 2023 Paris-Roubaix."
- **Historical Context**: "Who are the youngest and oldest winners of the Tour of Flanders?"
- **Team Analysis**: "Get the startlist for the 2023 Tour de France with detailed team information."
- **Race Statistics**: "Show me the victory table for Liège-Bastogne-Liège. Who has won it the most times?"
- **Stage Information**: "Can you show me the stage profiles for the 2023 Giro d'Italia?"
### Sports Journalism
- "Create a detailed profile of Remco Evenepoel for a cycling magazine article."
- "Write a preview for the upcoming Tour de France based on the recent results of top contenders like Tadej Pogačar and Jonas Vingegaard."
- "Analyze the evolution of Tom Pidcock's career based on his race results and team history."
### Cycling Education
- "Explain what makes the Monument classics special using data about their history and winners."
- "Create an educational summary about Grand Tours and their significance in professional cycling."
- "Describe the typical career progression of a professional cyclist using examples from the data."
## Requirements
- Python 3.10 or higher
- `uv` package manager (recommended)
- Dependencies as listed in `pyproject.toml`, including:
- mcp
- beautifulsoup4
- lxml
- pandas
- slumber
- and other packages for web scraping and data processing
## Setup
1. Clone this repository
2. Create and activate a virtual environment:
```
uv venv
source .venv/bin/activate # On macOS/Linux
# or
.venv\Scripts\activate # On Windows
```
3. Install dependencies:
```
uv pip install -e .
```
## FirstCycling API
This server uses the [FirstCycling API](https://github.com/baronet2/FirstCyclingAPI), which has been integrated directly into the project. The API provides methods to fetch data from the FirstCycling website through web scraping.
## MCP Tools
The server exposes the following tools through the Model Context Protocol:
### Rider Information
| Tool | Description |
|------|-------------|
| `get_rider_info` | Get basic biographical information about a rider including nationality, birthdate, weight, height, and current team |
| `get_rider_best_results` | Retrieve a rider's best career results, sorted by importance |
| `get_rider_grand_tour_results` | Get a rider's results in Grand Tours (Tour de France, Giro d'Italia, Vuelta a España) |
| `get_rider_monument_results` | Retrieve a rider's results in cycling's Monument classics |
| `get_rider_team_and_ranking` | Get a rider's team history and UCI ranking evolution over time |
| `get_rider_race_history` | Retrieve a rider's complete race participation history, optionally filtered by year |
| `get_rider_one_day_races` | Get a rider's results in one-day races, optionally filtered by year |
| `get_rider_stage_races` | Get a rider's results in multi-day stage races, optionally filtered by year |
| `get_rider_teams` | Retrieve the complete team history of a rider throughout their career |
| `get_rider_victories` | Get a list of a rider's career victories, with optional filters for WorldTour or UCI races |
### Race Information
| Tool | Description |
|------|-------------|
| `get_race_results` | Retrieve results for a specific race edition by race ID and year |
| `get_race_overview` | Get general information about a race including history, records, and past winners |
| `get_race_stage_profiles` | Retrieve stage profiles and details for multi-stage races |
| `get_race_startlist` | Get the startlist for a specific race edition with detailed or basic team information |
| `get_race_victory_table` | Retrieve the all-time victory table for a race showing riders with most wins |
| `get_race_year_by_year` | Get year-by-year results for a race with optional classification filter |
| `get_race_youngest_oldest_winners` | Retrieve information about the youngest and oldest winners of a race |
| `get_race_stage_victories` | Get information about stage victories in multi-stage races |
### Search Tools
| Tool | Description |
|------|-------------|
| `search_rider` | Search for riders by name, returning their IDs and basic information |
| `search_race` | Search for races by name, returning their IDs and basic information |
## Usage
### Development Mode
You can test the server with MCP Inspector by running:
```
uv run mcp dev firstcycling.py
```
This will start the server and open the MCP Inspector in your browser, allowing you to test the available tools.
### Integration with Claude for Desktop
To integrate this server with Claude for Desktop:
1. Edit the Claude for Desktop config file, located at:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
2. Add the server to your configuration:
```json
{
"mcpServers": {
"firstcycling": {
"command": "uv",
"args": ["--directory", "/path/to/server/directory", "run", "firstcycling.py"]
}
}
}
```
3. Restart Claude for Desktop
## License
MIT
ID: lbkjwm0se5