Skip to main content
Glama

WorkloadTruth

CI PyPI npm License: Apache 2.0 Python 3.10+

Install • Quickstart • CLI reference • Comparison • FAQ

Classify a GPU workload as TRAINING, INFERENCE, or IDLE from telemetry alone. No code changes to the workload, no self-reported job labels.

WorkloadTruth classifying a synthetic training workload, then running the evasion-robustness benchmark

Every GPU scheduler in common use today, including run:ai, Slurm, and Kubernetes GPU operators, asks you to declare whether a job is training or inference at submission time. None of them check. WorkloadTruth reads GPU telemetry (utilization, memory pattern, power draw) and answers the question independently, so a mislabeled or misbehaving job doesn't go unnoticed.

Install

# Real NVIDIA GPU telemetry (requires an NVIDIA driver on the host)
pip install "workloadtruth-cli[nvml]"

# Try it without a GPU, using the synthetic backend
pip install workloadtruth-cli

# npm launcher (thin wrapper around the PyPI package, see "Why two registries")
npx workloadtruth-cli --help
NOTE

The npm package is a launcher, not a standalone install.npx workloadtruth-cli execs the real workloadtruth binary from PATH, so the PyPI package (pip install workloadtruth-cli) must already be installed first.

Related MCP server: Ingero

Quickstart

# No GPU required. Classify a synthetic "training" telemetry trace.
$ workloadtruth classify --backend synthetic --profile training --samples 10 --interval 0
workload_type : TRAINING
confidence    : 1.00
gpu_index     : 0
samples       : 10 over 9.0s
reasons:
  - avg GPU utilization 87.8% >= training threshold 65.0%
  - low GPU utilization variance (std=3.4) <= training ceiling 15.0
  - memory growing 120.0 MiB/sample >= training threshold 5.0
  - low power-draw variance (std=9.4W) <= training ceiling 25.0W

# Real hardware
$ workloadtruth classify --backend nvml --samples 10 --interval 1 --json

--json on every command switches to machine-readable output for scripts and agents.

