Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Metal GPU Trace

PYPI · METAL-GPU-TRACE

Measure Wine and macOS programs' GPU use on Apple silicon with Metal System Trace

Available components

−8 this week 72 Trust /100

Last scanned (14 hours ago)

Scores higher than 68% of PyPI servers

Category Monitoring and Observability

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to partprogramming09/metal-gpu-trace). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 5346 tokens (~198/item across 27 items; 22 tools + 5 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management57
  • Stability observed for 17 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Nov 26 0
    • Schema quality: 135 → 198 ▼ functional
    • Schema quality: 135 → 172 ▼ functional
    • Package version: 0.10.2 → 0.16.0 functional
    • Package version: 0.10.2 → 0.14.0 functional
  • 2 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
    • First check of Tool coverage: 100 functional
    • Package version: 0.8.4 → 0.10.2 functional
    • Package version: 0.8.4 → 0.10.1 functional
    • Package version: 0.8.4 → 0.10.0 functional
    • Package version: 0.8.4 → 0.9.1 functional
  • 1 Nov 26 +7
    • Tool safety: pass → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: fail → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Stability: unverified → 0.47 ▲ functional
    • Package version: 0.7.1 → 0.8.4 functional
    • Package version: 0.7.1 → 0.8.3 functional
    • Package version: 0.7.1 → 0.8.1 functional
  • 31 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 27 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 26 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 22 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/metal-gpu-trace@0.16.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo partprogramming09/metal-gpu-trace
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/partprogramming09/metal-gpu-trace/.github/workflows/publish.yml@refs/tags/v0.16.0
Rekor log index 3658236755
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:c2c6202f341371917b798c8964a211c531b771a10dd92499112a682559bdd657

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 0 packages
Packages resolved 0
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 22 exposed · ~4,871 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
capture_records ~93

Returns one page of the records of a .gputrace command stream, with their Metal call names when known.

NameTypeReqDescription
capturestringyespath of a .gputrace bundle saved from Xcode, inside METAL_TRACE_OUT or METAL_TRACE_READ
limitinteger–rows per page, default 50, at most 500
offsetinteger–first row, default 0
NameTypeReqDescription
next_offsetinteger|nullyes–
offsetintegeryes–
rowsarrayyes–
totalintegeryes–

No examples provided.

capture_summary ~75

Reads a Metal .gputrace capture without Xcode: command buffers, encoders, draws, debug groups, and the 100 most frequent call ids out of calls_total.

NameTypeReqDescription
capturestringyespath of a .gputrace bundle saved from Xcode, inside METAL_TRACE_OUT or METAL_TRACE_READ

Structured output declared, but exposes no named fields.

No examples provided.

gpu_family ~92

Apple's published facts for one GPU family, by family ("Apple7") or chip ("M1 Pro"): its chips, what it adds, its limits, plus the limits shared by all families and the footnotes. Source URLs are in the result.

NameTypeReqDescription
namestringyesa family (Apple7 to Apple10) or a chip (M1 Pro, M2, M4 Max, A17 Pro)

Structured output declared, but exposes no named fields.

No examples provided.

perf_ab ~581

Records the same program with two environments in the order A B B A (repeated `rounds` times, so drift hits both sides equally) and says per metric whether B is better, worse or the same as A, with every value behind it. env_a and env_b are NAME=VALUE pairs separated by spaces; empty means none. Runs are named `name`-a1, `name`-b1, ... Each recording takes its seconds plus about a minute to read back. skip_s leaves out the first seconds of every recording (the start-up) when the verdicts are drawn, as perf_compare does; the recordings are whole.

NameTypeReqDescription
apistring–with workload: mtl (native Metal), vk (Vulkan through MoltenVK: set METAL_TRACE_MOLTENVK), d3d11 or d3d12 (under wine)
argsstring–program arguments as in a shell, quotes included
countersboolean–default false; true also records Metal GPU Counters (gpu_counters in the summary); not under Windows; adds about 40 s of read-back per recorded second
diminteger–with workload drawstress: side of the cube grid, dim^3 draws per frame
env_astringyesNAME=VALUE pairs for side A, the reference (empty: none)
env_bstringyesNAME=VALUE pairs for side B, the change under test (empty: none)
memoryboolean–default true; false skips the Metal memory table, the slowest to read (about 40 % faster summary): no metal_mib_peak
namestringyesname for the runs: letters, digits, '.', '_', '-'
prefixstring–Wine prefix, default WINEPREFIX or ~/.wine; ignored with native
programstring–path of the .exe, or of the macOS binary with wine=native
roundsinteger–A B B A rounds, default 1 (4 recordings), at most 5
secondsinteger–recording length, default 20; use 30 under Wine, whose start-up takes part of it; the export afterwards takes several minutes under Wine
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them
winestring–Wine directory holding bin/wine, or native
workdirstring–directory the program starts in, default the program's own
workloadstring–a test program from workload_list, fetched with workload_fetch, instead of program

Structured output declared, but exposes no named fields.

No examples provided.

perf_attach ~140

Records a program that is already running, by pid or by a name in its command line (Game.exe under Wine), for `seconds` and returns the same summary as perf_record; the program keeps running. For games started by Steam, CrossOver, NotProton or any launcher: start the game or its benchmark there first.

NameTypeReqDescription
labelstringyesname for the run: letters, digits, '.', '_', '-'
processstringyespid, or a name in the program's command line such as Game.exe
secondsinteger–recording length, default 20; the export afterwards takes several minutes under Wine

Structured output declared, but exposes no named fields.

No examples provided.

perf_baseline ~311

Names a reference for perf_check, or lists them. With name and runs (names from perf_runs, several runs of the same program recorded with no change between them), it saves copies of their summaries as the reference `name`, replacing a previous one, and returns the range each number spans across them: that range, not one run, is what perf_check judges against, since repeated runs differ by a few percent, and `spread_pct`, each range's width in % of its midpoint: the noise of this program on this machine, which a change must exceed. With name alone it shows that reference; with nothing it lists them. With skip_s the reference keeps each run without its first skip_s seconds (the start-up, as perf_compare's skip_s) and perf_check applies the same cut to the run it judges, so both are steady-state; the runs need their per-frame files for that.

