local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Provides containerized execution of the pprof analyzer with bundled dependencies like Graphviz, enabling consistent profiling analysis environments across systems.
Enables analysis of pprof profile files hosted on GitHub via raw URLs, allowing examination of performance profiles directly from GitHub repositories.
Offers macOS-specific functionality for launching interactive pprof web UI sessions, with the ability to initiate and manage background profiling processes.
简体中文| English
Pprof アナライザー MCP サーバー
これは Go で実装された Model Context Protocol (MCP) サーバーであり、Go pprof パフォーマンス プロファイルを分析するためのツールを提供します。
特徴
analyze_pprof
ツール:- 指定された Go pprof ファイルを分析し、シリアル化された分析結果 (例: Top N リストまたはフレーム グラフ JSON) を返します。
- サポートされているプロファイルの種類:
cpu
: コード実行中の CPU 時間消費を分析してホットスポットを見つけます。heap
: 現在のメモリ使用量 (ヒープ割り当て) を分析して、メモリ消費量の多いオブジェクトと関数を見つけます。goroutine
: デッドロック、リーク、または過度の goroutine の使用を診断するために使用される、現在のすべての goroutine のスタック トレースを表示します。allocs
: プログラム実行中にメモリ割り当て(解放されたものも含む)を分析し、頻繁に割り当てが行われるコードを見つけます。(まだ実装されていません)mutex
: ミューテックスの競合を分析して、ブロックの原因となるロックを見つけます。(まだ実装されていません)block
: goroutine のブロックを引き起こす操作(チャネル待機、システムコールなど)を分析します。(まだ実装されていません)
- サポートされている出力形式:
text
、markdown
、json
(上位 N リスト)、flamegraph-json
(階層型フレーム グラフ データ、デフォルト)。text
、markdown
: 人間が読めるテキストまたは Markdown 形式。json
: 上位 N 件の結果を構造化された JSON 形式で出力します (cpu
、heap
、goroutine
用に実装されています)。flamegraph-json
: 階層的なフレームグラフデータをJSON形式で出力します。d3-flame-graph(cpu
、heap
、デフォルト形式に対応)と互換性があります。出力はコンパクトです。
- 設定可能な上位 N 件の結果の数 (
top_n
、デフォルトは 5、text
、markdown
、json
形式で有効)。
generate_flamegraph
ツール:go tool pprof
を使用して、指定された pprof ファイルのフレーム グラフ (SVG 形式) を生成し、指定されたパスに保存して、パスと SVG コンテンツを返します。- サポートされているプロファイル タイプ:
cpu
、heap
、allocs
、goroutine
、mutex
、block
。 - ユーザーは出力 SVG ファイル パスを指定する必要があります。
- **重要:**この機能はGraphvizがインストールされている必要があります。
open_interactive_pprof
ツール (macOS のみ):- 指定されたpprofファイルに対して、
go tool pprof
インタラクティブウェブUIをバックグラウンドで起動しようとします。http_addresshttp_address
指定されていない場合は、デフォルトでポート:8081
を使用します。 - 起動が成功すると、バックグラウンド
pprof
プロセスのプロセス ID (PID) を返します。 - **macOS のみ:**このツールは macOS でのみ動作します。
- **依存関係:**システムの PATH で
go
コマンドが使用可能である必要があります。 - **制限事項:**バックグラウンドの
pprof
プロセスからのエラーはサーバーによってキャプチャされません。リモート URL からダウンロードされた一時ファイルは、プロセスが終了するまで(disconnect_pprof_session
による手動実行、または MCP サーバーの終了時)自動的には削除されません。
- 指定されたpprofファイルに対して、
disconnect_pprof_session
ツール:- 以前に
open_interactive_pprof
によって開始されたバックグラウンドpprof
プロセスを、その PID を使用して終了しようとします。 - 最初に割り込み信号を送信し、割り込みが失敗した場合は Kill 信号を送信します。
- 以前に
インストール(ライブラリ/ツールとして)
go install
を使用してこのパッケージを直接インストールできます。
これによりpprof-analyzer-mcp
実行ファイルが$GOPATH/bin
または$HOME/go/bin
ディレクトリにインストールされます。コマンドを直接実行するには、このディレクトリがシステムのPATHに含まれていることを確認してください。
ソースから構築
Go 環境がインストールされていることを確認してください (Go 1.18 以上を推奨)。
プロジェクトのルート ディレクトリ ( pprof-analyzer-mcp
) で、次のコマンドを実行します。
これにより、現在のディレクトリにpprof-analyzer-mcp
(または Windows の場合はpprof-analyzer-mcp.exe
) という名前の実行可能ファイルが生成されます。
go install
使用する(推奨)
go install
使って実行ファイルを$GOPATH/bin
または$HOME/go/bin
ディレクトリにインストールすることもできます。これによりpprof-analyzer-mcp
コマンドラインから直接実行できるようになります(ディレクトリがシステムの PATH 環境変数に追加されている場合)。
Dockerで実行する
Docker を使用すると、必要な Graphviz 依存関係がバンドルされるため、サーバーを実行するのに便利です。
- **Docker イメージをビルドします。**プロジェクトのルート ディレクトリ (
Dockerfile
がある場所) で、次のコマンドを実行します。Copy - Docker コンテナを実行します。Copy
-i
フラグは、この MCP サーバーが使用する stdio トランスポートに必要な STDIN を開いたままにします。--rm
フラグは、コンテナの終了時に自動的に削除します。
- Docker 用に MCP クライアントを構成する: MCP クライアント (Roo Cline など) を Docker 内で実行されているサーバーに接続するには、
.roo/mcp.json
を更新します。クライアントがこのコマンドを実行する前に、Copypprof-analyzer-mcp
イメージがローカルにビルドされていることを確認してください。
リリース(GitHub Actions による自動化)
このプロジェクトでは、 GoReleaserとGitHub Actionsを使用してリリースプロセスを自動化しています。リリースは、パターンv*
に一致するGitタグ(例: v0.1.0
、 v1.2.3
)がリポジトリにプッシュされると自動的に実行されます。
リリース手順:
- **変更を加える:**新しい機能を開発するか、バグを修正します。
- 変更をコミット: Conventional Commits形式(例:
feat: ...
、fix: ...
)を使用して変更をコミットします。これは、変更ログの自動生成に重要です。Copy - **変更をプッシュ:**コミットを GitHub のメイン ブランチにプッシュします。Copy
- **タグの作成とプッシュ:**リリースの準備ができたら、新しい Git タグを作成し、GitHub にプッシュします。Copy
- **自動リリース:**タグをプッシュすると、
.github/workflows/release.yml
で定義されたGoReleaser
GitHub アクションがトリガーされます。このアクションは以下のようになります。- Linux、macOS、Windows (amd64 および arm64) 用のバイナリをビルドします。
- 最後のタグ以降の Conventional Commits に基づいて変更ログを生成します。
- 変更ログを含む新しい GitHub リリースを作成し、ビルドされたバイナリとチェックサムをアセットとして添付します。
リリース ワークフローの進行状況は、GitHub リポジトリの「アクション」タブで確認できます。
MCPクライアントの設定
このサーバーはstdio
トランスポートプロトコルを使用します。MCPクライアント(例:VS CodeのRoo Cline拡張機能)で設定する必要があります。
通常、これには、プロジェクト ルートの.roo/mcp.json
ファイルに次の構成を追加することが含まれます。
**注:**ビルド方法( go build
またはgo install
)と実行ファイルの実際の場所に応じてcommand
値を調整してください。MCPクライアントがこのコマンドを見つけて実行できることを確認してください。
設定後、MCP クライアントをリロードまたは再起動すると、 PprofAnalyzer
サーバーに自動的に接続されます。
依存関係
- Graphviz :
generate_flamegraph
ツールは、SVG フレームグラフを生成するために Graphviz を必要とします(go tool pprof
コマンドは SVG 生成時にdot
コマンドを呼び出します)。Graphviz がシステムにインストールされ、システムの PATH 環境変数でdot
コマンドが使用可能になっていることを確認してください。Graphviz のインストール:- macOS (Homebrew を使用):Copy
- Debian/Ubuntu:Copy
- CentOS/Fedora:Copy
- Windows (Chocolatey を使用):Copy
- その他のシステム: Graphviz の公式ダウンロード ページを参照してください。
- macOS (Homebrew を使用):
使用例(MCPクライアント経由)
サーバーが接続されると、プロファイル ファイルのfile://
、 http://
、またはhttps://
URI を使用して、 analyze_pprof
ツールとgenerate_flamegraph
ツールを呼び出すことができます。
例: CPU プロファイルの分析 (テキスト形式、上位 5 つ)
例: ヒーププロファイルの分析 (マークダウン形式、トップ 10)
例: Goroutine プロファイルの分析 (テキスト形式、上位 5 件)
例: CPU プロファイルの Flame Graph を生成する
例: ヒーププロファイル (inuse_space) の Flame Graph を生成する
例: CPU プロファイルの分析 (JSON 形式、上位 3 つ)
例: CPU プロファイルの分析 (デフォルトの Flame Graph JSON 形式)
例: ヒーププロファイルの分析 (明示的な Flame Graph JSON 形式)
例: リモート CPU プロファイルを分析する (HTTP URL から)
例: オンライン CPU プロファイルを分析する (GitHub Raw URL から)
例: オンラインヒーププロファイルのFlame Graphを生成する (GitHub Raw URLから)
例: オンライン CPU プロファイル用のインタラクティブ Pprof UI を開く (macOS のみ)
例: Pprofセッションを切断する
今後の改善点(TODO)
allocs
、mutex
、block
プロファイルの完全な分析ロジックを実装します。allocs
、mutex
、block
プロファイル タイプにjson
出力形式を実装します。output_format
に基づいて、MCP 結果に適切な MIME タイプを設定します。- より堅牢なエラー処理とログ レベルの制御を追加します。
- ~~リモート pprof ファイル URI (例:
http://
、https://
) のサポートを検討してください。~~ (完了)
This server cannot be installed
これは Go で実装された Model Context Protocol (MCP) サーバーであり、Go pprof パフォーマンス プロファイルを分析するためのツールを提供します。