Skip to main content
Glama

Majster-AI — автомобильный UDS-диагностический агент на базе MCP

Python Protocol AI MCP UI Safety License

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-шасси, контакты модулей которого расположены в реальных координатах автомобиля, датчики телеметрии в реальном времени и шлюз перетаскивания для авторизации любых записей в автомобиль.

Majster-AI Cyber-HUD

⚠️ По умолчанию работает с симулятором и в режиме 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 / DuckDuckGo
  • Car_Interface_MCPpython-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. Главный переключатель

MAJSTER_WRITE_ENABLED=false по умолчанию. Записи отклоняются сразу, токен не выдаётся, запрос не показывается. Агент не может это изменить.

2. Токен-квитирование

Первый вызов всегда завершается ошибкой и возвращает сводку о последствиях плюс одноразовый токен, привязанный к хэшу точных аргументов и истекающий через пять минут. Одобрение для ECM не может стереть модуль ABS.

3. Пауза для человека

Граф приостанавливается через interrupt(). Отказ, пустой ответ, закрытый stdin, упавший интерфейс, неинтерактивная сессия — всё это означает нет.

4. Системный промпт

Сообщает модели, что сделают остальные три уровня. Считается самым слабым уровнем, потому что так и есть.

Браузер — просто ещё один утверждающий. Слайдер отправляет одно логическое значение; токен подтверждения создаётся и используется внутри серверного процесса и никогда не появляется ни в одном кадре WebSocket. Клиент может ответить на вопрос, который сервер решил задать, — но не может задать свой и не может создать учётные данные, выполняющие запись.

Approval gate

Уровень 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.


Оборудование

Бэкенд

Интерфейс

Платформа

virtual

нет — встроенный симулятор

где угодно

j2534

Tactrix Openport 2.0

Linux, Windows

socketcan

USB2CAN, CANable, PiCAN

Linux

slcan

CANable/CANtact (прошивка slcan)

Linux, macOS, Windows

rfcomm

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 busyRepeatRequest

CI запускает 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; приобретайте свои законным путём.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    13
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Connects 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.
    4
    2
  • F
    license
    A
    quality
    D
    maintenance
    Enables 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
  • F
    license
    A
    quality
    B
    maintenance
    An 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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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