Skip to main content
Glama
Stankye

profiler-mcp

by Stankye

profiler-mcp

CAUTION

⚠️ NOT READY FOR USE — EXPERIMENTAL / UNVERIFIED-ON-HARDWARE. ⚠️

This project was built and tested entirely in mock mode on an Apple-Silicon Mac. It has never been run against a real Intel VTune or AMD uProf install, on any CPU. The mock backends are modeled on verbatim captures of real CLI output, but the real-hardware code paths (binary discovery, live collection, actual CSV/summary parsing on your version, permission and driver handling) are unexercised and will likely need fixing. The command-line flag surfaces are reconstructed from documentation and may not match your installed version. There is no released version, no stability guarantee, and no support. Treat this as a design prototype and a starting point to fork — do not point it at production workloads or trust its numbers, and read Status & known limitations before doing anything with it.

Two MCP servers that put CPU profilers in front of coding agents: vtune (Intel VTune Profiler, 7 tools) and uprof (AMD uProf, 9 tools) — one Python package, one shared core. Neither profiler runs on macOS or on machines without the right silicon, so each server ships a byte-realistic mock backend (derived from verbatim captures of the real CLIs) that lets the whole project run, self-test, and even self-optimize anywhere.

MCP client (Claude Code)
    │ stdio (default) or streamable-http
    ▼
vtune-mcp / uprof-mcp      server.py  — FastMCP tool surface
    │                      cli.py     — argv construction
    ▼
core/runner.py subprocess ──► real `vtune` / `AMDuProfCLI`
    │                   └───► or mocks/*_mock.py   (picked by core/config.py; auto-mock iff no real binary)
    ▼
parse.py ──► TypedDicts (core/models.py) ──► core/store.py registry (result_id, e.g. "hs-0000")
                  core/compare.py ──► verdict ──► fail_on_regression gate for optimize loops

Quickstart

uv sync                      # Python >=3.11; only runtime dep is the mcp SDK (pinned >=1.28,<2)
uv run pytest                # deterministic self-test gate (layers 1-4, see below)
make -C examples/workloads   # compile the deterministic example workload (hotspots)

Registering with Claude Code: the repo ships a project-scope .mcp.json that starts both servers with uv run vtune-mcp / uv run uprof-mcp — open Claude Code in this directory and it works out of the box on any machine (mock mode auto-activates where the real profilers are absent). To register explicitly instead:

claude mcp add vtune -- uv run vtune-mcp        # from inside this repo
claude mcp add uprof -- uv run uprof-mcp
# or from anywhere, at user scope:
claude mcp add --scope user vtune -- uv run --directory /path/to/profiler-mcp vtune-mcp

A typical conversation (mock mode shown; identical flow with uprof_*):

> what profiling is available here?
  vtune_check() -> mode: "mock", binary: .../mocks/vtune_mock.py, 15 analyses
> profile the example workload's compute phase
  vtune_collect(analysis="hotspots",
                command=["examples/workloads/hotspots", "--seconds", "5", "--only", "compute"])
  -> result_id: "hs-0000"
> where does the time go?
  vtune_report_hotspots(result_id="hs-0000") -> hot_compute 95%, main 5%
  (notes: "Mock mode: synthetic data — do not treat numbers as real hardware measurements.")

Related MCP server: AMS Development MCP Servers

Tool reference

vtune (7 tools)

Tool

Purpose

Key params

vtune_check

Probe env: binary, version, platform, active mode, available analyses

vtune_collect

Run a collection; stores the result, returns a result_id handle

analysis; command or pid (+duration_sec); knobs, working_dir, data_limit_mb, label, allow_unknown

vtune_list_results

List stored results: id, analysis, target, mode, created

vtune_report_summary

Parsed run overview: elapsed/CPU time, metrics, top hotspots

result_id

vtune_report_hotspots

Top-N hottest functions, CPU time descending

result_id, top_n (clamped to 100), group_by, filters

vtune_report_raw

Escape hatch: any vtune report type as byte-capped text

result_id, report_type, extra_args, allow_unknown

vtune_compare

Function-by-function baseline-vs-candidate deltas + pass/fail verdict

baseline_id, candidate_id, threshold_pct, noise_floor_pct, fail_on_regression

uprof (9 tools)

Tool

Purpose

Key params

uprof_check

Probe env; notes that non-AMD CPUs support only tbp

uprof_collect

Run a collection; stores the session, returns a result_id handle

config; command or pid (+duration_sec); call_graph, extra_events, working_dir, label, allow_unknown

uprof_list_results

List stored results: id, config, target, mode, created

uprof_report_summary

Parsed run overview: duration, top hotspots, host details

result_id

uprof_report_hotspots

Top-N hottest functions, sample share descending

result_id, top_n (clamped to 100), ignore_system_modules

uprof_report_raw

Escape hatch: generated report CSV as byte-capped text

result_id, extra_args

uprof_compare

Function-by-function baseline-vs-candidate deltas + pass/fail verdict

baseline_id, candidate_id, threshold_pct, noise_floor_pct, fail_on_regression

uprof_timechart

Sample power/frequency/thermal counters; per-counter summaries

events, duration_sec, interval_ms (min 10), command

uprof_system_info

Parsed AMDuProfCLI info --system: CPU model, cores, OS

Results persist server-side under short ids; tools return capped structured summaries, never raw dumps. Every result is stamped with the mode it was collected in.

Real hardware setup

Linux x86 — VTune (oneAPI Base Toolkit or standalone): source /opt/intel/oneapi/vtune/latest/env/vars.sh puts vtune on PATH, or set VTUNE_MCP_BIN to the binary; the conventional install paths are probed automatically. Driverless hardware sampling needs perf_event_paranoid <= 1 (0 for system-wide/uncore, which memory-access requires) — vtune_check warns when the setting blocks collection. Validate an install with <install-dir>/bin64/vtune-self-checker.sh.

Linux x86 — uProf: installs land in /opt/AMDuProf_X.Y-ZZZ/; the newest /opt/AMDuProf_*/bin/AMDuProfCLI is found automatically, or set UPROF_MCP_BIN. timechart and the energy config additionally need the AMDPowerProfiler kernel driver (auto-installed by rpm/deb; sudo ./AMDPowerProfilerDriver.sh install for tar installs). On Intel CPUs uProf runs tbp (timer-based) only — PMC/IBS/energy configs need AMD hardware.

