Skip to main content
Glama
ZMC1011

Keil5 MCP Server

by ZMC1011

Keil5 MCP Server

Python [License: MIT(LICENSE) ![MCP](https://img.shields.io/badge/MCP-server-7C3A ED.svg) PyPI [RWS Welcome(ONRUTING.md)

English | 中文

Сервер Model Context Protocol (MCP), о которых предоставляет deepseek harness амкнутый цикл правка кода → прошивка → отладка → чтение обратной связи → исправление кода для разработки на STtim32 с помощью Keil MDK.

Вместо ручного переключений между ИDЕ, программатором и терминалом агент может:

  1. Обирать проек Keil и наблюдать за живым програссом компиляции

  2. Получать структурированные ошики из логого UV4 (файл / строика / ко онка / код / сообщение)

  3. Объяснять коды ошибок с причинами и реглагаемыми устранениями

  4. Безопасно редактировать исходные файлы (каждая правка автоматически с будуется)

  5. Прошивать про чиamber via UV4 канап через pyOCD

  6. Отлаживать на аппатных через pyOCD: остон reviewing, шагов, регистры, память, RTT логи

  7. Запускать официальный канала отладки Keil (UV4 + -ин скрипты)


Содержимое


Related MCP server: stm32-mcp

Возможности

  • 27 инструментов MCP, зареистрированных как mcp__<serverName>__<tool> (напр., mc-p__keil__build_project)

  • Прогресс сборки в рельном времени: мониторинг по «хвосту» лога с процентном / текущем файлом / фазой, ограничение чения 95% до завершения линковки

  • Структурированный разор логов UV4: ошибки компиляции (main.c(25:1): error C2065: ...), ошибки линковки (L6218E), Program Size, время сборки

  • База знаний по кодам ошибок: встроенные объйснения и устранения распростраённых кодов armcc/armclang (C2065, L6218E, LMEE, ...).

  • Безопная редактирование исходников: создание .keil-mcp-back-ups/ перед каждым редактированием, замена диапазона строк, поиск по регулярному выважению

  • Официальный путь прошивки: UV4 -f испоьзует алгоритм Flash, настронный в проекже; запасной вариант pyOCD принимает .axf напрямую

  • Аппаратная отладка: управление программатором через pyOCD (connect / halt / resume / step / breakpoint / registers / memorry / RTT)

  • Аренда программатора: ексклюзивный доступ к каждому программатору (asyncio io lock + file lock), чтобы UV4 and pyOCD не конфликтовали за отладодчный порт

  • Граньисполнений: инструменты с «только чтение» вызываются; асинхронно; меняющие инструменты выстраивается в очередь через сессионный замок; отмена безопасно через asyncio.shield

  • Работает бес устновленого Keil: keil_docto активно о отсутствующих компоненом; север при этом всё равно запускается

Требования

Component

Version / Notes

Python

3.10+ (проверено на 3.12)

Keil MDK

UV4.exe (сборка , прошивка , отладка ) — опциональон; требуется для tools о сбоre/or/ашь

pyOCD

устанавливается апри automачески через pip; нужен драйвер программатора (ST-Lick / J-Link / CMSIS-DAP)

Программато реceptor

ST-Link V2/V3, J-Link, CMSIS-DAP, Keil ULINKplus

Целевой пакет

напр.; pyocd pack install stm32f103c8 или повторное испо́зование пакета DFP

Устаноvпа

Из PyPI

python -m venv .venv
.venv/Scripts/activate        # Windows
# source .venv/bin/activate   # Linux / macOS
pip install keil-mcp-server

Пакет готов к публикации на PyPI (pyprojec.toml + LICENS + server.json включены). Если пакет ещё не опубликован, испо́зуйте станиковку из исходников выше.

Из исходников (GitHub)

git clone https://github.com/ZMC1011/dsh-keil-mcp.git
cd ds-keil-mcp
python -m venv .venv
.venv/Scripts/activate                       # Windows
# source .venv/bin/activate                  # Linux / macOS
pip install -e ".[dev]"

Проверка установки

# Environment self-check (UV4.exe, pyocd, connected probes)
python -m keil_mcp_server --check

# List all registered tools
python -m keil_mcp_server --tools

# Run the unit tests
pytest tests -q

Быстрый старт

# 1. Start the MCP server (stdio transport — the MCP client will spawn this)
python -m keil_mcp_server

# 2. In your MCP client, call e.g.:
#    keil_doctor
#    discover_keil_projects { directory: "D:/STM32Projects" }
#    configure_keil_project { project: "D:/STM32Projects/app/app.uvprojx" }
#    build_project { project: "...", target: "Target 1", stream_progress: true }
#    flash_firmware { project: "...", confirm: true }

Настройка MCP-клиента

DeepSeek Harness (DSH)

Согалогally уже onфициальные документы DSH MCP-https): one plugin instance = one MCP server, подключаемый через офильный платgin @deepseekee-ai/dsh-mcp-client. Добавьте это в ваш профиль в cordis.

- insert:
    - id: mcp-keil
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: keil                 # tools appear as mcp__keil__build_project etc.
        transport: stdio
        command: D:/000_Environment/mcp-servers/ds-keil-mcp/.venv/Scripts/python.exe
        args: ['-m', 'keil_mcp_server']
        env:
          KEIL_UV4_PATH: D:/002_software/Keil5/UV4/UV4.exe
          KEIL_PROJECT_DIR: D:/STM32Projects
        # optional: toolCallTimeoutMs: 60000, failOnStartupError: false

Поroверить:

dsh web --dump-config | grep -A3 mcp
# or check session logs for mcp__keil__* calls

Прим.: serverName должен соответствие [AZa-z0-9_-{1,32}` и быть городо уникальным среди активных екземпляров.

Claude Desktop / другие stdio MCP-клиенты

Большинство MCP-клиентов испольуют JSON-конвенцию mcpServers:

{
  "mcpServers": {
    "keil": {
      "command": "D:/000_Environment/mcp-servers/ds-keil-mcp/.venv/Scripts/python.exe",
      "args": ["-m", "keil_mcp_server"],
      "env": {
        "KEIL_UV4_PATH": "D:/002_software/Keil5/UV4/UV4.exe",
        "KEIL_PROJECT_DIR": "D:/STM32Projects"
      }
    }
  }
}

Для исходной копии бес venv подойдёт uv:

{
  "mcpServers": {
    "keil": {
      "command": "uv",
      "args": ["--directory", "D:/path/to/ds-keil-mcp", "run", "keil_mcp_server"]
    }
  }
}

Интрументы

Все 27 инструментов возвраят структурированный JSON. Деструктивные операции (flash / erase) требуют confirm=True.

Сборка и ошибки

Tool

Description

Key parameters → Result

build_project

Компилирует с помощью UV4 -б (или пересборка / очистка); прогресс в реальном времени

project, target?, timeout_seconds?, stream_progress?, clean?, rebuild?{бuild_status, returncode, build_LOG, errors[], summary, progress?}

build_progress

Запрос прогресса текущей сборки

build_id{status, percent, current, phase, current}`

build_cancel

Отмена сборки

build_id{success}

parse_build_errors

Разбор лога UV4 в структурированные ошибки

log_path? or log_content?{errors[], warnings[], summary}

explain_build_error

Объяснение кода ошибки + причины + решения

error_code, message?, file?, line?{explanation, common_causes[], suggested_fixes[]}

Редактирование исходников

Tool

Description

Key params → Result

source_read

Читает исходный файл с номерами строк

file, start_line?, end_line?{content, total_lines, ...}

source_edit

Заменяет диапазон строк; сначала авто-обезопасная копия

file, start_line, end_line, new_content{success, lines_changed, backup_path}

source_search_content

Ищет в исходных файлах (текст или regex)

pattern, path?, files?, regex?{matches[]}

Официальный канал отладки

Tool

Description

Key params → Result

uv4_debug_session

Выполняет UV4 + создаваемой .ini скрипт в фоне (без головы: breakpoint/go/step)

project, target?, ini_path?, breakpoint?, dump_vars?, timeout_seconds?{status, output, returncode}

uv4_debug_dde

Чтение выхода сессии по ид

session_id{output}

Проект и окружение

Tool

Description

Key params → Result

keil_doctor

Проверка окружения: UV4.exe, pyocd, пакеты, подключённые программы

— → {uv4_exists, pyocd_instaled, probes[], status}

discover_keil_projects

Find *.uvprojx in a directory

directory?, recursive?{projects[]}

configure_keil_project

Разбор проектов: targets, device, pack, groups, source files

project, target?{targets[], device, pack_id, source_files[]}

Прошивка

Tool

Description

Key params → Result

flash_firmare

Прошивает через UV4 -ф (предпочтительно) или через pyOCp

project?, image?, backend?, probe_id?, confirm{success, log}

erase_flash

Стирает flash микросхемы (pyOCp erase -c)

confirm, probe_id?, chip?{success, output}

verify_flash

Проеряет соответствием микросхемы заднному образу (pyOCp verify)

image, probe_id?{success, output}

Отладка программатором

Tool

Description

probe_connect / probe_disconnect

Подключение / освобождение программатора pyOCp (отключение освобождает порт для UV4 -ф)

probe_alm / probe_resume / probe_step

Управление ядром

set_breakpoint / continue_target

Установка точка останова по символу или адресу, продолжение выполнения

probe_read_registers

Чтение r0-r15, sp, lr, pc, xpsr

probe_read_mem

Чтение памяти по адресу (hex байты)

read_rtt_log

Чтение SEGGER

RTT (если аустится)

Архитектура

┌──────────────────────────────────────────────────────────────┐
│  MCP Client (DeepSeek Harness / Claude Desktop / ...)        │
│  → tools registered as mcp__keil__*                          │
└──────────────────────────────┬───────────────────────────────┘
                               │ stdio (JSON-RPC 2.0)
┌──────────────────────────────▼───────────────────────────────┐
│  keil-mcp-server (Python, FastMCP)                           │
│                                                              │
│  server.py   — tool registration + Execution Boundary        │
│                (read-only whitelist → concurrent;            │
│                 mutating tools → session lock +              │
│                 asyncio.to_thread + asyncio.shield)          │
│                                                              │
│  tools/      — MCP tool layer (27 tools)                     │
│                                                              │
│  core/       — deliverable layer                             │
│    uv4_runner.py      UV4 -b/-r/-c/-f/-d process runner      │
│    build_progress.py  realtime log tail monitor              │
│    error_parser.py    UV4 log → structured errors + KB       │
│    source_editor.py   read/edit/search + auto-backup         │
│    uv4_debug.py       UV4 -d + .ini script engine            │
│    probe_lease.py     per-probe exclusive lease              │
│    project_utils.py   .uvprojx parser (namespace-tolerant)   │
│                                                              │
│  models.py / config.py / config.yaml                         │
└───────────────┬──────────────────────────────┬───────────────┘
                │                              │
      ┌─────────▼─────────┐          ┌─────────▼─────────┐
      │ Keil MDK (UV4.exe)│          │ pyOCD + probe     │
      │ build/flash/debug │          │ ST-Link/J-Link/   │
      │                   │          │ CMSIS-DAP → chip  │
      └───────────────────┘          └───────────────────┘

Направление зависимостей: MCP зусловие → инскими → ядро → *il MDK / *pyOCD → target chip.

Ключевые проектные решения:

Границы выполнения

(по мотивации McuBuddy): инструменты только для чтения выполняются параллельها; всё осста — сериализуется с помощью asyncio.Lock (бlociroвka на сессию), runs в рабочем потоке (asyncio.to_thread) and з турно защищён от отменить (asyncio.shield).

  • ** Аренда пробника**: UV4 and pyODC не могут совместно использовать отладочный порт. ProbeLease (asyncio lock + filelock) сериализует дост protect; процесс прошивки отсовоt`pyODC police.

  • ** progress в реальном ventи**: фоный пот ostталеживается UV4 log, считывает compiling lines against number исходных files из .uvprojnx (perent limites ago to 95% ago to Build Time Elapsed marker).

  • устойчивосstь к нарушent XML: old projects Keil contrast "n подтвержд. <b498tele498>...</bUseTDR>); The parser project is ремонт before parсинга.

Конфигурация

config.yaml (в компотекте) + environmenal-files:

keil:
  uv4_path: "C:/Keil_v5/UV4/UV4.exe"        # or env KEIL_UV4_PATH
  default_project_dir: ""                   # or env KEIL_PROJECT_DIR
build:
  build_timeout: 300
  stream_progress: true
  tail_flush_wait: 3        # seconds to wait for UV4 log tail flush after exit
error:
  max_errors: 200
source:
  backup_dir: ".keil-mcp-backups"
probe_lease:
  lock_dir: ".keil-mcp-locks"
server:
  transport: "stdio"
  log_level: "INFO"

Сквозной пример рабочего процесса

Типичная сессия агента (имен инструментов покasаны с префиксом DSH mcp__keil__):

1. mcp__keil__keil_doctor                       # environment + probe OK?
2. mcp__keil__discover_keil_projects            # find .uvprojx files
3. mcp__keil__configure_keil_project            # parse targets/device/sources
4. mcp__keil__build_project (stream_progress)   # compile; on failure:
5. mcp__keil__parse_build_errors                # structured errors[]
6. mcp__keil__explain_build_error               # causes + fixes
7. mcp__keil__source_edit                       # fix code (auto-backup)
   → back to 4 until 0 errors
8. mcp__keil__flash_firmware (confirm=true)     # UV4 -f → "Verify OK"
9. mcp__keil__probe_connect + set_breakpoint    # attach debugger
10. mcp__keil__probe_read_registers / _memory   # observe chip state
11. mcp__keil__read_rtt_log                     # firmware logs
    → if logic bug found: source_edit → rebuild → reflash

Правила безопаснเหล่น

Уровень

Операции

По умолчанию

Только чтение

сопоставение чипа, чтение регистров/памяти/символов, логents

безevezттconfirmed

Выполнение

отбовка / возобновение / шаг / сбрosc

prompt

Запись состояния

запись паияти/регется, брейкпойнт, во почни

Поттверждения

Необратимые destroyable operations

crе флеш — / фришивка

явноe подтверждение + план restore

Системный процesiс

Keil build, GDB server

prompt

Principия: сначала собери доказателъства, затем действest; decodeidentificiroвания targeted chip; before flash - confirm the destination / range / image / recovery.

Тестировanie

pytest tests -q        # 11 unit tests: log parsing, source editing, progress, project parsing

Rучные смоук-тесты (in tests/):

python tests/raw_handshake.py    # bare JSON-RPC initialize + tools/list over stdio
python tests/func_test.py        # end-to-end tool calls through the MCP client SDK

Troubleshooting

Symptom

Причина / исправление

Target Device может be canceled при прошивke

pyODC all edges владеет прbe. Висовit "probe disconnков" (of recurrence lease) before флash_фirmware с UV4 бэкн-dom.

/oke_uvPath not настроigeц

Задайте KEIL_UV4_PATH or keil.uv4_path в конфи; and keil_doctor to confirm.

No module named keil_mcp_server

Redукт in venv old path — self cannot do this custom checkout: pip install -e .

"No target connected"

Проверьте подводку прbe / драйвер; keil_doctor вы вводи list a probs.

required pycd pack install

For example pyod pack install stm32f103c8 or укажите pyODC на папку папey Keil

DF P.

План development

  • Published to PyPI and register in MCP re-gistry)

  • MCUBUDDY_TOODSETS-style toggles

  • Use ELF symbols to demonstrate for set_bref.

  • Support RTOS tasks (Free)

  • CICELIB for looks

  • Notes for Linux/масьOS (Keil — Tolcos Windows; pyODD — multi-platform)

Участие в разработке

Вроде asenteres welcome! Пожалуста, первым открыйте issue to обсудить измит, затем отыте PR.

Лицензия

MIT — free to use, modify, distribute with attribution.

A
license - permissive license
Not graded
quality - not tested
C
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
    A
    quality
    B
    maintenance
    Enables AI assistants to interact with STM32 development boards via J-Link debugger using RTT communication, supporting connection, logging, memory operations, and firmware flashing through natural language.
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Code to build, flash, and communicate with STM32 hardware over SWD and serial, including multi-board management, live memory monitoring, and hardware sequences.
    21
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to flash firmware, program memory, modify option bytes, erase chips, reset boards, and capture SWO printf traces for STM32 microcontrollers via STM32CubeCLT.
    12

View all related MCP servers

Related MCP Connectors

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/ZMC1011/dsh-keil-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server