Skip to main content
Glama
sbergeron42

gdb-multiarch-mcp

by sbergeron42

gdb-multiarch-mcp

Ein MCP-Server (Model Context Protocol), der KI-Assistenten wie Claude direkten Zugriff auf gdb-multiarch für das Debuggen von Nintendo Switch-Executables ermöglicht, die auf Yuzu oder einer echten Konsole mit GDB-Stub laufen.

Aufbauend auf Ipiano/gdb-mcp fügt dieser Fork Switch-spezifische Debugging-Tools für offset-basierte Breakpoints, Instruction-Patching (NOP/Stub/Replace), Frame-Pointer-Backtraces und Adresslokalisierung hinzu – alles relativ zur Basisadresse des Spiels ($main).

Funktionsweise

Wenn Claude (oder ein beliebiger MCP-Client) switch_start_session aufruft, führt der Server folgende Schritte aus:

  1. Startet gdb-multiarch innerhalb von WSL

  2. Lädt die Switch-Debugging-Befehle (.gdbinit.switch)

  3. Verbindet sich über target extended-remote mit dem GDB-Stub

  4. Wartet auf den Start der Anwendung und hängt sich an diese an

  5. Setzt automatisch $main auf die Basisadresse von cross2_Release.nss

Von dort aus sind alle Standard-GDB-Operationen und Switch-spezifischen Tools über MCP-Tool-Aufrufe verfügbar.

Voraussetzungen

  • Windows mit WSLgdb-multiarch läuft innerhalb von WSL (getestet mit Debian)

  • gdb-multiarch in WSL installiert (sudo apt install gdb-multiarch)

  • Python 3.10+ in WSL

  • Ein GDB-Stub — entweder der integrierte GDB-Stub von Yuzu oder eine Switch mit sys-gdbstub

  • Claude Code (oder ein beliebiger MCP-kompatibler Client)

Installation

1. Installieren Sie gdb-multiarch in WSL

wsl -d Debian
sudo apt install gdb-multiarch

2. Installieren Sie den MCP-Server

Führen Sie unter Windows folgenden Befehl aus:

wsl.exe -d Debian -e bash -c 'export PATH=$HOME/.local/bin:$PATH && pip install --break-system-packages -e /mnt/c/path/to/gdb-multiarch-mcp'

Oder innerhalb von WSL:

pip install -e /mnt/c/path/to/gdb-multiarch-mcp

3. Zu Claude Code hinzufügen

claude mcp add gdb-multiarch -s user -- wsl.exe -d Debian -e bash -c "export PATH=\$HOME/.local/bin:\$PATH && python3 -m gdb_multiarch_mcp"

Oder manuell zu Ihrer .claude.json hinzufügen:

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": [
        "-d", "Debian", "-e", "bash", "-c",
        "export PATH=$HOME/.local/bin:$PATH && python3 -m gdb_multiarch_mcp"
      ]
    }
  }
}

4. Überprüfung

claude mcp list

Sie sollten gdb-multiarch: ... - Connected sehen.

Konfiguration

Setzen Sie diese Umgebungsvariablen in WSL, um die Verbindung anzupassen:

Variable

Standard

Beschreibung

SWITCH_IP

192.168.1.235

IP-Adresse des Switch/Yuzu GDB-Stubs

SWITCH_PORT

22225

GDB-Stub-Port

GDB_PATH

gdb-multiarch

Pfad zur gdb-multiarch-Binary

GDB_MCP_LOG_LEVEL

INFO

Logging-Level (DEBUG, INFO, WARNING, ERROR)

Um diese zu setzen, fügen Sie env zu Ihrer MCP-Konfiguration hinzu:

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": ["..."],
      "env": {
        "SWITCH_IP": "192.168.1.100",
        "SWITCH_PORT": "22225"
      }
    }
  }
}

Verfügbare Tools

Sitzungsverwaltung

Tool

Beschreibung

switch_start_session

Verbindung zum Switch/Yuzu herstellen, an das Spiel anhängen, $main setzen. Rufen Sie dies zuerst auf.

switch_stop_session

Verbindung trennen und aufräumen

Switch-Debugging-Tools

