/ ディレクトリ / プレイグラウンド / perfetto-mcp
● コミュニティ antarikshc ⚡ 即起動

perfetto-mcp

作者 antarikshc · antarikshc/perfetto-mcp

Perfettoトレースに対して自然な英語で質問できます。ジャンク、ANR、CPUホットスレッド、ロック競合、メモリリークなど、トレースSQLを書かずに回答を得られます。

perfetto-mcpは内部でPerfettoのトレースプロセッサを実行し、質問を的確なクエリに変換する自然言語ツールを提供します。Android/Linuxのパフォーマンス調査における一般的なカテゴリ(スライス探索、ANR検出、CPU/スレッドプロファイリング、並行性の問題、ヒープ分析)をカバーしています。

なぜ使うのか

主な機能

ライブデモ

実際の動作

perfetto.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "perfetto": {
      "command": "uvx",
      "args": [
        "perfetto-mcp"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "perfetto": {
      "command": "uvx",
      "args": [
        "perfetto-mcp"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "perfetto": {
      "command": "uvx",
      "args": [
        "perfetto-mcp"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "perfetto": {
      "command": "uvx",
      "args": [
        "perfetto-mcp"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "perfetto",
      "command": "uvx",
      "args": [
        "perfetto-mcp"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "perfetto": {
      "command": {
        "path": "uvx",
        "args": [
          "perfetto-mcp"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add perfetto -- uvx perfetto-mcp

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: perfetto-mcp

記録済みトレースからUIジャンクの原因を特定する

👤 Android開発者、パフォーマンスエンジニア ⏱ ~25 min advanced

使うタイミング: ユーザーから「スクロール時にアプリがカクつく」と報告があり、Perfettoトレースをキャプチャ済み。次に何をすべきか?

前提条件
  • Perfetto .pftrace ファイル — perfetto / systrace / Android Studio Profiler
フロー
  1. MCPにトレースを指定する
    Open /tmp/jank.pftrace for process com.example.app. Find jank frames — anything over 16.67ms on the main thread.✓ コピーしました
    → ジャンクフレームのリストとスライスコンテキスト
  2. 原因を特定する
    For the top 3 janky frames, what slice dominated? What was the main thread doing when the frame missed?✓ コピーしました
    → フレームごとの原因
  3. 修正を提案する
    Based on these bottlenecks, suggest concrete changes (move off main, cache, etc.).✓ コピーしました
    → 修正プラン

結果: タイムラインUIを凝視することなく、ジャンクの根本原因を特定できます。

注意点
  • サンプリング間隔が粗すぎて、短時間のホットメソッドを見逃す — 必要に応じてサンプリング頻度を上げて再記録する

トレースからANRを診断する

👤 ANRに対処するAndroid開発者 ⏱ ~20 min advanced

使うタイミング: 本番環境でANRが発生し、トレースをキャプチャできる状況。

フロー
  1. 検出する
    Run ANR analysis on /traces/anr.pftrace for process com.example.app. What blocked the main thread?✓ コピーしました
    → ブロッキングチェーン
  2. ロックを特定する
    Was this a lock contention? Identify holder vs waiter threads and the resource.✓ コピーしました
    → 競合ダイアグラム

結果: ANRの根本原因と、オンコールで誰に連絡すべきかが判明します。

メモリリークの疑いを調査する

👤 Android / ネイティブ開発者 ⏱ ~30 min advanced

使うタイミング: 特定の画面でヒープが時間とともに増加し続ける場合。

フロー
  1. ヒープを分析する
    For trace X, process Y: run memory analysis. What allocations dominate and does the retained set grow monotonically?✓ コピーしました
    → アロケーションサマリーとトレンド
  2. 相関を調べる
    What activities / fragments / slices correlate with growth spikes?✓ コピーしました
    → 相関レポート

結果: リークの原因候補が特定されます。

注意点
  • GCがまだ実行されていない場合、ヒープの増加は必ずしもリークではない — 記録の間にGCをトリガーし、比較する

組み合わせ

他のMCPと組み合わせて10倍の力を

perfetto + filesystem

リリースごとのトレース分析を保存してリグレッション追跡に活用

Analyze jank trace for vX.Y.Z and save summary to /perf-reports/vX.Y.Z.md.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
explore_slices trace_path, process, time_range? 新しいトレースの全体像を把握する free
detect_anr trace_path, process ANRの調査 free
cpu_profile trace_path, process, threshold_ms? CPUホットスポットの探索 free
thread_contention trace_path, process 並行性の問題の調査 free
memory_analysis trace_path, process メモリ関連の調査 free
custom_sql trace_path, sql: str 実行したいPerfetto SQLが明確な場合 free

コストと制限

運用コスト

APIクォータ
なし(ローカル実行)
呼び出しあたりのトークン
トレースサマリーは通常2k〜10kトークン
金額
無料(Apache 2.0)
ヒント
問題が発生したおおよその時間帯がわかっている場合は、必ず時間範囲を指定してください。クエリ時間とトークン消費を大幅に削減できます。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: なし。ローカルのトレースファイルのみ使用
データ送信先: サマリーはLLMプロバイダーに送信されます。トレースにはセンシティブなプロセス名やアプリ名が含まれる場合があります

トラブルシューティング

よくあるエラーと対処法

Trace file too large to parse

PerfettoはGBスケールのトレースを処理できますが、最初の呼び出しは遅くなる場合があります。しばらく待ってください。以降のクエリはより高速に実行されます。

Process name not found

custom_sql SELECT name FROM process で確認してください。プロセス名はアプリのパッケージIDと異なる場合があります。

Python version error

3.13+が必要です。uv python install 3.13 を実行してから uvx perfetto-mcp を実行してください。

確認: python --version

代替案

perfetto-mcp 他との比較

代替案代わりに使う場面トレードオフ
Perfetto UI (ui.perfetto.dev)ビジュアルなタイムライン分析を行いたい場合手動操作が必要。LLMによる解説なし
Android Studio ProfilerAndroid Studio内で作業を完結させたい場合IDEに依存。スクリプト化しにくい

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る