Windows: default install paths are probed (C:\Program Files (x86)\Intel\oneAPI\vtune\latest\bin64\vtune.exe, C:\Program Files\AMD\AMDuProf\bin\AMDuProfCLI.exe); the *_MCP_BIN overrides work the same way.

macOS: mock mode only. VTune dropped macOS support entirely in 2024.0 and uProf never had it, so there is nothing real to run; auto mode falls back to the mocks.

Mock mode

The mocks (src/profiler_mcp/mocks/) are not stubs. They are byte-realistic emulations of the vendor CLIs, built from verbatim captured output (docs/research/captures-*.md), strict about flags (unknown options are errors, so server argv bugs fail loudly), and they actually execute the profiled command — process lifecycle, exit codes, working dirs, and timeouts are all real. Sample attribution is synthetic and deterministic, driven by a <binary>.mockprofile.json sidecar model next to the target (see examples/workloads/hotspots.mockprofile.json); a generic model applies otherwise.

What they are not: measurements. The weights are fixed, so mock numbers do not respond to your code edits — use mock mode to exercise tooling and workflows, real mode to optimize programs. Every mock-collected result carries an explicit mock-data note.

Fault injection for testing error paths:

Env

Effect

MOCK_FAIL=collect-perm

permission refusal (perf_event_paranoid-style, verbatim vendor text)

MOCK_FAIL=collect-hang

wedged collection that ignores duration (exercises timeouts)

MOCK_FAIL=report-empty

empty/truncated report output

MOCK_FAIL=bad-exit

nonzero exit after normal-looking output

MOCK_FIXED_TIME=<unix-sec>

freezes every emitted timestamp for byte-exact assertions

Self-testing and self-optimization

