mcp-pprof-anaylzer

by ZephyrDeng
Verified

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 のブロックを引き起こす操作(チャネル待機、システムコールなど)を分析します。(まだ実装されていません
    • サポートされている出力形式: textmarkdownjson (上位 N リスト)、 flamegraph-json (階層型フレーム グラフ データ、デフォルト)。
      • textmarkdown : 人間が読めるテキストまたは Markdown 形式。
      • json : 上位 N 件の結果を構造化された JSON 形式で出力します ( cpuheapgoroutine用に実装されています)。
      • flamegraph-json : 階層的なフレームグラフデータをJSON形式で出力します。d3-flame-graph( cpuheap 、デフォルト形式に対応)と互換性があります。出力はコンパクトです。
    • 設定可能な上位 N 件の結果の数 ( top_n 、デフォルトは 5、 textmarkdownjson形式で有効)。
  • generate_flamegraphツール:
    • go tool pprofを使用して、指定された pprof ファイルのフレーム グラフ (SVG 形式) を生成し、指定されたパスに保存して、パスと SVG コンテンツを返します。
    • サポートされているプロファイル タイプ: cpuheapallocsgoroutinemutexblock
    • ユーザーは出力 SVG ファイル パスを指定する必要があります。
    • **重要:**この機能はGraphvizがインストールされている必要があります。
  • open_interactive_pprofツール (macOS のみ):
    • 指定されたpprofファイルに対して、 go tool pprofインタラクティブウェブUIをバックグラウンドで起動しようとします。http_address http_address指定されていない場合は、デフォルトでポート:8081を使用します。
    • 起動が成功すると、バックグラウンドpprofプロセスのプロセス ID (PID) を返します。
    • **macOS のみ:**このツールは macOS でのみ動作します。
    • **依存関係:**システムの PATH でgoコマンドが使用可能である必要があります。
    • **制限事項:**バックグラウンドのpprofプロセスからのエラーはサーバーによってキャプチャされません。リモート URL からダウンロードされた一時ファイルは、プロセスが終了するまで( disconnect_pprof_sessionによる手動実行、または MCP サーバーの終了時)自動的には削除されません。
  • disconnect_pprof_sessionツール:
    • 以前にopen_interactive_pprofによって開始されたバックグラウンドpprofプロセスを、その PID を使用して終了しようとします。
    • 最初に割り込み信号を送信し、割り込みが失敗した場合は Kill 信号を送信します。

インストール(ライブラリ/ツールとして)

go installを使用してこのパッケージを直接インストールできます。

go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest

これによりpprof-analyzer-mcp実行ファイルが$GOPATH/binまたは$HOME/go/binディレクトリにインストールされます。コマンドを直接実行するには、このディレクトリがシステムのPATHに含まれていることを確認してください。

ソースから構築

Go 環境がインストールされていることを確認してください (Go 1.18 以上を推奨)。

プロジェクトのルート ディレクトリ ( pprof-analyzer-mcp ) で、次のコマンドを実行します。

go build

これにより、現在のディレクトリにpprof-analyzer-mcp (または Windows の場合はpprof-analyzer-mcp.exe ) という名前の実行可能ファイルが生成されます。

go install使用する(推奨)

go install使って実行ファイルを$GOPATH/binまたは$HOME/go/binディレクトリにインストールすることもできます。これによりpprof-analyzer-mcpコマンドラインから直接実行できるようになります(ディレクトリがシステムの PATH 環境変数に追加されている場合)。

# Installs the executable using the module path defined in go.mod go install . # Or directly using the GitHub path (recommended after publishing) # go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest

Dockerで実行する

Docker を使用すると、必要な Graphviz 依存関係がバンドルされるため、サーバーを実行するのに便利です。

  1. **Docker イメージをビルドします。**プロジェクトのルート ディレクトリ ( Dockerfileがある場所) で、次のコマンドを実行します。
    docker build -t pprof-analyzer-mcp .
  2. Docker コンテナを実行します。
    docker run -i --rm pprof-analyzer-mcp
    • -iフラグは、この MCP サーバーが使用する stdio トランスポートに必要な STDIN を開いたままにします。
    • --rmフラグは、コンテナの終了時に自動的に削除します。
  3. Docker 用に MCP クライアントを構成する: MCP クライアント (Roo Cline など) を Docker 内で実行されているサーバーに接続するには、 .roo/mcp.jsonを更新します。
    { "mcpServers": { "pprof-analyzer-docker": { "command": "docker run -i --rm pprof-analyzer-mcp" } } }
    クライアントがこのコマンドを実行する前に、 pprof-analyzer-mcpイメージがローカルにビルドされていることを確認してください。

リリース(GitHub Actions による自動化)

このプロジェクトでは、 GoReleaserとGitHub Actionsを使用してリリースプロセスを自動化しています。リリースは、パターンv*に一致するGitタグ(例: v0.1.0v1.2.3 )がリポジトリにプッシュされると自動的に実行されます。

リリース手順:

  1. **変更を加える:**新しい機能を開発するか、バグを修正します。
  2. 変更をコミット: Conventional Commits形式(例: feat: ...fix: ... )を使用して変更をコミットします。これは、変更ログの自動生成に重要です。
    git add . git commit -m "feat: Add awesome new feature" # or git commit -m "fix: Resolve issue #42"
  3. **変更をプッシュ:**コミットを GitHub のメイン ブランチにプッシュします。
    git push origin main
  4. **タグの作成とプッシュ:**リリースの準備ができたら、新しい Git タグを作成し、GitHub にプッシュします。
    # Example: Create tag v0.1.0 git tag v0.1.0 # Push the tag to GitHub git push origin v0.1.0
  5. **自動リリース:**タグをプッシュすると、 .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ファイルに次の構成を追加することが含まれます。

{ "mcpServers": { "pprof-analyzer": { "command": "pprof-analyzer-mcp" } } }

**注:**ビルド方法( go buildまたはgo install )と実行ファイルの実際の場所に応じてcommand値を調整してください。MCPクライアントがこのコマンドを見つけて実行できることを確認してください。

設定後、MCP クライアントをリロードまたは再起動すると、 PprofAnalyzerサーバーに自動的に接続されます。

依存関係

  • Graphviz : generate_flamegraphツールは、SVG フレームグラフを生成するために Graphviz を必要とします( go tool pprofコマンドは SVG 生成時にdotコマンドを呼び出します)。Graphviz がシステムにインストールされ、システムの PATH 環境変数でdotコマンドが使用可能になっていることを確認してください。Graphviz のインストール:
    • macOS (Homebrew を使用):
      brew install graphviz
    • Debian/Ubuntu:
      sudo apt-get update && sudo apt-get install graphviz
    • CentOS/Fedora:
      sudo yum install graphviz # or sudo dnf install graphviz
    • Windows (Chocolatey を使用):
      choco install graphviz
    • その他のシステム: Graphviz の公式ダウンロード ページを参照してください。

使用例(MCPクライアント経由)

サーバーが接続されると、プロファイル ファイルのfile://http:// 、またはhttps:// URI を使用して、 analyze_pprofツールとgenerate_flamegraphツールを呼び出すことができます。

例: CPU プロファイルの分析 (テキスト形式、上位 5 つ)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/cpu.pprof", "profile_type": "cpu" } }

例: ヒーププロファイルの分析 (マークダウン形式、トップ 10)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/heap.pprof", "profile_type": "heap", "top_n": 10, "output_format": "markdown" } }

例: Goroutine プロファイルの分析 (テキスト形式、上位 5 件)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/goroutine.pprof", "profile_type": "goroutine" } }

例: CPU プロファイルの Flame Graph を生成する

{ "tool_name": "generate_flamegraph", "arguments": { "profile_uri": "file:///path/to/your/cpu.pprof", "profile_type": "cpu", "output_svg_path": "/path/to/save/cpu_flamegraph.svg" } }

例: ヒーププロファイル (inuse_space) の Flame Graph を生成する

{ "tool_name": "generate_flamegraph", "arguments": { "profile_uri": "file:///path/to/your/heap.pprof", "profile_type": "heap", "output_svg_path": "/path/to/save/heap_flamegraph.svg" } }

例: CPU プロファイルの分析 (JSON 形式、上位 3 つ)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/cpu.pprof", "profile_type": "cpu", "top_n": 3, "output_format": "json" } }

例: CPU プロファイルの分析 (デフォルトの Flame Graph JSON 形式)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/cpu.pprof", "profile_type": "cpu" // output_format defaults to "flamegraph-json" } }

例: ヒーププロファイルの分析 (明示的な Flame Graph JSON 形式)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "file:///path/to/your/heap.pprof", "profile_type": "heap", "output_format": "flamegraph-json" } }

