Skip to main content
Glama
sbergeron42

gdb-multiarch-mcp

by sbergeron42

gdb-multiarch-mcp

ClaudeのようなAIアシスタントに、YuzuやGDBスタブを備えた実機で動作するNintendo Switchの実行ファイルをデバッグするためのgdb-multiarchへの直接アクセスを提供するMCP(Model Context Protocol)サーバーです。

Ipiano/gdb-mcpをベースに構築されたこのフォークは、オフセットベースのブレークポイント、命令パッチ適用(NOP/スタブ/置換)、フレームポインタによるバックトレース、およびアドレスのローカライズ(すべてゲームのベースアドレス$mainを基準とする)といったSwitch専用のデバッグツールを追加しています。

機能

Claude(または任意のMCPクライアント)がswitch_start_sessionを呼び出すと、サーバーは以下の処理を行います:

  1. WSL内でgdb-multiarchを起動

  2. Switch用デバッグコマンド(.gdbinit.switch)を読み込み

  3. target extended-remote経由でGDBスタブに接続

  4. アプリケーションの起動を待機し、アタッチ

  5. $maincross2_Release.nssのベースアドレスに自動設定

これ以降、すべての標準的なGDB操作およびSwitch専用ツールがMCPツール呼び出しを通じて利用可能になります。

前提条件

  • WindowsとWSLgdb-multiarchはWSL内で実行されます(Debianでテスト済み)

  • gdb-multiarch — WSLにインストール済みであること(sudo apt install gdb-multiarch

  • Python 3.10+ — WSL内

  • GDBスタブ — Yuzuの内蔵GDBスタブ、またはsys-gdbstubを搭載したSwitch

  • Claude Code(またはMCP互換クライアント)

インストール

1. WSLへのgdb-multiarchのインストール

wsl -d Debian
sudo apt install gdb-multiarch

2. MCPサーバーのインストール

Windowsから以下を実行:

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'

またはWSL内から:

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

3. Claude Codeへの追加

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"

または.claude.jsonに手動で追加:

{
  "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. 確認

claude mcp list

gdb-multiarch: ... - Connectedと表示されるはずです。

設定

接続をカスタマイズするには、WSLで以下の環境変数を設定します:

変数

デフォルト

説明

SWITCH_IP

192.168.1.235

Switch/Yuzu GDBスタブのIPアドレス

SWITCH_PORT

22225

GDBスタブのポート

GDB_PATH

gdb-multiarch

gdb-multiarchバイナリへのパス

GDB_MCP_LOG_LEVEL

INFO

ログレベル (DEBUG, INFO, WARNING, ERROR)

これらを設定するには、MCP設定にenvを追加します:

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

利用可能なツール

セッション管理

ツール

説明

switch_start_session

Switch/Yuzuに接続し、ゲームにアタッチし、$mainを設定します。最初にこれを呼び出してください。

switch_stop_session

切断してクリーンアップします

Switchデバッグツール

ツール

説明

switch_break_at

$main+offsetにブレークポイントを設定

switch_no_op

オフセット位置の命令をNOP化 (0xD503201Fを書き込み)

switch_stub

オフセット位置の関数をスタブ化 (RET / 0xD65F03C0を書き込み)

switch_replace

オフセット位置の命令を任意の値で置換

switch_get_pc

$mainを基準としたオフセットとしてPCを取得

switch_localize

絶対アドレスを$mainを基準としたオフセットに変換

switch_my_bt

絶対アドレスによるバックトレース (フレームポインタウォーク)

switch_my_bt2

$mainを基準としたオフセットによるバックトレース

switch_print_trace

統合情報: PCオフセット + LRオフセット + 完全なバックトレース

switch_xxd

メモリの16進ダンプ

switch_prepare_rehook

後で復元するために、オフセット位置の元の4命令をダンプ

標準GDBツール

すべての標準的なgdb-mcpツールも利用可能です:

ツール

説明

gdb_execute_command

GDBコマンド(CLIまたはMI)を実行

gdb_set_breakpoint

関数/ファイル:行/アドレスにブレークポイントを設定

gdb_list_breakpoints

すべてのブレークポイントを一覧表示

gdb_delete_breakpoint

番号でブレークポイントを削除

gdb_enable_breakpoint

ブレークポイントを有効化

gdb_disable_breakpoint

ブレークポイントを無効化

gdb_continue

実行を継続

gdb_step

ステップイン

gdb_next

ステップオーバー

gdb_interrupt

実行中のプログラムを一時停止

gdb_get_backtrace

標準的なGDBバックトレース

gdb_get_threads

スレッドを一覧表示

gdb_select_thread

スレッドを切り替え

gdb_select_frame

スタックフレームを選択

gdb_get_frame_info

現在のフレーム情報

gdb_evaluate_expression

C/C++式を評価

gdb_get_variables

フレームのローカル変数を取得

gdb_get_registers

CPUレジスタ値を取得

gdb_call_function

ターゲットプロセス内の関数を呼び出し

gdb_get_status

セッションステータス

トラブルシューティング

接続時に「No route to host」と表示される

WSLのネットワーク設定は複雑な場合があります。以下を試してください:

  1. WSLでSSHが実行されているか確認: sudo service ssh start

  2. 接続テスト: nc -vz <switch_ip> 22225

  3. 必要に応じてルートを追加: sudo ip route add 192.168.1.0/24 via <gateway_ip>

  4. Windows PowerShellからポートプロキシ:

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

GDBスタブが応答しない

  • switch_start_sessionを呼び出すに、Yuzu/Switchでゲームが実行されていることを確認してください

  • YuzuのGDBスタブがEmulation > Configure > Debug > Enable GDB Stubで有効になっていることを確認してください

セッションが既に実行中

先にswitch_stop_sessionを呼び出し、その後再度switch_start_sessionを呼び出してください。

クレジット

  • Ipiano/gdb-mcp (Andrew Stelter) — 本プロジェクトのベースとなっているGDB用アップストリームMCPサーバー

  • Coolsonickirby/smash-ultimate-research-setup — 本プロジェクトで使用されている修正版.gdbinit.switchおよびattach.py(自動アタッチスクリプト)

  • blujay — オリジナルの.gdbinit.switchコマンド

  • GradualSyrupprint_addr_setup.py (アドレスからオフセットへの解決)

  • Gdbinit (mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln) — 拡張.gdbinit設定

ライセンス

MIT — 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