io.github.sergioprats/pitwall-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PITWALL_VIN | Yes | The vehicle identification number (VIN) of the BMW vehicle. | |
| PITWALL_ENV_FILE | No | Path to an alternative .env file, if the .env is not located in the current working directory or repository root. | |
| PITWALL_CLIENT_ID | Yes | The client ID of your BMW CarData application, created in the BMW CarData portal. Requires the cardata:api:read scope. | |
| PITWALL_CONTAINER_ID | Yes | The container ID from the bootstrap script, used by the MCP server to read telematics data. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_descriptorsA | Busca en el catalogo telematico local de BMW CarData (294 descriptores). Acepta consultas en espanol o en ingles. NO gasta cuota de la API: el catalogo es un fichero local. Es la unica fuente de verdad sobre que descriptores existen. |
| get_api_quotaA | Cuantas peticiones REST se han gastado hoy, cuantas quedan, cuando se estima que se reinicia la ventana, y el estado de la cache local. Todo se deriva de SQLite: NO gasta cuota. |
| list_vehiclesA | VINs mapeados a la cuenta, con mappedSince y mappingType (PRIMARY o SECONDARY). Fuente: GET /customers/vehicles/mappings. Cache de 30 dias. |
| get_vehicle_basic_dataA | Modelo, serie, motor, fecha de construccion, lista de equipamiento y puStep. Fuente: GET /customers/vehicles/{vin}/basicData. Cache de 30 dias. |
| report_product_update_stepA | Expone puStep, el paso de actualizacion de PRODUCTO. NO es la version de software del vehiculo: ese descriptor no existe en el catalogo de BMW. Verificado en este vehiculo: /basicData NO devuelve puStep, asi que la herramienta explica esa ausencia en vez de sustituirla por otra cosa. |
| get_telematic_dataA | Lee el contenedor de mantenimiento completo: kilometraje, CBS, bateria de 12V, presiones y estado de sueno. Fuente: GET /telematicData. Cache de 12 h. |
| get_vehicle_statusC | Kilometraje y avisos de mantenimiento (CBS). El desglose CBS por partida esta pendiente de verificar contra una respuesta real: la estructura de El desglose por partida esta verificado contra una respuesta real. |
| get_tyre_diagnosisA | Desgaste, defectos, dimensiones, fechas de montaje y fabricacion, temporada, runflat y dibujo. NO devuelve presiones: esas vienen del contenedor telematico. Verificado en este vehiculo: BMW responde con la estructura vacia, y los ceros que trae NO son medidas. Cache de 7 dias. |
| get_maintenance_summaryA | Bloque de texto listo para pegar en un prompt: kilometraje, partidas CBS con km y fecha restantes, presiones de las cuatro ruedas en bar contra su objetivo, y la fecha del dato mas antiguo utilizado. |
| diagnose_software_updateA | Informe acotado sobre por que no llega una Remote Software Upgrade. De las tres condiciones que documenta BMW, CarData solo permite observar una (la bateria de 12V); sobre las otras dos declara 'no observable por CarData'. Trabaja sobre la SERIE del historico local, no sobre una foto puntual. |
| get_fuel_statusA | Deposito en % y litros (+/-6 L segun el catalogo), autonomia, repostajes detectados en el historico local y consumo real desde el ultimo, con su margen de error. Incluye el consumo homologado OBFCM, marcado como lo que es: una cifra de por vida congelada desde la ultima visita al taller, no el consumo actual. Comparte la cache del contenedor (12 h). |
| get_fault_memoryA | Codigos de la memoria de averias del coche, agrupados por centralita, y que codigos han aparecido o desaparecido desde la lectura anterior. Cada codigo solo trae centralita y codigo: sin estado, fecha ni descripcion, y NO se traduce porque el catalogo no dice que significa. Comparte la cache del contenedor (12 h). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Several tools overlap in scope: get_telematic_data and get_vehicle_status both return mileage and CBS data, and get_vehicle_basic_data vs report_product_update_step both touch puStep. The descriptions help somewhat, but agents could easily select the wrong tool when looking for basic maintenance information.
Tool names largely follow a snake_case verb_noun pattern (get_*, list_*, search_*, report_*, diagnose_*). The consistent use of get_ for most data-access operations is clear, though the mix of verbs like report and diagnose with more generic get_/list_ prevents a perfect 5.
12 tools is well within the ideal range for a vehicle-data-focused server. Each tool maps to a distinct BMW CarData concern (catalog search, quota, vehicle mappings, basic data, telematics, tyres, fuel, faults, etc.), and the count feels neither sparse nor bloated.
The toolset covers major vehicle data areas well, but there is no way to fetch arbitrary descriptor values even though search_descriptors exposes a local catalog of 294 descriptors. This creates a notable dead end: agents can discover descriptors but cannot retrieve their actual values through the MCP surface.