The full story is in docs/SELF_TESTING.md. The pyramid:

Layer

Where

Catches

1 Unit

tests/test_core_*, parser tests

parser/logic regressions against verbatim fixtures

2 In-memory MCP

tests/test_vtune_*, tests/test_uprof_*

tool wiring, schemas, error mapping (no subprocess)

3 Stdio smoke

tests/test_stdio_smoke.py

entry points and transport, as a client runs them

4 Ground-truth e2e

tests/test_ground_truth.py

compile → collect → report; attribution must match the sidecar model; seeded regression must fail *_compare

5 Agentic

.claude/workflows/self-test.js

LLM-facing quality: probe agents drive both servers over real stdio; failures adversarially verified

Layers 1–4 are the deterministic gate: uv run pytest. Layer 5 runs via the Workflow tool with {scriptPath: ".claude/workflows/self-test.js"}; the companion {scriptPath: ".claude/workflows/optimize-project.js"} is the test-gated self-improvement loop (find → adversarial verify → apply one at a time → re-gate). Agent skills in .claude/skills/: profile-hotspots (drive either server and interpret results), optimize-loop (verdict-gated baseline/change/compare protocol), profiler-selftest (run and extend the pyramid).

Configuration reference

Var

Meaning

Default

PROFILER_MCP_MODE

real / mock / auto

auto — real binary when found, else mock

VTUNE_MCP_BIN

explicit vtune binary path

vtune on PATH, else conventional oneAPI paths

UPROF_MCP_BIN

explicit AMDuProfCLI path

AMDuProfCLI on PATH, else newest /opt/AMDuProf_*/bin/AMDuProfCLI

PROFILER_MCP_RESULTS_DIR

base dir for stored results + registry

~/.profiler-mcp/<server>

PROFILER_MCP_MOCK_BIN

explicit mock script to run instead of the in-package mocks

src/profiler_mcp/mocks/<server>_mock.py

PROFILER_MCP_TIMEOUT_GRACE

seconds added to a collection's duration for the subprocess timeout

120

Status & known limitations