NameTypeReqDescription
namestring–reference name: letters, digits, '.', '_', '-'; alone, shows that reference
runsarray–run names from perf_runs to save as this reference, ideally 3 or more equal runs; replaces a previous one
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them; perf_check…

Structured output declared, but exposes no named fields.

No examples provided.

perf_baseline_record ~511

Records the same program `count` times in a row with perf_record's arguments and saves the runs as the reference `name` for perf_check, returning the range each number spans across them. Runs are named `name`-1, `name`-2, ... Each recording takes its seconds plus about a minute to read back. skip_s as in perf_baseline: the reference leaves out each run's start-up.

NameTypeReqDescription
apistring–with workload: mtl (native Metal), vk (Vulkan through MoltenVK: set METAL_TRACE_MOLTENVK), d3d11 or d3d12 (under wine)
argsstring–program arguments as in a shell, quotes included
countinteger–equal recordings to make, default 3
countersboolean–default false; true also records Metal GPU Counters (gpu_counters in the summary); not under Windows; adds about 40 s of read-back per recorded second
diminteger–with workload drawstress: side of the cube grid, dim^3 draws per frame
envstring–NAME=VALUE pairs separated by spaces, set in the program's environment
memoryboolean–default true; false skips the Metal memory table, the slowest to read (about 40 % faster summary): no metal_mib_peak
namestringyesreference name: letters, digits, '.', '_', '-'
prefixstring–Wine prefix, default WINEPREFIX or ~/.wine; ignored with native
programstring–path of the .exe, or of the macOS binary with wine=native
secondsinteger–recording length, default 20; use 30 under Wine, whose start-up takes part of it; the export afterwards takes several minutes under Wine
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them; perf_check…
winestring–Wine directory holding bin/wine, or native
workdirstring–directory the program starts in, default the program's own
workloadstring–a test program from workload_list, fetched with workload_fetch, instead of program

Structured output declared, but exposes no named fields.

No examples provided.

perf_check ~230

