Perfetto
Convierte el lenguaje natural en potentes análisis de trazas de Perfetto. Explica rápidamente el jank, diagnostica ANR, detecta hilos con alta carga de CPU, descubre contención de bloqueos y encuentra fugas de memoria.
Documentación

Perfetto MCP
Convierte el lenguaje natural en potentes análisis de trazas de Perfetto
Un servidor de Model Context Protocol (MCP) que transforma indicaciones en lenguaje natural en análisis de Perfetto enfocados. Explica rápidamente el jank, diagnostica ANRs, detecta hilos calientes de CPU, descubre contención de bloqueos y encuentra fugas de memoria, todo sin escribir SQL.
✨ Características
- Lenguaje natural → SQL: Haz preguntas en lenguaje natural y obtén consultas Perfetto precisas
- Detección de ANR: Identifica y analiza automáticamente eventos de Application Not Responding
- Análisis de rendimiento: Perfilado de CPU, detección de jank de fotogramas, detección de fugas de memoria
- Contención de hilos: Encuentra cuellos de botella de sincronización y contención de bloqueos
- Perfilado de Binder: Analiza el rendimiento de IPC y las interacciones lentas del sistema

📋 Requisitos previos
- Python 3.13+ (macOS/Homebrew):
brew install python@3.13 - uv (recomendado):
brew install uv
🚀 Primeros pasos
Cursor
O añade a ~/.cursor/mcp.json (global) o .cursor/mcp.json (proyecto):
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
Claude Code
Ejecuta este comando. Consulta documentación de MCP de Claude Code para más información.
# Add to user scope
claude mcp add perfetto-mcp --scope user -- uvx perfetto-mcp
O edita ~/claude.json (macOS) o %APPDATA%\Claude\claude.json (Windows):
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
VS Code
o añade a .vscode/mcp.json (proyecto) o ejecuta el comando "MCP: Add Server":
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"]
}
}
}
Habilítalo en el modo Agente del chat de GitHub Copilot.
Codex
Edita ~/.codex/config.toml:
[mcp_servers.perfetto-mcp]
command = "uvx"
args = ["perfetto-mcp"]
Opcional: Usar un binario local de trace_processor_shell
Si tu entorno de red bloquea descargas, establece
PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH a una ruta absoluta de un binario local de
trace_processor_shell.
Cuando esta variable de entorno está configurada, perfetto-mcp usa ese binario directamente.
Cuando no está configurada, el comportamiento predeterminado de Python de perfetto no cambia.
Ejemplo (mcp.json):
{
"mcpServers": {
"perfetto-mcp": {
"command": "uvx",
"args": ["perfetto-mcp"],
"env": {
"PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH": "D:/tools/perfetto/trace_processor_shell.exe"
}
}
}
}
Ejemplo (~/.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"
Instalación local (servidor de desarrollo)
cd perfetto-mcp-server
uv sync
uv run mcp dev src/perfetto_mcp/dev.py
Local MCP
{
"mcpServers": {
"perfetto-mcp-local": {
"command": "uv",
"args": [
"--directory",
"/path/to/git/repo/perfetto-mcp",
"run",
"-m",
"perfetto_mcp"
],
"env": { "PYTHONPATH": "src" }
}
}
}
Usando pip
pip3 install perfetto-mcp
python3 -m perfetto_mcp
📖 Cómo usar
Ejemplo de indicación inicial:
En la traza de perfetto, veo que FragmentManager tarda 438ms en ejecutarse. ¿Puedes averiguar por qué tarda tanto?
Parámetros requeridos
Cada herramienta necesita estas dos entradas:
| Parámetro | Descripción | Ejemplo |
|---|---|---|
| trace_path | Ruta absoluta a tu traza de Perfetto | /path/to/trace.perfetto-trace |
| process_name | Nombre del proceso/aplicación objetivo | com.example.app |
En tus indicaciones
Sé explícito sobre la traza y el proceso, antepone a tu indicación:
"Usa la traza de perfetto /absolute/path/to/trace.perfetto-trace para el proceso com.example.app"
Filtros opcionales
Muchas herramientas admiten filtrado adicional (pero deja que tu LLM lo maneje):
- time_range:
{start_ms: 10000, end_ms: 25000} - Umbrales específicos de la herramienta:
min_block_ms,jank_threshold_ms,limit
🛠️ Herramientas disponibles
🔎 Exploración y descubrimiento
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
find_slices | Examina nombres de slices y localiza rutas críticas | "Encuentra nombres de slices que contengan 'Choreographer' y muestra los mejores ejemplos" |
execute_sql_query | Ejecuta PerfettoSQL personalizado para análisis avanzados | "Ejecuta SQL personalizado para correlacionar hilos y fotogramas en los primeros 30s" |
🚨 Análisis de ANR
Nota: Útil si la traza grabada contiene ANR
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
detect_anrs | Encuentra eventos ANR con clasificación de severidad | "Detecta ANRs en los primeros 10s y resume la severidad" |
anr_root_cause_analyzer | Analiza en profundidad las causas de ANR con probabilidad clasificada | "Analiza la causa raíz de ANR alrededor de 20,000 ms y clasifica las causas probables" |
🎯 Perfilado de rendimiento
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
cpu_utilization_profiler | Uso de CPU y planificación a nivel de hilo | "Perfila el uso de CPU por hilo y marca los hilos más calientes" |
main_thread_hotspot_slices | Encuentra las operaciones de hilo principal de mayor duración | "Lista los puntos críticos del hilo principal >50 ms durante 10s–25s" |
📱 Rendimiento de la interfaz de usuario
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
detect_jank_frames | Identifica fotogramas que no cumplen los plazos | "Encuentra fotogramas con jank por encima de 16.67 ms y lista los 20 peores" |
frame_performance_summary | Métricas generales de salud de fotogramas | "Resume el rendimiento de fotogramas e informa la tasa de jank y el tiempo de CPU P99" |
🔒 Concurrencia e IPC
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
thread_contention_analyzer | Encuentra cuellos de botella de sincronización | "Encuentra contención de bloqueos entre 15s–30s y muestra las peores esperas" |
binder_transaction_profiler | Analiza el rendimiento de IPC de Binder | "Perfila transacciones Binder lentas y agrupa por proceso servidor" |
💾 Análisis de memoria
| Herramienta | Propósito | Ejemplo de indicación |
|---|---|---|
memory_leak_detector | Encuentra patrones de crecimiento sostenido de memoria | "Detecta señales de fugas de memoria en los últimos 60s" |
heap_dominator_tree_analyzer | Identifica clases que consumen mucha memoria | "Analiza clases dominadoras del heap y lista los principales culpables" |
Formato de salida
Todas las herramientas devuelven JSON estructurado con:
- Summary: Hallazgos de alto nivel
- Details: Resultados específicos de la herramienta
- Metadata: Contexto de ejecución y cualquier respaldo utilizado
📚 Recursos
- API de Python de Trace Processor - Interfaz de Python de Perfetto
- Sintaxis SQL de Perfetto - Referencia de SQL para consultas personalizadas
📄 Licencia
Licencia Apache 2.0. Consulta LICENSE para más detalles.