Perfetto について
Perfetto MCP は、自然言語による質問を Perfetto トレースの分析に変換する MCP サーバーです。SQL を書かずに利用でき、Android のパフォーマンス調査を行う開発者を対象としています。ジャンク、ANR、CPU の負荷が高いスレッド、ロック競合、メモリリークなどを扱えます。
主な機能
- 01自然言語から PerfettoSQL クエリへの変換
- 02ANR の検出と根本原因の分析
- 03スレッド単位の CPU 使用率の分析
- 04ジャンクフレームの検出とフレーム概要の集計
- 05Binder とスレッド競合の分析
活用シーン
- 01トレース内でプロセスが特定の処理に長時間を費やす理由の調査
- 02Android アプリの ANR イベントと重大度の確認
- 03メインスレッドのホットスポットやメモリ増加の兆候の特定
MCP 対応
本プロジェクトは MCP サーバーとして動作し、find_slices、execute_sql_query、detect_anrs、detect_jank_frames、memory_leak_detector などの分析ツールを提供し、構造化された JSON 結果を MCP クライアントに返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | |
| main_thread_only | boolean | いいえ | |
| match_mode | string | いいえ | |
| pattern | string | はい | |
| process_name | any | いいえ | |
| time_range | any | いいえ | |
| trace_path | string | はい |
詳細

Perfetto MCP
自然言語から強力な Perfetto トレース分析を実現
自然言語のプロンプトを、対象を絞った Perfetto 分析に変換する Model Context Protocol(MCP)サーバーです。SQL を書かずに、ジャンクの原因をすばやく説明し、ANR を診断し、CPU を多く使うスレッドを特定し、ロック競合を明らかにし、メモリリークを検出できます。
✨ 機能
- 自然言語 → SQL:平易な英語で質問すると、正確な Perfetto クエリが得られます
- ANR 検出:Application Not Responding イベントを自動で特定して分析します
- パフォーマンス分析:CPU プロファイリング、フレームジャンクの検出、メモリリークの検出
- スレッド競合:同期処理のボトルネックやロック競合を特定します
- Binder プロファイリング:IPC のパフォーマンスや、応答の遅いシステムとのやり取りを分析します

