
FirstCycling MCP Server
Provides professional cycling data from FirstCycling, allowing users to retrieve comprehensive information about cyclists, race results, historical cycling data, and team information through natural language queries.
Tools
get_rider_year_results
Retrieve detailed results for a professional cyclist for a specific year. This tool provides comprehensive information about a rider's performance in all races during a given calendar year. It includes positions achieved, race categories, dates, and additional details. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get 2023 results for Tadej Pogačar (ID: 16973) - Get 2022 results for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Complete results for the specified year - Position and time for each race - Race category and details - Chronological organization by date
get_rider_victories
Get a comprehensive list of a rider's UCI victories. This tool retrieves detailed information about all UCI-registered race victories achieved by the cyclist throughout their career. Victories can be filtered to show only WorldTour wins if desired. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get all UCI victories for Tadej Pogačar (ID: 16973) - Get WorldTour victories for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Complete list of victories - Race details including category - Date and year of each victory - Option to filter by WorldTour races only
get_rider_teams
Get a detailed history of a professional cyclist's team affiliations throughout their career. This tool provides a chronological list of all teams the rider has been part of, including years and team details. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get team history for Peter Sagan (ID: 12345) - Get career team changes for Chris Froome (ID: 67890) Returns a formatted string with: - Complete team history - Years with each team - Team names and details - Chronological organization
search_rider
Search for professional cyclists by name. This tool helps find riders by their name, returning a list of matching riders with their IDs and basic information. This is useful when you need a rider's ID for other operations but only know their name. Example usage: - Search for "Tadej Pogacar" to find Tadej Pogačar's ID - Search for "Van Aert" to find Wout van Aert's ID Returns a formatted string with: - List of matching riders - Each rider's ID, name, nationality, and current team - Number of matches found
get_rider_info
Get comprehensive information about a professional cyclist including their current team, nationality, date of birth, and recent race results. This tool provides a detailed overview of a rider's current status and recent performance in professional cycling races. The information includes their current team affiliation, nationality, age, and their most recent race results with positions and times. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get basic info for Tadej Pogačar (ID: 16973) - Get basic info for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Full name and current team - Nationality and date of birth - UCI ID and social media handles - Last 5 race results with positions and times - Total number of UCI victories
get_rider_best_results
Retrieve the best career results of a professional cyclist, including their top finishes in various races. This tool provides a comprehensive overview of a rider's most significant achievements throughout their career, including their highest positions in major races, stage wins, and overall classifications. Results are sorted by importance and include detailed information about each race. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get top 10 best results for Tadej Pogačar (ID: 16973) - Get top 5 best results for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Rider's name and career highlights - Top results sorted by importance - Race details including category and country - Date and position for each result
get_rider_grand_tour_results
Get comprehensive results for a rider in Grand Tours (Tour de France, Giro d'Italia, and Vuelta a España). This tool provides detailed information about a rider's performance in cycling's most prestigious three-week races, including their overall classification positions, stage wins, and special classification results. The data is organized chronologically and includes all relevant race details. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get Grand Tour results for Tadej Pogačar (ID: 16973) - Get Grand Tour results for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Results for each Grand Tour (Tour de France, Giro, Vuelta) - Overall classification positions - Stage wins and special classification results - Time gaps and race details
get_rider_monument_results
Retrieve detailed results for a rider in cycling's five Monument races (Milan-San Remo, Tour of Flanders, Paris-Roubaix, Liège-Bastogne-Liège, and Il Lombardia). These are the most prestigious one-day races in professional cycling. The tool provides comprehensive information about a rider's performance in these historic races, including their positions, times, and any special achievements. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get Monument results for Tadej Pogačar (ID: 16973) - Get Monument results for Mathieu van der Poel (ID: 16975) Returns a formatted string with: - Results for each Monument race - Position and time for each participation - Race details and special achievements - Chronological organization by year
get_rider_team_and_ranking
Get information about a professional cyclist's team affiliations and UCI rankings throughout their career. This tool retrieves the rider's team history and their UCI ranking points over time. It provides a comprehensive overview of their professional career progression through different teams and their performance in the UCI rankings. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get team and ranking history for Tadej Pogačar (ID: 16973) - Get team and ranking history for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Complete team history with years - UCI ranking positions and points - Career progression timeline - Current team and ranking status
get_rider_race_history
Get the complete race history of a professional cyclist, optionally filtered by year. This tool retrieves a comprehensive list of all races the rider has participated in, including their positions, times, and race categories. It provides a detailed overview of their racing career. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get complete race history for Tadej Pogačar (ID: 16973) - Get 2023 race history for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - All races organized by year - Position and time for each race - Race category and details - Chronological organization
search_race
Search for cycling races by name. This tool helps find races by their name, returning a list of matching races with their IDs and countries. This is useful when you know a race's name but need its ID for other operations. Example usage: - Search for "tour" to find Tour de France and other tours - Search for "giro" to find Giro d'Italia Returns a formatted string with: - List of matching races - Each race's ID, name, and country - Number of matches found
get_rider_one_day_races
Get a rider's results in one-day races, optionally filtered by year. This tool retrieves detailed information about a rider's performance in one-day races (classics and one-day events). It provides comprehensive data about positions, times, and race categories. Results can be filtered by a specific year. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get one-day race results for Mathieu van der Poel (ID: 16672) - Get 2023 one-day race results for Wout van Aert (ID: 16948) Returns a formatted string with: - Results in one-day races organized by year - Position and time for each race - Race category and details - Chronological organization
get_rider_stage_races
Get a rider's results in stage races, optionally filtered by year. This tool retrieves detailed information about a rider's performance in stage races (multi-day races like Tour de France, Giro d'Italia, etc.). It provides comprehensive data about positions, times, and race categories. Results can be filtered by a specific year. Note: If you don't know the rider's ID, use the search_rider tool first to find it by name. Example usage: - Get stage race results for Tadej Pogačar (ID: 16973) - Get 2023 stage race results for Jonas Vingegaard (ID: 16974) Returns a formatted string with: - Results in stage races organized by year - Position and time for each race - Race category and details - Chronological organization
get_race_details
Get comprehensive details about a cycling race. This tool provides detailed information about a specific race, including its history, key statistics, route details, and other relevant information. The data can be filtered by specific classification. Note: If you don't know the race's ID, use the search_race tool first to find it by name. Example usage: - Get details for Tour de France (ID: 17) - Get details for Paris-Roubaix (ID: 30) Returns a formatted string with: - Race name, country, and category - Historical information and key statistics - Course details and characteristics - Optional classification details
get_race_edition_results
Get detailed results for a specific edition of a cycling race. This tool provides comprehensive results for a particular edition of a race, including rankings, time gaps, and other relevant statistics. Results can be filtered by classification or stage. Note: If you don't know the race's ID, use the search_race tool first to find it by name. Example usage: - Get 2023 Tour de France general classification results (Race ID: 17, Year: 2023) - Get 2022 Paris-Roubaix results (Race ID: 30, Year: 2022) - Get results for stage 5 of 2023 Tour de France (Race ID: 17, Year: 2023, Stage: 5) Returns a formatted string with: - Race name, year, and category - Complete result list with rankings and time gaps - Rider names and teams - Classification or stage specific information
get_start_list
Get the start list for a specific edition of a cycling race. The start list includes rider numbers, names, and teams. Note: If you don't know the race's ID, use the search_race tool first to find it by name. If no year is specified, the current year will be used. Example usage: - Get start list for current year's Tour de France (Race ID: 17) - Get start list for 2023 Paris-Roubaix (Race ID: 30, Year: 2023) Returns a formatted string with: - Race name and year - List of participating teams - Riders for each team with their race numbers
get_race_victory_table
Get the all-time victory table for a cycling race. This tool provides a historical summary of the most successful riders in a specific race, showing the number of victories for each rider throughout the race's history. Note: If you don't know the race's ID, use the search_race tool first to find it by name. Example usage: - Get victory table for Tour de France (ID: 17) - Get victory table for Paris-Roubaix (ID: 30) Returns a formatted string with: - Race name - List of riders with the most victories - Number of victories for each rider - Years of victories where available
get_uci_rankings
Get UCI rankings for riders, teams, or nations. This tool provides access to the UCI ranking data for professional cyclists, teams, or nations. Results can be filtered by ranking type, year, and category. Example usage: - Get World UCI rider rankings for 2023 - Get Europe Tour UCI team rankings for 2022 - Get UCI nation rankings for 2023 in the World category Returns a formatted string with: - Ranking list with positions and points - Filtered by specified categories - Organized in a readable format - Option to filter by country
README
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
- Clone this repository
- Create and activate a virtual environment:
uv venv source .venv/bin/activate # On macOS/Linux # or .venv\Scripts\activate # On Windows
- Install dependencies:
uv pip install -e .
FirstCycling API
This server uses the FirstCycling API, 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:
-
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
- macOS:
-
Add the server to your configuration:
{ "mcpServers": { "firstcycling": { "command": "uv", "args": ["--directory", "/path/to/server/directory", "run", "firstcycling.py"] } } }
-
Restart Claude for Desktop
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.