Judges a recording against a reference saved with perf_baseline: regressed when FPS falls under the reference's lowest FPS by more than margin_pct, GPU ms per frame rises over its highest by more than margin_pct, or encoders or command buffers per frame exceed its highest; improved when a number leaves the range the other way and none regressed; same otherwise. Frame pacing, short encoders and GPU idle time are reported by the comparison but do not decide: they vary too much between equal runs. A run from Windows against a Metal reference (or the reverse) is judged on FPS alone. A reference saved with skip_s judges the run without its first skip_s seconds too (`skipped_s` says so). Returns the reasons and perf_compare's full comparison against the reference's first run.

NameTypeReqDescription
baselinestringyesa reference name from perf_baseline
margin_pctnumber–how far outside the reference's range FPS or GPU ms per frame may fall before counting, default 3
runstringyesa run name from perf_runs

Structured output declared, but exposes no named fields.

No examples provided.

perf_compare ~406

Compares two saved recordings (names from perf_runs), a the reference and b the run after a change: the headline numbers (FPS, GPU ms, frame pacing, memory), then what changed in the GPU work and where: encoders and command buffers per frame, the share of encoders under short_us, the GPU's idle time, and each encoder label's count and GPU ms per frame, largest change first. layer says whether both ran on the same translation layer: with different layers it compares layers, not one change. A Windows run against a Metal run has `measure`: the GPU ms and Metal memory differ in kind and the encoders exist only in Metal, so use FPS, its lows, stutter and jitter. Recordings with under 100 frames are flagged: too short to compare. With markdown true the result also has `markdown`: the same numbers as tables for a PR comment. skip_s leaves out the first seconds of each recording, where shaders compile and resources load: the GPU numbers, hitches and Metal memory are recomputed from the per-frame files without them, and `skipped_s` says it; thermal state, process memory and encoders stay whole-run.

NameTypeReqDescription
astringyesrun name from perf_runs: the reference, such as the run before a change
bstringyesrun name from perf_runs: the run to compare against a
markdownboolean–also return the numbers as Markdown tables, default false
short_usinteger–an encoder under this GPU time counts as short: 10, 25 (default), 50, 100, 250, 500 or 1000
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them

Structured output declared, but exposes no named fields.

No examples provided.

perf_diagnose ~251

Says whether a saved recording splits its GPU work into too many short encoders, the pattern of translation layers such as DXMT, Mullion or MoltenVK, with the numbers behind it: encoders and command buffers per frame, the share of short encoders, the labels with the most GPU time and the GPU's idle time. Read the idle time together with the FPS: a program waiting for vsync idles too. Defaults come from bgfx 17-drawstress on an M1 Pro: 7 encoders per frame and 50% under 25 us under Mullion, 2 and 2% in native Metal.

NameTypeReqDescription
min_encodersinteger–encoders per frame (median) from which the verdict can be yes, default 4
runstringyesa run name from perf_runs
short_sharenumber–share of short encoders from which the verdict is yes, default 0.25
short_usinteger–an encoder under this GPU time counts as short: 10, 25 (default), 50, 100, 250, 500 or 1000

Structured output declared, but exposes no named fields.

No examples provided.

perf_export_trace ~120

Writes a recording's GPU frames as a Chrome trace file, `<run>.chrome-trace` in the runs directory, that ui.perfetto.dev and chrome://tracing open: one slice per GPU frame, from its start for its GPU time (the sum of its encoders' time, so a frame with parallel encoders can show shorter than it took), with the compute, fragment and vertex split as arguments. Returns the file name and the number of frames.

NameTypeReqDescription
runstringyesa run name from perf_runs

Structured output declared, but exposes no named fields.

No examples provided.

perf_gate ~318

Checks a recording against budgets and says pass or fail: a floor for FPS and the 1% low, a ceiling for the stutter rate, the p95 GPU ms per frame, the hitch count and the peak Metal MiB. Give at least one. A number the recording lacks fails its budget (value null): a gate must not pass on missing data. Returns each budget with its limit, the value and whether it held. Use it as a bar a change must clear, where perf_check judges against equal runs. skip_s leaves out the first seconds of the recording (the start-up), as perf_compare does.

