0xZOne

perfetto-mcp-rs

Community 0xZOne
Updated

MCP server for analyzing Perfetto traces with LLMs — query .pftrace files in PerfettoSQL via Claude Code or any MCP client

perfetto-mcp-rs

English | 简体中文

An MCP server for analyzingPerfetto traces with LLMs. Point Claude Code (or anyMCP client) at a .perfetto-trace / .pftrace file and query it withPerfettoSQL.

Backed by trace_processor_shell — downloaded automatically on first run, nomanual Perfetto install required.

Works best with agentic MCP clients (Claude Code, Codex, Claude Desktop, Cursor)that can chain multi-turn tool calls. Non-agentic clients will see the sametools but won't be able to follow the error-message nudges that steer theLLM through the typical load_tracelist_tableslist_table_structureexecute_sql flow.

Navigate agents toward the right PerfettoSQL stdlib modules — the analysis SQL is always the agent's own.

Quick install

Linux / macOS / Windows (Git Bash, MSYS2, Cygwin):

curl -fsSL https://raw.githubusercontent.com/0xZOne/perfetto-mcp-rs/main/install.sh | sh

Windows (PowerShell):

irm https://raw.githubusercontent.com/0xZOne/perfetto-mcp-rs/main/install.ps1 | iex

Both installers drop the prebuilt binary into ~/.local/bin (or%USERPROFILE%\.local\bin on Windows), add it to your user PATH if needed,and — if Claude Code and/or Codex are installed — register it automatically.Restart Claude Code or start a new Codex session to pick it up.

Supported platforms: linux amd64/arm64, macOS amd64/arm64, Windows amd64.If you'd rather not run a script, grab the binary directly from thereleases page.

Upgrade

Re-run the same install command — it pulls the latest release, safelyoverwrites the existing binary (with Windows file-lock retry), andre-registers the MCP server with Claude Code / Codex idempotently.

Pin to a specific version with the VERSION env var:

VERSION=v0.7.0 curl -fsSL https://raw.githubusercontent.com/0xZOne/perfetto-mcp-rs/main/install.sh | sh

No auto-update daemon — upgrades are explicit.

Uninstall

One-liner per platform. Unregisters the MCP server from Claude Code and Codex,removes the binary, and deletes the cached trace_processor_shell.

Linux:

if command -v claude >/dev/null 2>&1; then claude mcp remove perfetto-mcp-rs --scope user 2>/dev/null; fi; if command -v codex >/dev/null 2>&1; then codex mcp remove perfetto-mcp-rs 2>/dev/null; fi; rm -f ~/.local/bin/perfetto-mcp-rs; rm -rf ~/.local/share/perfetto-mcp-rs

macOS:

if command -v claude >/dev/null 2>&1; then claude mcp remove perfetto-mcp-rs --scope user 2>/dev/null; fi; if command -v codex >/dev/null 2>&1; then codex mcp remove perfetto-mcp-rs 2>/dev/null; fi; rm -f ~/.local/bin/perfetto-mcp-rs; rm -rf "$HOME/Library/Application Support/perfetto-mcp-rs"

Windows (PowerShell) — close Claude Code, Codex, or anything else using the .exe first:

if (Get-Command claude -ErrorAction SilentlyContinue) { claude mcp remove perfetto-mcp-rs --scope user 2>$null }; if (Get-Command codex -ErrorAction SilentlyContinue) { codex mcp remove perfetto-mcp-rs 2>$null }; Remove-Item -Force "$HOME\.local\bin\perfetto-mcp-rs.exe*" -ErrorAction SilentlyContinue; Remove-Item -Recurse -Force "$env:LOCALAPPDATA\perfetto-mcp-rs" -ErrorAction SilentlyContinue

Tools

Tool Purpose
load_trace Open a .perfetto-trace / .pftrace file (must be called first)
list_tables List tables/views in the loaded trace, optional GLOB filter
list_table_structure Show column names and types for a table
execute_sql Run a PerfettoSQL query, returns JSON rows (max 5000)
list_processes List processes in the trace (pid, name, start/end timestamps)
list_threads_in_process List threads under a process name (up to 2000)
chrome_scroll_jank_summary Worst janky frames with cause, sub-cause, delay_since_last_frame (Chrome trace)
chrome_page_load_summary Page loads: URL, FCP, LCP, DCL, load timings in ms (Chrome trace)
chrome_main_thread_hotspots Top main-thread tasks by duration with cpu_pct, uses is_main_thread (Chrome trace)
chrome_startup_summary Browser startup events and time-to-first-visible-content (Chrome trace)
chrome_web_content_interactions Web content interactions (clicks, taps, INP) ranked by duration (Chrome trace)
list_stdlib_modules List available PerfettoSQL stdlib modules with usage examples (no trace needed)

Typical flow depends on trace type:

  • Chrome traces: load_trace → dedicated chrome_* tools(chrome_scroll_jank_summary, chrome_page_load_summary,chrome_main_thread_hotspots, chrome_startup_summary,chrome_web_content_interactions) → execute_sql for deeper analysison the returned rows.
  • Other traces: load_tracelist_tables / list_table_structurefor schema discovery → execute_sql for queries. Calllist_stdlib_modules as an auxiliary when stdlib modules might coveryour analysis (Android, generic modules like slices.with_context).

Example

Ask Claude Code or Codex something like:

Load ~/traces/scroll_jank.pftrace and tell me the top scroll jank causes.

Claude will call load_trace, then issue a query like:

INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_jank_v3;
SELECT cause_of_jank, COUNT(*) AS n
FROM chrome_janky_frames
GROUP BY cause_of_jank
ORDER BY n DESC;

Manual MCP client configuration

If the installer's auto-registration doesn't apply to your client:

Codex:

codex mcp add perfetto-mcp-rs -- /absolute/path/to/perfetto-mcp-rs

JSON-based clients (e.g. Claude Code, Claude Desktop, Cursor):

{
  "mcpServers": {
    "perfetto-mcp-rs": {
      "command": "/absolute/path/to/perfetto-mcp-rs"
    }
  }
}

Configuration

Variable Effect
PERFETTO_TP_PATH Path to an existing trace_processor_shell binary; skips auto-download
PERFETTO_STARTUP_TIMEOUT_MS Overrides the trace_processor_shell startup timeout in milliseconds
PERFETTO_QUERY_TIMEOUT_MS Overrides the HTTP status/query timeout in milliseconds
RUST_LOG tracing-subscriber filter, e.g. RUST_LOG=debug for verbose logs (written to stderr)

CLI flags:

Flag Default Description
--max-instances 3 Maximum cached trace_processor_shell processes (LRU-evicted)
--startup-timeout-ms 5000 Max time to wait for a spawned trace_processor_shell to become ready
--query-timeout-ms 30000 HTTP timeout for /status and /query requests

Build from source

Requires a Rust toolchain and protoc (Protocol Buffers compiler):

# Ubuntu/Debian
sudo apt install -y protobuf-compiler
# macOS
brew install protobuf
# Windows
choco install protoc

Then:

git clone https://github.com/0xZOne/perfetto-mcp-rs
cd perfetto-mcp-rs
cargo build --release
# Binary at target/release/perfetto-mcp-rs

Development

cargo test          # unit tests
cargo clippy        # lint
cargo fmt           # format

License

Dual-licensed under either of Apache License, Version 2.0 orMIT license at your option. Contributions are accepted underthe same terms.

MCP Server · Populars

MCP Server · New

    wallneradam

    Claude Auto-Approve MCP

    An MCP server to inject auto-approve MCP functionality into Claude Desktop

    Community wallneradam
    YV17labs

    ghostdesk

    Give any AI agent a full desktop — it sees the screen, clicks, types, and runs apps like a human. Automate anything with a UI: browsers, legacy software, internal tools. No API needed. One Docker command.

    Community YV17labs
    remotebrowser

    mcp

    Free your data

    Community remotebrowser
    Decodo

    Decodo MCP Server

    The Decodo MCP server which enables MCP clients to interface with services.

    Community Decodo
    kuberstar

    Qartez MCP

    Semantic code intelligence MCP server for Claude Code - project maps, symbol search, impact analysis, and more

    Community kuberstar