jpskill.com
🛠️ 開発・MCP コミュニティ

debug-mcp-stdio

Node.jsのstdio MCP ServerをVS Codeでデバッグする際に、launch.jsonの設定やinspector起動コマンドを提供し、断点不具合やポート競合などのトラブルシューティングを支援するSkill。

📜 元の英語説明(参考)

用于在 VS Code 中对 **Node.js 的 stdio MCP Server** 做断点调试(Attach 到 Node Inspector)。只要用户提到:MCP stdio、@modelcontextprotocol/inspector、node --inspect/--inspect-brk、VS Code attach 调试、断点不命中、sourcemap、调 build/dist 构建产物、端口 9229 冲突/被占用、launch.json 配置等,都要使用本 skill。输出应直接给出可复制粘贴的 launch.json 片段、可运行的 inspector 启动命令(含换端口版本)、以及按优先级排序的排障清单。

🇯🇵 日本人クリエイター向け解説

一言でいうと

Node.jsのstdio MCP ServerをVS Codeでデバッグする際に、launch.jsonの設定やinspector起動コマンドを提供し、断点不具合やポート競合などのトラブルシューティングを支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o debug-mcp-stdio.zip https://jpskill.com/download/9671.zip && unzip -o debug-mcp-stdio.zip && rm debug-mcp-stdio.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9671.zip -OutFile "$d\debug-mcp-stdio.zip"; Expand-Archive "$d\debug-mcp-stdio.zip" -DestinationPath $d -Force; ri "$d\debug-mcp-stdio.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して debug-mcp-stdio.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → debug-mcp-stdio フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

stdio MCP 断点デバッグ (VS Code Attach + MCP Inspector + Node --inspect)

目的

ユーザーが VS Code で安定してブレークポイントにヒット させ、stdio 経由で実行される MCP Server (通常は npx @modelcontextprotocol/inspector ... で起動) をデバッグできるようにし、ポートの競合、sourcemap の欠落、ブレークポイントがグレー表示されるなどの問題が発生した場合に、明確なトラブルシューティングパスを提供すること。

Quick Start (最短用法)

すでにビルド成果物 (例: build/internal/index.js または dist/index.js) があり、stdio MCP Server にブレークポイントを設定したい場合:

  • sourcemap が有効になっていることを確認 (ビルド成果物の隣に .map ファイルが表示される)
  • MCP プロジェクトのルートディレクトリにある .vscode/launch.jsonattach 構成を新規追加
  • VS Code でこの Attach デバッグを最初に起動
  • ターミナルで実行 (ポートは launch.json と一致させる):
npx -y @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

もし「ブレークポイントに到達しない / ブレークポイントがグレー表示される」場合は、まず以下のように変更してください:

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

原理 (わかりやすい説明)

  • Node の --inspect: ローカルマシンに「デバッグポート」(デフォルトは 9229) を開き、VS Code が接続してブレークポイント/ステップ実行を制御できるようにします。
  • MCP Inspector: 「一時的な MCP クライアント + UI」のようなもので、サーバーを起動し、stdio を介してサーバーと通信します。
  • sourcemap: 「ビルド後の JS」を「あなたの TS ソースコード」にマッピングし、TS でブレークポイントを正確に設定できるようにします。

出力形式 (常にこのテンプレートに従ってユーザーに提供してください)

以下の 3 つの内容を出力してください (すべてコピー&ペースト可能であること):

【1) VS Code Attach 構成 (launch.json スニペット)】
<完全な configuration オブジェクトを提供し、configurations 配列に追加するようにユーザーに促します。port/outFiles が一致する必要があることを明確にします>

【2) 起動コマンド (Inspector + Node --inspect)】
- デフォルト版: <コマンド 1 つ>
- 安定版 (最初の行で一時停止): <コマンド 1 つ>
- ポート変更版 (9229 が使用中の場合): <コマンド 1 つ>