Quick summary

  • Use it for: catching cost-misallocated GPU jobs (a job billed as low-priority "inference" that's actually running full training) and unauthorized workload changes (an inference endpoint that starts training on live traffic without sign-off)

  • What it's not: a compliance or regulatory-audit tool. No regulation currently requires this kind of monitoring, see What WorkloadTruth is not below

  • Prior art: builds on and cites arXiv:2606.19262 (ICML 2026), see Relationship to prior research

How classification works

WorkloadTruth currently ships a rule-based classifier only: a set of documented, inspectable thresholds over four features extracted from a telemetry window (average and variance of GPU utilization, memory-growth slope, average and variance of power draw). Every threshold lives as a named constant in src/workloadtruth/classifier/rules.py with a comment explaining its intuition. Nothing is a black box.

--experimental (an ML-based classifier) is present as a flag but fails loudly with an explanation rather than shipping a fake result. arXiv:2606.19262's trained model and dataset were never published, and this project has no NVIDIA GPU in its build environment to collect real training data. An ML classifier ships here only once it's trained on a real, disclosed dataset and independently shown to beat the rule-based baseline, not before.

Benchmark

workloadtruth benchmark measures the classifier's accuracy against documented synthetic GPU telemetry traces (see synthetic_backend.py for the exact profile parameters), both clean and under a deliberate evasion transform that mimics an operator disguising a training job as inference (capping utilization swings, flattening memory growth, injecting artificial idle gaps).

This is run on synthetic data, not live NVIDIA hardware, so it is not directly comparable to arXiv:2606.19262's real-hardware numbers. Both are reported below, side by side, never blended into one figure.

arXiv:2606.19262 (real hardware, NVML)

WorkloadTruth (synthetic traces, 300 trials/cell)

Clean accuracy

98.2%

100.0%

Evasion accuracy

43-87%

66.7% overall

The overall evasion number hides the real finding. Broken out by workload type, WorkloadTruth's rule-based classifier is currently completely fooled on evasive training workloads (0% accuracy), while staying accurate on evasive inference and idle traces (100% each). Capping GPU utilization alone is enough to make a training job read as inference to this classifier today.

Profile

Clean accuracy

Evasion accuracy

Training

100.0%

0.0%

Inference

100.0%

100.0%

Idle

100.0%

100.0%

This is the concrete, disclosed gap the benchmark suite exists to surface and track, not a footnote. A rule-based classifier that only looks at utilization variance is trivially evadable. Closing this gap, through multi-signal fusion or a real trained classifier once data exists, is the roadmap, not a solved problem. Reproduce it yourself:

workloadtruth benchmark --trials 300 --window 30 --json

CLI reference

WorkloadTruth --help output listing the classify, watch, benchmark, verify-log, and mcp subcommands

$ workloadtruth --help
Usage: workloadtruth [OPTIONS] COMMAND [ARGS]...

  Classify a GPU workload as INFERENCE, TRAINING, or IDLE from telemetry
  alone.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  benchmark   Run the evasion-robustness benchmark against synthetic...
  classify    One-shot classification of the current GPU workload.
  mcp         Start an MCP server exposing classify/benchmark/verify-log...
  verify-log  Verify the hash chain of a local audit log has not been...
  watch       Continuously classify and append hash-chained entries to...

Command

Purpose

classify

One-shot classification. --backend synthetic|nvml, --profile (synthetic only), --gpu-index, --samples, --interval, --experimental (not yet available), --json.

watch

Continuous classification; appends a hash-chained entry to a local audit log on every window. --window (samples per window), --iterations (0 = run forever), --log-file, --json.

benchmark

Runs the evasion-robustness benchmark (see above). --trials, --window, --json.

verify-log

Re-derives every audit-log entry's hash and confirms the chain hasn't been tampered with. --log-file, --json.

mcp

Starts an MCP server (stdio) exposing classify_workload, run_benchmark, verify_audit_log as agent-callable tools. --backend. Requires pip install "workloadtruth-cli[mcp]" on Python 3.10+ (see below).

Every command supports --json. Full flag reference: workloadtruth <command> --help.

MCP Server

WorkloadTruth ships a Model Context Protocol server so an AI agent (Claude, Cursor, or any MCP-compatible client) can classify GPU workloads, run the evasion-robustness benchmark, and verify the audit log directly, without a human invoking the CLI by hand.

Install the extra:

pip install "workloadtruth-cli[mcp]"

Add it to your MCP client's config (for Claude Desktop, claude_desktop_config.json). The server is started via the workloadtruth mcp subcommand, not a separate console script:

{
  "mcpServers": {
    "workloadtruth": {
      "command": "uvx",
      "args": ["--from", "workloadtruth-cli", "workloadtruth", "mcp"]
    }
  }
}

The server exposes three tools over stdio:

  • classify_workload(backend="nvml", profile="training", gpu_index=0, samples=10, interval_seconds=1.0, write_to_audit_log=False): samples GPU telemetry and classifies it as TRAINING, INFERENCE, or IDLE. backend is "nvml" (real hardware) or "synthetic" (documented synthetic traces, no GPU required). Optionally appends the result to the hash-chained audit log.

  • run_benchmark(trials=50, window=30): runs the evasion-robustness benchmark against synthetic telemetry and returns per-profile accuracy under clean and evasion-obfuscated conditions.

  • verify_audit_log(log_file="workloadtruth.log.jsonl"): re-derives the hash chain of a local audit log and reports whether it has been tampered with.

Example call, classifying a synthetic training trace with no GPU required:

classify_workload(backend="synthetic", profile="training", samples=10, interval_seconds=0)
-> {"workload_type": "TRAINING", "confidence": 1.0, "gpu_index": 0, ...}

Transport is stdio, so there is nothing to host: the MCP client spawns workloadtruth mcp as a local subprocess. A .well-known/agent.json manifest is also shipped at the repo root for A2A-style discovery, listing both the CLI and MCP interfaces and the packages that provide them. Source: src/workloadtruth/mcp_server.py.

Audit log

workloadtruth watch appends a hash-chained entry to workloadtruth.log.jsonl on every classification window. Each entry's hash covers its own content plus the previous entry's hash, so any edit, reorder, or deletion after the fact breaks the chain from that point forward. workloadtruth verify-log re-derives every hash and reports the first broken link, if any.

WorkloadTruth watch appending hash-chained entries to a local audit log, then verify-log confirming the chain hasn't been tampered with

This proves what was classified, when, and that the local record hasn't been silently altered afterward. It does not prove the classification itself was correct, and it is not evidence of regulatory compliance. See below.

Why two registries

WorkloadTruth's implementation is Python. NVML access (pynvml/nvidia-ml-py) is the mature, official way to read NVIDIA GPU telemetry, and it's also what the closest prior art (arXiv:2606.19262) uses. The npm package (workloadtruth-cli) is a thin launcher, not a reimplementation. It locates and execs the real workloadtruth binary installed from PyPI, so npx workloadtruth-cli works for npm-first agent tooling without duplicating the classifier in two languages. The npm package versions independently of the PyPI package since it only ships a launcher script, not the classifier itself.

Comparison

WorkloadTruth

NVIDIA DCGM / dcgm-exporter

run:ai

Weights & Biases

Reads GPU telemetry

Yes (via NVML)

Yes (source)

Yes

Yes

Classifies workload type automatically

Yes

No, exposes raw metrics only

No, workload type is user-declared at job submission

No, training-run-scoped by design, no classification

Local, hash-chained audit trail

Yes

No

No

No

Evasion-robustness benchmark

Yes (documented, reproducible)

N/A

N/A

N/A

Requires an NVIDIA GPU

Only for the nvml backend; the synthetic backend works without one

Yes

Yes

No (general system metrics)

Checked directly against each project's own documentation: DCGM exporter docs, run:ai inference overview, W&B system metrics docs. None of these classify workload type from telemetry alone. That gap is what WorkloadTruth fills.

What is WorkloadTruth, and why does it exist

WorkloadTruth is an open-source command-line tool and MCP server that classifies a running GPU workload as TRAINING, INFERENCE, or IDLE using only GPU-level telemetry (utilization, memory pattern, power draw), with no changes to the workload's own code and no reliance on a self-reported job label.

It exists because every mainstream GPU scheduler asks the job's owner to declare its type at submission time and never checks that declaration against what the hardware is actually doing. That gap has two real consequences: cost misallocation (a job scheduled at low-priority "inference" pricing that is actually running full training) and unauthorized workload changes (an inference endpoint that quietly starts training on live traffic). WorkloadTruth closes that verification gap today, and doubles as the first open, installable implementation of a real academic research thread on verifying AI training runs from hardware telemetry (see below).

Relationship to prior research

WorkloadTruth's core technique, classifying training vs. non-training GPU activity from telemetry, is not novel. It's the direct application of a real, active research thread:

  1. Yonadav Shavit (Harvard), "What does it take to catch a Chinchilla?" (2023): proposed hardware-level "training transcripts" for verifying large training runs.

  2. GovAI, "Computing Power and the Governance of AI" (2024): surveyed compute-governance mechanisms, explicitly framed as exploratory, not endorsed policy.

  3. "Hardware-Enabled Mechanisms for Verifying Responsible AI Development" (2025): hardware-security researchers proposing on-chip attestation.

  4. Rahman & Tajdari, "Detecting Hidden ML Training With Zero-Overhead Telemetry" (ICML 2026 Technical AI Governance workshop): a working NVML-telemetry classifier, 98.2% accurate on unobfuscated workloads, the direct prior art for this project's core classification technique.

What WorkloadTruth adds: as of this project's own research (2026-07-19), no open-source, installable implementation of this research thread existed, only academic prototypes. WorkloadTruth is that packaging: a real CLI, an MCP server, a hash-chained audit log, and a reproducible evasion-robustness benchmark, built in the open. It does not claim to improve on the paper's classification technique. See the benchmark section above: the current rule-based classifier is considerably more evadable than the paper's ML approach on the one axis it measures.

What WorkloadTruth is not

  • Not a compliance or regulatory-audit tool. No law currently requires inference/training classification or reporting. Any future claim otherwise will name the specific enacted regulation; none exists as of this writing.

  • Not a content inspector. WorkloadTruth reads GPU-level signals only (utilization, memory, power). It never inspects model weights, training data, prompts, or completions.

  • Not proof of "compliant" or "safe" operation. The audit log proves what was classified and when, and that the record wasn't altered afterward, not that the classification was correct or that any policy was followed.

FAQ

Does this need an NVIDIA GPU? Only for the nvml backend. --backend synthetic runs the full classifier and CLI against documented synthetic traces, no GPU required. Useful for trying the tool or for CI.

Can it classify AMD or Intel GPU workloads? Not yet. The telemetry layer is a pluggable interface (TelemetryBackend) specifically so a new vendor backend (AMD ROCm, Intel Level Zero) can be added without touching the classifier. See CONTRIBUTING.md.

Is the classifier accurate enough to bill or penalize someone based on its output? Not yet, and the benchmark section above is the honest reason why: 0% accuracy on evasive training workloads today. Treat workload_type as a signal to investigate, not a verdict.

Why not just use the ML classifier from the paper? Its trained weights and dataset were never published. Reimplementing an ML classifier without real training data would produce an unvalidated accuracy claim, not a measured one. See How classification works.

How is this different from run:ai or NVIDIA DCGM? run:ai and DCGM both expose or use GPU telemetry, but neither classifies workload type from that telemetry. run:ai relies entirely on the label the job's owner declares at submission; DCGM just exposes raw utilization and memory metrics for something else to interpret. WorkloadTruth is the layer that actually looks at the telemetry and answers the question. See the comparison table.

Does this work on Windows, macOS, and Linux? The synthetic backend runs anywhere Python 3.10+ runs, including this project's own macOS build environment (which has no NVIDIA GPU). The nvml backend requires an NVIDIA GPU and driver, which in practice means Linux or Windows with NVIDIA hardware; NVML itself is not available on macOS.

What license is this under, and can I use it commercially? Apache 2.0. Commercial use, modification, and redistribution are all permitted under its terms; see LICENSE.

Contributing

See CONTRIBUTING.md. Security issues: see SECURITY.md.

License

Apache 2.0

Available Tools

3 tools
classify_workloadA

Classify what a GPU is actually doing right now (TRAINING, INFERENCE, or IDLE) from raw telemetry alone -- utilization, memory-growth slope, and power draw -- with no reliance on a job's self-reported label and no inspection of its code, weights, or data.

Call this to catch cost misallocation (a job billed as low-priority "inference" that is really running full training) or an unauthorized workload change (an inference endpoint that quietly starts training on live traffic). Do not call it for compliance/regulatory reporting -- no such requirement exists for this signal, see the README's "What WorkloadTruth is not" section.

Prerequisites: backend="nvml" (the default) requires an NVIDIA GPU and driver on the host running this MCP server, plus the mcp+nvml extras (pip install "workloadtruth-cli[mcp,nvml]"). backend= "synthetic" needs neither a GPU nor extra driver setup -- it replays a documented synthetic trace selected by profile, so use it to test agent integrations or CI without hardware.

Side effects: read-only and safe to call repeatedly by default. It blocks for roughly samples * interval_seconds seconds while it collects telemetry (defaults: 10 x 1.0s = 10s), then returns. No network calls are made, ever. Setting write_to_audit_log=True is the one mutating path: it appends one hash-chained line to the local workloadtruth.log.jsonl file (each call adds a new entry, so this is not idempotent) -- everything else about the call is idempotent. If backend="nvml" is requested with no NVIDIA GPU/driver present, the call raises rather than returning a fabricated result.

Parameters: backend -- "nvml" or "synthetic". profile -- one of "training"/"inference"/"idle", synthetic backend only. gpu_index -- which GPU to sample, 0-indexed, ignored for synthetic. samples -- telemetry samples to collect. interval_seconds -- delay between samples. write_to_audit_log -- append the result to the hash chain. Example calls: {"backend": "synthetic", "profile": "training", "samples": 10, "interval_seconds": 0} to try it with no GPU; {"backend": "nvml", "samples": 20, "interval_seconds": 1.0, "write_to_audit_log": true} for a real 20s hardware sample that also logs the result.

Returns a dict with workload_type ("TRAINING"/"INFERENCE"/"IDLE"), confidence (0-1), gpu_index, window_seconds, sample_count, reasons (the specific thresholds that fired, e.g. "avg GPU utilization 82.3% >= 65.0% training threshold"), and features (the raw avg/std utilization, memory-growth, and power numbers the decision was based on -- nothing here is a black box).

ParametersJSON Schema
NameRequiredDescriptionDefault
backendNonvml
profileNotraining
samplesNo
gpu_indexNo
interval_secondsNo
write_to_audit_logNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers read-only safety by default, blocking duration, no network calls, the single mutating path (write_to_audit_log) and its non-idempotency, and the error behavior when nvml is requested without a GPU. This is exhaustive and leaves no ambiguity about side effects.

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 long but every section earns its place. It is structured into purpose, usage, prerequisites, side effects, parameters, examples, and return format, with the core purpose front-loaded. No sentences are redundant; the organization makes the length manageable 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?

The description is complete for a complex tool: it explains the return dict fields (workload_type, confidence, gpu_index, window_seconds, sample_count, reasons, features), prerequisites, side effects, error handling, and parameter semantics. Even with an output schema present, the description adds essential context about the meaning of each field and the reasoning process, so nothing an agent needs to call it correctly is missing.

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 schema provides zero description coverage (0%), so the description must fully explain each parameter. It does so in a dedicated 'Parameters:' section, detailing backend, profile, gpu_index, samples, interval_seconds, and write_to_audit_log, including types, defaults, and context (e.g., profile only for synthetic backend). Example calls further illustrate parameter combinations. This fully compensates for the schema gap.

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 precise statement of what the tool does: it classifies GPU activity into TRAINING, INFERENCE, or IDLE based on raw telemetry, explicitly distinguishing it from self-reported labels and code inspection. It clearly names the verb, resource, and method, and the use-case framing differentiates it from the sibling tools (run_benchmark, verify_audit_log) even without naming them.

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

Usage Guidelines5/5

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

The description explicitly states when to call it ('catch cost misallocation', 'unauthorized workload change') and when not to ('Do not call it for compliance/regulatory reporting'), and provides a clear alternative (synthetic backend) for testing without hardware. It also lists prerequisites, so an agent knows exactly the conditions under which it is appropriate.

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

run_benchmarkA

Measure the shipped rule-based classifier's accuracy against documented synthetic GPU telemetry, both clean and under a deliberate evasion transform that mimics an operator disguising a training job as inference.

Call this to report or sanity-check classifier robustness (e.g. before citing accuracy numbers, or after changing a threshold in classifier/rules.py). Do not call it to classify a live workload -- use classify_workload for that; this tool never touches real GPU telemetry.

Side effects: none. Purely computational, no files written, no network calls, no GPU access. Deterministic and idempotent -- the same trials/window arguments reproduce the same synthetic results every call. Runtime scales with trials; the defaults (50 trials, window 30) finish in a few seconds.

Parameters: trials -- trials run per profile/evasion cell. window -- telemetry samples per classification window. Example calls: {} for the documented defaults; {"trials": 200, "window": 60} for a slower, higher-confidence accuracy read.

Returns a dict with source ("synthetic"), a note warning these numbers are not comparable to any real-hardware benchmark, window_size, trials_per_cell, clean_accuracy, evasion_accuracy, and cells (a list of per-profile, per-evasion-condition {profile, evasion, trials, correct, accuracy} breakdowns).

ParametersJSON Schema
NameRequiredDescriptionDefault
trialsNo
windowNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations are absent, so the description carries the full burden. It discloses side effects (none: no files, network, GPU), determinism, and scaling with trials. This is strong coverage for a computational tool. Minor gap: it doesn't mention error conditions or edge cases (e.g., invalid inputs), but for this use case the disclosure is thorough.

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 well-structured: opening sentence states purpose, then usage guidance, then side effects/determinism, then parameter explanation with examples, and finally the return format. Front-loaded with the core purpose, every sentence earns its place, and 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 tool has an output schema (provided) and only two optional parameters. The description explains the return keys (with semantics of the synthetic source) and parameter effects. Even though the output schema exists, the description adds the warning about non-comparability to real hardware, which is essential context. Complete for an agent to invoke correctly.

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%, so the description must explain parameters. It does: `trials` per profile/evasion cell and `window` per classification window, with example calls and default values. This adds meaning beyond the schema's title/defaults. A slight deduction for not specifying valid ranges or units, but the examples suffice.

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 measures classifier accuracy on synthetic telemetry under clean and evasion conditions, and distinguishes it from classifying live workloads. It names the sibling `classify_workload` explicitly, so the agent can tell them apart without opening schemas.

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

Usage Guidelines5/5

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

It explicitly says when to use the tool (before citing accuracy, after changing thresholds), and when not to (for live workload classification — use `classify_workload`). It also states the deterministic/idempotent nature and runtime scaling, giving clear context for invocation.

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

verify_audit_logA

Verify that a local WorkloadTruth audit log's hash chain is intact, i.e. no entry was edited, reordered, or deleted after it was written.

Call this before trusting historical classify_workload / workloadtruth watch records for anything security- or billing-sensitive -- each log entry's hash covers its own content plus the previous entry's hash, so any tampering anywhere in the file breaks the chain from that point forward and this tool will report exactly where.

Prerequisites: the file at log_file must exist and be a WorkloadTruth JSONL audit log (produced by write_to_audit_log=True on classify_workload, or by workloadtruth watch).

Side effects: read-only. Opens and reads log_file from local disk; never writes, never makes a network call. Safe to call repeatedly and idempotent -- verifying an unmodified log always returns the same result.

Parameters: log_file -- path to the JSONL audit log, defaults to workloadtruth.log.jsonl in the current working directory. Example call: {"log_file": "workloadtruth.log.jsonl"}.

Returns a dict with valid (bool), message (str -- "chain OK" or a description of the first broken link found), and entries (int count of entries verified before any break).

ParametersJSON Schema
NameRequiredDescriptionDefault
log_fileNoworkloadtruth.log.jsonl

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral burden. It openly discloses side effects ('read-only', 'never writes, never makes a network call'), repeatability and idempotence, and explains the hash-chain failure semantics. This is exemplary transparency.

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?

Though longer than average, every sentence carries essential information: what the tool checks, when to use it, prerequisites, side effects, parameter semantics, and return shape. The most critical usage guidance is front-loaded.

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 tool with one optional parameter and an output schema already present, the description is complete. It covers purpose, prerequisites, side effects, parameter details, and return fields. Even without an output schema, an agent could call this correctly.

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, and it does fully. It explains what log_file is, its default value and location, and gives an example call. This adds meaning well beyond the bare type/default in the 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?

States a specific verb and resource: 'Verify that a local WorkloadTruth audit log's hash chain is intact.' It also defines the precise guarantees checked (no entry edited, reordered, or deleted). Clearly distinguishable from siblings classify_workload and run_benchmark, which perform different operations.

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

Usage Guidelines5/5

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

Explicitly instructs when to call: before trusting historical classify_workload or workloadtruth watch records for security- or billing-sensitive purposes. It also states prerequisites, including the required format and provenance of the log file. This gives an agent a clear decision rule.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.2.0
    • First observedclassify_workload
    • First observedrun_benchmark
    • First observedverify_audit_log

TDQS

A4.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a clearly distinct action: classify_workload performs live classification, run_benchmark tests the classifier on synthetic data, and verify_audit_log checks log integrity. There is no overlap or plausible confusion between tool purposes.

Naming Consistency5/5

All three tool names follow a consistent verb_noun snake_case pattern: classify_workload, run_benchmark, verify_audit_log. The naming is uniform and each verb clearly indicates the action.

Tool Count5/5

Three tools is within the well-scoped 3-15 range, and each tool earns its place: one for core classification, one for benchmark/evaluation, and one for audit verification. No tool feels redundant or missing from the core set.

Completeness4/5

The primary workflow is fully covered: classifying a workload, evaluating classifier robustness, and verifying audit logs. A minor gap is the absence of a continuous monitoring/watch tool, but that does not block the server's stated purpose.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables GPU profiling and performance analysis via NVIDIA Nsight Systems, allowing agents to profile binaries and aggregate statistics for kernels, memory copies, and NVTX ranges. It supports advanced analysis through interval tree construction and structural queries on profiling reports.
    5
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    eBPF-based GPU causal observability agent with MCP server. Traces CUDA Runtime and Driver APIs via kernel uprobes and host events via tracepoints to build causal chains explaining GPU latency. 7 tools: get_check, get_trace_stats, get_causal_chains, get_stacks, run_demo, get_test_report, run_sql. Telegraphic compression reduces token usage ~60%. Supports stdio and HTTPS (TLS 1.3) transport.
    11
    84
    -
  • A
    license
    A
    quality
    B
    maintenance
    Measures CPU energy and LLM token usage of programs to enable cost-efficient refactoring, using real hardware telemetry and a non-blocking token proxy.
    6
    MIT