Model Context Protocol (MCP)サーバーとクライアント間の通信をBurp Suiteで取得する手順をまとめます。MCP Go SDKで簡単なMCPサーバーを作成し、MCP Inspectorをクライアントとして使用して、その通信をBurp Suiteで取得します。
検証環境
- macOS
- Go 1.25.5
- Burp Suite Professional v2025.10.6
- MCP Inspector 0.16.7
MCP Inspector 0.16.8からnode-fetchを利用しているため、undiciのEnvHttpProxyAgentでは通信が取れなくなっています。今回は通信の流れを確認したいため0.16.7を利用します。
また最新のバージョンはConnection TypeをDirectにしたらMCPへの通信をブラウザから取得できます(追記)。
Model Context Protocol (MCP) とは
割愛します。詳細は公式ドキュメントを参照してください。
MCP Go SDKでMCPサーバーを作成
MCP Go SDKを使用してシンプルなMCPサーバーを作成します。名前を受け取り「Hello, [name]!」を返すだけのシンプルな機能を実装します。
func main() {
// MCPサーバーの作成
server := mcp.NewServer(&mcp.Implementation{
Name:"demo",
Version:"v0.0.1"
}, nil)
// ツールの登録
mcp.AddTool(server, &mcp.Tool{
Name:"say_hello",
Description: "Say hello"
}, helloHandler)
//省略
}
// ハンドラー実装
func helloHandler(ctx context.Context, request *mcp.CallToolRequest, args HelloWorldArgs) (*mcp.CallToolResult, any, error) {
return &mcp.CallToolResult{
Content: []mcp.Content{
&mcp.TextContent{Text: fmt.Sprintf("Hello, %s!", args.Name)},
},
}, nil, nil
}
サーバーは起動時に--sseまたは--httpフラグで通信方式を選択できます。またMCPサーバーは http://localhost:8000 で起動するとします。
$ go run main.go --sse # SSE
$ go run main.go --http # Streamable HTTP
MCP Inspectorのセットアップ
MCP Inspectorは、MCPサーバーの動作確認やデバッグに使用できる公式ツールです。
The MCP Inspector consists of two main components that work together:
- MCP Inspector Client (MCPI): A React-based web UI that provides an interactive interface for testing and debugging MCP servers
- MCP Proxy (MCPP): A Node.js server that acts as a protocol bridge, connecting the web UI to MCP servers via various transport methods (stdio, SSE, streamable-http)
このような構成になっているので、ブラウザからMCP Inspectorの通信を取ってもMCPIからMCPPへの通信になります。MCPサーバーとの実際の通信はMCPPが行うため、MCPPの通信を取得する必要があります。
[MCPI (:6274)] - Web UI
↓ HTTP
[MCPP (:6277)] - Proxy
↓ SSE/HTTP/stdio (ここをBurp Suiteで取得したい!!)
[MCPサーバー (:8000)]
インストールとビルド
今回はプロキシ設定を挟むため、ローカルにクローンして実行します。
$ git clone --branch 0.16.7 https://github.com/modelcontextprotocol/inspector.git
$ cd inspector
$ npm ci
$ npm run build
プロキシ設定
MCPIからMCPPへの通信をProxy経由にしたいので、undiciライブラリを使ってプロキシ設定を追加するモジュールを作成します。
const { EnvHttpProxyAgent, setGlobalDispatcher } = require('undici');
setGlobalDispatcher(new EnvHttpProxyAgent());
console.log('Using proxy via', process.env.HTTP_PROXY, process.env.HTTPS_PROXY);
適宜undiciをインストールしてください。
$ npm i undici
次に起動用のスクリプトを作成します。
#!/bin/zsh
export HOST=127.0.0.1
export ALLOWED_ORIGINS=http://127.0.0.1:6274
export NODE_USE_ENV_PROXY=1
export NODE_OPTIONS="--require $(pwd)/proxy-preload.cjs"
#export NODE_EXTRA_CA_CERTS="./burp-ca.pem"
export HTTP_PROXY="http://127.0.0.1:8089"
export HTTPS_PROXY="http://127.0.0.1:8089"
npm start
HTTPSのMCPサーバーへの通信を取得する場合は NODE_EXTRA_CA_CERTS でBurpの証明書を指定してください。ProxyのCA証明書エクスポートでDER形式で保存後、OpenSSLコマンドでPEM形式に変換が必要です。
$ openssl x509 -inform der -in cacert.der -out burp-ca.pem
構成例
.
├── inspector [一部抜粋]
│ ├── burp-ca.pem (任意)
│ ├── package-lock.json
│ ├── package.json
│ ├── proxy-preload.cjs
│ ├── run.sh
│ └── src
└── mcp
├── go.mod
├── go.sum
└── main.go
MCP Inspectorの起動
$ ./run.sh
ブラウザが自動的に開きInspector UIが表示されます。
Burp Suiteの設定
細かい設定などは割愛します。
- Burp Suite を起動します
- Proxy > Proxy settings を開く
- Proxy Listeners で
127.0.0.1:8089を設定- 環境に合わせて変更してください
- Intercept は OFF にしておく
- Streaming Responses を設定
- 「Process streaming responses」をチェック
Burp Suiteで通信を確認
事前準備(共通)
- MCPサーバーを起動
- SSEの場合:
go run main.go --sse - Streamable HTTPの場合:
go run main.go --http
- SSEの場合:
- MCP InspectorをProxy設定した状態で起動
- Inspector UIでTransport Typeを選択し、URL「
http://localhost:8000」を入力してConnectで接続
SSEの通信確認
初期接続
SSEで接続を確立し、MIME typeがSSEの通信として表示されます。
tools/listの実行
Inspector UIでtools/listを実行すると、POSTリクエストとして送信されます。