【3) トラブルシューティングリスト (可能性の高い順に)】
1. ...
2. ...
3. ...

重要な制約 ("見た目は正しいがうまくいかない" を避ける)

  • ポートは一致する必要がある: launch.jsonport == --inspect=PORT の PORT。
  • Attach を先に実行してからプロセスを起動: 最初の実行では --inspect-brk を使用することを推奨します。「起動が速すぎてブレークポイントを逃す」ことを避けるためです。
  • ビルド成果物をデバッグする場合は sourcemap が必須: そうでない場合は、コンパイルされた JS でしかデバッグできず、TS ブレークポイントはほぼ確実に正確ではありません。

全体的な流れ (ステップバイステップで実行)

flowchart TD
  A[エントリポイントと出力ディレクトリを確認<br/>build/ dist/ 内の index.js] --> B[sourcemap が生成されていることを確認<br/>*.map が見つかること]
  B --> C[launch.json の attach 構成を追加<br/>port/outFiles を一致させる]
  C --> D[VS Code で Attach を最初に起動<br/>waiting 状態]
  D --> E[inspector コマンドを実行してサーバーを起動<br/>--inspect-brk を推奨]
  E --> F{ブレークポイントに到達?}
  F -- はい --> G[デバッグを開始: ステップ実行/変数/コールスタック]
  F -- いいえ --> H[リストに従ってトラブルシューティング: ポート/パス/outFiles/map/スペルミス]
  H --> D

ステップ 0: エントリポイントと出力ディレクトリを確認する (パスの記述ミスを避ける)

まず、「どの js ファイルを実行するのか」を明確にします:

ls -la build dist 2>/dev/null

一般的なエントリポイント:

  • build/internal/index.js (注意: 多くの人が internel と記述しますが、これはスペルミスです)
  • build/index.js
  • dist/index.js

ステップ 1: sourcemap を有効にする ("ビルド成果物を直接デバッグする" ための前提条件)

1.1 TypeScript (tsconfig)

TS プロジェクトの場合、tsconfig.json に少なくとも以下が含まれている必要があります:

{
  "compilerOptions": {
    "sourceMap": true,
    "inlineSources": true
  }
}

1.2 パッケージャー/ビルドツール (使用しているものを選択)

核となる原則は一言: ビルド出力には .map が含まれている必要がある

  • tsup: sourcemap: true を設定
  • esbuild: コマンドまたは設定に sourcemap: true (または --sourcemap) を追加
  • rollup: output.sourcemap: true
  • webpack: 適切な devtool を設定 (例: source-map)
  • tsc 直接出力: outDir.js.map があることを確認

自己チェック (.map が表示されるはずです):

find build dist -maxdepth 4 -name "*.map" -print 2>/dev/null | head

.map が見つからない場合は、すぐにブレークポイントを設定せずに、sourcemap を有効にして再構築してください。

ステップ 2: .vscode/launch.json に attach 構成を新規追加する (最も重要)

MCP プロジェクトのルートディレクトリにある .vscode/launch.json を新規作成/修正し、以下のコードを 新しい構成として 追加します (既存の構成を上書きしないでください)。

通常、変更する必要があるのは 2 箇所のみです:

  • port: 使用するデバッグポート (デフォルトは 9229)
  • outFiles: 出力ディレクトリが build/dist/ のどちらであるか
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach: MCP stdio (Node Inspector)",
      "type": "node",
      "request": "attach",
      "port": 9229,
      "protocol": "inspector",
      "restart": true,
      "timeout": 30000,
      "sourceMaps": true,
      "smartStep": true,
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"],
      "cwd": "${workspaceFolder}",
      "outFiles": [
        "${workspaceFolder}/build/**/*.js",
        "${workspaceFolder}/dist/**/*.js"
      ]
    }
  ]
}

