FirstCycling MCP Server

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.

Category
Visit Server

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

  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, 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:

    {
      "mcpServers": {
        "firstcycling": {
          "command": "uv",
          "args": ["--directory", "/path/to/server/directory", "run", "firstcycling.py"]
        }
      }
    }
    
  3. Restart Claude for Desktop

License

MIT

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured