perfetto-mcp-rs
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RUST_LOG | No | tracing-subscriber filter, e.g. RUST_LOG=debug for verbose logs (written to stderr) | |
| PERFETTO_TP_PATH | No | Path to an existing trace_processor_shell binary; skips auto-download | |
| PERFETTO_QUERY_TIMEOUT_MS | No | Overrides the HTTP status/query timeout in milliseconds | |
| PERFETTO_STARTUP_TIMEOUT_MS | No | Overrides the trace_processor_shell startup timeout in milliseconds |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| chrome_main_thread_hotspotsA | Top Chrome main-thread tasks by wall duration: id, ts, name, task_type, thread_name, process_name, upid, pid, nullable machine_id, dur_ms, overlap_dur_ms, full_task_cpu_pct/full_task_thread_dur_ms, overlap_cpu_pct/overlap_thread_dur_ms; legacy cpu_pct/thread_dur_ms are full-task. Uses Use when: investigating responsiveness, scroll/load stalls, CPU vs wall time, or one renderer. Don't use for: non-Chrome traces (will error). For background (non-main) thread tasks, drop to Parameters (all optional):
Output: metadata-first JSON preserving Empty result: no detected main-thread tasks exceeded |
| chrome_page_load_resource_hotspotsA | Rank URL-bearing Chrome resource/request slices in a page-load/raw window. Returns timing, overlap, process/thread/machine_id, URL. Use after |
| chrome_page_load_resource_pipelineA | Drill into one Chrome page-load resource URL and join lifecycle/request spans with script/style/layout signals. Use after |
| chrome_page_load_resource_summaryA | URL-level Chrome resource/request summary for a page-load/raw window. Returns URL key, process/machine/priority sets, span, max/summed overlap, primary/detail slice evidence (detail is not a root-cause claim), navigation/renderer relation including |
| chrome_page_load_script_hotspotsA | Rank renderer main-thread script groups in a Chrome page-load/raw window: URL/name/process/thread/machine_id, wall/CPU totals, style/layout ms, example_slice_id. Read-only. Use when: slow FCP/load needs post-resource JS attribution; expand Parameters: optional process filters ( |
| chrome_page_load_summaryA | Summarize each page navigation in a Chrome trace: navigation id, URL, raw boundary timestamps, FCP / LCP / DCL / load timings in ms. Read-only. Use when: comparing page-load timings across navigations, finding slow loads, baselining web-vitals before/after a change. Prefer over hand-joining Don't use for: non-Chrome traces (will error). For sub-event timings inside one navigation, drop to Parameters: optional Output: metadata-first JSON; Empty result: no navigations occurred during capture (e.g. trace started after the page was already loaded). |
| chrome_scroll_jank_summaryA | Summarize the worst scroll jank frames in a Chrome trace: cause_of_jank, sub_cause_of_jank, delay_since_last_frame, event_latency_id, scroll_id, vsync_interval. One row per janky frame, sorted by delay_since_last_frame DESC. Read-only. Use when: investigating jank reports, finding scroll regressions, ranking jank causes. Prefer over hand-rolling SQL on Don't use for: non-Chrome traces (will error). For custom filters, use Parameters: optional Output: metadata-first JSON; Empty result: no janky frames detected (clean trace) or no scrolls occurred during capture. |
| chrome_startup_summaryA | Summarize Chrome browser startup events: id, name, launch_cause, startup_duration_ms (first_visible_content_ts - startup_begin_ts), browser_upid. Read-only. Use when: measuring time-to-first-visible-content for cold starts, comparing launch causes (NEW_WINDOW vs CMD_LINE vs RESTORE_SESSION), regressing startup performance. Don't use for: non-Chrome traces (will error). Browser-process work during steady state is covered by Parameters: optional Output: metadata-first JSON; Empty result: trace started after the browser was already running (most cases — startup is captured only when tracing began before launch). |
| chrome_web_content_interactionsA | Rank Chrome web content interactions by total_duration_ms: id, ts, total_duration_ms, longest_event_dur_ms, interaction_type, renderer_upid. Read-only. Use when: INP analysis, reproducing user-felt latency, finding slow click/tap/keyboard handlers. Don't use for: non-Chrome traces (will error). For interactions filtered by Parameters: optional Output: metadata-first JSON; Empty result: no interactions captured (trace started before user input or interaction tracking was disabled in tracing config). |
| execute_sqlA | Run a PerfettoSQL query against the loaded trace and return rows as columnar JSON. Read-only against trace data; SQLite operates in-memory per session. Aggregates are strongly preferred over raw row data; results are capped at 5000 rows. Use when: composing analyses not covered by the dedicated tools — custom aggregations, joins across stdlib modules, or queries against base tables ( Don't use for: questions the dedicated Parameters: Empty Reference docs (fetch when you need exact column names or function signatures): https://perfetto.dev/docs/analysis/stdlib-docs (24 stdlib packages — chrome / android / sched / slices / linux / wattson / v8 / ...; use per-package anchors like |
| list_processesA | List every process captured in the trace: upid (trace-internal id), pid, machine_id, name, start_ts, end_ts. Read-only. Use when: entry point for Android and Linux trace analysis, or picking the right Don't use for: Chrome traces — the dedicated Parameters: none — operates on the loaded trace. Empty result: rare; would mean the trace captured no process metadata at all. Errors when: no trace is loaded — call |
| list_stdlib_modulesA | List curated PerfettoSQL stdlib modules as JSON entries with Optional filters: |
| list_table_structureA | Show the columns of a table or view: name, type, nullability, primary_key flag. Use when: writing or debugging a query — call this immediately after a Don't use for: this is a separate MCP tool, not a SQL function — don't write Parameters: Errors when: the table doesn't exist or has no columns. Call |
| list_tablesA | List tables and views in the loaded trace. Read-only. Use when: exploring an unfamiliar trace or verifying a table exists before writing SQL. Underlying SQL engine is SQLite, so the catalog tables common in other SQL engines aren't present — this MCP tool is the schema introspection path. Don't use for: queries against known stdlib modules — go straight to Parameters: optional Empty result: no tables matched. For stdlib views, run Errors when: no trace is loaded — call |
| list_threads_in_processA | List threads in one process or same-named process set: tid, thread_name, pid, upid, machine_id. Limit 2000, cap 5000. Use when: drilling into a process from Don't use for: ALL trace threads — use Parameters: pass either Output: exact Empty result: returned as an error pointing at When |
| load_traceA | Load one or more local Perfetto trace files and return routing summaries plus Use when: starting any analysis session — call this first. Don't use for: live capture or streaming URLs; paths must be complete local trace files. Parameters: pass Errors when: the file doesn't exist, isn't a valid Perfetto trace, trace_processor fails to parse it, or the binary cannot be downloaded. |
| slice_descendants_breakdownA | Recursive child-slice expansion under known |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| stdlib-quickref | Curated PerfettoSQL stdlib modules and minimal routing examples. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tooluse-labs/perfetto-mcp-rs'
If you have feedback or need assistance with the MCP directory API, please join our Discord server