In this article
Anthropic InspectorでMCPサーバーをデバッグする方法
MCPサーバーの構築は、今や一般的になりました。開発者はAnthropicのMCP革命を受け入れ、LLM時代を歓迎しながら、積極的にMCPサーバーを構築しています。MCPサーバーは20行未満のコードで簡単に始められますが、予期しない動作をしたとき、どうデバッグすればよいのでしょうか。
Node.jsでシンプルなMCPサーバーを作る入門
MCPサーバーをデバッグするため、まずNode.jsでシンプルなMCPサーバーを実装します。このMCPサーバーは、Cursor、Qodo、Claude DesktopなどのMCPクライアント実装者が、サードパーティのオープンソースパッケージに関する情報を取得できるツールを公開します。
MCPサーバーのコード全文は、GitHubのsnyk-labs/mcp-server-npmリポジトリで確認できます。以下にコード全体を示します。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import { execSync } from "child_process";
const server = new McpServer({
name: "npm JavaScript package management tools",
version: "1.0.0",
description: "Provides tools to get information about open source npm packages from the npmjs registry"
});
server.tool(
"getNpmPackageInfo",
"Get information about an npm package",
{
packageName: z.string()
},
async ({ packageName }) => {
const output = execSync(`npm view ${packageName}`, {
encoding: "utf-8",
});
return {
content: [
{
type: "text",
text: output
},
],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);上記のMCPサーバーのコードからわかるように、このサーバーはnpmパッケージマネージャーのコマンドラインユーティリティが利用可能であることを前提とし、システムプロセスを起動してviewコマンドライン引数を渡すことで、npm公式レジストリから情報を取得します。
上記のMCPサーバー実装には、意図的にコマンドインジェクションの脆弱性を持たせています。悪意のある安全でないMCPサーバーがもたらすセキュリティリスクについて、開発者が学ぶためのものです。
AnthropicのMCP Inspector
Anthropicは、公式の@modelcontextprotocolパッケージ名前空間にある@modelcontextprotocol/inspectorパッケージで、MCP Inspectorというデバッグ用ユーザーインターフェースを提供しています。
一度だけデバッグする場合は、npxを使って実行できます。例:npx @modelcontextprotocol/inspector <mcp-server-command>。<mcp-server-command>は、MCPサーバーのコマンドラインと引数に置き換えてください。
MCP Inspectorツールにすばやくアクセスできるよう、Node.jsのpackage.jsonに次のエントリーを追加することをおすすめします。
{
"scripts": {
"debug": "npx -y @modelcontextprotocol/inspector node index.js"
}
}初めてnpm run debugを実行すると、npxに-y引数を指定していない場合、インストールを求めるプロンプトが表示されます。表示例は次のとおりです。
♥ 18:22 npm run debug
> mcp-server-npm@1.0.0 debug
> npx @modelcontextprotocol/inspector node index.js
Need to install the following packages:
@modelcontextprotocol/inspector@0.11.0
Ok to proceed? (y)インストールが完了し、準備が整うと、次のコンソール出力が表示されます。
Starting MCP inspector...
⚙️ Proxy server listening on port 6277
🔍 MCP Inspector is up and running at http://127.0.0.1:6274 🚀ブラウザーでhttp://127.0.0.1:6274を開きましょう ;-)

Node.jsのMCPサーバーはプロセスのSTDIO経由で公開されているため、トランスポートタイプはそのままにして、Connectボタンをクリックします。
MCPサーバーに接続すると、メインコンテンツ領域に新しい横方向のタブが表示され、MCPサーバーで利用できるすべてのリソースが表示されます。今回のMCPサーバーが公開しているのはTools(npmレジストリからnpmパッケージ情報を検索するツール1つ)だけなので、List Toolsをクリックすると、利用可能なツールの一覧が表示されます。

これで、MCP InspectorのウェブインターフェースからMCPサーバーを操作できます。一覧にあるツールのいずれか(今回はgetNpmPackageInfo)をクリックすると、選択したツールと指定可能なパラメーターが右側のペインに表示されます。
パラメーターにsnykパッケージを指定して実行したスクリーンショットです。

MCP Inspectorは、MCPサーバーとのやり取りに関する情報もコンソールに出力します。参考として、上記のツール呼び出しを記録したときに出力されたデバッグ情報を示します。
New connection
Query parameters: [Object: null prototype] {
command: 'node',
args: 'index.js',
env: '{"HOME":"/Users/lirantal","LOGNAME":"lirantal","PATH":"/Users/lirantal/.npm/,"SHELL":"/bin/zsh","TERM":"xterm-256color","USER":"lirantal"}',
transportType: 'stdio'
}
Stdio transport: command=/Users/lirantal/.local/state/fnm_multishells/34121_1745832579143/bin/node, args=index.js
Spawned stdio transport
Connected MCP client to backing server transport
Created web app transport
Set up MCP proxy
Received message for sessionId 83514436-7b4b-492f-8026-957684f3b736
Received message for sessionId 83514436-7b4b-492f-8026-957684f3b736
Received message for sessionId 83514436-7b4b-492f-8026-957684f3b736MCPサーバーのデバッグについて詳しく見る
MCPサーバーのデバッグでは、JavaScriptのconsole.log() を使って画面にデバッグ情報を出力することもよくあります。しかし、プロセスベースのSTDIO MCPサーバーでは、期待どおりに動作しません。ひとまず、ログをファイルに書き込む簡単な回避策をおすすめします。