This is a prototype, honest about what it is:

  • Never run on real hardware. Everything here was developed and validated in mock mode. The real mode paths are best-effort and unverified. Expect to fix binary discovery, argument construction, and — most likely — the parsers, which are written against captured samples that may differ from your VTune/uProf version's actual output.

  • CLI surfaces are reconstructed from vendor docs and public captures, not from a live tool. Both vendors change flags across versions (uProf 5.0 "simplified CLI options"; VTune knob names vary by release). *_check currently reports a hardcoded analysis/config list rather than querying the installed tool.

  • Auto-discovery of the uProf binary sorts install paths lexicographically, so e.g. AMDuProf_5.9 can win over AMDuProf_5.10. Set UPROF_MCP_BIN explicitly.

  • real-mode report tools re-run the CLI on every call (results are only partially cached), and *_report_raw/*_report_hotspots carry a readOnlyHint even though the first call may generate a report file as a side effect.

  • uProf stdout parsing keys on marker lines (Generated data files path: etc.); a profiled program that prints those same strings could in principle confuse session-dir discovery (a newest-directory glob is the fallback).

  • Concurrency is best-effort. Result-id reservation is atomic (via directory creation) and registry writes take a POSIX file lock, but the lock degrades to a no-op on Windows.

  • The mock's numbers are fixed weights — they do not respond to code changes, so the optimize loop exercises the machinery, not real speedups, in mock mode.

The code passes a 97-test deterministic suite plus an agentic self-test, and a five-lens adversarial review whose nine confirmed findings were fixed and regression-tested — but all of that is against the mocks. Contributions that exercise it on actual VTune/uProf installs are exactly what it needs. See docs/DESIGN.md for the architecture and rationale.

License

MIT (LICENSE). The uProf invocation and stdout-contract knowledge derives from AMDResearch/intellikit (MIT, AMD) — re-implemented, not vendored; see NOTICE.

No warranty. Provided as-is under the MIT license; see the caution at the top.

Available Tools

9 tools
uprof_checkA
Read-only

Probe the uProf environment: binary, version, platform, active mode, results dir.

Call this before collecting. mode is "real" (actual AMDuProfCLI found), "mock" (deterministic synthetic backend — numbers are fabricated, useful only for testing tool plumbing), or "unavailable" (nothing runnable; notes explain how to fix). available_analyses lists the collect configs uprof_collect accepts; note that on non-AMD CPUs only 'tbp' actually works.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
notesYes
binaryYes
serverYes
versionNo
platformYes
results_dirYes
binary_foundYes
available_analysesYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint annotation by detailing the `mode` values ('real', 'mock', 'unavailable') and their implications. It discloses that mock mode produces fabricated numbers for testing, and that unavailable mode includes fix notes. It also surfaces the CPU-specific limitation, which is crucial behavioral context for downstream tool invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the purpose, and the following sentences elaborate with essential details about modes and compatibility. Every sentence adds value—no filler or redundant restatement of the tool name. The structure is logical and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter environment probe with an output schema, the description is thorough. It explains the key output fields (mode and available_analyses), provides guidance on when to call it, and includes a hardware caveat. The context signals show high schema coverage and a rich output schema, but the description still adds meaningful context beyond what structured data provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is empty and the description cannot add parameter-specific meaning. Per the rubric, a 0-param tool receives a baseline score of 4, which is appropriate here. The description does mention output fields (`mode`, `available_analyses`) but these are return values, not inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Probe') and resource ('uProf environment') followed by a clear list of outputs (binary, version, platform, active mode, results dir). This distinguishes it from sibling tools like uprof_collect (collects data) and uprof_report_* (reports on collected data), making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this before collecting,' establishing it as a prerequisite for collection tools. It also explains that `available_analyses` feeds into uprof_collect and notes a hardware limitation (only 'tbp' works on non-AMD CPUs), which helps an agent decide when and how to use the information. It does not explicitly name alternatives, but the sequencing guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_collectA

Run a uProf collection and store the result; returns a result_id handle.

Pass exactly one target: command (argv list, launched under the profiler) or pid (attach — requires duration_sec, since attach has no natural end). config is a collect config such as "tbp" or "hotspots" (uprof_check lists them; only 'tbp' works on non-AMD CPUs; allow_unknown=true forces an unlisted one). call_graph=true adds call-stack sampling; extra_events are raw -e event specs; label is a free-form tag for telling results apart later. timeout_sec caps how long the collection may run before it is killed (default 300s, or duration_sec when larger); raise it for long workloads. app_exit_code is the profiled program's own exit — a non-zero value is surfaced as a warning, so a crashed target does not masquerade as a clean profile. In mock mode the target command really runs but every profile number is synthetic. Feed the returned result_id to the report/compare tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidNo
labelNo
configYes
commandNo
call_graphNo
timeout_secNo
working_dirNo
duration_secNo
extra_eventsNo
allow_unknownNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
targetYes
analysisYes
warningsYes
result_idYes
result_dirYes
elapsed_secYes
app_exit_codeNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the behavioral disclosure burden. It reveals that pid attach requires duration_sec, that timeout can kill the collection (default 300s), that non-zero app_exit_code is surfaced as a warning so crashes aren't mistaken for clean profiles, and that in mock mode the target runs but profile numbers are synthetic. This is rich, useful behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-organized paragraph with the main purpose front-loaded. Every sentence adds value, parameter names are neatly backticked, and it avoids redundancy while covering many details. It is appropriately sized for a 10-parameter tool and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, no annotations), the description is remarkably complete. It covers nearly all parameters, explains pitfalls (attach requires duration, only 'tbp' on non-AMD), describes timeout behavior and warning semantics, and tells the agent how to use the result (feed to report/compare tools). The existence of an output schema means return values need not be detailed, making this description sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does: it explains command, pid, config (including non-AMD restriction and allow_unknown), call_graph, extra_events, label, timeout_sec, duration_sec, and allow_unknown, adding meaning far beyond raw schema. Only working_dir is omitted, but 9/10 parameters are enriched with defaults, constraints, and examples, which is outstanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Run a uProf collection and store the result; returns a `result_id` handle.' This states a specific verb ('Run') and resource ('uProf collection'), and clearly distinguishes from sibling report/compare tools by producing a result_id for them to consume. It unambiguously answers what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong usage context: 'Pass exactly one target: command... or pid', mentions uprof_check for listing configs, and says to feed result_id to report/compare tools. However, it does not explicitly state when NOT to use this tool or name alternative tools ('use uprof_list_results instead'), so it falls short of the most explicit standard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_compareA

Compare two stored results function-by-function and issue a pass/fail verdict.

The core of an optimize loop: collect a baseline, change code, collect a candidate, compare. The verdict fails when the total or any significant function regresses more than threshold_pct; functions below noise_floor_pct of both runs never affect the verdict. With fail_on_regression=true a failing verdict raises a tool error carrying the reason — use that to gate automated loops.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_idYes
candidate_idYes
threshold_pctNo
noise_floor_pctNo
fail_on_regressionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
notesYes
metricYes
verdictYes
baseline_idYes
candidate_idYes
total_baselineYes
total_candidateYes
total_delta_pctYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the verdict logic: failure when total or significant function regresses beyond threshold_pct, noise floor exclusion, and the fail_on_regression error behavior. This is crucial for automated use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, then context, then behavioral details. Every sentence contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the tool's behavior, parameter semantics, and usage context. An output schema exists, so return values need not be described. It is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to all parameters: threshold_pct and noise_floor_pct are explained in the verdict logic, fail_on_regression is described as raising a tool error, and baseline_id/candidate_id are implied by the compare operation. This compensates for the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares two stored results function-by-function and issues a pass/fail verdict. This specific verb+resource distinguishes it from sibling tools like uprof_collect or uprof_report_raw.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description positions the tool as the core of an optimize loop, explaining when to use it after collecting baseline and candidate. It also explains how to gate automated loops with fail_on_regression, but does not explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_list_resultsA
Read-only

List stored uProf results: result_id, config, target, mode, creation time.

Use to rediscover result_ids from earlier collections. Entries stamped mode "mock" contain synthetic numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Read-only is already declared in annotations, and the description adds the important caveat that entries stamped 'mock' contain synthetic numbers. This tells the agent that some results may not be real data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The main action is front-loaded, followed by usage guidance and a data-quality caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only list tool with an output schema, the description covers purpose, usage, and the mock-data caveat. It is fully sufficient for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema holds no explanatory burden. The description adds no parameter-specific detail, but none is needed, so the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource 'stored uProf results' along with the key fields returned. This clearly distinguishes it from sibling reporting and collection tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use to rediscover result_ids from earlier collections,' providing a clear when-to-use scenario. It doesn't explicitly mention alternatives, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_report_hotspotsA
Read-only

Top-N hottest functions of a stored result, sorted by sample share descending.

top_n is clamped to 100; row_count_total and truncated say whether more rows exist. ignore_system_modules=true re-runs the report excluding kernel and system libraries so application code stands out. Start with the defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
result_idYes
ignore_system_modulesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
notesYes
metricYes
result_idYes
truncatedYes
total_valueYes
row_count_totalYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite the readOnlyHint annotation, the description adds substantial behavioral detail: top_n is clamped to 100, output includes row_count_total and truncated flags, and ignore_system_modules causes a re-run excluding system libraries. This goes well beyond the annotation and helps the agent understand side effects and edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, with the main purpose in the first sentence and supporting details in subsequent sentences. Every sentence adds value: behavior constraints, output flags, and usage recommendation. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and the readOnlyHint, the description provides sufficient context. It covers the main behavior, parameter semantics, and even adds output-related context (row_count_total/truncated) that is not required. It offers a recommendation on usage, making it complete for a report tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains top_n clamping and ignore_system_modules behavior, and mentions result-related output fields. The result_id parameter is not explicitly described, but its meaning is inferable from 'stored result.' This is strong compensation for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Top-N hottest functions of a stored result, sorted by sample share descending.' It uses a specific resource ('stored result') and distinguishes itself from siblings like uprof_report_summary and uprof_report_raw by focusing on hotspots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context, such as 'Start with the defaults,' and explains when to use the ignore_system_modules parameter. It does not explicitly mention alternative tools or when not to use this tool, but the purpose itself implies the appropriate scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_report_rawA
Read-only

Escape hatch: raw uProf CSV report text for a stored result, byte-capped.

uProf's report subcommand writes CSV files rather than printing to stdout, so this returns the contents of the generated report.csv (cached after first use). With extra_args (raw AMDuProfCLI report options, each starting with "-") the report is regenerated into report-raw.csv using those options. command is the CLI invocation that produces the file. Long output is head+tail truncated; read files under result_dir for the full data.

ParametersJSON Schema
NameRequiredDescriptionDefault
result_idYes
extra_argsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
commandYes
result_idYes
truncatedYes
total_bytesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses caching behavior after first use, regeneration into report-raw.csv when extra_args are supplied, and head+tail truncation. It also notes that full data is available via files under result_dir. The mention of `command` is confusing but does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact three-sentence paragraph that front-loads the core purpose in the first sentence. Every sentence adds useful context: the stdout contrast, the extra_args behavior, and the truncation caveat. The unclear `command` sentence is a minor flaw, but overall it's efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main behavioral aspects: what is returned, how extra_args affects generation, truncation behavior, and where to find full data. Given the presence of an output schema (which likely details the return structure), the description is reasonably complete. It lacks explicit result_id guidance but is sufficient for a raw report tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates: it explains extra_args as 'raw AMDuProfCLI report options, each starting with "-"' and says they cause regeneration into report-raw.csv. However, result_id is only implicitly defined as a stored result identifier, and the description introduces a non-schema parameter `command`, muddying the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns 'raw uProf CSV report text for a stored result,' with 'escape hatch' signaling raw output distinct from sibling summary tools. It specifies the resource (stored result) and the action (returns CSV) and differentiates from siblings like uprof_report_summary and uprof_report_hotspots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool is an 'escape hatch' for raw CSV, contrasted with uProf's normal stdout behavior. It advises that long output is truncated and full data should be read via files under result_dir, implying when not to rely on this tool. However, it doesn't explicitly name alternative sibling tools for summarized reports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_report_summaryA
Read-only

Parsed run overview of a stored result: duration, top hotspots, host details.

Generates the CSV report on first use (cached in the session dir afterwards). The fastest way to understand a collection before drilling into hotspots. result_id comes from uprof_collect or uprof_list_results.

ParametersJSON Schema
NameRequiredDescriptionDefault
result_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesYes
metricsYes
analysisYes
result_idYes
elapsed_secNo
cpu_time_secNo
top_hotspotsYes
platform_infoYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses a meaningful side effect: 'Generates the CSV report on first use (cached in the session dir afterwards).' This tells the agent about the caching behavior and first-use generation, adding insight into what happens when the tool is invoked. There is no contradiction with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff. Front-loaded with the main purpose, followed by the behavioral note and parameter source. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, output schema present, readOnlyHint annotation), the description covers purpose, usage context, behavior, and parameter origin. No critical gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the sole parameter result_id is explained as coming from uprof_collect or uprof_list_results. This gives the agent a clear source for the parameter value. It doesn't describe format specifics, but for a single parameter derived from other tools, this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it provides a parsed run overview of a stored result, listing key content (duration, top hotspots, host details). It distinguishes itself from sibling tools by positioning it as the fastest way to understand a collection before drilling into hotspots, clearly separating it from uprof_report_hotspots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use guidance ('The fastest way to understand a collection before drilling into hotspots') and explains where result_id comes from (uprof_collect or uprof_list_results). It does not explicitly name alternatives or exclusions, but the 'before drilling into hotspots' phrase implies the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_system_infoA
Read-only

Parsed AMDuProfCLI info --system: CPU model/family, core counts, OS details.

Use to decide which collect configs the hardware supports before profiling. In mock mode the fields are synthetic.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
notesYes
fieldsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already establishes the tool is safe, and the description adds context by naming the underlying CLI command and warning that 'in mock mode the fields are synthetic.' This goes beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short sentences, front-loaded with the core purpose, then usage context, then a caveat. Every sentence adds value, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has zero parameters, an output schema, and a read-only annotation, the description fully covers the necessary context: what data it provides, why to use it, and a note about mock mode. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema trivially covers 100% of them. The description doesn't need to explain parameter meanings; the baseline of 4 applies. It could optionally mention what fields are returned, but that's covered by the output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves parsed system information from a specific command ('AMDuProfCLI info --system'), listing concrete data points (CPU model/family, core counts, OS details). This distinguishes it from the sibling tools that focus on collection and reporting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool ('to decide which collect configs the hardware supports before profiling'), providing clear context. It doesn't mention alternative tools or exclusion cases, but the guidance is direct and practical for a read-only info tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uprof_timechartA

Sample system power/frequency/thermal counters over time and summarize them.

events are timechart categories (power, frequency, temperature, voltage, current, dvfs, energy). Samples every interval_ms (minimum 10) for duration_sec, optionally while running command. Returns per-counter min/max/mean/last summaries, not the full series — the CSV stays in result_dir. Real data needs AMD hardware; in mock mode values are synthetic.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventsYes
commandNo
interval_msNo
duration_secYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
notesYes
samplesYes
countersYes
result_idYes
result_dirYes
interval_msYes
duration_secYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behaviors: sampling at a configurable interval (minimum 10), returning summaries (min/max/mean/last) rather than the full series, and the fact that CSV files remain in result_dir. It also clarifies mock mode vs real hardware. This goes well beyond a simple tautology, though it could mention side effects like file writing more explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense. It front-loads the primary action, uses backticks for parameter names, and conveys all key points in a few sentences without redundancy. Every sentence earns its place by adding crucial context (events list, intervals, summaries, hardware requirement).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the absence of annotations and schema descriptions, the description covers the essential context: what the tool does, parameters, return format (summaries), the location of raw data (result_dir), and environment requirements (AMD hardware vs mock). An output schema exists, so the description does not need to detail return values, but it still explains the semantics. It is complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate—and it does thoroughly. It explains that `events` are timechart categories and lists them, states the minimum for `interval_ms` (10), specifies `duration_sec` as the sampling window, and explains `command` as an optional command to run during sampling. Every parameter receives meaningful semantic context beyond the raw schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Sample system power/frequency/thermal counters over time and summarize them.' This is a specific verb+resource (sample/timechart categories) and the scope is distinct from sibling tools like uprof_report_raw or uprof_list_results, which focus on reporting or listing results rather than sampling and summarizing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it is for sampling counters over a time interval and getting summary statistics. It also notes the option to run a command and the hardware prerequisite ('Real data needs AMD hardware'). However, it does not explicitly name alternative tools for when the full series is needed or when other reporting tools are more appropriate, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.3/5.0
Disambiguation4/5

Most tools have clearly distinct roles: check, collect, list, report, compare, timechart, system info. The three report variants (raw, summary, hotspots) are similar but their descriptions clarify the output formats, and check vs system_info have some overlap but remain distinguishable.

Naming Consistency3/5

All tools share the 'uprof_' prefix, but the suffix pattern is inconsistent: some are verbs (check, collect, compare), some are verb_noun (list_results), and some are nouns (timechart, system_info). The report_* subfamily is internally consistent, but overall the naming mixes conventions while remaining readable.

Tool Count5/5

With 9 tools, the set is well-scoped for a profiling server. Each tool covers a distinct part of the workflow (probe, collect, list, report, compare, system stats) without redundancy, and the count is comfortably within the ideal range.

Completeness4/5

The core profiling lifecycle is covered: environment check, collection, result listing, multiple report views, comparison, and time-series sampling. Minor gaps exist such as no explicit delete-result tool or a direct 'list available events' (though check includes available analyses), but agents can accomplish the main profiling tasks without dead ends.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/Stankye/profiler-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server