Developer
MCP Server
The TrackOut MCP server lets AI agents access your garage data through the Model Context Protocol. No local install required -- just configure your agent with a URL and API key.
Setup
Prerequisites
- An API key from your TrackOut Settings page
Configure your agent
Add TrackOut to your agent's MCP configuration. For Claude Code, add to .claude/mcp.json:
{
"mcpServers": {
"trackout": {
"type": "url",
"url": "https://trackout.app/api/mcp",
"headers": {
"Authorization": "Bearer tok_..."
}
}
}
}
Replace tok_... with your API key from Settings.
Available tools
Once connected, the following tools are available to your agent:
Cars
| Tool | Description |
|---|---|
list_cars | List all cars in your garage with nickname, make, model, trim, year, and mileage |
get_car | Get full details for a specific car including trim, color, VIN, and price |
create_car | Create a new car with nickname, make, model, trim, year, color, VIN, and mileage |
update_car | Update any field on an existing car by car ID |
Parts
| Tool | Description |
|---|---|
list_parts | List parts, optionally filtered by car |
create_part | Create a new part with name, manufacturer, part number, purchase details, and status |
Service records
| Tool | Description |
|---|---|
list_service_records | List service records, optionally filtered by car |
create_service_record | Create a new service record with name, type, mileage, cost, date, notes, and an optional linked receipt ID |
list_service_types | List valid service type values (use before creating records) |
update_service_record | Update any field on an existing service record by ID |
Installers
| Tool | Description |
|---|---|
list_installers | List your saved service shops and installers |
create_installer | Add a new installer by name |
Track sessions
| Tool | Description |
|---|---|
list_track_sessions | List track sessions, optionally filtered by car |
list_track_days | List track days, optionally filtered by car |
create_track_day | Create a new track day event with car, date, and track name |
create_track_session | Create a track session within a track day with lap times and count |
Maintenance
| Tool | Description |
|---|---|
list_maintenance_rules | List recurring maintenance rules, optionally filtered by car |
create_maintenance_rule | Create a new maintenance rule with interval by miles or months |
list_maintenance_reminders | List service reminders with optional car filter and completion status |
complete_maintenance_reminder | Mark a service reminder as complete, optionally linking a service record |
Tires
| Tool | Description |
|---|---|
list_tires | List tires with brand, size, heat cycles, and mileage, optionally filtered by car |
Documents
| Tool | Description |
|---|---|
upload_document | Upload a file (base64-encoded) and receive a fileId, storageId, URL, and file metadata |
scan_receipt | Start or poll AI receipt extraction for an uploaded receipt file or existing receipt ID |
create_records_from_receipt | Create multiple service records from reviewed receipt line items in one call |
Receipt workflow
The MCP receipt flow mirrors the TrackOut UI:
- Call
upload_documentwith a PDF or receipt image. - Call
scan_receiptwith the returnedfileIdto start extraction. - Poll
scan_receiptwith either the samefileIdor the returnedreceiptIduntil the receipt is ready for review. - Create linked records with either:
create_service_recordfor a single record and passreceiptIdcreate_records_from_receiptfor a multi-line-item receipt import
create_service_record accepts both receiptId and receiptDocumentId. receiptDocumentId is a compatibility alias for receiptId.
Example usage
Once configured, you can ask your agent things like:
- "List my cars"
- "Show service records for my M3"
- "Log an oil change for my 911 at 42,000 miles, cost $85"
- "What tires are installed on my track car?"
- "Add a new installer called Track Performance Shop"
- "Create a new car named 'Track Beast' -- 2024 Porsche 911 GT3"
- "Add an oil filter part for my M3"
- "Set up a recurring oil change every 5,000 miles"
- "Upload this receipt, scan it, and show me the extracted line items"
- "Create linked service records from this scanned receipt for my M3"
The agent will use the appropriate MCP tools to read or write your TrackOut data.
HTTP API
The MCP server calls the TrackOut HTTP API under the hood. If you want to build your own integration, you can call these endpoints directly:
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/cars | List cars |
| GET | /api/v1/cars/get?id=... | Get car details |
| GET | /api/v1/service-records?carId=... | List service records |
| POST | /api/v1/service-records | Create service record, optionally linked to a receipt |
| GET | /api/v1/service-types | List service type enum values |
| GET | /api/v1/installers | List installers |
| POST | /api/v1/installers | Create installer |
| GET | /api/v1/track-sessions?carId=... | List track sessions |
| POST | /api/v1/cars | Create car |
| PATCH | /api/v1/cars | Update car (requires carId in body) |
| GET | /api/v1/parts?carId=... | List parts |
| POST | /api/v1/parts | Create part |
| GET | /api/v1/track-days?carId=... | List track days |
| POST | /api/v1/track-days | Create track day |
| POST | /api/v1/track-sessions | Create track session |
| GET | /api/v1/maintenance-rules?carId=... | List maintenance rules |
| POST | /api/v1/maintenance-rules | Create maintenance rule |
| GET | /api/v1/maintenance-reminders?carId=...&includeComplete=... | List reminders |
| POST | /api/v1/maintenance-reminders/complete | Complete a reminder |
| PATCH | /api/v1/service-records | Update service record (requires id in body) |
| POST | /api/v1/documents/upload | Upload document (base64 content) and receive fileId |
| POST | /api/v1/receipts/scan | Start or poll receipt extraction with a fileId or receiptId |
| POST | /api/v1/receipts/create-records | Create multiple linked service records from a scanned receipt |
| GET | /api/v1/tires?carId=... | List tires |
All endpoints require an Authorization: Bearer tok_... header. The base URL for direct API calls is https://site.trackout.app.
curl -H "Authorization: Bearer tok_..." \
https://site.trackout.app/api/v1/cars
Error responses
All error responses are JSON shaped { "error": "<message>" } with an appropriate HTTP status code. The MCP route passes user-facing 4xx messages through unchanged; 5xx responses are mapped to a generic Upstream service temporarily unavailable. message on the MCP client so internal errors never leak through a tool call.
| Status | When you'll see it |
|---|---|
| 400 | Missing or invalid body/query fields |
| 401 | Missing, invalid, or revoked API token |
| 403 | Token is valid but lacks access to the resource |
| 404 | Resource does not exist or is not owned by your account |
| 413 | Request body (or decoded upload) exceeds the limit |
| 429 | Rate limit exceeded — back off and retry |
| 5xx | Upstream error — logged server-side, generic message on the client |
Upload limits
The upload_document tool (and POST /api/v1/documents/upload) enforces:
- Encoded request body: up to 14 MB
- Decoded file: up to 10 MB
- Allowed content types:
application/pdf,image/jpeg,image/png,image/webp,image/heic,image/heif,image/gif,text/plain
Requests that exceed these limits fail fast with a 4xx before bytes are persisted.
Security notes
- Authorization is driven exclusively by your API token — the MCP session ID plays no role in authorization. Every request is independently authenticated.
- The MCP endpoint is intentionally per-request stateless: the
mcp-session-idheader is echoed back to clients for their own continuity but is never used as a server-side lookup key. Two users cannot collide by sharing a session ID. - API tokens are SHA-256 hashed at rest. Revoke a compromised token from the API keys page; revocation takes effect on the next request.
- Rotate tokens periodically and prefer creating one token per agent/tool so you can revoke narrowly.