Skip to main content
Glama
phryniszak

stm32-stlink-mcp

by phryniszak

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)-->  STM32

arm-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 build

Erfordert 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 --json

Registrierung bei einem MCP-Client

{
  "mcpServers": {
    "stm32-stlink": {
      "command": "node",
      "args": ["<path-to-this-repo>/stmcp/dist/index.js"]
    }
  }
}

Konfiguration (Umgebungsvariablen)

Variable

Standard

Zweck

STMCP_GDBSERVER_PATH / STMCP_PROGRAMMER_CLI_PATH / STMCP_ARM_GDB_PATH

Pro-Binär-Überschreibung (höchste Priorität)

STMCP_CUBE_CLT_PATH

CubeCLT-Installationsrinde; Unterpfade werden über STM32CubeCLT_metadata.sh -j aufgelöst

STMCP_STLINK_SERIAL

Standard-Seriennummer der Sonde (weglassen, um bei genau einer angeschlossenen Sonde automatisch zu wählen)

STMCP_DEFAULT_DEVICE

STM32G431CBTx

Standard-MCU-Gerätezeichenfolge

STMCP_DEFAULT_INTERFACE

swd

probe bzw. jtag

STMCP_DEFAULT_FREQUENCY_KHZ

4000

SWD/JTAG-Takt

STMCP_MAX_SESSIONS

1

Obergrenze für gleichzeitige Debug-Sessions

STMCP_GDBSERVER_READY_TIMEOUT_MS

8000

Wartedauer auf „Waiting for debugger connection…“

STMCP_LOG_LEVEL

info

error | warn | info | debug

STMCP_LOG_FILE

Optionale Logdatei (stderr wird immer verwendet – stdout ist für MCP-Framing reserviert)

STMCP_ALLOW_FLASH_ERASE

false

Aktiviert den Log-Befehl (was?) – Erase; ermöglicht den Grundlösch-Pfad

STMCP_ALLOW_MEMORY_WRITE

true

Aktiviert memory_write

STMCP_ALLOW_FLASH_ADDRESS_WRITE

false

Erlaubt memory_write, das Flash-Adressfenster anzuschreiben (normalerweise gesperrt – stattdessen die Flash-Tools verwenden)

STMCP_ALLOWED_FILE_PATHS

(unbeschränkt)

Kommagetrennt Allowlist für Quellverzeichnisse von ELF/Binärdaten

STMCP_MAX_FILE_SIZE_BYTES

16777216

Maximale Größe für Datei-Argumente

STM32CP_FLASH_RANGE_START / STMCP_FLASH_RANGE_END

0x08000000 / 0x08020000

Flash-Adressfenster für den Schreibschutz (Standard: 128 KB, STM32G431CB)

Tools

Bereich

Werkzeug

Zweck

Sonde

list_probes

Verbundene ST-LINK-Sonden auflisten

Sitzung

debug_connect

Startet gdbserver+gdb, lädt ELF-Symbole und verbindet

Sitzung

debug_disconnect

Sauberer Abbau der Sitzung

Sitzung

debug_session_status

Information über eine oder alle Sitzungen

Flashen

flash_standalone

Einmaliges Flachieiten über STM32_Programmer_CLI, ohne Session erforderlich

Flashen

flash_load_in_session

Erneutes Flaschen per GDB load innerhalb einer offenen Sitzung

Ausführung

debug_run

Weiterlaufen/Fortsetzen

Ausführung

debug_halt

Unterbrechen

Ausführung

debug_reset

Reset (monitor reset [halt])

Breakpoints

breakpoint_set / breakpoint_clear / breakpoint_list

Nach Datei:Zeile, Symbol oder adresse

Speicher

memory_read / memory_write

Raw memory access (Schreiben ist geschützt)

Register

register_read / register_write

Benannte Kernregister

Register

read_fault_registers

Einmaliger Cortex-M-SCB-Fehlerregister-Dump (CSFR/HFSR/... dekodiert)

Ausdrücke

evaluate_expression

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 testing

Ausführung dann über den Inspector oder einen MCP-Client:

  1. list_probes → die Seriennummer der Sonde wird angezeigt.

  2. debug_connect { elfPath, device, interface: "swd", serial } → gibt eine sessionId zurückgen.

  3. breakpoint_set { sessionId, location: "main" } → gibt eine Haltepunktnummer zurück.

  4. debug_run { sessionId } → hält an mit reason: "breakpoint-hit".

  5. register_read { sessionId, registers: ["pc","sp","lr","r0"] }.

  6. evaluate_expression { sessionId, expression: "<a known global>" }.

  7. read_fault_registers { sessionId } → unauffällige/Null-Flags unmittelbar nach Reset.

  8. debug_disconnect { sessionId } → bestätigen, dass keine verwaisten Prozesse bleiben: ps aux | grep -E 'ST-LINK_gdbserver|arm-none-eabi-gdb'.

  9. flash_standalone { file, reset: "hard", run: true } ohne geöffene Session.

  10. Negativtest: Session öffnen, dann flash_standalonemit gleicher Seriennummer → DEVICE_BUSY wird 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.

Install Server
A
license - permissive license
A
quality
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
    C
    maintenance
    Stateful 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.
    41
    11
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP 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.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides comprehensive debugging capabilities for J-Link debuggers, enabling memory, flash, register, and RTT operations through AI assistants.
    32
    MIT

View all related MCP servers

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…

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/phryniszak/stmcp'

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