NameTypeReqDescription
fps_1pct_low_minnumber–the 1% low FPS must be at least this
fps_minnumber–the FPS must be at least this
gpu_ms_p95_maxnumber–the p95 GPU ms per frame at most this
hitches_maxnumber–the number of hitches at most this
metal_mib_maxnumber–the peak Metal memory in MiB at most this
runstringyesa run name from perf_runs
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them
stutter_rate_pct_maxnumber–the share of stutter frames, in %, at most this

Structured output declared, but exposes no named fields.

No examples provided.

perf_history ~226

Lists the recordings whose name starts with `prefix`, oldest first, with their FPS, 1% low, GPU ms, stutter, hitches and peak Metal MiB, and the change from the first to the last: how a number moved over a series of runs, such as one recording per version of a translation layer. Read a trend as real only when it exceeds the spread_pct that perf_baseline reports for equal runs. Runs from Windows and Metal in one series are flagged: their GPU ms and memory do not compare. skip_s leaves out the first seconds of each recording (the start-up), as perf_compare does.

NameTypeReqDescription
limitinteger–newest runs to keep, default 50
prefixstringyesthe start of the run names to follow: letters, digits, '.', '_', '-'
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them

Structured output declared, but exposes no named fields.

No examples provided.

perf_panel ~431

Writes one HTML file, `<name>.panel.html` in the runs directory, that shows one or two recordings in a browser without a server: GPU time per frame with the hitches marked, the numbers (FPS and its lows, frame time, jitter, stutter, memory, thermal state), Metal memory over time and, for two runs, A against B. The file holds the data itself, no path, and loads nothing from the network; the viewer can hide and reorder the widgets and export the layout as JSON. preset `fps` is the timeline, numbers and memory; `compare` (two runs) puts A against B first. skip_s leaves out the first seconds of each recording (the start-up), as perf_compare does. layout (tab ids in the order to show) is saved as panel.json in the runs directory and becomes the default tab order of every panel, the live one too, until the viewer changes it in the browser; ids left out are hidden but can be switched back on; tabs are summary, ab, frames, encoders, counters, memory and data, and a panel.json you wrote yourself, or copied from the panel's Layout JSON, works the same. Returns the file name, the runs, the frames shown and the file's bytes.

NameTypeReqDescription
layoutarray–tabs to show, in order: summary, ab, frames, encoders, counters, memory, data; saved as panel.json in the runs directory as the default for every panel
namestringyesname for the panel file: letters, digits, '.', '_', '-'
presetstring–fps (default) or compare (needs two runs)
runsarrayyesone or two run names from perf_runs; with two, the first is A, the reference
skip_snumber–seconds to leave out at the start of each recording, where shaders compile and resources load; 0 (default) keeps all. The GPU numbers, hitches and Metal memory are recomputed without them

Structured output declared, but exposes no named fields.

No examples provided.

perf_record ~505

Records `program` (an .exe under Wine, or a macOS binary with wine="native"), or a test program fetched with workload_fetch (workload, api, dim), for `seconds` with Metal System Trace and returns its summary: GPU ms per frame, frame intervals, FPS, Metal and resident memory (memory=false skips the Metal memory table, the slowest to read). When it ends it stops every program of that Wine prefix (wineserver -k), or every process named like the program with native. counters=true also records Metal GPU Counters (`gpu_counters` in the summary: the units the GPU waited on, its utilization, occupancy and memory bandwidth); it adds about 40 s of read-back per recorded second.

NameTypeReqDescription
apistring–with workload: mtl (native Metal), vk (Vulkan through MoltenVK: set METAL_TRACE_MOLTENVK), d3d11 or d3d12 (under wine)
argsstring–program arguments as in a shell, quotes included
countersboolean–default false; true also records Metal GPU Counters (gpu_counters in the summary); not under Windows; adds about 40 s of read-back per recorded second
diminteger–with workload drawstress: side of the cube grid, dim^3 draws per frame
envstring–NAME=VALUE pairs separated by spaces, set in the program's environment
labelstringyesname for the run: letters, digits, '.', '_', '-'
memoryboolean–default true; false skips the Metal memory table, the slowest to read (about 40 % faster summary): no metal_mib_peak
prefixstring–Wine prefix, default WINEPREFIX or ~/.wine; ignored with native
programstring–path of the .exe, or of the macOS binary with wine=native
secondsinteger–recording length, default 20; use 30 under Wine, whose start-up takes part of it; the export afterwards takes several minutes under Wine
winestring–Wine directory holding bin/wine, or native
workdirstring–directory the program starts in, default the program's own
workloadstring–a test program from workload_list, fetched with workload_fetch, instead of program

