F1 MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@F1 MCP Servershow me the driver standings for the 2024 season"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
F1 MCP Server
A Model Context Protocol (MCP) server that provides Formula 1 data using the FastF1 Python package.
Features
Get race schedules for any F1 season
Retrieve session results (practice, qualifying, race)
Access lap times and telemetry data
Driver and constructor standings
Circuit information
Related MCP server: OpenF1 MCP Server
Quick Start
Prerequisites
Python 3.13
uv package manager
1. Install uv (if not already installed)
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"2. Setup F1 MCP Server
# Quick setup
./quick-start.sh
# Or manually
make install
# or: uv sync && uv pip install -e .3. Run the server
# MCP mode (for MCP Inspector)
make mcp
# HTTP mode (for OAuth testing)
make http
# With MCP Inspector
make inspectorMCP Inspector Setup
The MCP Inspector is a powerful tool for testing and debugging MCP servers. Here's how to set it up:
1. Install Node.js (if not already installed)
# macOS with Homebrew
brew install node
# Or download from https://nodejs.org/2. Install MCP Inspector
# Install globally with npm
npm install -g @modelcontextprotocol/inspector
# Verify installation
mcp-inspector --version3. Run F1 MCP Server with Inspector
# Using make command (recommended)
make inspector
# Or manually
mcp-inspector uv run python -m f1_mcp_server.server4. Using MCP Inspector
Once started, the inspector will:
Launch a web interface (usually at
http://localhost:5173)Connect to your F1 MCP server automatically
Provide an interactive UI to test all available tools
Available F1 Tools in Inspector:
get_race_schedule- Browse F1 race calendarsget_session_results- View race/qualifying resultsget_driver_standings- Check championship standingsget_constructor_standings- Team championship dataget_lap_times- Detailed lap timing analysis
5. Example Usage in Inspector
Try these sample requests in the MCP Inspector:
Get 2024 Race Schedule:
{
"year": 2024
}Get Monaco GP Race Results:
{
"year": 2024,
"round_number": 8,
"session": "R"
}Get Lap Times for Verstappen:
{
"year": 2024,
"round_number": 1,
"session": "R",
"driver": "VER"
}Troubleshooting MCP Inspector
Inspector won't start:
# Check Node.js version (needs 16+)
node --version
# Reinstall inspector
npm uninstall -g @modelcontextprotocol/inspector
npm install -g @modelcontextprotocol/inspectorServer connection issues:
# Test server directly first
make test-startup
# Check if server starts without inspector
make mcpPort conflicts:
# Inspector uses port 5173 by default
# Kill any processes using the port
lsof -ti:5173 | xargs kill -9Usage with MCP Inspector
The MCP Inspector provides a web-based interface for testing F1 data tools:
# Install MCP Inspector (requires Node.js)
npm install -g @modelcontextprotocol/inspector
# Run F1 server with inspector
make inspector
# Or manually
mcp-inspector uv run python -m f1_mcp_server.serverInspector Features:
Interactive web UI at
http://localhost:5173Real-time F1 data testing
JSON schema validation
Tool documentation browser
Available Tools
get_race_schedule: Get the race schedule for a specific seasonget_session_results: Get results for a specific sessionget_driver_standings: Get driver championship standingsget_constructor_standings: Get constructor championship standingsget_lap_times: Get lap times for a specific session
Available Tools
5 toolsget_constructor_standingsC
Get constructor championship standings for a season
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year (e.g., 2024) | |
| round_number | No | Round number (optional, gets standings after this round) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe how it behaves—such as whether it returns real-time or historical data, potential rate limits, error conditions for invalid inputs, or the format of the returned standings. This leaves significant gaps in understanding the tool's operational characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words or fluff. It is front-loaded and appropriately sized for a simple tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool that likely returns complex data like standings. It doesn't explain what the output includes (e.g., team names, points, positions) or any behavioral aspects like data freshness or error handling. For a tool with two parameters and no structured output documentation, this leaves too much unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the input schema already documents both parameters ('year' and 'round_number') with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as explaining the relationship between season and round or providing examples beyond the schema's details. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('constructor championship standings for a season'), making it immediately understandable. However, it doesn't explicitly distinguish itself from sibling tools like 'get_driver_standings' beyond the resource name difference, which is why it doesn't reach a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_driver_standings' or other sibling tools. It lacks context about prerequisites, such as data availability for specific years or rounds, and doesn't mention any exclusions or complementary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_driver_standingsC
Get driver championship standings for a season
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year (e.g., 2024) | |
| round_number | No | Round number (optional, gets standings after this round) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It doesn't describe whether this is a read-only operation, what authentication might be required, rate limits, error conditions, or the format/structure of the returned standings data. The description only states what data is retrieved without behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just one sentence with zero wasted words. It's front-loaded with the core purpose and efficiently communicates the essential function without unnecessary elaboration, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what the returned standings data looks like (e.g., list format, included fields), how results are ordered, or whether it includes historical or current data. The lack of behavioral and output information leaves significant gaps for an AI agent to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'for a season' which aligns with the 'year' parameter, but adds no additional semantic context beyond what the schema provides. With 100% schema description coverage, the baseline is 3, and the description doesn't compensate with extra details about parameter interactions or usage examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('driver championship standings for a season'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_constructor_standings' which would provide similar standings data for constructors instead of drivers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_constructor_standings' for constructor data or 'get_session_results' for race-specific results, nor does it specify prerequisites or appropriate contexts for retrieving driver standings versus other data types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lap_timesC
Get lap times for a specific session
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year (e.g., 2024) | |
| round_number | Yes | Round number (1-24) | |
| session | Yes | Session type | |
| driver | No | Driver abbreviation (optional, e.g., 'VER', 'HAM') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves lap times but fails to mention critical details like whether it's a read-only operation, potential rate limits, authentication needs, or the format of returned data (e.g., structured list vs. raw). This leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no unnecessary words, making it highly concise and front-loaded. It efficiently communicates the core purpose without any fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool with 4 parameters and no behavioral context. It does not explain what the output looks like (e.g., list of lap times with details), potential errors, or usage constraints, leaving the agent with insufficient information to handle the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting all parameters (year, round_number, session, driver) with details like enums for session. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline for adequate but not enhanced parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('lap times for a specific session'), making the purpose understandable. However, it does not distinguish this tool from its siblings (e.g., get_session_results), which might also retrieve session-related data, leaving room for ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_session_results or other sibling tools. It lacks context about prerequisites, such as needing a specific session type, and offers no explicit when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_race_scheduleB
Get the race schedule for a specific F1 season
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year (e.g., 2024) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action ('Get') but doesn't describe traits like response format (e.g., list of races with dates/locations), pagination, rate limits, or authentication needs. For a read operation with zero annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple tool with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, no annotations), the description is minimally adequate but incomplete. It covers the basic purpose but lacks behavioral details (e.g., output structure) that would help an agent use it correctly, especially with no annotations to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'year' fully documented in the schema (type, description, min/max). The description adds no additional parameter semantics beyond implying the year selects a season, which is already clear from the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('race schedule'), and specifies the scope ('for a specific F1 season'). It doesn't explicitly differentiate from sibling tools like 'get_session_results', but the resource focus is distinct enough for clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_session_results' (which might overlap for race events) or clarify if this is for upcoming vs. historical schedules. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_resultsC
Get results for a specific F1 session (practice, qualifying, or race)
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Season year (e.g., 2024) | |
| round_number | Yes | Round number (1-24) | |
| session | Yes | Session type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but adds minimal context. It states what the tool does but doesn't describe response format, error handling, rate limits, authentication needs, or whether it's read-only or mutative. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every element ('Get results for a specific F1 session') directly contributes to understanding, and the parenthetical clarification ('practice, qualifying, or race') adds useful context without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 required parameters, no output schema, no annotations), the description is incomplete. It adequately states the purpose but lacks behavioral context, usage guidelines, and output information. For a data retrieval tool with no structured output documentation, more detail on what 'results' entail would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly with descriptions, constraints, and enums. The description adds no additional parameter semantics beyond what's in the schema, such as explaining relationships between parameters or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('results for a specific F1 session'), making it immediately understandable. It distinguishes the resource type (session results) from siblings like standings or schedules, though it doesn't explicitly differentiate from 'get_lap_times' which might overlap in data scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for selecting session types, or how it differs from sibling tools like 'get_lap_times' that might provide related data. Usage is implied by the purpose but not explicitly directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
get_constructor_standings - First observed
get_driver_standings - First observed
get_lap_times - First observed
get_race_schedule - First observed
get_session_results
TDQS
Each tool has a clearly distinct purpose targeting different F1 data aspects: constructor standings, driver standings, lap times, race schedule, and session results. No overlap exists, making tool selection straightforward for an agent.
All tools follow a consistent verb_noun pattern with 'get_' prefix and descriptive nouns (e.g., get_constructor_standings, get_driver_standings). This uniformity enhances predictability and readability.
Five tools are reasonable for an F1 data server, covering key standings and session data. It's slightly lean but well-scoped; minor gaps like historical data or driver details might exist but don't hinder core functionality.
The tool set covers essential F1 queries: standings, schedules, lap times, and session results. Minor gaps include lack of update/delete operations (typical for read-only data) and potential missing features like pit stop times or weather data, but core workflows are supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Anonymous read-only Formula 1 tools, resources, prompts, completion, and interactive dashboard.
Read-only F1 game laps, telemetry, setups, leaderboard benchmarks, and progress.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides access to Formula 1 data including driver and constructor championship standings with support for current and historical seasons. Enables users to query F1 championship information through natural language with plans for expanded race data and telemetry.221MIT
- FlicenseNot gradedqualityDmaintenanceEnables access to Formula 1 data from the openF1.org API, including driver information, race results, lap times, telemetry, pit stops, weather conditions, and live position data across multiple seasons.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Formula 1 data through LLM interfaces like Claude. Provides access to F1 information including circuits, constructors, drivers, grand prix, manufacturers, races, and seasons.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables Formula 1 data analysis through natural language, providing tools like track dominance, lap time analysis, and team performance comparisons.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Josh-Mantel/MCP-F1'
If you have feedback or need assistance with the MCP directory API, please join our Discord server