ステップ 3: VS Code で Attach デバッグを起動する

  • Run and Debug パネルを開く
  • Attach: MCP stdio (Node Inspector) を選択
  • 実行をクリック (または F5 を押す)

この時点で、VS Code は「接続待ち」状態になります。

ステップ 4: Inspector コマンドを実行してサーバーを起動する (stdio モード)

4.1 最も一般的 (推奨)

npx -y @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

4.2 最初のデバッグでより安定 (最初にこれを使用することを推奨)

--inspect-brk を使用すると、Node は最初の行で停止し、attach が成功したことを確認してから実行を続行できます:

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

4.3 pnpm / yarn を使用する場合

pnpm dlx @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js
yarn dlx @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

ステップ 5: よくある問題 (この順序でトラブルシューティング)

5.1 ポートが使用中 (9229 が使用できない)

現象:

  • ターミナルにポートが使用中であるというメッセージが表示される
  • または VS Code の attach が失敗する/間違ったプロセスに接続される

確認 (macOS / Linux でよく使用される):

lsof -nP -iTCP:9229 -sTCP:LISTEN

対処法 (2 つから 1 つを選択):

  • ポートを変更: たとえば、9230 に変更します
    • launch.jsonport9230 に変更します
    • コマンドも --inspect=9230 (または --inspect-brk=9230) に変更します
  • ポートを使用しているプロセスを終了: 終了したいプロセスであることを確認してから kill します

5.2 ブレークポイントがグレー表示される / 停止しない (最も一般的)

まず、次の 3 つのことを行います:

  • --inspect-brk で最初に安定させる: プロセスを最初の行で停止させます
  • .map が実際に存在することを確認: 出力ディレクトリに *.map が必要です
  • outFiles が出力ディレクトリをカバーしていることを確認: たとえば、実際には build/ にある場合は、${workspaceFolder}/build/**/*.js を含める必要があります

追加のチェックポイント (1 つでも確認できれば sourcemap が有効になっています):

  • ビルド成果物の .js の末尾に //# sourceMappingURL=xxx.js.map のようなものが含まれている
  • VS Code の Call Stack に、圧縮された JS の山ではなく、ソースコードのパスが表示される

5.3 Inspector は起動できるが、サーバーが一瞬で終了する

考えられる原因:

  • エントリファイルのパスが間違っている (build/internel/index.js vs build/internal/index.js のようなスペルミスが最も一般的)
  • サーバーの起動時にエラーが発生してすぐに終了する (ターミナルの出力を確認)

まず、次の 2 つの最小限のアクションを実行します:

node -p "require('fs').existsSync('build/internal/index.js')"
node --inspect-brk=9229 build/internal/index.js

2 番目のコマンドが実行できる場合は、問題が inspector コマンドまたは渡した引数にある可能性が高くなります。

Examples (例)

例 1: 標準的なビルド成果物のデバッグ (build 出力)

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

例 2: ポートの競合、9230 に変更

  1. launch.jsonport9230 に変更
  2. コマンド:
npx -y @modelcontextprotocol/inspector node --inspect-brk=9230 build/internal/index.js

最終手段 (ビルド成果物をデバッグしたくない/できない場合)

sourcemap を一時的に処理できない (またはパッケージ化が複雑すぎる) 場合は、「開発モードでソースコードを直接実行する」方法でデバッグできます (プロジェクトでこのような起動が許可されている場合)。

たとえば、tsx を使用します:

npx -y tsx --inspect-brk=9229 src/index.ts

これは inspector を使用しません。最初に「ブレークポイント/ロジック/フロー」自体に問題がないことを確認し、後でビルド成果物の sourcemap デバッグチェーンを補完するのに適しています。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

stdio MCP 断点调试(VS Code Attach + MCP Inspector + Node --inspect)

目标

让用户能够在 VS Code 里稳定命中断点,调试通过 stdio 运行的 MCP Server(通常由 npx @modelcontextprotocol/inspector ... 启动),并在遇到端口占用、sourcemap 缺失、断点灰色等问题时有清晰的排查路径。

