stm32-stlink-mcp
stm32-stlink-mcp
MCP-сервер для отладки микроконтроллеров STM32 через ST-LINK, построенный на собственном наборе инструментов STMicroelectronics STM32CubeCLT — ST-LINK_gdbserver, STM32_Programmer_CLI и arm-none-eabi-gdb (управляется через GDB/MI2). Без участия OpenOCD, J-Link или probe-rs.
Архитектура
Сеанс отладки — это пара дочерних процессов, в точности повторяющая документированный рабочий процесс ST (UM2576, «STM32CubeIDE ST-LINK GDB server»):
arm-none-eabi-gdb --interpreter=mi2 --(TCP, target extended-remote)--> ST-LINK_gdbserver --(USB)--> ST-LINK --(SWD)--> STM32arm-none-eabi-gdb работает в режиме MI2, поэтому сервер получает пошаговое выполнение на уровне исходного кода, символьные точки останова и вычисление выражений с учётом символов без дополнительных усилий, вместо того чтобы самостоятельно реализовывать GDB Remote Serial Protocol. ST-LINK_gdbserver владеет USB-дескриптором программатора в течение всего времени жизни сеанса; прошивка через gdb-команду load (в MI — -target-download) прозрачно делегируется сервером инструменту STM32CubeProgrammer, поэтому для перепрошивки не требуется завершать сеанс. Автономная однократная прошивка (flash_standalone, сеанс не требуется) вызывает STM32_Programmer_CLI напрямую и поэтому конфликтует с уже открытым сеансом на том же программаторе — см. описание инструмента.
Related MCP server: dbgprobe-mcp-server
Настройка
npm install
npm run buildТребуется установленный STM32CubeCLT и доступные каталоги bin/ — либо уже в PATH (установщик CLT делает это по умолчанию), либо через STMCP_CUBECLT_PATH / переопределения для отдельных инструментов. Выполните npm run doctor для проверки.
Запуск
node dist/index.js serve # starts the MCP server on stdio (default mode)
node dist/index.js doctor # pre-flight check: tool resolution, connected probes, udev rules
node dist/index.js doctor --jsonРегистрация в MCP-клиенте
{
"mcpServers": {
"stm32-stlink": {
"command": "node",
"args": ["<path-to-this-repo>/stmcp/dist/index.js"]
}
}
}Конфигурация (переменные окружения)
Переменная | По умолчанию | Назначение |
| — | Переопределение пути к конкретному исполняемому файлу (наивысший приоритет) |
| — | Корневой каталог установки CubeCLT; вложенные пути определяются через |
| — | Серийный номер программатора по умолчанию (можно опустить для авто-выбора, если подключён ровно один) |
|
| Строка устройства микроконтроллера по умолчанию |
|
|
|
|
| Тактовая частота SWD/JTAG |
|
| Максимум одновременных сеансов отладки |
|
| Сколько ждать сообщение «Waiting for debugger connection...» |
|
|
|
| — | Необязательный файл журнала (stderr используется всегда независимо от этого — stdout зарезервирован для сообщений MCP) |
|
| Включает возможность стирания |
|
| Включает |
|
| Разрешает |
| (без ограничений) | Корневые каталоги из списка разрешённых (через запятую) для файловых аргументов ELF/bin |
|
| Максимальный размер для файловых аргументов |
|
| Окно адресов флеш-памяти для защиты записи (по умолчанию: 128KB, STM32G431CB) |
Инструменты
Область | Инструмент | Назначение |
Программатор |
| Список подключённых программаторов ST-LINK |
Сеанс |
| Запускает gdbserver+gdb, загружает символы ELF, подключается |
Сеанс |
| Корректное завершение сеанса |
Сеанс |
| Информация о сеансе (одном или всех) |
Прошивка |
| Однократная прошивка через STM32_Programmer_CLI, сеанс не требуется |
Прошивка |
| Перепрошивка через gdb |
Выполнение |
| Возобновить/продолжить |
Выполнение |
| Прервать |
Выполнение |
| Сброс (monitor reset [halt]) |
Выполнение |
| Шаг с обходом/входом/выходом |
Точки останова |
| По адресу вида файл:строка, символу или |
Память |
| Прямой доступ к памяти (запись защищена) |
Регистры |
| Именованные регистры ядра |
Регистры |
| Вывод регистров сбоя Cortex-M SCB одним вызовом (расшифровка CFSR/HFSR/...) |
Выражения |
| Вычисление с учётом символов через gdb MI |
Отложено до v2
Инструменты для регистров периферии SVD (memory_read/write + evaluate_expression уже обращаются ко всему по адресу), живой/потоковый опрос памяти, система плагинов, списки разрешённых областей памяти для каждого чипа, произвольный проброс команд gdb monitor, а также инструменты option-bytes/RDP (способные «окирпичить» устройство; намеренно вне области охвата).
RTT
RTT (SEGGER Real Time Transfer — живая трассировка консоли/переменных без остановки ядра) намеренно не реализован в этом сервере. У GDB/MI-заглушки ST-LINK_gdbserver нет режима non-stop, поэтому чтение памяти через сеанс debug_connect этого сервера требует сначала остановить ядро — что сводит на нет смысл RTT. Правильный механизм — прямой доступ к памяти AP, который никогда не останавливает ядро (подтверждено чтением исходного кода STM32CubeMonitor от ST, в котором используется именно это, а также опцией -r32fast из STM32_Programmer_CLI).
Именно это уже делает strtt, а strtt-mcp оборачивает его в собственный MCP-сервер (strtt_start/strtt_stop/strtt_status/strtt_read/strtt_write). Регистрируйте его рядом с этим сервером, а не через него:
{
"mcpServers": {
"stm32-stlink": { "command": "node", "args": ["<...>/mcp-server/dist/index.js"] },
"strtt": {
"command": "node",
"args": ["<path-to-strtt-repo>/mcp/dist/index.js"],
"env": { "STRTT_BIN": "<path-to-strtt-binary>" }
}
}
}Запускайте strtt_start с параметром tcp: true, чтобы подключаться через общий ST-LINK Server, а не захватывать USB-устройство напрямую — это позволяет ему работать одновременно с открытым сеансом debug_connect здесь, поскольку GdbServerProcess всегда передаёт -t/--shared серверу ST-LINK_gdbserver. Без tcp: true strtt и открытый сеанс отладки будут конкурировать за один и тот же программатор.
Сценарий проверки на оборудовании
При подключённых ST-LINK и целевом устройстве:
node dist/index.js doctor # confirm probe + tools resolve
npx @modelcontextprotocol/inspector node dist/index.js # interactive tool testingЗатем через инспектор или MCP-клиент:
list_probes→ появляется серийный номер программатора.debug_connect { elfPath, device, interface: "swd", serial }→ возвращаетsessionId.breakpoint_set { sessionId, location: "main" }→ возвращает номер точки останова.debug_run { sessionId }→ останавливается сreason: "breakpoint-hit".register_read { sessionId, registers: ["pc","sp","lr","r0"] }.evaluate_expression { sessionId, expression: "<a known global>" }.read_fault_registers { sessionId }→ безобидные/нулевые флаги сразу после сброса.debug_disconnect { sessionId }→ убедитесь, что не осталось осиротевших процессов:ps aux | grep -E 'ST-LINK_gdbserver|arm-none-eabi-gdb'.flash_standalone { file, reset: "hard", run: true }без открытого сеанса.Негативный тест: откройте сеанс, затем вызовите
flash_standaloneна том же серийном номере → ожидайтеDEVICE_BUSY.
Примечание: debug_connect останавливает CPU целевого устройства. Не подключайтесь к плате, которая активно управляет исполнительными механизмами/выходами, в ситуации, когда незапланированная остановка может быть небезопасна, предварительно не убедившись, что это допустимо.
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 gradedqualityBmaintenanceA GDB/MI protocol server based on the MCP protocol, providing remote application debugging capabilities.68MIT
- AlicenseAqualityCmaintenanceStateful MCP server for driving debug probes (J-Link) to flash, debug, and inspect embedded targets. Enables AI agents to perform flash, memory, breakpoint, and ELF/SVD-aware operations conversationally.4111MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for embedded debugging based on probe-rs, providing 22 tools for ARM Cortex-M and RISC-V microcontrollers, including connection, memory operations, breakpoints, flash programming, and RTT communication.2MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides comprehensive debugging capabilities for J-Link debuggers, enabling memory, flash, register, and RTT operations through AI assistants.32MIT
Related MCP Connectors
MCP server for Klever blockchain smart contract development.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
A MCP server built for developers enabling Git based project management with project and personal…
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/phryniszak/stmcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server