gdb-multiarch-mcp
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を呼び出すと、サーバーは以下の処理を行います:
WSL内で
gdb-multiarchを起動Switch用デバッグコマンド(
.gdbinit.switch)を読み込みtarget extended-remote経由でGDBスタブに接続アプリケーションの起動を待機し、アタッチ
$mainをcross2_Release.nssのベースアドレスに自動設定
これ以降、すべての標準的なGDB操作およびSwitch専用ツールがMCPツール呼び出しを通じて利用可能になります。
前提条件
WindowsとWSL —
gdb-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-multiarch2. 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-mcp3. 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 listgdb-multiarch: ... - Connectedと表示されるはずです。
設定
接続をカスタマイズするには、WSLで以下の環境変数を設定します:
変数 | デフォルト | 説明 |
|
| Switch/Yuzu GDBスタブのIPアドレス |
|
| GDBスタブのポート |
|
| gdb-multiarchバイナリへのパス |
|
| ログレベル (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/Yuzuに接続し、ゲームにアタッチし、 |
| 切断してクリーンアップします |
Switchデバッグツール
ツール | 説明 |
|
|
| オフセット位置の命令をNOP化 ( |
| オフセット位置の関数をスタブ化 ( |
| オフセット位置の命令を任意の値で置換 |
|
|
| 絶対アドレスを |
| 絶対アドレスによるバックトレース (フレームポインタウォーク) |
|
|
| 統合情報: PCオフセット + LRオフセット + 完全なバックトレース |
| メモリの16進ダンプ |
| 後で復元するために、オフセット位置の元の4命令をダンプ |
標準GDBツール
すべての標準的なgdb-mcpツールも利用可能です:
ツール | 説明 |
| GDBコマンド(CLIまたはMI)を実行 |
| 関数/ファイル:行/アドレスにブレークポイントを設定 |
| すべてのブレークポイントを一覧表示 |
| 番号でブレークポイントを削除 |
| ブレークポイントを有効化 |
| ブレークポイントを無効化 |
| 実行を継続 |
| ステップイン |
| ステップオーバー |
| 実行中のプログラムを一時停止 |
| 標準的なGDBバックトレース |
| スレッドを一覧表示 |
| スレッドを切り替え |
| スタックフレームを選択 |
| 現在のフレーム情報 |
| C/C++式を評価 |
| フレームのローカル変数を取得 |
| CPUレジスタ値を取得 |
| ターゲットプロセス内の関数を呼び出し |
| セッションステータス |
トラブルシューティング
接続時に「No route to host」と表示される
WSLのネットワーク設定は複雑な場合があります。以下を試してください:
WSLでSSHが実行されているか確認:
sudo service ssh start接続テスト:
nc -vz <switch_ip> 22225必要に応じてルートを追加:
sudo ip route add 192.168.1.0/24 via <gateway_ip>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コマンドGradualSyrup —
print_addr_setup.py(アドレスからオフセットへの解決)Gdbinit (mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln) — 拡張
.gdbinit設定
ライセンス
MIT — LICENSEを参照してください。
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