Quick Start(最短用法)

你已经有构建产物(例如 build/internal/index.jsdist/index.js),要对 stdio MCP Server 打断点:

  • 确保 sourcemap 开启(构建产物旁边能看到 .map 文件)
  • 在 MCP 项目根目录的 .vscode/launch.json 新增一个 attach 配置
  • VS Code 里先启动这个 Attach 调试
  • 终端运行(端口要和 launch.json 一致):
npx -y @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

如果你发现“断点不进 / 断点灰色”,先改成:

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

原理(人话版)

  • Node 的 --inspect:会在本机开一个“调试口”(默认就是 9229),VS Code 能连进去控制断点/单步。
  • MCP Inspector:相当于一个“临时 MCP 客户端 + UI”,它会启动你的 server,并通过 stdio 跟它对话。
  • sourcemap:把“构建后的 JS”映射回“你的 TS 源码”,这样你在 TS 上打断点才会准确。

输出格式(请始终按这个模板给用户)

请输出以下 3 块内容(都要可复制粘贴):

【1) VS Code Attach 配置(launch.json 片段)】
<给出一个完整 configuration 对象,提醒用户追加到 configurations 数组里;明确 port/outFiles 需要匹配>

【2) 启动命令(Inspector + Node --inspect)】
- 默认版:<一条命令>
- 稳定版(首行暂停):<一条命令>
- 换端口版(如果 9229 占用):<一条命令>

【3) 排障清单(从最可能到最少见)】
1. ...
2. ...
3. ...

关键约束(避免“看起来对但就是不行”)

  • 端口必须一致launch.jsonport == --inspect=PORT 的 PORT。
  • 先 Attach 再启动进程:第一次建议用 --inspect-brk,避免“启动太快错过断点”。
  • 调构建产物就必须有 sourcemap:否则只能在编译后的 JS 里调,TS 断点大概率不准。

总流程(一步一步照做)

flowchart TD
  A[确认入口与输出目录<br/>build/ dist/ 内的 index.js] --> B[确认 sourcemap 已生成<br/>能找到 *.map]
  B --> C[追加 launch.json 的 attach 配置<br/>port/outFiles 对齐]
  C --> D[VS Code 先启动 Attach<br/>处于 waiting]
  D --> E[运行 inspector 命令启动 server<br/>建议用 --inspect-brk]
  E --> F{断点命中?}
  F -- 是 --> G[开始调试:单步/变量/调用栈]
  F -- 否 --> H[按清单排查:端口/路径/outFiles/map/拼写错误]
  H --> D

步骤 0:确认入口与输出目录(避免路径写错)

先把“我到底要跑哪个 js 文件”确定下来:

ls -la build dist 2>/dev/null

常见入口:

  • build/internal/index.js(注意:很多人会写成 internel,这是拼写坑)
  • build/index.js
  • dist/index.js

步骤 1:开启 sourcemap(“直接调构建产物”的前提)

1.1 TypeScript(tsconfig)

如果你是 TS 项目,tsconfig.json 里至少要有:

{
  "compilerOptions": {
    "sourceMap": true,
    "inlineSources": true
  }
}

1.2 打包器/构建工具(选你用的那一种)

