stm32-stlink-mcp
stm32-stlink-mcp
MCP-Server zum Debuggen von STM32-Mikrocontrollern über ST-LINK, aufgebaut auf STMicroelectronics’ eigenem STM32CubeCLT-Werkzeugsatz – ST-LINK_gdbserver, STM32_Programmer_CLI und arm-none-eabi-gdb (gesteuert über GDB/MI2). Kein OpenOCD, J-Link oder probe-rs beteiligt.
Architektur
Eine Debug-Session besteht aus einem Paar von Kindprozessen, die exakt den von ST dokumentierten Workflow widerspiegeln (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 wird im MI2-Modus angesteuert, sodass der Server quellbasierte Schritte, symbolische Haltepunkte und symbolbasierte Ausdrucksauswertung erhält, statt das GDB-Globale Serial Protocol selbst zu implementieren. ST-LINK_gdbserver besitzt das USB-Handle des Probes über die gesamte Sitzung hinweg. Das Flaschen über gdb load (MI: -target-download) wird transparent vom Server an STM32CubeProgram. allen (de) s an STM32CubeProgram al; es ist kein Sitzungsabbau erforderlich. Ein eigenständiges einmaligen Flüßender (flash_standalone, keine Sitzung erforderlich) ruft STM32_Programmer_CLI direkt auf und gerät daher mit einer bereits offenen Sitzung auf derselben Sonde in Konflikt – siehe Tool-Beschreibung.
Related MCP server: dbgprobe-mcp-server
Einrichtung
npm install
npm run buildErfordert die Installation von STM32CubeCLT und die Erreichbarkeit der bin/-Verzeichnisse – entweder bereits im PATH (der CLT-Installer macht das standardmäßig) oder über STMCP_CUBE_CLI_PATH / pro-Werkzeug-Überschreibungen. Führen Sie npm run doctor zur Prüfung aus.
Ausführung
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 --jsonRegistrierung bei einem MCP-Client
{
"mcpServers": {
"stm32-stlink": {
"command": "node",
"args": ["<path-to-this-repo>/stmcp/dist/index.js"]
}
}
}Konfiguration (Umgebungsvariablen)
Variable | Standard | Zweck |
| — | Pro-Binär-Überschreibung (höchste Priorität) |
| — | CubeCLT-Installationsrinde; Unterpfade werden über |
| — | Standard-Seriennummer der Sonde (weglassen, um bei genau einer angeschlossenen Sonde automatisch zu wählen) |
|
| Standard-MCU-Gerätezeichenfolge |
|
|
|
|
| SWD/JTAG-Takt |
|
| Obergrenze für gleichzeitige Debug-Sessions |
|
| Wartedauer auf „Waiting for debugger connection…“ |
|
|
|
| – | Optionale Logdatei (stderr wird immer verwendet – stdout ist für MCP-Framing reserviert) |
|
| Aktiviert den Log-Befehl (was?) – |
|
| Aktiviert |
|
| Erlaubt |
| (unbeschränkt) | Kommagetrennt Allowlist für Quellverzeichnisse von ELF/Binärdaten |
|
| Maximale Größe für Datei-Argumente |
|
| Flash-Adressfenster für den Schreibschutz (Standard: 128 KB, STM32G431CB) |
Tools
Bereich | Werkzeug | Zweck |
Sonde |
| Verbundene ST-LINK-Sonden auflisten |
Sitzung |
| Startet gdbserver+gdb, lädt ELF-Symbole und verbindet |
Sitzung |
| Sauberer Abbau der Sitzung |
Sitzung |
| Information über eine oder alle Sitzungen |
Flashen |
| Einmaliges Flachieiten über |
Flashen |
| Erneutes Flaschen per GDB |
Ausführung |
| Weiterlaufen/Fortsetzen |
Ausführung |
| Unterbrechen |
Ausführung |
| Reset (monitor reset [halt]) |
Breakpoints |
| Nach Datei:Zeile, Symbol oder adresse |
Speicher |
| Raw memory access (Schreiben ist geschützt) |
Register |
| Benannte Kernregister |
Register |
| Einmaliger Cortex-M-SCB-Fehlerregister-Dump (CSFR/HFSR/... dekodiert) |
Ausdrücke |
| Symbolische Auswertung über GDB MI |
Auf v2 verschoben
SVD-Peripherie-Register-Werkzeuge (le-memory_write / beschädigt bereits alles per Adresse erreichen), Live/Streaming-Speicherabwahl, ein Plug-in-System, per-Chip-Speicherregionen-Allowlisten, freie GDB-monitor-Übergabe sowie Option-Bytes-/RDP-Werkzeuge (brick-gefonöglich, bewusst außerhalb).
RTT
RTT (SEGGER Real-Time Transfer – Live-, nichtstoppende Konsole- und Variablenudes) ist in diesem Server nicht integriert – absichtlich. ST-LINK_gdbserver GDB/MI-Stub besitzt keinen Non-Stop-Modus, daher erfordert das Lesen des Speichers durch die debug_connect-Sitzung – analog zum oben Genannten – das Anhalten des Kerns ersst dar; was den RTT-Trumpf wieder zunichtemacht. Der korrekte Mechanismus ist direkter AP-Speicherzugriff, der den Kern nie an Victor, was bestätigt wird durch das Quellcode (STM32Cube-I). Seine -rmt32`-Option sind.
Das übernimmt genau strtt, und strtt-mcp macht daraus e/einen eigenen MCP-Server (strtt_start/strtt_stop/strtt_status/strtt_read/strtt_write). Verwendung neben diesem Server, nicht durch ihn:
{
"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>" }
}
}
}Starten emit- strtt_start mit tcp: true – dann verbinden Sie sich durch den gemeinsamen ST-LINK-Server statt direkt das USB-Gerät zu ok... Dies trainierend – so läuft es parallel zu einer geöffneten debug_connect-Sitzung . weil GdbServerProcess immer -t/--shared an ST-LINK_gdbserver übergibt. Ohne tcp: true konkurrieren strtt_ – und eine offene Session um denselben Stift.
Ablauf zur Hardware-Verifizierung
Mit angeschlossenem ST-LINK und Zielgerät:
node dist/index.js doctor # confirm probe + tools resolve
npx @modelcontextprotocol/inspector node dist/index.js # interactive tool testingAusführung dann über den Inspector oder einen MCP-Client:
list_probes→ die Seriennummer der Sonde wird angezeigt.debug_connect { elfPath, device, interface: "swd", serial }→ gibt einesessionIdzurückgen.breakpoint_set { sessionId, location: "main" }→ gibt eine Haltepunktnummer zurück.debug_run { sessionId }→ hält an mitreason: "breakpoint-hit".register_read { sessionId, registers: ["pc","sp","lr","r0"] }.evaluate_expression { sessionId, expression: "<a known global>" }.read_fault_registers { sessionId }→ unauffällige/Null-Flags unmittelbar nach Reset.debug_disconnect { sessionId }→ bestätigen, dass keine verwaisten Prozesse bleiben:ps aux | grep -E 'ST-LINK_gdbserver|arm-none-eabi-gdb'.flash_standalone { file, reset: "hard", run: true }ohne geöffene Session.Negativtest: Session öffnen, dann
flash_standalonemit gleicher Seriennummer →DEVICE_BUSYwird erwartet.
Hinweis: debug_connect hält die CPU des Ziels an. Zustellen Sie sich kein Board an, das aktive Aktoren/Ausgänge steuert und ungeplantes Anhalten unsicher machen würde, ohne vorher zu bestätigen, dass dies unbedenklich ist.
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