Structured output declared, but exposes no named fields.

No examples provided.

perf_runs ~77

Lists the saved recordings, newest first, with frames, FPS, GPU ms per frame, memory peaks and the translation layer each ran on (fingerprint and Wine, or native).

NameTypeReqDescription
limitinteger–rows per page, default 50, at most 500
offsetinteger–first row, default 0
NameTypeReqDescription
next_offsetinteger|nullyes–
offsetintegeryes–
rowsarrayyes–
totalintegeryes–

No examples provided.

presentmon_install ~84

Windows only: downloads Intel's PresentMon console application (MIT) from its GitHub release, checks its SHA-256 against the one this package pins, and keeps it in %LOCALAPPDATA%\metal-gpu-trace, where perf_record and perf_attach find it; later calls reuse it. It needs administrator rights or the Performance Log Users group to run.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

trace_count ~105

Counts the rows of several tables of a kept .trace, in all and per process, so a recording's useful tables show before reading them: a table with 0 rows needs another instrument or Xcode, not a bigger page.

NameTypeReqDescription
tablesarray–table names from trace_tables; default the tables that matter for a translation layer
tracestringyesa run name from perf_runs whose trace_kept is true, or the path of a .trace

Structured output declared, but exposes no named fields.

No examples provided.

trace_query ~128

Returns one page of rows of one table of a .trace as {column: value}, optionally only one process's rows.

NameTypeReqDescription
limitinteger–rows per page, default 50, at most 500
offsetinteger–first row, default 0
pidinteger–keep only this process's rows
schemastringyesa table name that trace_tables lists, such as metal-gpu-intervals
tracestringyesa run name from perf_runs whose trace_kept is true, or the path of a .trace
NameTypeReqDescription
next_offsetinteger|nullyes–
offsetintegeryes–
rowsarrayyes–
totalintegeryes–

No examples provided.

trace_tables ~60

Lists the data tables (schemas) a .trace recording holds; recordings keep their .trace only with KEEP_TRACE=1.

NameTypeReqDescription
tracestringyesa run name from perf_runs whose trace_kept is true, or the path of a .trace

Structured output declared, but exposes no named fields.

No examples provided.

workload_fetch ~84

Downloads a test program from this project's GitHub releases once, checks its SHA-256 against the one this package pins, and keeps it in ~/Library/Caches/metal-gpu-trace; later calls reuse it. The programs are built from source by the project's workloads workflow.

NameTypeReqDescription
namestringyesa workload name from workload_list, such as drawstress

Structured output declared, but exposes no named fields.

No examples provided.

workload_list ~43

Lists the test programs workload_fetch can download, such as bgfx's drawstress: what each measures, its size, license and APIs, and whether it is already downloaded.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the Metal GPU Trace MCP server?

Metal GPU Trace runs locally as a PyPI package, launched with uvx metal-gpu-trace. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · metal-gpu-trace

# add to Claude Code
claude mcp add partprogramming09-metal-gpu-trace -- uvx metal-gpu-trace
Common questions

What is the Metal GPU Trace MCP server?

Metal GPU Trace is an MCP server listed in the public MCP registry as io.github.partprogramming09/metal-gpu-trace. Measure Wine and macOS programs' GPU use on Apple silicon with Metal System Trace. This page covers its PyPI package (metal-gpu-trace).

Is the Metal GPU Trace MCP server safe to use?

Metal GPU Trace scores 72 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Metal GPU Trace MCP server expose?

Metal GPU Trace exposes 22 tools: perf_record, perf_baseline_record, perf_ab, perf_attach, perf_runs, and 17 more. Their descriptions and schemas cost roughly 4,871 tokens of context every time the server is loaded.

Is the Metal GPU Trace MCP server still maintained?

Metal GPU Trace is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Metal GPU Trace MCP server under?

Metal GPU Trace declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.