profiler-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@profiler-mcpprofile the example workload's compute phase"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
profiler-mcp
⚠️ 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 loopsQuickstart
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-mcpA 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 |
| Probe env: binary, version, platform, active mode, available analyses | — |
| Run a collection; stores the result, returns a |
|
| List stored results: id, analysis, target, mode, created | — |
| Parsed run overview: elapsed/CPU time, metrics, top hotspots |
|
| Top-N hottest functions, CPU time descending |
|
| Escape hatch: any vtune report type as byte-capped text |
|
| Function-by-function baseline-vs-candidate deltas + pass/fail verdict |
|
uprof (9 tools)
Tool | Purpose | Key params |
| Probe env; notes that non-AMD CPUs support only | — |
| Run a collection; stores the session, returns a |
|
| List stored results: id, config, target, mode, created | — |
| Parsed run overview: duration, top hotspots, host details |
|
| Top-N hottest functions, sample share descending |
|
| Escape hatch: generated report CSV as byte-capped text |
|
| Function-by-function baseline-vs-candidate deltas + pass/fail verdict |
|
| Sample power/frequency/thermal counters; per-counter summaries |
|
| Parsed | — |
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 |
| permission refusal (perf_event_paranoid-style, verbatim vendor text) |
| wedged collection that ignores duration (exercises timeouts) |
| empty/truncated report output |
| nonzero exit after normal-looking output |
| 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 |
| parser/logic regressions against verbatim fixtures |
2 In-memory MCP |
| tool wiring, schemas, error mapping (no subprocess) |
3 Stdio smoke |
| entry points and transport, as a client runs them |
4 Ground-truth e2e |
| compile → collect → report; attribution must match the sidecar model; seeded regression must fail |
5 Agentic |
| 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 |
|
|
|
| explicit vtune binary path |
|
| explicit AMDuProfCLI path |
|
| base dir for stored results + registry |
|
| explicit mock script to run instead of the in-package mocks |
|
| seconds added to a collection's duration for the subprocess timeout |
|
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
realmode 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).
*_checkcurrently 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.9can win overAMDuProf_5.10. SetUPROF_MCP_BINexplicitly.real-mode report tools re-run the CLI on every call (results are only partially cached), and*_report_raw/*_report_hotspotscarry areadOnlyHinteven 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 toolsuprof_checkARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| notes | Yes | |
| binary | Yes | |
| server | Yes | |
| version | No | |
| platform | Yes | |
| results_dir | Yes | |
| binary_found | Yes | |
| available_analyses | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| label | No | ||
| config | Yes | ||
| command | No | ||
| call_graph | No | ||
| timeout_sec | No | ||
| working_dir | No | ||
| duration_sec | No | ||
| extra_events | No | ||
| allow_unknown | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| target | Yes | |
| analysis | Yes | |
| warnings | Yes | |
| result_id | Yes | |
| result_dir | Yes | |
| elapsed_sec | Yes | |
| app_exit_code | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline_id | Yes | ||
| candidate_id | Yes | ||
| threshold_pct | No | ||
| noise_floor_pct | No | ||
| fail_on_regression | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| notes | Yes | |
| metric | Yes | |
| verdict | Yes | |
| baseline_id | Yes | |
| candidate_id | Yes | |
| total_baseline | Yes | |
| total_candidate | Yes | |
| total_delta_pct | Yes |
TDQS
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.
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.
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.
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.
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.
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_resultsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
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.
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.
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.
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.
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.
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_hotspotsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| result_id | Yes | ||
| ignore_system_modules | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| notes | Yes | |
| metric | Yes | |
| result_id | Yes | |
| truncated | Yes | |
| total_value | Yes | |
| row_count_total | Yes |
TDQS
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.
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.
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.
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.
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.
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_rawARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| result_id | Yes | ||
| extra_args | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| command | Yes | |
| result_id | Yes | |
| truncated | Yes | |
| total_bytes | Yes |
TDQS
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.
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.
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.
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.
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.
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_summaryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| result_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| metrics | Yes | |
| analysis | Yes | |
| result_id | Yes | |
| elapsed_sec | No | |
| cpu_time_sec | No | |
| top_hotspots | Yes | |
| platform_info | Yes |
TDQS
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.
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.
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.
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.
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.
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_infoARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| notes | Yes | |
| fields | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | ||
| command | No | ||
| interval_ms | No | ||
| duration_sec | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| notes | Yes | |
| samples | Yes | |
| counters | Yes | |
| result_id | Yes | |
| result_dir | Yes | |
| interval_ms | Yes | |
| duration_sec | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP Server for an Agent Task Marketplace
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Related MCP Servers
AlicenseAqualityAmaintenanceMCP server that gives AI coding agents direct access to evaluation tools.22Apache 2.0- AlicenseNot gradedqualityCmaintenanceMCP servers for real-time development monitoring and interactive pair programming.1MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables coding agents to autonomously test, evaluate, and tune other MCP servers by acting as a proxy and providing linting, trace recording, evaluation, comparison, and reporting tools.7MIT
- AlicenseNot gradedqualityBmaintenanceLocal MCP servers that give Claude Code access to other tools mid-session.GPL 3.0
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/Stankye/profiler-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server