Servidor MCP de solo lectura sobre la API BMW CarData: mantenimiento, neumaticos y bateria de 12V. No afiliado a BMW AG.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
git clone https://github.com/sergioprats/pitwall-mcpTools overview
# pitwall-mcp <!-- mcp-name: io.github.sergioprats/pitwall-mcp --> Servidor MCP local, **de solo lectura**, sobre la API BMW CarData de un BMW X1 sDrive18i (U11, gasolina, España). > **Proyecto no afiliado a BMW AG.** "BMW" y "CarData" son marcas de sus > respectivos propietarios. Este proyecto no está respaldado, patrocinado ni > revisado por BMW. Le da a un asistente acceso a los datos de mantenimiento del coche — kilometraje, avisos CBS, presiones de neumáticos, batería de 12 V — sin que pueda tocar nada del vehículo, y sin agotar la cuota diaria de la API. ## Qué se siente al usarlo Le preguntas al asistente *"¿qué le toca al coche?"* y contesta con esto. Es una respuesta real, de la lectura del 16 de septiembre de 2026, recortada: ``` RESUMEN DE MANTENIMIENTO Kilometraje: 48.731 km Proximo servicio en: 13460 km OJO: hay partidas CBS que BMW ya no marca como OK; no te fies solo de la cifra global: Frenos delanteros [PENDING]: 1.600 km. Partidas CBS: 5 - Frenos delanteros [PENDING]: 1.600 km - Aceite de motor [OK]: 14.000 km, hasta 2027-07 - Inspeccion tecnica (ITV) [OK]: hasta 2027-01 AVISO: conditionBasedServicesCount dice 9 pero el desglose trae 5 partidas. BMW no documenta la diferencia y no se explica aqui: se dan los dos numeros. Prevision orientativa (calculo propio sobre los km de BMW, no un dato de BMW): Ritmo usado: 570 km/semana (media semanal que da BMW); tu historico local, 8 dias: 420. Se usa el mayor para no quedarse corto. - Frenos delanteros: 1.600 km, unas 2,8 semanas, hacia el 05-10-2026. Bateria de 12V: Voltaje: 13.92 V (2026-09-14 13:49 UTC (hace 40 horas)) Dato mas antiguo utilizado: 2026-09-14 13:49 UTC (hace 40 horas). Procedencia: cache local. Lectura realizada: 2026-09-16 06:09 UTC. ``` Fíjate en lo que hace esa respuesta además de dar números: **avisa de que la cifra global esconde lo urgente**, traduce "1.600 km" a una fecha, **admite que dos cifras de BMW no cuadran** en vez de elegir una, y dice de cuándo es el dato más viejo que ha usado. ## ¿Te sirve a ti? - **Sí** si tienes un BMW con CarData activado y quieres saber **qué cambia con el tiempo**: cuándo vence cada cosa de verdad, si una rueda pierde aire, qué códigos de avería han aparecido desde la última vez. - **No** si buscas traducir códigos de avería, borrarlos o tocar cualquier ajuste del coche. Eso es terreno de un diagnóstico por OBD, no de esta API. - **Ten en cuenta** que es de uso ocasional. El dato crudo ya lo enseña la pantalla del coche; lo que aquí se añade es la serie, la previsión y los cambios. --- ## Qué hace y qué no hace **Sí:** - Lee datos telemáticos, datos básicos del vehículo y el diagnóstico de neumáticos, siempre a través de caché. - Guarda un histórico local en SQLite, para poder razonar sobre **series** y no sobre fotos puntuales. - Dice de dónde viene cada dato: timestamp de BMW, timestamp de la lectura, y si es API, caché o histórico. - Cuando un dato no existe, explica **por qué** no existe. **No, y no lo hará:** - Ninguna herramienta escribe, manda, activa ni insinúa que puede actuar sobre el coche. CarData es una API de lectura. - Ninguna herramienta crea ni borra contenedores. Eso vive en un script que se lanza a mano. - No hay `get_software_version`: **ese descriptor no existe** en el catálogo de BMW. Lo único disponible es `puStep`, el paso de actualización de producto. --- ## La cuota manda La API REST de CarData está limitada a **50 peticiones cada 24 h y por cuenta**. Pasarse devuelve `403 CU-429` hasta el día siguiente, y el contador es de BMW: incluye cualquier otra aplicación que use la misma cuenta. Por eso: - Toda petición pasa obligatoriamente por caché y por un contador local. - El tope local por defecto es de **20 peticiones/día**, para dejar margen. - Con un TTL de 12 h en el contenedor de mantenimiento, el uso normal son **2 peticiones al día**. - `search_descriptors` y `get_api_quota` **no gastan cuota nunca**. Consulta `get_api_quota` antes de encadenar llamadas. | Dato | TTL | |---|---| | `/telematicData` (contenedor de mantenimiento) | 12 h | | `/smartMaintenanceTyreDiagnosis` | 7 días | | `/basicData` | 30 días | | `/mappings` | 30 días | --- ## Por qué esto y no la app oficial La app te enseña el estado de hoy. Esto guarda cada lectura, así que puede comparar. Cuatro cosas concretas que salen de ahí, todas vistas en este coche: - **Cuándo, no solo cuánto.** La app dice "frenos delanteros, 1.600 km". El resumen dice unas 2,8 semanas, hacia el 5 de octubre, al ritmo real de uso, y avisa si una partida vence antes por kilómetros que por fecha. - **La cifra global no basta, y aquí se ve.** Con los frenos en `PENDING` a 1.900 km, `serviceDistance.next` marcaba 13.560. Quedarse con ese número habría escondido lo único urgente, así que toda partida que BMW no marque `OK` sale con un aviso propio. - **Neumáticos sin confundir el calor con una fuga.** El objetivo de presión de BMW no es fijo: se ha visto en 250 kPa en frío y en 290 con el neumático caliente. Comparar la presión de hoy con un objetivo de otro momento da un diferencial falso, así que cada rueda se compara con su pareja de eje **en la misma lectura**, que comparte temperatura y carga. - **Qué cambia en la memoria de averías.** El 18 de septiembre, entre dos lecturas, entraron 11 códigos y salieron otros 11: apareció una centralita entera y desaparecieron tres. Eso no se ve en ningún sitio si no guardas la lectura anterior. Y lo que **no** aporta, para que no haya malentendidos: - **No traduce los códigos de avería.** Su significado no está en el catálogo de BMW; inventarlo sería peor que no darlo. Para eso está una herramienta de diagnóstico por OBD, del estilo de BimmerLink, que además los lee con su descripción y puede borrarlos. - **No escribe nada.** Ni codificación, ni resets, ni una sola orden al coche. Eso es terreno de BimmerCode y de un adaptador OBD, con el coche delante. - **No inventa lo que no llega.** Un dato ausente, uno presente pero vacío y un `-NA-` son tres cosas distintas, y las herramientas las distinguen en vez de enseñar un cero. De los 42 descriptores del contenedor, en la última lectura llegaron 28 con valor y 14 vacíos. --- ## Herramientas | Herramienta | Gasta cuota | Estado | |---|---|---| | `search_descriptors(query, limit, include_electric)` | no | **funciona** | | `get_api_quota()` | no | **funciona** | | `list_vehicles()` | sí (1/mes con caché) | **funciona** | | `get_vehicle_basic_data()` | sí (1/mes con caché) | **funciona** | | `report_product_update_step()` | sí (comparte caché con `basicData`) | funciona, pero este vehículo **no devuelve `puStep`** | | `get_telematic_data()` | sí (2/día con caché) | **funciona** | | `get_vehicle_status()` | sí (comparte caché) | **funciona** | | `get_tyre_diagnosis()` | sí (1/semana con caché) | funciona, pero este vehículo **devuelve la estructura vacía** | | `get_maintenance_summary()` | sí (compuesta) | **funciona** | | `diagnose_software_update()` | sí (compuesta, comparte caché) | **funciona**, con veredicto acotado | | `get_fuel_status()` | sí (comparte caché) | **funciona** | | `get_fault_memory()` | sí (comparte caché) | **funciona**; no traduce los códigos | Las dos herramientas marcadas con una reserva **funcionan y declaran la ausencia**: no rellenan el hueco con ceros ni con un valor plausible. `puStep` no llega en `/basicData` para este coche, y el diagnóstico de neumáticos vuelve con etiquetas y ceros de relleno que no son medidas. `get_vehicle_status()` y `get_maintenance_summary()` muestran también los avisos **Check Control**, y añaden una línea `OJO` cuando alguna partida CBS deja de estar en `OK`. La cifra global de próximo servicio no basta: con los frenos delanteros en `PENDING` a 1.900 km, marcaba 13.560. `get_maintenance_summary()` añade además, **sin gastar peticiones**, una previsión en semanas y fechas y la tendencia de presiones por eje. Las dos salen del histórico local, y el porqué de cada una está en [Por qué esto y no la app oficial](#por-qué-esto-y-no-la-app-oficial). La previsión usa la media semanal de BMW o la del histórico, la mayor de las dos, para no quedarse corta, y avisa cuando una partida vence antes por kilómetros que por fecha. Dos herramientas más con datos que la app oficial no enseña: - **`get_fuel_status()`**: depósito y autonomía, los repostajes que detecta en el histórico y el consumo real desde el último. Solo da el consumo a partir de 300 km, y siempre con su margen, porque el aforador puede desviarse hasta 6 L. Muestra también el consumo homologado (OBFCM), pero como lo que es: una cifra de por vida que en este coche no se mueve desde octubre de 2024, no el consumo de hoy. - **`get_fault_memory()`**: la memoria de averías que el coche guarda para el taller, agrupada por centralita, y **qué códigos aparecen o desaparecen entre lecturas**. No traduce ningún código: su significado no está en el catálogo de BMW, y darlo sería inventarlo. `diagnose_software_update()` razona sobre la **serie** del histórico, no sobre una foto. De las tres condiciones que BMW documenta para no ofrecer una actualización, CarData sólo permite observar una, y la herramienta declara las otras dos como `NO OBSERVABLE POR CARDATA` en lugar de razonar como si las hubiera descartado. Deja fuera cualquier voltaje de 13,5 V o más, porque eso es el alternador cargando y no dice nada de la batería en reposo. Si no le quedan al menos dos observaciones en reposo, responde **SIN VEREDICTO** y dice qué le falta. Y como `isIgnitionOn` llega vacío, avisa de que parte de cualquier pendiente puede ser sólo motor en marcha frente a motor parado, no una batería descargándose. --- ## El informe local El histórico que va guardando el servidor no se ve en ningún sitio: las herramientas contestan con la foto del momento, no con la serie. Para mirar la serie hay una página HTML que se genera a ma
What people ask about pitwall-mcp
What is sergioprats/pitwall-mcp?
+
sergioprats/pitwall-mcp is tools for the Claude AI ecosystem. Servidor MCP de solo lectura sobre la API BMW CarData: mantenimiento, neumaticos y bateria de 12V. No afiliado a BMW AG. It has 0 GitHub stars and its last recorded update is dated 2026-09-19.
How do I install pitwall-mcp?
+
You can install pitwall-mcp by cloning the repository (https://github.com/sergioprats/pitwall-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is sergioprats/pitwall-mcp safe to use?
+
Our security agent has analyzed sergioprats/pitwall-mcp and assigned a Trust Score of 87/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains sergioprats/pitwall-mcp?
+
sergioprats/pitwall-mcp is maintained by sergioprats. The last recorded GitHub activity is dated 2026-09-19, with 0 open issues.
Are there alternatives to pitwall-mcp?
+
Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.
Deploy pitwall-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/sergioprats-pitwall-mcp)<a href="https://claudewave.com/repo/sergioprats-pitwall-mcp"><img src="https://claudewave.com/api/badge/sergioprats-pitwall-mcp" alt="Featured on ClaudeWave: sergioprats/pitwall-mcp" width="320" height="64" /></a>More Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.
🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
Use Claude Code, Codex, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)