Tool

Beschreibung

switch_break_at

Breakpoint bei $main+offset setzen

switch_no_op

NOP-Instruction bei Offset (schreibt 0xD503201F)

switch_stub

Stub-Funktion bei Offset (schreibt RET / 0xD65F03C0)

switch_replace

Instruction bei Offset durch beliebigen Wert ersetzen

switch_get_pc

PC als Offset relativ zu $main abrufen

switch_localize

Absolute Adresse in Offset relativ zu $main umwandeln

switch_my_bt

Backtrace als absolute Adressen (Frame-Pointer-Walk)

switch_my_bt2

Backtrace mit Offsets relativ zu $main

switch_print_trace

Kombiniert: PC-Offset + LR-Offset + vollständiger Backtrace

switch_xxd

Hex-Dump des Speichers

switch_prepare_rehook

4 ursprüngliche Instructions bei Offset für spätere Wiederherstellung dumpen

Standard-GDB-Tools

Alle Standard-gdb-mcp-Tools sind ebenfalls verfügbar:

Tool

Beschreibung

gdb_execute_command

Beliebigen GDB-Befehl ausführen (CLI oder MI)

gdb_set_breakpoint

Breakpoint bei Funktion/Datei:Zeile/Adresse setzen

gdb_list_breakpoints

Alle Breakpoints auflisten

gdb_delete_breakpoint

Breakpoint nach Nummer löschen

gdb_enable_breakpoint

Breakpoint aktivieren

gdb_disable_breakpoint

Breakpoint deaktivieren

gdb_continue

Ausführung fortsetzen

gdb_step

Hineinspringen (Step into)

gdb_next

Überspringen (Step over)

gdb_interrupt

Laufendes Programm pausieren

gdb_get_backtrace

Standard-GDB-Backtrace

gdb_get_threads

Threads auflisten

gdb_select_thread

Zu Thread wechseln

gdb_select_frame

Stack-Frame auswählen

gdb_get_frame_info

Aktuelle Frame-Informationen

gdb_evaluate_expression

C/C++-Ausdruck auswerten

gdb_get_variables

Lokale Variablen für einen Frame

gdb_get_registers

CPU-Registerwerte

gdb_call_function

Funktion im Zielprozess aufrufen

gdb_get_status

Sitzungsstatus

Fehlerbehebung

"No route to host" bei der Verbindung

WSL-Netzwerke können kompliziert sein. Versuchen Sie Folgendes:

  1. Bestätigen Sie, dass SSH in WSL läuft: sudo service ssh start

  2. Konnektivität testen: nc -vz <switch_ip> 22225

  3. Route hinzufügen, falls erforderlich: sudo ip route add 192.168.1.0/24 via <gateway_ip>

  4. Port-Proxy von Windows PowerShell:

netsh interface portproxy add v4tov4 listenport=22225 listenaddress=127.0.0.1 connectport=22225 connectaddress=<switch_ip>

GDB-Stub antwortet nicht

  • Stellen Sie sicher, dass das Spiel auf Yuzu/Switch läuft, bevor Sie switch_start_session aufrufen

  • Überprüfen Sie, ob der GDB-Stub von Yuzu unter Emulation > Configure > Debug > Enable GDB Stub aktiviert ist

Sitzung läuft bereits

Rufen Sie zuerst switch_stop_session auf und dann erneut switch_start_session.

Credits

  • Ipiano/gdb-mcp von Andrew Stelter — der Upstream-MCP-Server für GDB, auf dem dieses Projekt basiert

  • Coolsonickirby/smash-ultimate-research-setup — die modifizierte .gdbinit.switch und attach.py (Auto-Attach-Skript), die in diesem Projekt verwendet werden

  • blujay — die ursprünglichen .gdbinit.switch-Befehle

  • GradualSyrupprint_addr_setup.py (Adress-zu-Offset-Auflösung)

  • Gdbinit von mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln — die erweiterte .gdbinit-Konfiguration

Lizenz

MIT — siehe LICENSE.

Install Server
A
security – no known vulnerabilities
A
license - permissive license
B
quality - B tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/sbergeron42/gdb-multiarch-mcp'

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