Car_Diagnostic_AI
Majster-AI — автомобильный UDS-диагностический агент на базе MCP
Car_Diagnostic_AI — также известный как CDA и Majster-AI — это диагностический агент, который подключает большую языковую модель к блокам управления автомобиля через UDS/CAN, к локальному индексу руководств по ремонту и к живому веб-поиску. Три возможности представлены в виде независимых серверов Model Context Protocol и оркеструются агентом LangGraph с жёстким шлюзом human-in-the-loop для всего, что записывает данные в автомобиль.
Разработан и протестирован на Land Rover Freelander 2 (2010, 2.2 TD4).
Поставляется с веб-интерфейсом Cyber-HUD: интерактивное 3D-шасси, контакты модулей которого расположены в реальных координатах автомобиля, датчики телеметрии в реальном времени и шлюз перетаскивания для авторизации любых записей в автомобиль.

⚠️ По умолчанию работает с симулятором и в режиме READ_ONLY
Свежий клон не может передавать данные на реальную шину и не может записывать в автомобиль. Оба действия требуют осознанного изменения конфигурации. Прочтите docs/SAFETY.md перед подключением к автомобилю, который вам дорог.
Что он на самом деле делает
you> The car goes into limp mode on the motorway. What's wrong with it?
[agent.plan] Calling: read_dtc
[car.read_dtc] Reading DTCs from ECM
[agent.plan] Calling: read_live_data
[agent.plan] Calling: search_manual
majster> Three codes stored in the ECM, and I think two of them are one fault:
P0299 (confirmed) — turbocharger underboost
P2015 (confirmed) — intake manifold runner position sensor
P0401 (pending) — EGR flow insufficient
Live data backs up the underboost: manifold pressure reads 101 kPa at idle
against 100 kPa barometric, so the turbo isn't building any boost at all.
P0299 and P2015 together on a DW12 is a familiar pattern — both are air-path
faults and the swirl-flap linkage sits right next to the actuator. The
manual (fl2_engine.pdf, page 412) says actuator vacuum should reach 0.6 bar
at idle; that's the measurement that would separate a seized actuator rod
from a boost leak, and it's a five-minute check before anyone buys a turbo.
The pending EGR code I'd leave alone for now — it hasn't confirmed, and a
fouled EGR is a plausible consequence of running underboost rather than a
separate fault.Обратите внимание, чего он не делал: не гадал и не предлагал стереть коды.
Related MCP server: Codex MCP Server
Архитектура
+--------------------------------------------------+
| Cyber-HUD (React · Three.js · Framer Motion) |
+---------------------------+----------------------+
| WS /ws/diagnostics
+---------------------------+----------------------+
| FastAPI (telemetry · agent · HITL) |
+---------------------------+----------------------+
|
+--------------+------------+
| LangGraph agent |
| Claude Opus 5 / Ollama |
+-------------+-------------+
|
+-----------------+-----------------+
| | |
+---------v------+ +--------v-------+ +-------v--------+
| Car_Interface | | RAG_Workshop | | Web_Search |
| MCP | | MCP | | MCP |
+---------+------+ +--------+-------+ +-------+--------+
| | |
UDS over CAN local manuals Tavily / DuckDuckGoCar_Interface_MCP —
python-can+udsoncan. Читает DTC, живые данные и сырые DID с любого модуля; стирает коды только через процедуру подтверждения. Пять взаимозаменяемых бэкендов плюс встроенный симулятор ECU.RAG_Workshop_MCP — ChromaDB поверх ваших собственных PDF-руководств по ремонту. Работает полностью на устройстве; каждый ответ содержит цитату с указанием файла и страницы.
Web_Search_MCP — Tavily с запасным вариантом DuckDuckGo без ключа, с приоритетом форумов Land Rover.
Оркестратор — READ_ONLY по умолчанию; каждая запись приостанавливает граф и ждёт человека.
Полные подробности в docs/ARCHITECTURE.md.
Установка
git clone https://github.com/Mati83mon/Car_Diagnostic_Ai.git
cd Car_Diagnostic_Ai
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[all,dev]" # or: pip install -r requirements.txt
cp .env.example .env # then edit itНа Termux или другом ARM-устройстве, где тяжёлые дополнения не собираются, пропустите их — проект спроектирован так, чтобы работать без них:
pip install -e ".[car,mcp,agent,web]"Проверка работоспособности
majster-ai doctorТакже доступен как cda и car-diagnostic-ai, или python main.py <command>.
Настройка
Всё находится в .env. Значения по умолчанию безопасны, поэтому пустой файл —
это допустимый файл. Наиболее важные настройки:
# --- safety -----------------------------------------------------------
MAJSTER_WRITE_ENABLED=false # master switch. Leave false.
MAJSTER_REQUIRE_APPROVAL=true # human-in-the-loop. Leave true.
# --- vehicle interface -------------------------------------------------
MAJSTER_CAN_BACKEND=virtual # virtual|socketcan|slcan|serial|j2534|rfcomm
MAJSTER_CAN_CHANNEL=can0
MAJSTER_CAN_BITRATE=500000
# --- LLM ----------------------------------------------------------------
ANTHROPIC_API_KEY=sk-ant-... # Claude Opus 5; falls back to Ollama if unset
MAJSTER_OLLAMA_MODEL=qwen2.5:7b-instruct
# --- web search ---------------------------------------------------------
TAVILY_API_KEY=tvly-... # optional; DuckDuckGo is used without itСм. .env.example — все параметры с пояснениями.
Использование
Интерактивный режим
majster-ai chatРазовый запуск
majster-ai ask "why is the DPF light on?"Прямые инструменты, без LLM
majster-ai dtc --module ECM # read fault codes
majster-ai dtc --all # scan every module
majster-ai live RPM COOLANT_TEMP MAF # read live data
majster-ai scan # discover which ECUs answer
majster-ai clear --module ECM # write: prompts for approvalРуководства по ремонту
cp ~/manuals/*.pdf data/manuals/
majster-ai ingest
majster-ai search "swirl flap removal procedure"Руководства индексируются и ищутся локально. Ничего не загружается.
Веб-интерфейс
cd frontend && npm install && npm run build # once
majster-ai web # http://127.0.0.1:8000Для разработки фронтенда запустите dev-сервер Vite параллельно:
majster-ai web # terminal 1 — API on :8000
cd frontend && npm run dev # terminal 2 — UI on :5173, proxying to :8000Интерфейс транслирует телеметрию в реальном времени, показывает состояние
модулей на 3D-шасси и приостанавливается для жеста перетаскивания перед любой
записью. Клик по коду неисправности перемещает камеру к компоненту, на который
он указывает — код шасси, например C0034, ведёт к датчику переднего правого
колеса, а не к модулю ABS в моторном отсеке.
majster-ai web по умолчанию привязывается к 127.0.0.1. Всё, что может
достичь порта, может попросить агента предложить запись; шлюз одобрения
по-прежнему действует, но на запрос ответит тот, кто там находится. Используйте
--host 0.0.0.0 только в сети, которой вы управляете.
Как MCP-серверы для другого клиента
majster-ai serve car_interface # stdio transportКонфигурация для Claude Desktop и других клиентов — в docs/ARCHITECTURE.md.
Модель безопасности
Четыре независимых уровня находятся между моделью и автомобилем. Запись должна пройти через все.
Уровень | Гарантия |
1. Главный переключатель |
|
2. Токен-квитирование | Первый вызов всегда завершается ошибкой и возвращает сводку о последствиях плюс одноразовый токен, привязанный к хэшу точных аргументов и истекающий через пять минут. Одобрение для ECM не может стереть модуль ABS. |
3. Пауза для человека | Граф приостанавливается через |
4. Системный промпт | Сообщает модели, что сделают остальные три уровня. Считается самым слабым уровнем, потому что так и есть. |
Браузер — просто ещё один утверждающий. Слайдер отправляет одно логическое значение; токен подтверждения создаётся и используется внутри серверного процесса и никогда не появляется ни в одном кадре WebSocket. Клиент может ответить на вопрос, который сервер решил задать, — но не может задать свой и не может создать учётные данные, выполняющие запись.

Уровень 2 находится в сервисе за MCP-сервером, поэтому он защищает автомобиль, даже когда управляет не этот агент.
========================================================================
WRITE OPERATION - HUMAN APPROVAL REQUIRED
========================================================================
Operation : clear_dtc
Module : ECM (Engine Control Module - 2.2 TD4)
Scope : ALL stored DTCs in this module
Risk : MEDIUM Reversible: NO
Will erase 3 code(s):
- P0299-00 Turbocharger/Supercharger A Underboost Condition
- P2015-00 Intake Manifold Runner Position Sensor/Switch Circuit
- P0401-00 Exhaust Gas Recirculation Flow Insufficient Detected
Consequences:
! Freeze-frame data captured when the fault occurred will be lost.
! Readiness monitors reset; the vehicle may fail an emissions test.
! Clearing does not repair anything. If the fault is still present
the code will return.
========================================================================
Type 'yes' to authorise, anything else to decline:Полные подробности в docs/SAFETY.md.
Оборудование
Бэкенд | Интерфейс | Платформа |
| нет — встроенный симулятор | где угодно |
| Tactrix Openport 2.0 | Linux, Windows |
| USB2CAN, CANable, PiCAN | Linux |
| CANable/CANtact (прошивка slcan) | Linux, macOS, Windows |
| ELM327 / OBDLink через Bluetooth | Linux, Termux |
Freelander 2 использует ISO 15765-4 CAN на 500 кбит/с с 11-битными идентификаторами, на контактах OBD-II 6 (CAN-H) и 14 (CAN-L).
Настройка для каждого, плюс Termux, Raspberry Pi и какие адаптеры ELM327 действительно работают: docs/HARDWARE.md.
О данных в этом репозитории
Только два диагностических адреса на любом автомобиле законодательно закреплены
и поэтому достоверны: адреса силового агрегата 0x7E0/0x7E8 и
0x7E1/0x7E9. Всё остальное во встроенной карте модулей получено от
сообщества и поставляется с пометкой verified: false.
То же самое относится к масштабированию живых данных: PID из SAE J1979 являются стандартными и помечены как проверенные; DID производителей являются проприетарными, и ни один не поставляется вообще, потому что уверенно-неверное число — это худший возможный результат диагностического инструмента.
Чтобы выяснить, что верно для вашего автомобиля:
majster-ai scanЗатем запишите, что ответило, в data/modules.json. См.
docs/FREELANDER2.md.
Разработка
make install-dev
make check # black --check, flake8, pytest
make test-cov # coverage reportВесь набор тестов работает против внутрипроцессного симулятора ECU — без оборудования, без API-ключа, без сети:
736 passed, 1 skippedСимулятор — это реальная реализация UDS, а не заглушка, поэтому логика повторов, кодек DTC, инструменты MCP и шлюз HITL работают с тем же потоком байтов, который они увидят на реальной шине. Инъекция сбоев делает пути нестабильной шины детерминированными:
ecm.inject_faults(drop_next=2) # two silent timeouts, then fine
ecm.inject_faults(pending_next=3) # three NRC 0x78, then the answer
ecm.inject_faults(busy_next=1) # one NRC 0x21 busyRepeatRequestCI запускает lint, набор тестов на Python 3.10/3.11/3.12, инварианты безопасности как отдельную задачу и интеграционную задачу, которая запускает MCP-серверы как реальные подпроцессы.
Структура проекта
majster_ai/
├── agent/ LangGraph orchestrator, HITL, LLM providers
├── mcp_servers/
│ ├── car_interface/ UDS/CAN — the safety gate lives in service.py
│ ├── rag_workshop/ local manual retrieval
│ └── web_search/ Tavily / DuckDuckGo
├── web/ FastAPI + /ws/diagnostics, WebSocketApprover
├── config.py settings and the two safety gates
└── cli.py
frontend/ React + Three.js Cyber-HUD (see frontend/README.md)
tests/ 736 tests, all hardware-free
docs/ ARCHITECTURE, SAFETY, HARDWARE, FREELANDER2Отказ от ответственности
Этот проект предназначен для образовательных и исследовательских целей. Он не является сертифицированным диагностическим инструментом и не заменяет оборудование производителя или квалифицированного техника.
Авторы не несут ответственности за повреждение автомобиля, повреждение блоков управления, неудачный ремонт, аннулирование гарантии или травмы, возникшие в результате использования этого программного обеспечения. Вы несёте ответственность за понимание того, что делает любая команда, прежде чем она попадёт на шину вашего автомобиля. Если вы не уверены — не отправляйте её.
Отказ от ответственности
Проект служит исключительно образовательным и исследовательским целям. Автор не несёт ответственности за любые повреждения автомобиля, повреждения блоков управления (ECU) или телесные повреждения, возникшие в результате использования этого программного обеспечения.
Всегда убеждайтесь, что вы знаете, какие команды — особенно команды ЗАПИСИ — отправляются на шину CAN вашего автомобиля.
Лицензия
MIT — см. LICENSE.
Руководства по ремонту защищены авторским правом и не распространяются вместе
с этим проектом. data/manuals/ находится в gitignore; приобретайте свои
законным путём.
This server cannot be installed
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 Servers
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to interact with vehicle CAN bus and OBD-II data through a simulated ECU environment. Provides tools for reading frames, decoding messages via DBC files, monitoring signals, and querying automotive diagnostics without requiring physical hardware.13MIT
- FlicenseBqualityDmaintenanceConnects AI assistants to a local Codex engine for performing deep, project-level code reviews and automated refactoring. It enables context-aware bug fixes and multi-file analysis through a standardized bridge between modern AI clients and local development environments.42
- FlicenseAqualityDmaintenanceEnables LLMs to automatically diagnose coding errors through codebase search, test execution, and live debugger integration (DAP/V8 CDP). Provides a secure, policy-gated environment for investigating failures while preventing destructive operations.9
- FlicenseAqualityBmaintenanceAn MCP server that exposes vehicle-diagnostic and CAN-bus domain logic as agent tools, with a LangGraph orchestration layer and a human-in-the-loop eval harness.4
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Sovereign Agent OS — Persistent Memory, Governance & Compliance for AI Agents.
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/Mati83mon/Car_Diagnostic_Ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server