stm32-stlink-mcp
stm32-stlink-mcp
Servidor MCP para depurar microcontroladores STM32 a través de ST-LINK, construido sobre el conjunto de herramientas STM32CubeCLT de STMicroelectronics — ST-LINK_gdbserver, STM32_Programmer_CLI y arm-none-eabi-gdb (controlado mediante GDB/MI2). No se utiliza OpenOCD, J-Link ni probe-rs.
Arquitectura
Una sesión de depuración es un par de procesos hijos, que refleja exactamente el flujo de trabajo documentado por 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 se controla en modo MI2 para que el servidor obtenga paso a paso a nivel de fuente, puntos de interrupción simbólicos y evaluación de expresiones con conocimiento de símbolos de forma gratuita, en lugar de implementar manualmente el Protocolo Serial Remoto de GDB. ST-LINK_gdbserver posee el manejador USB de la sonda durante toda la sesión; el flasheo mediante load de gdb (MI: -target-download) es delegado transparentemente por el servidor a STM32CubeProgrammer, por lo que no se necesita desmontar la sesión para reflashear. Un flasheo independiente de un solo disparo (flash_standalone, sin sesión requerida) invoca directamente a STM32_Programmer_CLI y por lo tanto entra en conflicto con una sesión ya abierta en la misma sonda — consulte la descripción de la herramienta.
Related MCP server: dbgprobe-mcp-server
Instalación
npm install
npm run buildRequiere que STM32CubeCLT esté instalado y que sus directorios bin/ sean accesibles — ya sea en PATH (el instalador de CLT lo hace por defecto) o mediante STMCP_CUBECLT_PATH / anulaciones por herramienta. Ejecute npm run doctor para comprobarlo.
Ejecución
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 --jsonRegistro con un cliente MCP
{
"mcpServers": {
"stm32-stlink": {
"command": "node",
"args": ["<path-to-this-repo>/stmcp/dist/index.js"]
}
}
}Configuración (variables de entorno)
Variable | Default | Propósito |
| — | Anulación por binario (prioridad más alta) |
| — | Raíz de instalación de CubeCLT; subrutas resueltas mediante |
| — | Serial de sonda predeterminado (omitir para auto-seleccionar si hay exactamente una conectada) |
|
| Cadena de dispositivo MCU predeterminada |
|
|
|
|
| Reloj SWD/JTAG |
|
| Límite de sesiones de depuración concurrentes |
|
| Cuánto tiempo esperar por "Waiting for debugger connection..." |
|
|
|
| — | Archivo de registro opcional (stderr siempre se usa independientemente — stdout está reservado para el marco MCP) |
|
| Habilita la ruta de borrado |
|
| Habilita |
|
| Permite que |
| (sin restricciones) | Raíces de lista blanca separadas por comas para argumentos de archivos ELF/bin |
|
| Tamaño máximo para argumentos de archivos |
|
| Ventana de direcciones de flash para la protección de escritura (predeterminado: 128KB, STM32G431CB) |
Herramientas
Dominio | Herramienta | Propósito |
Sonda |
| Listar sondas ST-LINK conectadas |
Sesión |
| Iniciar gdbserver+gdb, cargar símbolos ELF, conectar |
Sesión |
| Cierre limpio de sesión |
Sesión |
| Información de sesión (una o todas) |
Flash |
| Flasheo de un solo disparo mediante STM32_Programmer_CLI, sin necesidad de sesión |
Flash |
| Reflashear mediante |
Ejecución |
| Reanudar/continuar |
Ejecución |
| Interrumpir |
Ejecución |
| Reiniciar (monitor reset [halt]) |
Ejecución |
| Paso por encima/dentro/fuera |
Puntos de interrupción |
| Por archivo:línea, símbolo o |
Memoria |
| Acceso a memoria cruda (la escritura está protegida) |
Registros |
| Registros de núcleo con nombre |
Registros |
| Volcado de registros de fallo SCB Cortex-M en una sola llamada (CFSR/HFSR/... decodificados) |
Expresiones |
| Evaluación con conocimiento de símbolos mediante gdb MI |
Diferido a v2
Herramientas de registros periféricos SVD (memory_read/write + evaluate_expression ya alcanzan todo por dirección), sondeo de memoria en vivo/streaming, un sistema de plugins, listas blancas de regiones de memoria por chip, paso directo arbitrario de monitor de gdb, y herramientas de option-bytes/RDP (capaces de bloquear el dispositivo, intencionalmente fuera de alcance).
RTT
RTT (SEGGER Real Time Transfer — trazado en vivo de consola/variables sin detención) está intencionalmente no implementado en este servidor. El stub GDB/MI de ST-LINK_gdbserver no tiene modo no-stop, por lo que leer memoria a través de la sesión debug_connect de este servidor requiere detener el núcleo primero — lo que contradice el propósito de RTT. El mecanismo correcto es el acceso directo a memoria AP que nunca detiene el núcleo (confirmado al leer el código fuente de STM32CubeMonitor de ST, que usa exactamente esto, y por -r32fast de STM32_Programmer_CLI).
Eso es lo que strtt ya hace, y strtt-mcp lo envuelve como su propio servidor MCP (strtt_start/strtt_stop/strtt_status/strtt_read/strtt_write). Regístrelo junto a este servidor en lugar de a través de él:
{
"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>" }
}
}
}Inicie strtt_start con tcp: true para conectarse a través del servidor ST-LINK compartido en lugar de reclamar el dispositivo USB directamente — esto permite que se ejecute concurrentemente con una sesión debug_connect abierta aquí, ya que GdbServerProcess siempre pasa -t/--shared a ST-LINK_gdbserver. Sin tcp: true, strtt y una sesión de depuración abierta competirán por la misma sonda.
Manual de verificación de hardware
Con un ST-LINK y un objetivo conectados:
node dist/index.js doctor # confirm probe + tools resolve
npx @modelcontextprotocol/inspector node dist/index.js # interactive tool testingLuego, mediante el inspector o un cliente MCP:
list_probes→ aparece el serial de la sonda.debug_connect { elfPath, device, interface: "swd", serial }→ devuelve unsessionId.breakpoint_set { sessionId, location: "main" }→ devuelve un número de punto de interrupción.debug_run { sessionId }→ se detiene conreason: "breakpoint-hit".register_read { sessionId, registers: ["pc","sp","lr","r0"] }.evaluate_expression { sessionId, expression: "<a known global>" }.read_fault_registers { sessionId }→ indicadores benignos/cero justo después del reinicio.debug_disconnect { sessionId }→ confirme que no hay procesos huérfanos:ps aux | grep -E 'ST-LINK_gdbserver|arm-none-eabi-gdb'.flash_standalone { file, reset: "hard", run: true }sin ninguna sesión abierta.Prueba negativa: abra una sesión, luego llame a
flash_standaloneen el mismo serial → espereDEVICE_BUSY.
Nota: debug_connect detiene la CPU del objetivo. No se conecte a una placa que esté manejando activamente actuadores/salidas de manera que una detención no planificada sea insegura, sin antes confirmar que está bien.
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