📋 前提条件
- Python 3.13+(macOS/Homebrew):
brew install [email protected] - uv(推奨):
brew install uv
🚀 はじめに
Cursor
または、~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)に追加します:
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
Claude Code
このコマンドを実行します。詳しくはClaude Code の MCP ドキュメントを参照してください。
# Add to user scope
claude mcp add perfetto-mcp --scope user -- uvx perfetto-mcp
または、~/claude.json(macOS)または %APPDATA%\Claude\claude.json(Windows)を編集します:
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
VS Code
または、.vscode/mcp.json(プロジェクト)に追加するか、「MCP: Add Server」コマンドを実行します:
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
GitHub Copilot Chat のエージェントモードで有効にしてください。
Codex
~/.codex/config.toml を編集します:
[mcp_servers.perfetto-mcp]
command = "uvx"
args = ["perfetto-mcp"]
オプション:ローカルの trace_processor_shell バイナリを使用する
ネットワーク環境でダウンロードがブロックされる場合は、
PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH にローカルの
trace_processor_shell バイナリの絶対パスを設定します。
この環境変数が設定されている場合、perfetto-mcp はそのバイナリを直接使用します。
設定されていない場合は、既定の perfetto Python の動作がそのまま使われます。
例(mcp.json):
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"],
"env": {
"PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH": "D:/tools/perfetto/trace_processor_shell.exe"
}
}
}
}
例(~/.codex/config.toml):
[mcp_servers.perfetto-mcp]
command = "uvx"
args = ["perfetto-mcp"]
[mcp_servers.perfetto-mcp.env]
PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH = "D:/tools/perfetto/trace_processor_shell.exe"
ローカルインストール(開発サーバー)
cd perfetto-mcp-server
uv sync
uv run mcp dev src/perfetto_mcp/dev.py
ローカル MCP
{
"mcpServers": {
"perfetto-mcp-local": {
"command": "uv",
"args": [
"--directory",
"/path/to/git/repo/perfetto-mcp",
"run",
"-m",
"perfetto_mcp"
],
"env": { "PYTHONPATH": "src" }
}
}
}
pip を使用
pip3 install perfetto-mcp
python3 -m perfetto_mcp
📖 使い方
プロンプトの例:
Perfetto トレースを見ると、FragmentManager の実行に 438ms かかっています。時間がかかっている原因を特定できますか?
必須パラメーター
すべてのツールに、次の 2 つの入力が必要です:
| パラメーター | 説明 | 例 |
|---|---|---|
| trace_path | Perfetto トレースへの絶対パス | /path/to/trace.perfetto-trace |
| process_name | 対象のプロセス/アプリ名 | com.example.app |
プロンプトでの指定
トレースとプロセスを明示し、プロンプトの先頭に次の文を付けてください:
"プロセス com.example.app の Perfetto トレース /absolute/path/to/trace.perfetto-trace を使用してください"
オプションのフィルター
多くのツールは追加のフィルタリングに対応しています(ただし、LLM に任せてください):
- time_range:
{start_ms: 10000, end_ms: 25000} - ツール固有のしきい値:
min_block_ms、jank_threshold_ms、limit
🛠️ 利用可能なツール
🔎 探索と検出
| ツール | 目的 | プロンプトの例 |
|---|---|---|
find_slices | スライス名を調査し、負荷の高いパスを特定します | 「'Choreographer' を含むスライス名を検索し、代表的な例を上位から表示してください」 |
execute_sql_query | 高度な分析のためにカスタム PerfettoSQL を実行します | 「最初の 30 秒間のスレッドとフレームの相関を調べるカスタム SQL を実行してください」 |
🚨 ANR 分析
注:記録されたトレースに ANR が含まれている場合に役立ちます
| ツール | 目的 | プロンプトの例 |
|---|---|---|
detect_anrs | 重大度の分類とともに ANR イベントを検出します | 「最初の 10 秒間の ANR を検出し、重大度を要約してください」 |
anr_root_cause_analyzer | 発生可能性の高い原因を順位付けして、ANR の原因を詳しく分析します | 「20,000 ms 付近の ANR の根本原因を分析し、可能性の高い原因を順位付けしてください」 |
🎯 パフォーマンスプロファイリング
| ツール | 目的 | プロンプトの例 |
|---|---|---|
cpu_utilization_profiler | スレッド単位の CPU 使用率とスケジューリングを調べます | 「スレッドごとの CPU 使用率をプロファイリングし、最も負荷の高いスレッドを特定してください」 |
main_thread_hotspot_slices | メインスレッドで実行時間が最も長い処理を特定します | 「10 秒から 25 秒の間にある、50 ms を超えるメインスレッドのホットスポットを一覧表示してください」 |
📱 UI パフォーマンス
| ツール | 目的 | プロンプトの例 |
|---|---|---|
detect_jank_frames | フレーム期限を超過したフレームを特定します | 「16.67 ms を超えるカクついたフレームを見つけ、最も悪いものを 20 件一覧表示してください」 |
frame_performance_summary | フレーム全体の健全性に関する指標を示します | 「フレームパフォーマンスを要約し、カクつき率と P99 CPU 時間を報告してください」 |
🔒 並行処理と IPC
| ツール | 目的 | プロンプトの例 |
|---|---|---|
thread_contention_analyzer | 同期処理のボトルネックを特定します | 「15 秒から 30 秒の間のロック競合を見つけ、待ち時間が最も長いものを表示してください」 |
binder_transaction_profiler | Binder IPC のパフォーマンスを分析します | 「処理の遅い Binder トランザクションをプロファイリングし、サーバープロセスごとにグループ化してください」 |
💾 メモリ分析
| ツール | 目的 | プロンプトの例 |
|---|---|---|
memory_leak_detector | 継続的なメモリ増加のパターンを特定します | 「直近 60 秒間のメモリリークの兆候を検出してください」 |
heap_dominator_tree_analyzer | メモリを大量に消費するクラスを特定します | 「ヒープのドミネータクラスを分析し、問題となるものを上位から一覧表示してください」 |
出力形式
すべてのツールは、次の項目を含む構造化 JSON を返します。
- Summary:主な調査結果
- Details:ツール固有の結果
- Metadata:実行コンテキストと使用されたフォールバック
📚 リソース
- Trace Processor Python API - Perfetto の Python インターフェース
- Perfetto SQL Syntax - カスタムクエリ用の SQL リファレンス
📄 ライセンス
Apache 2.0 ライセンス。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。