核心原则就一句话:构建输出必须带 .map

  • tsup:配置 sourcemap: true
  • esbuild:命令或配置加 sourcemap: true(或 --sourcemap
  • rollupoutput.sourcemap: true
  • webpack:设置合适的 devtool(例如 source-map
  • tsc 直出:确认 outDir 下有 .js.map

自检(你应该能看到 .map):

find build dist -maxdepth 4 -name "*.map" -print 2>/dev/null | head

如果找不到任何 .map,先别急着调断点:把 sourcemap 打开并重新构建一次。

步骤 2:在 .vscode/launch.json 新增 attach 配置(最关键)

在 MCP 项目根目录新增/修改 .vscode/launch.json,把下面这段 作为一个新配置加进去(不要覆盖你已有的配置)。

你通常只需要改两处:

  • port:你准备使用的调试端口(默认 9229)
  • outFiles:你的输出目录到底是 build/ 还是 dist/
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach: MCP stdio (Node Inspector)",
      "type": "node",
      "request": "attach",
      "port": 9229,
      "protocol": "inspector",
      "restart": true,
      "timeout": 30000,
      "sourceMaps": true,
      "smartStep": true,
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"],
      "cwd": "${workspaceFolder}",
      "outFiles": [
        "${workspaceFolder}/build/**/*.js",
        "${workspaceFolder}/dist/**/*.js"
      ]
    }
  ]
}

步骤 3:在 VS Code 里启动 Attach 调试

  • 打开 Run and Debug 面板
  • 选择 Attach: MCP stdio (Node Inspector)
  • 点击运行(或按 F5)

此时 VS Code 会进入“等待连接”状态。

步骤 4:运行 Inspector 命令启动 server(stdio 模式)

4.1 最常用(推荐)

npx -y @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

4.2 第一次调试更稳(建议先用它)

--inspect-brk 会让 Node 在第一行就停住,确保 attach 成功后你再继续执行:

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

4.3 你用 pnpm / yarn

pnpm dlx @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js
yarn dlx @modelcontextprotocol/inspector node --inspect=9229 build/internal/index.js

步骤 5:常见问题(按这个顺序排查)

5.1 端口被占用(9229 用不了)

现象:

  • 终端提示端口占用
  • 或 VS Code attach 失败/连错进程

检查(macOS / Linux 常用):

lsof -nP -iTCP:9229 -sTCP:LISTEN

处理方式(二选一):

  • 换端口:比如改成 9230
    • launch.jsonport 改为 9230
    • 把命令也改为 --inspect=9230(或 --inspect-brk=9230
  • 结束占用端口的进程:确认是你想结束的进程再 kill

5.2 断点灰色 / 不会停(最常见)

优先做这三件事:

  • --inspect-brk 先稳住:让进程在第一行停住
  • 确认 .map 真实存在:输出目录里必须有 *.map
  • 确认 outFiles 覆盖到了你的输出目录:例如你实际在 build/,就必须包含 ${workspaceFolder}/build/**/*.js

额外检查点(看到一个就说明 sourcemap 生效了):

  • 构建产物 .js 末尾有类似 //# sourceMappingURL=xxx.js.map
  • VS Code 的 Call Stack 能看到你的源码路径,而不是一堆压缩后的 JS

5.3 Inspector 能起,但 server 一闪就退出

可能原因:

  • 入口文件路径错了(build/internel/index.js vs build/internal/index.js 这种拼写最常见)
  • server 启动时报错直接退出(去看终端输出)

先做两个最小动作:

node -p "require('fs').existsSync('build/internal/index.js')"
node --inspect-brk=9229 build/internal/index.js

如果第二条能跑起来,说明问题更可能在 inspector 命令或你传参上。

Examples(示例)

示例 1:标准构建产物调试(build 输出)

npx -y @modelcontextprotocol/inspector node --inspect-brk=9229 build/internal/index.js

示例 2:端口冲突,换到 9230

  1. launch.jsonport 改成 9230
  2. 命令:
npx -y @modelcontextprotocol/inspector node --inspect-brk=9230 build/internal/index.js

兜底策略(你不想/不能调构建产物时)

如果你暂时搞不定 sourcemap(或打包太复杂),可以先用“开发态直接跑源码”的方式调试(前提是你的项目允许这么启动)。

例如使用 tsx

npx -y tsx --inspect-brk=9229 src/index.ts

这条不走 inspector;适合先确认“断点/逻辑/流程”本身没问题,再回头补齐构建产物的 sourcemap 调试链路。