tools/callの実行
ツールsay_helloの呼び出しも同様にPOSTリクエストとして送信されます。

Repeaterでの再送
Burp SuiteのRepeaterでツールの呼び出しリクエストを送信できます。

同じセッションを使うと既存のSSE接続を利用するので、Proxy historyのSSEイベントストリーム内で結果を確認できます。

すべての流れをRepeaterで確認したい場合は SSE -> initialize -> tools/call の順で送信してください。
ブラウザからの通信
ブラウザからも同じリクエスト・レスポンスを確認できます。ただし、ブラウザの通信はMCPサーバー(:8000)ではなくMCPP(:6277)宛てになる点に注意してください。
Streamable HTTPの通信確認
初期接続と通信方式
SSEと異なり、Streamable HTTPは各メッセージごとにPOSTリクエストの結果を確認できます。
tools/listの実行
Inspector UIでtools/listを実行するとPOSTリクエストが送信され、レスポンスボディで結果を確認できます。
tools/callの実行
ツールsay_helloの呼び出しも同様にPOSTリクエストが送信され、レスポンスボディで結果を確認できます。
Repeaterでの再送
Repeaterでの再送も可能です。SSEと異なりレスポンスに結果が入るので確認しやすいです。
まとめ
MCP Go SDKでMCPサーバーを作成し、MCP Inspectorをクライアントとして使用することで、MCPプロトコルの通信をBurp Suiteで取得できました。
MCP InspectorはMCPI + MCPP構成のため、MCPとの通信はMCPPの通信を取得する必要があります。
参考資料
追記
MCP Inspector 0.17.0 からConnection Typeを選択することが可能になり、MCPP経由しないで直接MCPサーバーに通信できるようになりました。
MCPサーバーのレスポンスで以下のようなレスポンスヘッダをつけることで問題なく通信を取得できることを確認しました。
- プリフライトリクエストのレスポンスヘッダ
Access-Control-Allow-Origin: http://localhost:6274
Access-Control-Allow-Methods: POST, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization, Mcp-Session-Id, Mcp-Protocol-Version
- その他リクエストのレスポンスヘッダ
Access-Control-Allow-Origin: http://localhost:6274
Access-Control-Expose-Headers: Mcp-Session-Id
Access-Control-Expose-Headersヘッダをつけないとnotifications/initializedのリクエストなどにMcp-Session-Idをリクエストヘッダにつけてくれなくなります。
参考情報: Streamable HTTP: header Mcp-Session-Id is not set for "notifications/initialized" request







