iRacing MCP Server
# iRacing MCP Server
An MCP (Model Context Protocol) server for accessing iRacing telemetry data and game functionality.
## Overview
This project provides real-time telemetry data, leaderboard information, camera control, pit commands, replay functionality, and more from iRacing through the MCP protocol. It enables AI assistants and other applications to easily access iRacing data.
## Key Features
### š Telemetry Data
- Retrieve real-time telemetry values
- Get list of available telemetry variables
### š Race Information
- Get leaderboard (competitive positions only)
- Access driver information, session information, weekend information, and split time information
- Monitor current flags and engine warnings
### š¹ Camera Control
- Get available camera groups
- Switch cameras (by car number, position, group specification)
- Check current camera status
### š§ Pit Operations
- Check pit service status
- Execute pit commands (refueling, tire changes, repairs, etc.)
- Manage safe pit operations
### š¬ Replay Features
- Search and navigate replays
- Move between sessions, laps, and frames
- Jump to incident markers
## Requirements
- Python 3.13 or higher
- iRacing (must be running)
- uv
## Usage
### 1. Configure mcp.json
```json
{
"mcpServers": {
"iracing-mcp-server": {
"command": "uvx",
"args":["iracing-mcp-server"]
}
}
}
```
## Available Tools
### Telemetry Related
- `get_telemetry_names()` - Get available telemetry variables
- `get_telemetry_values(names)` - Get specified telemetry values
### Race Information
- `get_leaderboard()` - Get leaderboard
- `get_driver_info()` - Get driver information
- `get_session_info()` - Get session information
- `get_qualify_results_info()` - Get qualification results information
- `get_weekend_info()` - Get weekend information
- `get_split_time_info()` - Get split time information
- `get_radio_info()` - Get radio infomation
- `get_current_flags()` - Get current flags
- `get_current_engine_warnings()` - Get engine warnings
### Camera Control
- `get_camera_info()` - Get camera information
- `get_current_camera_status()` - Get current camera status
- `cam_switch(group_number, car_number_raw, position)` - Switch camera
### Pit Operations
- `get_current_pit_service_status()` - Get current pit service status
- `pit_command(commands_and_values)` - Execute pit command
### Replay Features
- `replay_search(search_commands)` - Search and navigate replay
## Development
### Dependencies
- `mcp[cli]>=1.12.2` - MCP protocol implementation
- `pyirsdk>=1.3.5` - iRacing SDK Python bindings
### Project Structure
```
iracing-mcp-server/
āāā src/iracing_mcp_server/
ā āāā __init__.py # Main entry point
ā āāā server.py # MCP server implementation
ā āāā leaderboard.py # Leaderboard processing
ā āāā prompt.py # Prompt templates
āāā pyproject.toml # Project configuration
āāā README.md # This file
```
## License
This project is released under the MIT License.
## Acknowledgments
- [pyirsdk](https://github.com/kutu/pyirsdk) - Python bindings for iRacing SDK
- [MCP](https://modelcontextprotocol.io/) - Model Context Protocol
TDQS
Scored across 17 tools
Most tools have clearly distinct purposes, but the camera-related tools (cam_switch, get_camera_info, get_current_camera_status) could cause confusion for an agent due to overlapping focus.
The majority of tools follow a 'get_*' pattern, but there are exceptions like 'cam_switch', 'pit_command', and 'replay_search' that break the convention, making it somewhat inconsistent.
With 17 tools, the set is well-scoped for an iRacing simulation server. Each tool serves a clear purpose without being excessive or insufficient.
The tool surface covers a broad range of simulation aspects (session, driver, leaderboard, telemetry, etc.), with only minor gaps such as missing dedicated live timing updates or additional race control commands.