例: リモート CPU プロファイルを分析する (HTTP URL から)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "https://example.com/profiles/cpu.pprof", "profile_type": "cpu" } }

例: オンライン CPU プロファイルを分析する (GitHub Raw URL から)

{ "tool_name": "analyze_pprof", "arguments": { "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu", "profile_type": "cpu", "top_n": 5 } }

例: オンラインヒーププロファイルのFlame Graphを生成する (GitHub Raw URLから)

{ "tool_name": "generate_flamegraph", "arguments": { "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.heap", "profile_type": "heap", "output_svg_path": "./online_heap_flamegraph.svg" } }

例: オンライン CPU プロファイル用のインタラクティブ Pprof UI を開く (macOS のみ)

{ "tool_name": "open_interactive_pprof", "arguments": { "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu" // Optional: "http_address": ":8082" // Example of overriding the default port } }

例: Pprofセッションを切断する

{ "tool_name": "disconnect_pprof_session", "arguments": { "pid": 12345 // Replace 12345 with the actual PID returned by open_interactive_pprof } }

今後の改善点(TODO)

  • allocsmutexblockプロファイルの完全な分析ロジックを実装します。
  • allocsmutexblockプロファイル タイプにjson出力形式を実装します。
  • output_formatに基づいて、MCP 結果に適切な MIME タイプを設定します。
  • より堅牢なエラー処理とログ レベルの制御を追加します。
  • ~~リモート pprof ファイル URI (例: http://https:// ) のサポートを検討してください。~~ (完了)
-
security - not tested
A
license - permissive license
-
quality - not tested

これは Go で実装された Model Context Protocol (MCP) サーバーであり、Go pprof パフォーマンス プロファイルを分析するためのツールを提供します。

  1. Features
    1. Installation (As a Library/Tool)
      1. Building from Source
        1. Using go install (Recommended)
      2. Running with Docker
        1. Releasing (Automated via GitHub Actions)
          1. Configuring the MCP Client
            1. Dependencies
              1. Usage Examples (via MCP Client)
                1. Future Improvements (TODO)
                  ID: npjvoajg2a