Skip to main content
Glama

You open a task manager when something is wrong: a game stutters, the fans spin up, a disk sits at 100 % and nothing says why. That is exactly when most of them freeze, and when they do answer, they say how much, not who or why. Anabolic is built for that moment:

  • It stays alive under load. It raises its own priority, opts out of efficiency throttling, keeps its memory resident, never blocks its interface thread and reads the system once per refresh: about 1 ms of CPU per frame while scrolling. A running instance comes to the front in under 100 ms.

  • It says who and why. Who ran on each CPU core; which process reads and writes which file on each disk; traffic and GPU per program; which program started a process and how; what a hung thread waits for; which handles keep a dead process from going away.

  • It watches without touching. Its regular views read system-wide tables and kernel traces: no process is opened, read or injected into, so a game is left alone while it is watched. Anything that does open a process asks first and says why.

  • It is honest about what it measures. A value it cannot read is shown as unavailable, with the reason, never as zero.

The Processes page: a Rust build in a terminal, with the compiler processes leading in CPU, memory and disk, next to VS Code, Chrome and Steam

Contents

Related MCP server: MCP System Monitor Server

What it does

Page

Overview

The machine at a glance: a tile for CPU, memory, disk, network and GPU, each with the app behind most of it; what needs attention (memory running out, a full or overworked disk, a hung or stuck program, one that keeps growing, a hot sensor, a program in many copies) with a button for what can be done; the busiest apps; development servers listening; what started in the last ten minutes; and this PC in a few lines.

Processes

A tree, a flat list or grouped by app, with CPU, memory, disk, network, GPU, handles, user, command line and status (efficiency mode, suspended, not responding, limited). Quick filters narrow it to what uses CPU, memory, disk, network or a GPU, what started in the last ten minutes, or the services. End, end tree, suspend, priority, cores, efficiency mode, and a notification when a process exits, with its exit code. Run new task starts a program with administrator rights or without, as Task Manager does. Details show threads with their call stacks, modules with their signatures and hashes, handles in words, network connections, the services a process hosts and the chain of processes that started it, including parents that already exited.

Performance

CPU with who ran on each core, memory and its modules, each physical disk with its partitions and the processes and files it serves, network adapters, GPUs, process I/O, temperatures and fans, and every monitor on a map of the desktop. Windows lets only drivers read the processor's own temperature sensors, so there Anabolic shows the processor's power from its energy meter, the firmware's thermal zones where it has any, the GPU's temperature, fan and (NVIDIA) power, and the disks' temperatures.

History

Every 10 seconds, the machine's totals and the processes that led, kept for 7 days by default: a day strip, an hour graph and a range picker answer "what happened at 14:32".

Rules

Per program, in the manner of Process Lasso: priority, cores, efficiency mode and CPU and memory limits applied to every new process, plus memory, CPU and handle alerts. Priority, efficiency mode and the CPU limit can wait until the program is busy or in the background, and go back when that passes. A watch that fires (memory, CPU, handles, a window not responding) can also write a dump of the process or end it. A rule can mark a program as a game.

Services

Every service with its state, startup type, account and the process it runs in, with that process' CPU and memory; start, stop (asking about dependents), restart, pause, startup type. New service, and Properties with everything the Services console sets: program, account and password, dependencies, what it does when it fails. Delete, except Windows' own services, which can be set to Disabled instead.

Startup

Run keys, Startup folders and sign-in or boot tasks with their publisher and what they cost right now; turned on and off the way Task Manager does it. Nothing is deleted.

Stutters

Frame rate, 1 % lows and frame times of every program that draws, each stutter with what else happened at that moment, and DPC/ISR time per driver, in the manner of LatencyMon. No game is opened to measure it.

Network

Traffic per program, every connection with its state and the other end's name, the ports open to others and who can reach them, and every DNS lookup with the program that made it. Development ports lists the dev servers, databases and debuggers listening, named by their tool (Vite, PostgreSQL, the Node.js debugger and more), with the ports you watch, free or with who holds each; a port is freed by ending what holds it. Close a TCP connection, or block a program in Windows Firewall and allow it again.

Activity

Process Monitor style: every file, registry key, connection and program a process touches, in order, from a kernel trace. Start a program under recording, record a running one or its whole tree, or record the whole computer and filter afterwards. CSV export.

MCP

A Model Context Protocol server for Claude and other AI assistants, off until you turn it on. See below.

The Performance page's CPU view: ten minutes of total and kernel time with two earlier builds and the one running now, the busiest processes, and one graph per logical processor naming the process that ran on it

The screenshots show a made-up PC, not anyone's real one.

And across the pages:

  • Not responding and stuck processes: hung windows are marked; wait chains show what each thread waits for, deadlocks first; a process that cannot finish ending says what holds it (handles still open to it, a driver that strips the right to end it, Windows' protection).

  • Leaks: handle, memory and thread growth that keeps going is flagged.

  • A program in many copies: when one program runs 50 times over from the same starter (a script or a build gone wrong), a bar names the starter and ends them all at a click. Browsers and Windows' service hosts, many processes by design, are left out; the number is in Settings.

  • Memory dumps, small or full, taken from a snapshot so the process pauses only for a moment.

  • CPU and memory limits (Windows): a process, or a rule's program, held to a share of the processor and an amount of memory with what it starts, by a job object: a cap Windows keeps whatever the priority, not a hint. They last while Anabolic runs. Windows' core processes and anti-cheat software are left alone.

  • Game mode (optional): while a game is in front, busy background programs run at below normal priority until it ends; asked to, without a game too, sparing the program in front. The game, Windows' core processes, audio and anti-cheat software are never touched.

  • Notification area (optional): closing the window leaves Anabolic running, recording the history and applying rules; alerts become notifications, and the icon shows how busy the CPU is.

  • Several monitors: called up during a full-screen game, the window opens on another monitor (Windows: on Linux the compositor places windows).

  • Columns where you want them: in every table, dragging a title moves its column, and the order and widths stay for next time. A table wider than the window scrolls sideways.

On Linux

The same pages, read from Linux's own accounting: /proc and /sys, the kernel's perf events and netlink interfaces, fanotify, and systemd and the desktop over D-Bus. No kernel module, no eBPF program. Where Linux works differently, the pages say how:

Page

On Linux

Processes

The kernel's threads (kworkers, kswapd, the interrupt threads) are counted under one Kernel row, PID 2, as Windows counts its own under System; its details list them one by one. Handles are open files. A program's package stands where Windows shows its company, and its file is checked against the package's record. Dumps are core files that gdb reads.

Performance

Who ran on each core, interrupt load and the processes behind each disk come from perf events. Intel and AMD GPUs through the kernel's DRM accounting; NVIDIA through NVML, asked only while the GPU is awake, so a laptop's sleeping one stays asleep. Every temperature, fan and power sensor the kernel's hardware monitors know, per core included; a sensor on a sleeping device is left out rather than woken. Partitions, with what LUKS and LVM hold, from udev. Monitors from EDID and the desktop's own layout (KDE, GNOME).

Services

systemd's: the system's and your user's. Start, stop, restart, and enabled, disabled or masked; there is no pausing. A new unit goes to /etc/systemd/system (or your own folder); a package's unit is changed through a drop-in, as systemctl edit does; only units made by hand are deleted. pkexec asks for the password.

Startup

Autostart entries and systemd user units, turned off the way the desktop does it: a system-wide entry is hidden by a copy in your own folder. Nothing is deleted.

Stutters

Interrupt and softirq time per handler, in the manner of LatencyMon. Linux reports no frame times to anyone outside a game, so frame times and 1 % lows are Windows only.

Network

TCP traffic per program and per connection; Linux counts no UDP traffic per program. Its firewalls filter by address, port and user, not by program, so blocking a program is Windows only, as is the list of DNS lookups.

Activity

Every file, program and connection a process touches. There is no registry; instead, a program, a process or the whole machine can be recorded with its system calls, as strace shows them, with a count, the failures and the time spent per call. They come from the kernel's tracepoints: the process is never stopped or read.

Around them: the notification area icon is a StatusNotifierItem (KDE has it; GNOME needs the AppIndicator extension), the hotkey goes through the desktop's GlobalShortcuts portal, and game mode finds the window in front on KDE and on X11. The keyrings (KWallet, GNOME Keyring, ssh-agent, gpg-agent) take lsass' place as what is not dumped unless allowed. Run new task runs a command line as you, the way a terminal would; a program that needs root asks for it itself.

Getting started

Everything is on the releases page: for Windows an installer and a zip, for Linux a zip. A zip holds a single executable with nothing to install: unpack it anywhere. Each file has its SHA-256 checksum beside it, as a .sha256 file (sha256sum -c reads it; on Windows, compare it with Get-FileHash). Releases after 0.5.0 also carry a build attestation, a signed record that this repository's release workflow built the file: gh attestation verify <file> -R RaptorTwentyOne/Anabolic checks it.

Windows

Windows 10 or 11, x64. The installer (anabolic-…-windows-x64.msi) puts Anabolic in Program Files and the Start menu, for every user of the PC; Settings → Apps removes it again, and leaves its settings and history (see Privacy). From the zip, run anabolic.exe wherever you put it. Beside it comes anabolic-cli.exe, the terminal commands; the installer puts its folder on PATH.

On an administrator account Windows asks for elevation as it starts, and with it Anabolic sees everything: kernel traces, every process' details, disk counters. On a standard account it runs without, shows what it can and says what is missing and why; Settings has Restart as admin.

NOTE

Releases are not code-signed yet, so Windows SmartScreen may warn when the installer or the program first runs. ChooseMore info → Run anyway, or build it yourself.

Linux

x64, a C library from 2022 or later (glibc 2.35: any current distribution), and a Wayland or X11 desktop with OpenGL.

./anabolic --install   # once, optional: the application menu and the taskbar icon
./anabolic

Anabolic runs as you. Without more it sees your own processes in full and others' in part. Grant full access (top right, or in Settings) gives the executable the capabilities it needs, once: pkexec asks for your password and runs setcap on it. The window stays yours, on your desktop session; only those rights come with it. As anyone who can run the file has them too, it is made yours alone (mode 700) first. Kernel traces, other users' processes' files and threads, ending them, and closing connections need it.

Updates

Anabolic keeps itself up to date. Soon after it starts, and then once a day, it asks GitHub whether a newer release is out. A new release is downloaded, checked against the SHA-256 checksum GitHub lists for it, and put in place of the old executable; it runs from the next start, or at once from the bar that says it is installed. An install that fails (a download that broke off, a virus scanner holding the file) is tried again after a minute, five and thirty. In Settings → Updates it can ask first instead, or not check at all. Copies built from source are left to their source. The first time a new version starts, a small window says what changed since the one before, from CHANGELOG.md, which Anabolic carries inside it.

An installed copy updates through the new release's installer, without a window, so that Settings → Apps keeps showing the right version. Changing what is in Program Files takes an administrator, which Anabolic is whenever it runs on an administrator's account; on a standard account the bar says so, and the new installer can be run from the release page. On Linux the download goes through curl, and the new file has to be granted full access again: the rights belong to the file they were given to.

Starting when you sign in

Settings → Window → Start when I sign in starts Anabolic in the notification area as you sign in, recording the history and applying your rules from the start. On an administrator's account it is a task in Task Scheduler (folder Anabolic) that starts it elevated without asking, which the installed copy offers: a program started elevated without asking has to be where only administrators can change it, and a zip's copy in Downloads is not. On a standard account it is the Run key; on Linux, an entry in ~/.config/autostart. Removing Anabolic with Settings → Apps removes every user's task with it.

Bringing it up from anywhere

Ctrl+Alt+Esc brings Anabolic to the front from any program while it runs; Settings offers other keys, or none. With Keep running in the notification area when closed on, closing the window leaves Anabolic running, so the key works all day. Windows' Task Manager and Ctrl+Shift+Esc are left as they are.

On Linux the desktop asks once whether Anabolic may have the key. KDE gives Ctrl+Alt+Esc to Kill a window: choose another key in Settings, or free that one in KDE's shortcut settings.

Command line

Option

--tray

Start in the notification area, without a window.

--new

Start another instance instead of bringing the running one to the front.

--install, --uninstall

Linux: add Anabolic to the application menu (a .desktop file and the icon in ~/.local/share), or take it away.

Keyboard

Keys

Alt+Home

Overview

Ctrl+1 … Ctrl+9, Ctrl+0

The pages below it, in the order of the rail; Ctrl+0 is MCP

Ctrl+,

Settings

Ctrl+N

Run new task

Alt+←, Alt+→

Back and forward through the pages and processes visited; the mouse's back and forward buttons too

Ctrl+F

Filter processes

Ctrl+T

Tree, list or apps

Ctrl+H

Find handle: who has this file or object open

Space

Pause updates

F5

Refresh now

Del, Shift+Del

End the selected process, or its whole tree

Shift+F10

The selected process' menu

F1

Every shortcut and what the colours mean

Terminal commands

What the window shows, in a terminal: for a quick look, or for a script. On Windows they come with anabolic-cli.exe, beside anabolic.exe; on Linux they are anabolic's own (anabolic ps).

anabolic-cli ps chrome --sort memory    # processes, the busiest first
anabolic-cli kill 1234 --tree           # end a process and what it started
anabolic-cli service restart Spooler    # start, stop or restart a service
anabolic-cli ports                      # who listens, and who can reach it
anabolic-cli ps --json                  # the same as JSON, for scripts

Command

overview

The machine at a glance

ps [FILTER]

Processes, the busiest first (--sort, --limit, --all)

tree [PID], show PID, why PID

Who started what; one process in full; why it will not end

services [FILTER], service NAME

Services, and one in full

ports, connections, startup

Listening ports, connections, startup programs

kill PID, suspend PID, resume PID, priority PID LEVEL

Act on a process

service start|stop|restart|pause|continue NAME, service startup NAME TYPE

Act on a service

mcp

The MCP server without the window (below)

tools, call TOOL NAME=VALUE...

Every MCP tool, and any of them called directly

Each command answers through the MCP server's own tool, and refuses what the tool refuses: Windows' critical processes and Anabolic itself are never acted on, and a game or an anti-cheat program only with --force, after it said what can happen. Commands run with the terminal's rights: from one that is not elevated, other users' processes show less and acting on them is refused. --json prints the tool's answer as it is; the exit code is 0 when done, 1 when refused or failed, 2 when the command was not understood. anabolic-cli help lists everything.

AI assistants (MCP)

The MCP page (Ctrl+0) turns on a Model Context Protocol server, so Claude and other MCP clients can read what Anabolic sees and do what you allow. It speaks Streamable HTTP at http://127.0.0.1:47123/mcp (the port can be changed), listens on this computer only, and every request needs the access key the page shows. The page gives the command for Claude Code and the JSON for other clients, and lists the clients that connected and every call they made.

What clients may do is chosen on the page, kind by kind; a call of a kind that is off is refused and says where to turn it on:

Kind

Tools

Read what the PC is doing (on by default)

overview, CPU, memory, disks and their partitions, GPUs, temperatures and fans, monitors, hardware, stutters, history, processes and their tree, one process in full (who started it, what it hosts, its connections), why a process will not end, leaks, connections, open ports, network usage, DNS lookups, services, startup programs

Turn kernel traces on for a while

who runs on each core, which files each disk serves, traffic per connection, frame times

Look inside a process

handles, modules, thread stacks, wait chains

Write memory dumps

small or full dumps (never of lsass, or on Linux of the keyrings)

Record what processes do

Process Monitor style recordings, of a process, a name or the whole machine; on Linux, a process' system calls too

End processes

end a process or a tree

Suspend, resume, reprioritise and limit

suspend, resume, priority, cores, efficiency mode, CPU and memory limits

Control services

start, stop, restart, pause, startup type

Close connections, block programs

close a TCP connection; Windows Firewall block and unblock (Windows)

Turn startup programs on and off

the way Task Manager does

Tools that open a process (inspection and dumps), and actions on a game or an anti-cheat program, refuse the first call with the risks in words: the assistant has to tell you and call again with force=true only if you agree. The system's critical processes (Windows' own; on Linux init, the kernel and the session's compositor) and Anabolic itself are never acted on.

The server also offers resources (anabolic://overview, anabolic://process/{pid} and others) and prompts for common questions ("why is the PC slow", "why does my game stutter", "what happened at 14:32").

Without the window

A client can also start Anabolic itself, out of sight, for as long as it needs it, and speak to it over standard input and output: no port and no key, and the window need not run.

{
  "mcpServers": {
    "anabolic": {
      "command": "C:\\Program Files\\Anabolic\\anabolic-cli.exe",
      "args": ["mcp"]
    }
  }
}

On Linux the command is the anabolic file itself; for Claude Code, claude mcp add anabolic -- anabolic-cli mcp. The MCP page shows both for the copy it runs from. Such a server may do what the MCP page allows (--allow read,end,... or --allow all instead), except setting CPU and memory limits, which last only while Anabolic runs. It runs with the client's rights. anabolic-cli mcp --http serves Streamable HTTP like the page's server instead, until Ctrl+C. The Dockerfile builds the same server into an image, for MCP directories that try servers in a container (where it sees the container, not the machine).

Games and anti-cheat

Anabolic watches from system-wide tables and kernel traces: its regular views do not open game processes, read their memory or inject anything. What does open a process (memory dumps, a thread's call stack, duplicating handles, reading modules) asks first. Game mode never touches the game, Windows' core processes or anti-cheat software.

The process that holds Windows' sign-in secrets (lsass) is not dumped unless Allow dumps of lsass.exe is turned on in Settings: its memory is what credential-stealing tools take, so antivirus software stops any program that reads it and may quarantine Anabolic. MCP clients can never dump it.

On Linux the keyrings (KWallet, GNOME Keyring, ssh-agent, gpg-agent) hold the session's passwords and keys unlocked, and are not dumped unless Allow dumps of the keyrings is on.

How an anti-cheat reacts to any program is up to its vendor; Anabolic makes no promise on their behalf.

Privacy

Anabolic has no telemetry. The one request it makes by itself is the update check: GitHub's API is asked for the latest release, and the request carries nothing about this PC beyond what any download does (its address, and Anabolic/<version> as the program asking). Settings → Updates turns it off.

Looking a file up on VirusTotal or an address on ipinfo.io opens your browser, and only when you ask. Remote addresses get their names from the system's DNS resolver.

Everything it keeps stays on this computer:

  • %APPDATA%\Anabolic on Windows: settings.

  • %LOCALAPPDATA%\Anabolic on Windows, ~/.local/share/anabolic on Linux (settings there too): the history (process names and command lines, which can include whatever a program was started with), memory dumps and exports you ask for, and stalls.log, the moments Anabolic's own window fell behind. Turn the history off or shorten it in Settings.

What the MCP server's tools return goes to the program that called them, and on to the service it uses. The full policy is in PRIVACY.md.

Building from source

Rust 1.95 or newer; on Windows with the MSVC toolchain. On Linux no development packages are needed: Wayland, X11, OpenGL and the rest are loaded as the program starts.

cargo build --release

The result is target\release\anabolic.exe (with anabolic-cli.exe, the terminal commands) or target/release/anabolic, a single executable with its fonts and icons embedded. cargo test runs the tests; the few that need administrator rights (on Linux, full access) skip themselves without them.

The workspace has two crates: crates/anabolic-core reads and controls the system (process scans, kernel traces, handles, services, the history) and has no interface; crates/anabolic is the egui application and the MCP server. Each core module says what it means on every system; what reads it lives beside it, in windows/ and linux/.

installer/ holds the Windows installer: dotnet build installer -p:ProductVersion=x.y.z -p:BinDir=<folder with anabolic.exe and THIRD-PARTY-NOTICES.html> makes anabolic.msi with WiX.

Contributing

Bug reports, ideas and pull requests are welcome; CONTRIBUTING.md says where each goes and what the code holds to. Questions go to Discussions, and security problems, privately, as SECURITY.md says.

Reusing the code

Open source is not the same as free for the taking. Anabolic's code is open so that it can be read, learned from and built on, and its license asks one thing in return: credit.

  • Copying or adapting it, a file or a part of one: keep the copyright and license notice with it, and name Anabolic among your project's notices. That is the whole of what the MIT license asks, and it is not optional.

  • Rewriting it while working from it, by hand or by having a tool or an AI assistant rewrite it, is still adapting it. Renamed variables and reworded comments do not make it new code; the notice stays.

  • Ideas are free. Nobody owns a feature: if Anabolic gives you one, write your own code for it, and a mention is welcome.

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

The Aldrich font is under the SIL Open Font License (crates/anabolic/assets/fonts/OFL.txt).

Available Tools

43 tools
block_programC
DestructiveIdempotent

Blocking a program from the network is not possible on Linux, whose firewalls filter by address, port and user rather than by program: this always refuses there.

NameRequiredDescriptionDefault
pathYesThe program's full path (get_process gives it).

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is partly covered, but the description adds nothing about what the block actually changes, whether it is reversible, or whether elevated privileges are required. The one behavioral fact it does add (firewalls on Linux filter by address/port/user, so the call always refuses there) is useful but narrow given this is a destructive mutation.

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

Conciseness3/5

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

It is a single sentence with no padding, but it front-loads the failure case rather than the capability, so a skimming agent may read the tool as impossible rather than platform-limited. The structure would be stronger with the action stated first and the Linux caveat second.

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

Completeness2/5

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

For a destructive, state-changing tool the definition omits the essentials: what blocking does on supported platforms, how to reverse it, and privilege requirements. The schema and annotations cover the parameter and the danger level, but the description leaves the operational picture incomplete.

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?

Only one parameter exists and the schema describes it fully at 100% coverage, including the hint that get_process supplies the path. The description adds no meaning beyond that, so the baseline 3 for schema-covered parameters applies.

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

Purpose3/5

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

The phrase "Blocking a program from the network" does name a verb and resource, but the sentence is framed entirely as a Linux limitation and never states what the tool actually does on supported platforms or what the resulting state is. An agent can infer it blocks a program's network access, yet the definition reads more like documentation for a refusal than for the operation.

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

Usage Guidelines3/5

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

It supplies a genuine exclusion – do not call this on Linux because it always refuses – which prevents a wasted destructive call. It gives no positive when-to-use context (platforms that work, prerequisites) and never names the sibling unblock_program as the inverse operation, so an agent must infer the counterpart.

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

close_connectionA
Destructive

Closes one TCP connection (IPv4) of a process, as TCPView does: the process is not opened; the program usually reconnects if it wants to.

NameRequiredDescriptionDefault
pidYesThe process that owns the connection.
remoteYesThe other end's IPv4 address.
local_portYes
remote_portYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: only a single connection is affected, the process survives, and the peer will typically re-establish the connection. It omits whether administrative rights are required and what happens when the connection is already gone.

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?

A single front-loaded sentence with no filler; the scope qualifier comes before the caveat. The 'as TCPView does' analogy leans on external knowledge and 'the process is not opened' is slightly awkward phrasing, which keeps it just short of ideal.

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

Completeness3/5

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

For a destructive, non-idempotent mutation with four required parameters and no output schema, the description covers the conceptual behavior well but leaves out permissions, failure modes, and confirmation that the target connection was actually closed. Adequate but with clear gaps an agent would want filled.

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

Parameters2/5

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

Schema description coverage is only 50% — pid and remote are documented, while local_port and remote_port carry no descriptions anywhere. The description adds no parameter meaning at all (it doesn't even say the four fields must together identify one unique connection), so it fails to compensate for the coverage gap on a fully-required 4-param 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 ('Closes') and a tightly scoped resource ('one TCP connection (IPv4) of a process'), which no sibling performs — list_connections only enumerates. The parenthetical clarification that the process is not opened/terminated separates it cleanly from end_process.

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

Usage Guidelines3/5

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

Usage is only implied: the 'program usually reconnects' note hints that the effect is transient, which nudges an agent away from using it as a durable block. There is no explicit when-to-use vs. end_process/block_program, and no stated prerequisites such as needing the connection to exist or elevated privileges.

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

control_service
Destructive

Starts, stops or restarts a systemd service (systemd services cannot be paused). Stopping one that others depend on fails unless with_dependents=true.

NameRequiredDescriptionDefault
nameYesThe service's name (as in `sc query`).
actionYesstart, stop, restart, pause or continue.
with_dependentsNoFor stop and restart: also stop the running services that depend on it (otherwise Windows refuses while any runs).
end_processA
Destructive

Ends a process (SIGTERM, then SIGKILL if it has not ended within two seconds), or with tree=true it and every process under it (those first). Unsaved work in it may be lost. The system's critical processes (init, the kernel, the session's compositor) and Anabolic are refused; a game or anti-cheat program needs force=true after the user agreed.

NameRequiredDescriptionDefault
pidYesThe process ID.
treeNoAlso every process under it (they end first).
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the destructiveHint annotation: the escalation signal sequence, the two-second grace window, the ordering guarantee that children die first under tree=true, the data-loss caveat, and the refusal list including init, the kernel, the compositor, and Anabolic. These are exactly the operational facts an agent needs before invoking a destructive tool.

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?

Dense and mostly front-loaded, with the escalation behavior first, the danger warning second, and the refusal/force rules last. The clause "or with tree=true it and every process under it (those first)" is grammatically elliptical and takes a second read, which is the main structural blemish.

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 three-parameter destructive tool with no output schema, the description covers the danger, the escalation timing, the subtree ordering, and the refusal/force policy — everything needed to call it correctly and safely. Return shape need not be explained absent an output schema, and error behavior is adequately implied by the refusal list.

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 100%, so the baseline is 3, but the description adds meaning the schema does not: it names the concrete class of programs (games, anti-cheat) that require force=true, and restates the tree ordering constraint. The pid parameter's semantics (liveness, reuse, what happens if the process already exited) are not elaborated.

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 precise verb and resource ("Ends a process") and immediately specifies the mechanism (SIGTERM, then SIGKILL after two seconds) plus the tree variant. An agent can tell this apart from siblings like suspend_process, limit_process, or why_process_will_not_end without opening any schema.

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?

Gives clear conditional guidance: tree=true for the subtree, force=true only after user agreement for games/anti-cheat, and notes which processes will be refused. It stops short of naming an explicit alternative (e.g., why_process_will_not_end when a kill is refused, or suspend_process when termination is not wanted), so routing to siblings is left implicit.

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

get_cpuA
Read-onlyIdempotent

CPU: total and per logical processor (user, kernel, DPC, interrupt, clock), interrupt and context switch rates, the processor's name and topology. With trace_seconds > 0, also who ran on each core (threads and processes with their share), from a context switch trace.

NameRequiredDescriptionDefault
trace_secondsNoSeconds to trace before answering (0 to 30, default 0): turns on the trace that tells who uses the resource, which costs some CPU while it runs and stops by itself afterwards.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safe read-only, idempotent, non-destructive profile. The description adds useful behavioral context by explaining that trace_seconds > 0 also returns who ran on each core from a context switch trace, which goes beyond what the annotations declare.

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 dense, front-loaded sentences with no wasted wording. It first enumerates the CPU metrics and then cleanly appends the optional trace behavior.

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?

For a one-parameter read-only tool with rich annotations, the description covers the key returned data and the optional tracing effect. It does not describe output shape or units, but that is a minor gap given the absence of an output schema and the otherwise clear metric listing.

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 100%, so the parameter is already documented in structured data. The description still adds meaning by clarifying that trace_seconds > 0 yields per-core thread and process attribution with their share, which helps an agent understand the output impact of the parameter.

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

Purpose4/5

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

The description clearly identifies the resource as CPU and lists the specific metrics returned: total and per logical processor, user, kernel, DPC, interrupt, clock, interrupt/context switch rates, name, and topology. It is easy to distinguish from siblings like get_memory or get_gpus by resource, though it does not explicitly contrast itself with alternatives such as get_system_overview.

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

Usage Guidelines3/5

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

Usage is implied by the metric list and the optional trace_seconds behavior, but the description does not state when to use get_cpu versus siblings like get_system_overview or get_process. No explicit exclusions or alternative-routing guidance is provided.

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

get_disksA
Read-onlyIdempotent

Disks: every physical disk with its partitions (type, file system, where mounted, space) and volumes, activity, throughput, IOPS, response time, queue and temperature. With trace_seconds > 0, also which processes read and write each disk and which files, from a disk I/O trace.

NameRequiredDescriptionDefault
trace_secondsNoSeconds to trace before answering (0 to 30, default 0): turns on the trace that tells who uses the resource, which costs some CPU while it runs and stops by itself afterwards.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description goes beyond that by disclosing the conditional tracing behavior: with trace_seconds > 0 the result is extended with per-process and per-file read/write attribution, which materially changes the cost and shape of the call. It does not discuss result size or duration limits, but the schema covers the 0-30 second bound and self-termination.

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?

Two sentences, front-loaded with the primary return payload and then the conditional tracing mode. The enumeration is dense but every item is a distinct returned field rather than padding; a short lead-in verb would cost nothing and aid scanning.

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?

With one optional parameter, no output schema and no nesting, the description carries the job of explaining the return shape and does so thoroughly, including the conditional trace output. The only gap is the absence of any pointer to sibling tools when the caller actually wants GPU, display or general hardware information.

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 100%, so the baseline is 3, and the description earns an extra point by concretizing what the parameter buys: 'which processes read and write each disk and which files.' The schema only says 'who uses the resource'; the description makes the added dimension of the result explicit, which is real interpretive value.

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

Purpose4/5

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

The description enumerates exactly what the tool returns — physical disks, partitions with type, file system, mount point and space, plus volumes, activity, throughput, IOPS, response time, queue and temperature. That is specific enough to separate it from get_hardware and get_system_overview, though it opens with a bare noun ('Disks:') rather than a verb, so the action is implied rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for per-disk inventory and performance metrics. There is no explicit when-to-use guidance, no statement of how it differs from get_hardware or get_system_overview, and no guidance on when trace_seconds is worth the CPU cost versus a plain snapshot.

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

get_displaysB
Read-onlyIdempotent

Monitors: each one's own name, GPU, connection, position, mode and refresh rate against the best it offers, native resolution, HDR and scaling. Points out a monitor left below its refresh rate or resolution.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond that: the tool does analysis, not just enumeration — it compares each monitor against its best supported mode and points out underperformance. It does not say how that judgement is surfaced (flag field, message, ordering) or whether it covers the whole machine or a single adapter.

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?

Two sentences, no filler, and the diagnostic behavior is placed last as the payoff. The first sentence is a long comma-separated field list that reads more like a schema dump than prose, but every item is informative and nothing is redundant.

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?

With no output schema, the description carries the burden of explaining what comes back, and it does so by enumerating the reported fields plus the comparison/flagging behavior. The main remaining gap is the shape of the returned data and how the 'below its best' finding is expressed, which an agent would still have to discover by calling it.

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?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter tool applies. The description spends its wording on return content instead, which is the right choice here.

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

Purpose4/5

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

The description makes clear this reports per-monitor display data: name, GPU, connection, position, mode, refresh rate, native resolution, HDR and scaling. That is specific enough to separate it from siblings like get_gpus or get_system_overview, though it never uses an explicit verb (e.g. 'list'/'report') and opens with a bare noun, 'Monitors:'.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance and no named alternative, even though get_gpus and get_system_overview are plausible overlapping choices. The phrase about flagging a monitor below its refresh rate or resolution hints at a diagnostic use case, but that is inference rather than instruction.

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

get_gpusB
Read-onlyIdempotent

GPUs: each adapter's usage, engines (3D, copy, video...), dedicated and shared memory, temperature, and the processes using the GPU most.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and closed-world, so the safety profile is fully covered. The description adds the useful behavioral detail that results are per-adapter and include the top processes per GPU, but says nothing about behavior when no GPU exists, error cases, or cost of the call.

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?

One compact sentence that front-loads the resource and then lists the payload fields in a scannable order. Nothing is padded, though the fragmentary style (no verb, trailing '...') reads more like a field label than a tool contract.

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?

With no input parameters and no output schema, the description's main job is to convey what comes back, and it does so field by field (usage, engines, memory types, temperature, consuming processes). Only the edge cases — multi-GPU ordering, behavior on machines without GPUs — are unaddressed.

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 takes zero parameters, so there is nothing for the description to compensate for and the baseline of 4 applies. The description correctly implies a full, unfiltered snapshot rather than a filtered query.

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

Purpose3/5

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

The description identifies the resource (GPUs) and enumerates the data fields returned — per-adapter usage, engines, dedicated/shared memory, temperature, top processes — so a reader knows what they'd get. But it is a noun-phrase fragment with no verb, and it does not distinguish this tool from siblings like get_hardware or get_system_overview, which plausibly overlap.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all: no condition that selects this over get_hardware, get_system_overview, or get_sensors. The agent must infer that this is the GPU-specific view purely from the name and field list.

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

get_hardwareB
Read-onlyIdempotent

Hardware: the processor (model, cores, caches, clocks, features, virtualisation), the board and BIOS, memory modules (size, speed and configured speed, maker, part number) and the core topology.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description owes nothing there. The description's real contribution is enumerating the returned fields, which matters because no output schema exists, but it says nothing about whether values are a live snapshot, how expensive the call is, or how it relates to the specialized sibling readers.

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?

A single dense sentence with no filler, front-loaded with the 'Hardware:' label followed by the enumerated sub-resources. The parenthetical lists are compact and each item earns its place as return-value documentation, though the fragment style is terse rather than instructive.

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?

For a zero-parameter, annotation-covered read tool, the description does the heavy lifting of documenting return content in the absence of an output schema, which is the main thing an agent needs. The remaining gap is the unresolved overlap with get_cpu and get_memory, already reflected in the usage score.

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 takes zero parameters, so there is no parameter semantics to convey and the baseline of 4 applies. The schema is an empty object, consistent with the parameterless description.

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

Purpose4/5

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

The description names a specific resource and enumerates its contents precisely (processor model/cores/caches/clocks/features/virtualisation, board and BIOS, memory modules with size/speed/maker/part number, core topology), so an agent knows exactly what data this returns. It stops short of a clear verb and never distinguishes itself from overlapping siblings like get_cpu and get_memory, which cover portions of the same ground.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all: no statement of when to prefer this aggregate hardware call over the narrower get_cpu or get_memory, and no guidance on when it is unnecessary. The sibling list makes this omission consequential, since a naive agent may call this and get_cpu redundantly.

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

get_historyA
Read-onlyIdempotent

What happened at a time: the history's samples for a day (or part of one), each with CPU, memory, commit, disk and network totals, the GPU, the processes that led, and the processes that started, exited or hung. Answers "why was the PC slow at 14:32".

NameRequiredDescriptionDefault
toNoLocal time of day to end at, HH:MM (default the day's end).
topNoProcesses listed per sample (default 3, at most 10).
dateNoThe day, YYYY-MM-DD (default today); list_history_days lists them.
fromNoLocal time of day to start at, HH:MM (default the day's start).
limitNoAt most this many samples, the latest kept (default 120, at most 2000).

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare this to be a safe read (readOnly, idempotent, non-destructive), so the description's job is to describe substance. It does that by enumerating the metrics and the process categories per sample, which is real added context beyond the annotations. Pagination/truncation semantics live only in the schema's 'limit' description, so the description is not fully self-contained.

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 content is front-loaded: what is returned comes before the sample contents and the motivating question. The first sentence is very dense with a long comma-separated inventory, but every element describes the payload, so little is wasted.

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?

There is no output schema, so the description must convey the return shape, and it does so in reasonable detail, which is the right call for a five-parameter read tool with sensible defaults. What is missing is guidance on volume (samples per request, default 120/max 2000), which matters for how an agent scopes a query.

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?

Schema description coverage is 100%, with date, from/to, top and limit all documented in the schema itself, so the baseline is 3. The description's phrase 'a day (or part of one)' loosely mirrors the date and from/to parameters but adds no format, default or range detail beyond that.

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

Purpose4/5

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

The description states a concrete verb and resource: it returns the history's samples for a day or part of a day, and spells out what each sample contains (CPU, memory, commit, disk, network, GPU, top/started/exited/hung processes). That is far more specific than the bare name 'get_history'. It never names a sibling (e.g. list_history_days for picking a date), so there is no explicit sibling differentiation, keeping it at 4.

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 closing line 'Answers "why was the PC slow at 14:32"' gives a clear, concrete situation in which to reach for this tool, and 'the history's samples' positions it as the historical companion to the live-status tools. It does not say when NOT to use it or point at alternatives, which is the one gap.

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

get_leaksB
Read-onlyIdempotent

Processes whose handles, private memory or threads keep growing in a straight line (sampled every minute for two hours, flagged after ten minutes or more): the usual sign of a leak.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already establish that this is a safe, idempotent, closed-world read. The description adds genuinely useful behavior beyond that: the sampling cadence (every minute), the observation window (two hours), and the flagging threshold (ten minutes or more of growth). It does not say what fields come back per process or whether it requires prior recording activity.

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?

A single sentence with no filler, and the core concept (growth in a straight line) is front-loaded. The heavy parenthetical is dense but each clause carries real detection detail.

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

Completeness3/5

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

With no parameters and no output schema, the description covers the detection criteria well but leaves the return shape unspecified (which processes, what metrics, over what interval). It also does not note any prerequisite such as the two hours of recorded activity needing to already exist.

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 takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies; the implicit per-minute/two-hour window is fixed rather than configurable, which is consistent with the empty schema.

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

Purpose4/5

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

The description identifies a specific resource class (processes with linearly growing handles, private memory, or threads) and the signal it represents (a leak), which distinguishes it from generic siblings like get_process or list_processes. It is written as a noun phrase rather than a verb+resource statement, so an agent must infer that it returns such processes.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance: nothing says to call this when investigating suspected memory/handle growth versus calling get_memory, get_process, or list_handles directly. No alternatives or exclusions are named.

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

get_memoryB
Read-onlyIdempotent

Memory: used, available, commit charge and limit, file cache, pools, the standby/modified/free lists, page files, and the processes with the most private memory.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered structurally. The description adds real content value by disclosing which memory subsystems are sampled, but says nothing about whether this is a point-in-time snapshot, how many processes appear in the 'most private memory' list, or how large the returned payload is.

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?

A single dense sentence-fragment with the resource label front-loaded followed by the payload contents; no filler or marketing language. It reads slightly as a bare field dump rather than prose, which is acceptable here but keeps it from a 5.

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

Completeness3/5

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

With no output schema, the description carries the full burden of describing return content, and the enumeration helps considerably. However, it does not indicate the shape of the response (nested sections, counters, list sizes) or whether values are bytes, so an agent still cannot predict the structure it will parse.

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 takes zero parameters, so there is nothing beyond the schema to explain; the empty schema itself fully constrains invocation. Baseline 4 applies since no parameter documentation burden exists.

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

Purpose4/5

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

The description names the resource (memory) and enumerates the exact data categories reported: commit charge and limit, file cache, pools, standby/modified/free lists, page files, and top private-memory processes. That enumeration cleanly separates it from siblings like get_cpu, get_disks, and get_system_overview. It lacks an explicit verb, but the intent is unambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus get_system_overview (which presumably also includes memory) or get_process for per-process memory. No prerequisites, no exclusions, no alternative named. The agent must infer routing from the field list alone.

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

get_network_usageA
Read-onlyIdempotent

Who uses the network: each program's receive and send rates and totals, and (after trace_seconds of the network trace) where the traffic goes, by destination name, with the programs talking to each.

NameRequiredDescriptionDefault
trace_secondsNoSeconds to trace first (0 to 30, default 5): where the traffic goes needs the network trace. Needs "Turn kernel traces on".

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that destination data requires a trace and takes trace_seconds, implying a blocking wait, but it never states the default 5s cost or that the trace prerequisite ('Turn kernel traces on') comes from the schema, not the description. Modest added value.

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?

One dense sentence, front-loaded with what you get (per-program rates/totals) before the conditional destination data. It is slightly run-on with the trailing 'with the programs talking to each', but nothing is redundant.

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?

No output schema exists, so the description must convey return structure, and it does: per-program rates/totals plus destination-name grouping. The main omission is the latency cost of the trace and that the trace prerequisite must be enabled beforehand, which an agent needs in order to avoid a surprise delay.

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 one parameter at 100% schema coverage, the schema already documents trace_seconds fully, including the 0-30 range, default 5, and the kernel-traces prerequisite. The description only adds that the trace gates the destination-name output, which is a small semantic gain over the schema text.

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

Purpose4/5

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

The description names the specific resource and the shape of the result: per-program receive/send rates and totals, plus destination breakdown by name. That is far more concrete than a generic 'get network usage'. It does not name the sibling tools it overlaps with (list_connections, list_dns_lookups), so differentiation is left to inference.

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

Usage Guidelines3/5

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

Usage is implied: call it for per-program bandwidth, and the destination breakdown only appears after a trace. There is no explicit when-to-use versus list_connections or list_dns_lookups, and no statement of when the trace is worth the wait beyond the parenthetical condition.

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

get_processA
Read-onlyIdempotent

One process in full: every counter (CPU, memory in detail, I/O, disk, network, open files), its file, command line, package, version, user and rights; who started it and their parents (named even after they exited) and how it was most likely started; the processes it started; the services it runs; its connections and listening ports; and whether its open files, memory or threads keep growing. Nothing is injected; its files in /proc are only read.

NameRequiredDescriptionDefault
pidYesThe process ID.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral facts: 'Nothing is injected; its files in /proc are only read', and the note that ancestors are named even after they exited. It stops short of disclosing cost or what happens for an invalid/reused pid.

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?

One front-loaded sentence with the core claim first ('One process in full') followed by a scoped enumeration, plus a short safety sentence. The list is long but every item names a distinct returned data class rather than padding, so it earns its length despite being dense.

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?

With no output schema, the description carries the return-value burden and does so thoroughly by enumerating what comes back. It lacks only failure behavior (unknown/zombie pid) and performance expectations for a tool that inspects many /proc surfaces.

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?

Schema description coverage is 100% and the single pid parameter is documented in-schema, so the description adds no parameter meaning beyond it. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description opens with 'One process in full' and then enumerates the exact resource contents (counters, files, ancestry, connections, growth trends), which clearly separates it from list_processes or get_process_tree. It never names a sibling explicitly, so the differentiation is by implication rather than by direct contrast.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the deep-dive-for-a-single-pid tool, but nothing states when to prefer it over get_process_tree, list_processes, get_thread_stacks or get_leaks, nor any cost/cadence guidance for what is clearly a heavy lookup. No when-not or prerequisite guidance is given.

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

get_process_treeA
Read-onlyIdempotent

The process tree: who started whom, with CPU and private memory, from a process down (or the whole machine). Parents that exited are left out; a reused PID does not make a false parent.

NameRequiredDescriptionDefault
pidNoThe process at the top; the whole machine when left out.
depthNoLevels below the top (default 6, at most 20).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety needs no restating. The description instead adds real behavioral context the annotations cannot: exited parents are omitted from the tree, PID reuse is guarded against so no false parent is reported, and the payload carries CPU and private memory figures.

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?

Two tight sentences: the payload and scope come first, then the correctness caveats. Nothing is repeated and every clause carries information an agent would otherwise have to guess.

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?

With no output schema, the description does the necessary work of naming the returned fields and the tree semantics, and the schema handles depth limits. The one unresolved gap is output shape (nested tree versus flat rows with parent ids) and ordering, which would matter when reasoning over the result.

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?

Schema coverage is 100% and both parameters are documented in the schema, including depth's default of 6 and cap of 20, so the baseline of 3 applies. The description's 'from a process down (or the whole machine)' mirrors the pid semantics rather than adding syntax or edge-case detail beyond it.

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

Purpose4/5

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

The description states the resource and its distinctive shape: a parent-child process tree with CPU and private memory, rooted either at a given process or the whole machine. That implicitly separates it from flat-list siblings like list_processes and single-record get_process, but it never names an alternative, so differentiation is inferable rather than explicit.

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

Usage Guidelines3/5

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

Usage is implied by the scoping phrase 'from a process down (or the whole machine)', which hints at when to pass a pid versus omit it. There is no explicit when-to-use guidance, no when-not, and no pointer to get_wait_chain or get_process for other lineage questions.

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

get_sensorsA
Read-onlyIdempotent

Temperatures, fan speeds and power draw: every sensor Anabolic reads (the processor's package and cores, GPUs, disks, memory modules, network adapters, thermal zones, fans), each with the hardware's high and critical marks and how close it is to them. On Windows only drivers may read the processor's own temperature: the firmware's thermal zones stand in where it has any (many desktops have none), and the processor's power comes from its energy meter.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behaviour, yet the description still adds real substance: on Windows the processor temperature depends on vendor drivers, firmware thermal zones substitute when present and are often absent on desktops, and processor power comes from the energy meter. That tells the agent to expect missing or partial readings. It does not say how missing sensors are surfaced (omitted vs. null vs. error), which keeps it off a 5.

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 content is packed into one front-loaded sentence, with the payload (what is returned) first and the platform caveat second. It is dense with nested parentheticals, which costs a little readability, but no sentence is filler.

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?

For a zero-parameter, read-only tool with no output schema, the description covers the return contents, the threshold context and the platform caveats well. The remaining gap is that it never explains how individual sensors are keyed or grouped in the response, which matters for a tool that can return many sensors.

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 takes zero parameters, so the baseline is a 4. There is nothing for the description to disambiguate about inputs, and it correctly spends no words on arguments.

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

Purpose4/5

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

The description states concretely what the tool returns: temperatures, fan speeds and power draw for every sensor, enumerated by location (package/cores, GPUs, disks, memory, NICs, thermal zones, fans) plus high/critical marks. That is far more specific than the name alone. It never distinguishes itself from the overlapping siblings get_cpu, get_gpus, get_disks or get_hardware, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: mentioning the hardware's high and critical marks suggests the tool is for thermal/throttling headroom checks rather than raw inventory. There is no explicit when-to-use or when-not-to-use, and no routing advice against the many overlapping per-component siblings, which an agent selecting among get_cpu, get_gpus, get_disks and get_hardware genuinely needs.

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

get_serviceA
Read-onlyIdempotent

One service in full: state, process, startup type (and whether a trigger starts it), its program and arguments, the account it runs as, its description, what it depends on and which services depend on it.

NameRequiredDescriptionDefault
nameYesThe unit's name (sshd.service; "(user)" after it for the user's own), not its description.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds substantive context the annotations do not: the exact set of attributes returned, including dependency relationships in both directions and whether a trigger starts the service, which is genuinely useful given there is no output schema.

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?

A single front-loaded sentence that spends every clause on a distinct returned attribute, with no filler or restatement of the tool name. Tight and purposeful.

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?

For a one-parameter read tool with no output schema, describing the returned fields is precisely the missing piece and it is done thoroughly, including dependencies. It stops short of noting not-found/error behavior or whether dependency lookups can be slow, which would have made it fully complete.

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?

Schema coverage is 100% and the schema's own 'name' documentation is quite rich (sshd.service format, the "(user)" suffix, and the warning not to pass the description). The description adds no additional meaning about the parameter, so the baseline 3 applies.

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

Purpose4/5

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

"One service in full" states a specific singular resource and enumerates the returned facets (state, process, startup type, account, dependencies), which reads clearly as a detail lookup rather than a listing. The singular framing implicitly separates it from list_services, but the description never names or contrasts that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: 'One service' versus the sibling list_services suggests this is the follow-up call once a service name is known, but there is no explicit when-to-use, no mention of prerequisites, and no statement about what happens with an unknown or ambiguous name.

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

get_stuttersA
Read-onlyIdempotent

Stutters: frame rate, 1 % lows, frame times and stutter counts of every program that draws (games), the latest stutters, and DPC/ISR time per driver (LatencyMon style) with the longest spikes. Watches for watch_seconds first (default 5) if the trace was not already running. No game is opened.

NameRequiredDescriptionDefault
watch_secondsNoSeconds to watch before answering (0 to 60, default 5): frame times need some frames, driver timing some interrupts.

TDQS

A4/5.0
Behavior4/5

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

Beyond the read-only and non-destructive annotations, it discloses that the tool may first watch for watch_seconds when a trace is not already running and that no game is opened. It does not further explain trace startup behavior, privilege requirements, or how inactivity affects the usefulness of the measurements.

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?

Three compact sentences front-load the measurements and then cover timing and the absence of game-launching side effects. The opening fragment and long first sentence are somewhat dense, while phrases such as "every program that draws (games)" could be expressed more clearly.

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?

For a tool with one optional parameter, the definition supplies enough information to invoke it with defaults, anticipate a possible wait, and understand the broad result categories despite the absence of an output schema. It remains less complete about stutter thresholds, trace prerequisites, and data-quality expectations when little rendering or interrupt activity occurs.

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 schema already fully documents watch_seconds, including its range, default, and sampling rationale. The description adds useful semantics beyond that schema by explaining that the watch period applies conditionally when the trace was not already running.

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

Purpose4/5

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

The description clearly identifies the diagnostic data: frame rate, 1% lows, frame times and stutter counts for rendering programs, recent stutters, and per-driver DPC/ISR spikes. This scope implicitly distinguishes it from generic CPU, GPU, and process tools, but it lacks an explicit collection verb or direct sibling comparison.

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 focus on games and LatencyMon-style driver timing provides clear context for diagnosing rendering stutters and driver-latency spikes. It does not explicitly state when to prefer it over tools such as get_history, record_activity, get_cpu, or get_gpus, or mention that representative workload activity may be needed.

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

get_system_overviewA
Read-onlyIdempotent

The state of the whole PC right now: CPU, memory, disks, network, GPUs, process/thread/handle counts, uptime, the busiest processes per resource, and anything that needs attention (hung windows, processes that cannot end, memory pressure, leaks). The place to start.

NameRequiredDescriptionDefault
topNoHow many of the busiest processes to list per resource (default 5).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so safety is covered. The description adds real value beyond that by disclosing the diagnostic content of the response (hung windows, unendable processes, memory pressure, leaks) that an agent could not infer from the schema. It does not mention snapshot cost or latency for a whole-system sweep.

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 content inventory is front-loaded in the first sentence and the routing cue closes it in four words. The single sentence is dense and run-on, but every listed item conveys a distinct capability rather than padding.

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?

With no output schema, the description carries the burden of describing return content, and it does so comprehensively by category, including the attention/anomaly section. It omits response shape and any note about the expense of a full-system snapshot, which is the only remaining gap.

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?

There is a single optional parameter and the schema documents it at 100% coverage with a default of 5. The description never references `top`, so it adds no meaning beyond the schema; baseline 3 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?

Names a concrete resource (the whole PC) and enumerates exactly what is returned: CPU, memory, disks, network, GPUs, process/thread/handle counts, uptime, busiest processes, and attention items. This clearly separates it from the single-resource siblings (get_cpu, get_disks, get_memory) as the aggregate view.

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 place to start" is an explicit entry-point directive that tells the agent to call this before drilling into per-resource tools. It stops short of naming specific follow-up siblings or stating when not to use it, so it falls just short of a 5.

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

get_thread_stacksA
Read-onlyIdempotent

Call stacks of a process' threads (one thread, or its busiest ones), with module!function names where they can be read: where it spends its time or is stuck. OPENS THE PROCESS and SUSPENDS each thread for a few milliseconds: the first call is refused with the risks; call again with force=true only if the user agreed.

NameRequiredDescriptionDefault
pidYesThe process ID.
tidNoOne thread; left out, its busiest threads.
forceNoTrue only after the user agreed to the risk this tool described.
threadsNoHow many of the busiest threads (default 5, at most 20).

TDQS

A4.6/5.0
Behavior5/5

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

Discloses behavior the annotations cannot convey: the tool OPENS the process and SUSPENDS every thread for a few milliseconds, and the first call is refused with a risk explanation requiring force=true after user consent. This side-effect-and-consent protocol is exactly the kind of context the readOnly/destructive hints do not capture.

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?

Two sentences, both front-loaded with the highest-value information: what you get first, the side effect and consent gate second. Every clause carries weight and nothing is repeated from the schema.

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?

Covers the essentials for a 4-parameter diagnostic tool with no output schema: what is returned (module!function frames), what it does to the target process, and the consent gate. It leaves the exact return shape (number of frames, depth, multi-thread layout) unstated, which an agent must discover at call time.

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 100%, so the baseline is 3, but the description adds real meaning: tid vs. threads is framed as 'one thread, or its busiest ones,' and force is tied to a concrete sequencing rule ('call again with force=true only if the user agreed'). It stops short of explaining what counts as 'busiest' or the sampling depth.

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 ('call stacks of a process' threads') plus the payload shape ('module!function names where they can be read') and the diagnostic intent ('where it spends its time or is stuck'). This clearly separates it from siblings such as get_process, get_wait_chain, or list_modules.

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 a clear diagnostic context (finding where a process spends time or is stuck) and an explicit two-step protocol for the risky first call. It does not, however, name alternatives — e.g., when to prefer get_wait_chain for blocking analysis or get_process for basic inspection — so the agent must infer the routing.

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

get_wait_chainA
Read-onlyIdempotent

What a process' threads wait for, across processes (Wait Chain Traversal): locks, other threads, other processes, COM and ALPC calls, deadlocks first. The answer to "why is it not responding". OPENS THE PROCESS' THREADS: the first call is refused with the risks; call again with force=true only if the user agreed. Can take seconds.

NameRequiredDescriptionDefault
pidYesThe process ID.
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the tool opens the target process' threads, the first invocation is deliberately refused with a risk explanation, the retry requires force=true with user consent, and the call can take seconds. These access, consent, and latency traits are exactly what annotations cannot convey (readOnlyHint=true alone would hide the thread-opening risk).

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?

Front-loaded with the purpose, then the risk protocol, then the latency caveat — a sensible order with no filler sentences. The opening sentence is dense with a long enumerated list, but every clause earns its place by narrowing scope.

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?

Given no output schema, the description still tells the agent what comes back conceptually (wait chain across processes, deadlocks first) and what to expect on the first call. The only gap is that the return structure of a wait chain is not sketched, though the self-refusal protocol is well explained.

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 100%, so both parameters are already documented, and the schema for force is nearly identical to the prose. The description still adds the operational meaning of force — it is the second-call escape hatch after a deliberate refusal and requires user consent — which is more actionable than the schema's wording.

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 (what a process' threads wait for) and enumerates the scope precisely: locks, threads, processes, COM/ALPC calls, with deadlocks surfaced first. It also frames the diagnostic question it answers ("why is it not responding"), which distinguishes it cleanly from siblings like get_thread_stacks and why_process_will_not_end.

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?

Gives clear context for when to reach for it (a non-responding process) and a mandatory two-step protocol: the first call is refused, force=true only after user agreement. What it does not do is name an alternative sibling (e.g. why_process_will_not_end) or state when the cheaper tools should be tried first.

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

lift_limitA
Idempotent

Takes away the CPU and memory limit limit_process (or the user, by hand) put on a process. A rule's limit stays: the rule is the user's.

NameRequiredDescriptionDefault
pidYesThe process ID.
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A3.5/5.0
Behavior3/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description usefully discloses that rule-imposed limits survive this call. However, the schema's force parameter refers to 'the risk this tool described', and the description never describes any risk, leaving the behavioral consequence of removal unexplained.

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?

Two short sentences, with the core action front-loaded and the rule-limit caveat placed as a qualifier. The wording is slightly clumsy ('limit limit_process') but there is no padding or repetition.

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

Completeness3/5

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

For a two-parameter, non-output-schema tool with annotations covering safety, this is close to sufficient, but the dangling reference to a risk the description never states leaves a real informational hole. It also says nothing about failure conditions, such as what happens when the process has no limit set.

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 100% and both parameters are documented inline, including the consent condition on force, so the baseline for a low-burden description applies. The description adds only indirect context (that removing a limit relates to limit_process) and nothing specific about pid or force, so it does not exceed the baseline meaningfully.

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

Purpose4/5

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

States a specific verb and resource ('Takes away the CPU and memory limit') and explicitly names the sibling that applied it, limit_process, so the inverse relationship is unambiguous. The awkward phrasing 'limit limit_process ... put on a process' costs a little clarity, but the operation is identifiable without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied through the reference to limit_process and the carve-out that 'a rule's limit stays', which steers the agent away from expecting this to undo rule-based limits. There is no explicit statement of prerequisites or of when an alternative (e.g., rule management) should be used instead.

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

limit_processA
Idempotent

Holds a process, and the processes it starts from now on, to a share of the machine's CPU and to an amount of private memory (Windows job objects: a cap the scheduler keeps, whatever the priority). Past the memory limit its requests for more fail, and most programs then stop with an error. Lasts until it exits or Anabolic quits; lift_limit takes it away. Windows' core processes and anti-cheat programs are refused.

NameRequiredDescriptionDefault
pidYes
forceNo
memory_gbNoThe most private memory it may commit, GB, with what it starts.
cpu_percentNoThe most of the whole machine's CPU it may use, percent (1 to 99), as list_processes counts it.

TDQS

A4.1/5.0
Behavior4/5

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

Well beyond the annotations: it discloses the job-object enforcement model, that exceeding the memory cap makes allocation requests fail and typically crashes the program, the lifetime of the limit, and that protected processes are rejected. That is substantial added context on top of readOnlyHint=false / destructiveHint=false / idempotentHint=true — the near-crash side effect in particular is not implied by the annotations.

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?

Single dense paragraph, front-loaded with the action, and no filler sentences. A couple of clauses ('and most programs then stop with an error') could be tightened, but each carries information about consequences.

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?

For a mutating, no-output-schema tool this covers the essentials: scope, duration, undo path, side effects, and refusal cases. The remaining gap is the unexplained `force` parameter and any hint about what the call reports back, which is minor since no output schema exists.

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?

Schema coverage is 50% (memory_gb and cpu_percent are documented; pid and force are not). The description does add real meaning the schema lacks — that limits propagate to processes started later — but it never explains what `force` changes, which is exactly the undocumented parameter an agent most needs guidance on.

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 — holds a process (and its future children) to a CPU share and private-memory amount — and pins down the mechanism ('Windows job objects: a cap the scheduler keeps, whatever the priority'). That phrasing implicitly separates it from priority-tuning siblings like set_priority and set_efficiency_mode.

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?

Gives clear operational context: the limit persists until the process exits or the app quits, and lift_limit removes it. It also names the cases where the tool will refuse to act (core processes, anti-cheat programs). It stops short of an explicit 'use this rather than set_priority when...' routing statement.

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

list_connectionsA
Read-onlyIdempotent

Every TCP connection and UDP endpoint with its program, the other end's address and name (from what programs looked up, else reverse DNS), ports and TCP state. With trace_seconds > 0, also each connection's traffic. Filter by process or by text.

NameRequiredDescriptionDefault
pidNoOnly this process' connections.
limitNoAt most this many (default 200, at most 2000).
filterNoOnly connections whose program, remote address or remote name contains this (any case).
trace_secondsNoSeconds to trace first (0 to 30, default 0): adds how much each connection sends and receives. Needs "Turn kernel traces on".

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish that this is a safe, read-only, idempotent operation, so the bar is lower. The description adds valuable context about how remote names are resolved (program lookups else reverse DNS) and that trace_seconds > 0 includes per-connection traffic, beyond what annotations provide.

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 compact sentences with the primary scope front-loaded, followed by the trace enhancement and filtering capability. No unnecessary wording is present.

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?

With no output schema, the description usefully explains what data is returned (program, remote address/name, ports, TCP state, optional traffic). It is nearly complete, though it could clarify whether listening TCP ports are included, given the separate list_listening_ports sibling.

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?

Schema coverage is 100%, so the schema already documents all four parameters in detail. The description adds marginal meaning for the filter and trace_seconds parameters but does not mention pid or limit, leaving the schema to do the heavy lifting.

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

Purpose4/5

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

The description states a specific scope: every TCP connection and UDP endpoint with program, remote address/name, ports, and TCP state, plus optional traffic details. It does not explicitly distinguish this tool from siblings like list_listening_ports or get_network_usage, leaving some potential overlap ambiguous.

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

Usage Guidelines3/5

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

The description implies usage by specifying filtering by process or text and the trace option, but it gives no explicit when-to-use guidance or exclusions relative to sibling tools such as list_listening_ports or close_connection.

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

list_dns_lookupsC
Read-onlyIdempotent

DNS lookups programs made. Not available on Linux: nothing records the names programs look up system-wide.

NameRequiredDescriptionDefault
pidNoOnly lookups made by this process.
limitNoAt most this many, the latest first (default 100, at most 1000).
filterNoOnly names containing this (any case).
trace_secondsNoSeconds to watch first (0 to 30, default 0): lookups are seen while the network trace runs (the Network page open, or this). Needs "Turn kernel traces on".

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already establish readOnlyHint, idempotentHint, non-destructive and closed-world behavior, so safety is fully covered elsewhere. The description's real contribution is the platform limitation: lookups are not recorded system-wide on Linux, which is context the annotations do not carry. It stops short of describing result shape, retention window, or how results relate to the kernel trace requirement.

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?

Two short sentences with no padding, and the platform caveat is placed immediately after the purpose statement. The phrasing is slightly clumsy ('DNS lookups programs made') but nothing is wasted.

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

Completeness2/5

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

With four optional parameters, no output schema, and a trace-watching mode that changes what the tool returns, the description should say what a lookup record contains and what changes when trace_seconds is set. Neither is covered, and the interaction with the network trace is only implied.

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?

Schema description coverage is 100%, including the pid, filter, limit and trace_seconds semantics and the 'Turn kernel traces on' prerequisite, so the schema does the heavy lifting. The description adds nothing about parameter behavior, making the baseline 3 correct.

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

Purpose3/5

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

The description says the tool covers 'DNS lookups programs made', which identifies the resource but with awkward grammar and no explicit verb-plus-scope framing. It does not distinguish itself from related siblings such as list_connections or get_network_usage, so an agent must infer the boundary from the noun phrase alone.

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

Usage Guidelines2/5

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

There is no guidance on when to reach for this tool versus list_connections or get_network_usage, and no mention of prerequisites beyond a passing hint. The one usage-adjacent signal is the Linux unavailability note, which tells the agent when the tool will not work but not when it should be chosen.

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

list_handlesA
Read-onlyIdempotent

The handles a process holds, by type, with the names of files, registry keys, events and other objects; for processes held open, which process each one is. OPENS THE PROCESS (handles are duplicated out of it to read their names): the first call is refused with the risks; call again with force=true only if the user agreed.

NameRequiredDescriptionDefault
pidYesThe process ID.
kindNoOnly handles of this type (File, Key, Event, Process, Thread, Section...).
nameNoOnly handles whose name contains this (any case).
forceNoTrue only after the user agreed to the risk this tool described.
limitNoAt most this many (default 200, at most 2000).

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, it discloses that the target process is opened and that handles are duplicated out of it to read their names. The initial refusal, risk disclosure, and explicit consent gate surface important potentially intrusive behavior that the annotations alone would conceal.

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?

Two dense sentences front-load the returned information and then the critical operational risk and consent workflow. The capitalization emphasizes the surprising behavior, and every clause earns its place without filler.

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 having no output schema, the description supplies the essential result content: handles by type, object names, and process-handle targets, while the schema documents filtering and truncation controls. Together with the risk-discovery and consent sequence, this gives an agent enough context to invoke the tool correctly; exact risks are intentionally supplied by the first call.

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?

All five parameters already have schema descriptions, including the filters, result limit, and force consent condition. The description usefully places force within the two-call workflow, but otherwise adds little parameter-specific meaning or syntax beyond the fully documented schema.

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

Purpose4/5

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

The description identifies the resource precisely: handles held by a process, grouped by type, with file, registry-key, event, and other object names, plus the targets of process handles. This naturally distinguishes it from general process-inspection siblings, although it does not explicitly contrast it with tools such as get_process or list_modules.

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?

It provides a concrete invocation protocol: the first call is refused and returns the risks, then the agent may retry with force=true only after the user agrees. It does not explain when handle inspection is preferable to sibling tools, so its guidance is stronger for safe invocation than for tool selection.

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

list_history_daysB
Read-onlyIdempotent

The days the history (flight recorder) holds: every 10 seconds while Anabolic runs, the machine's totals and the processes that led.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so safety is covered. The description adds genuinely useful context beyond them: sampling cadence of every 10 seconds while Anabolic runs, and that coverage includes machine totals and process attribution. It omits retention limits, how many days are typically returned, and what happens when recording was not running.

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?

One short sentence, front-loaded with the resource being listed, with no padding. The trailing clause 'the processes that led' is grammatically incomplete and adds ambiguity rather than information, which is the only real inefficiency.

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

Completeness3/5

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

For a zero-parameter read-only list tool this is nearly adequate, but with no output schema the description should state the return shape (a list of dates, and in what format or ordering) so the agent can chain into get_history. The cadence context helps, but the missing return-format detail and the absent link to get_history leave a gap.

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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The prose does not misrepresent any input expectations.

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

Purpose4/5

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

The description identifies a specific resource: the set of days for which history (flight recorder) data exists, plus the sampling scope. It is distinguishable from the sibling get_history, which presumably returns the entries themselves, though the description never names that relationship explicitly and is phrased as a noun fragment rather than a verb-led statement.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says this is the discovery step to call before get_history to pick a valid day, and no exclusions or alternatives are named. The agent must infer the call ordering from the sibling list alone.

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

list_listening_portsA
Read-onlyIdempotent

The ports open on this PC for others to connect to (TCP listening, UDP bound), with the program behind each and who can reach it: every network, this computer only, or one network.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true and openWorldHint=false, so safety is covered. The description adds value beyond that by disclosing the content of each result entry — the owning program and the reachability scope (every network / this computer only / one network), which is a behavioral detail not encoded in any structured field. It stops short of noting whether elevated privileges are needed to attribute ports to programs.

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?

A single front-loaded sentence that defines the resource first and then enumerates the result fields, with zero filler. The colon-and-list construction is dense but readable; nothing is redundant.

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?

For a no-parameter, read-only listing with no output schema, the description does the necessary work by stating what each returned row contains (program and reachability). The only meaningful omission is any note about privilege requirements or result ordering, which is minor for a safe read 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?

The tool takes zero parameters and the schema is an empty object, so there is no parameter meaning to add; the description correctly refrains from inventing any. The baseline for a 0-param tool applies, with no extra semantics to earn a higher mark.

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

Purpose4/5

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

The description names a specific resource (ports open on this PC) and narrows it precisely to TCP listening and UDP bound sockets, plus what accompanies each entry (owning program, reachability scope). It is clearly distinct from a connections listing by emphasizing 'listening' and 'for others to connect to', though it never names the sibling list_connections it must be distinguished from.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the phrase 'for others to connect to' frames the tool as an exposure/what-is-listening check, which hints at when it is appropriate. There is no explicit when-to-use, no exclusion, and no pointer to list_connections for established sessions versus listening sockets, so the agent must infer the routing.

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

list_modulesA
Read-onlyIdempotent

The DLLs and the program a process has loaded, with their paths, base addresses and sizes. OPENS THE PROCESS to read its module list: the first call is refused with the risks; call again with force=true only if the user agreed.

NameRequiredDescriptionDefault
pidYesThe process ID.
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare a safe, idempotent read, but the description adds a crucial trait they do not convey: the tool opens the target process, which is refused on the first call and requires an explicit force=true retry after user consent. That two-step consent flow is exactly the kind of behavioral context annotations cannot express, though the nature of the risk itself is left to the refusal message.

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?

Two sentences, zero waste: the return contents come first and the safety-critical consent flow second, with the capitalised 'OPENS THE PROCESS' drawing the eye to the risk. Nothing is repeated from the schema and nothing is padding.

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?

With no output schema, the description compensates by listing the returned fields, and it fully covers the two-parameter consent workflow. Only minor gaps remain, such as behaviour on an invalid or already-exited pid.

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 100%, so both pid and force are already documented, establishing a baseline of 3. The description goes beyond the schema by explaining the call sequence that makes force meaningful (refused first call, then retry with force=true), which adds real semantic value.

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

Purpose4/5

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

The description names the resource concretely ('The DLLs and the program a process has loaded') and even enumerates the returned fields (paths, base addresses, sizes), so an agent knows exactly what it gets. It does not explicitly contrast itself with nearby siblings like list_handles or get_process, so it stops short of a 5.

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?

It gives clear operational guidance for the force parameter: the first call is refused and returns the risks, and force=true should be used only after the user agrees. That is an explicit when-to-use rule, though it offers no guidance on choosing this tool over alternative views of a process.

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

list_processesA
Read-onlyIdempotent

The processes running now, one line each: PID, parent, name, CPU, private memory, disk, network and GPU rates, threads, handles, priority, user, start time, and whether it is not responding. Filter by name or PID, order by a resource.

NameRequiredDescriptionDefault
sortNoOrder: cpu (default), memory, disk, network, gpu, io, handles, threads, name, pid or started (newest first).
limitNoAt most this many (default 40, at most 500).
filterNoOnly processes whose name contains this (any case), or whose PID it is.
include_exitedNoAlso the processes that exited since the last refresh.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds useful behavioral detail (the health flag 'whether it is not responding' and the exact per-line column set) but says nothing about default result size, truncation, or whether system/kernel processes are included.

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?

A single dense sentence, front-loaded with the action and scope before the column list and the filter/sort note. The column enumeration is long but earns its place since there is no output schema.

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?

For a read-only list tool the definition is largely complete: it conveys what a row contains, that filtering and sorting exist, and the process-health flag. Only limits around result size and inclusion scope are left entirely to the schema.

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?

Schema description coverage is 100%, so the baseline is 3. The description only restates filtering and ordering, and its phrase 'order by a resource' actually under-sells the schema's non-resource sort keys (name, pid, started) without adding new meaning.

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

Purpose4/5

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

States a specific verb and resource ('processes running now, one line each') and enumerates the returned columns, which lets an agent distinguish it from get_process or get_process_tree, though those siblings are never named explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: 'Filter by name or PID, order by a resource' hints at typical calls, but there is no statement of when to prefer this over get_process (single-process detail) or get_process_tree, and no exclusion guidance.

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

list_servicesA
Read-onlyIdempotent

systemd services, the system's and the user's own (marked "(user)"): unit name, description, state, startup type (enabled, disabled, masked, static), the process each runs in. Filter by text and state.

NameRequiredDescriptionDefault
limitNoAt most this many (default 300, at most 1000).
stateNorunning, stopped or all (default all).
filterNoOnly services whose name or display name contains this (any case).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, closed-world read, so the bar is lower. The description still adds real context beyond them: it discloses that both system and user units are included, that user units are tagged '(user)', and what attributes each row carries. It says nothing about pagination behavior beyond the schema's own limit note.

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?

A single dense sentence with the resource front-loaded, followed by the returned attributes and then the filtering capability. No filler, no repetition; the parenthetical '(user)' marker is a genuinely load-bearing detail.

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?

With no output schema, the description carries the burden of describing return values and does so adequately by listing the per-service attributes. Combined with the full schema coverage of inputs and the read-only annotations, an agent has what it needs to call this correctly; only the sibling-routing question remains open.

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?

Schema coverage is 100%, so all three parameters (limit, state, filter) are fully documented in the schema, establishing a baseline of 3. The description's 'Filter by text and state' restates the schema rather than adding format, matching rules, or edge-case behavior.

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

Purpose4/5

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

The description names a specific resource (systemd services) and enumerates the returned fields (unit name, description, state, startup type, process), so an agent knows exactly what it gets. It does not explicitly distinguish itself from the singular sibling get_service or from list_startup_items, leaving that distinction to inference.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase 'Filter by text and state' suggests a browsing/inspection use case, but there is no statement of when to choose this over get_service (single unit detail) or list_startup_items. No exclusions or prerequisites are given.

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

list_startup_itemsA
Read-onlyIdempotent

Programs that start with the session: autostart entries, systemd user units and Plasma's scripts, with their command, whether each is on, whether its program is missing, and what it costs now if it runs.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing what each entry reports: command, enabled/disabled state, whether the backing program is missing, and current runtime cost. It does not say whether output covers other users or requires elevation.

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?

A single sentence that front-loads the resource before the source list and the reported fields. It is dense with colon-separated clauses but every clause adds information. Slightly list-heavy phrasing costs it a perfect score.

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?

With no output schema, the description carries the return-value burden and does so by enumerating the reported fields. No parameters need explaining. Minor gap: it does not state scope (current user vs. all users) or ordering/format, which matters for a system-inventory call.

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 takes zero parameters, so the schema has nothing to explain and the baseline of 4 applies. The description correctly does not invent parameter behavior, keeping it a pure enumeration tool.

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

Purpose4/5

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

Names a specific resource (startup items) and enumerates the concrete sources it covers: autostart entries, systemd user units, and Plasma scripts. That detail distinguishes it from generic siblings like list_services or get_system_overview. It never states the verb or names an alternative sibling explicitly, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: an agent infers you call this to inspect what launches at session start. There is no statement of when to prefer it over list_services or set_startup_item, and no mention that modification goes through the sibling set_startup_item. No prerequisites (e.g., root/system scope) are given.

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

record_activityA
Read-onlyIdempotent

Records what a process (with the processes under it), every process of a name, or the whole machine does for some seconds, step by step like Process Monitor: programs started and how they ended, shared libraries loaded, files opened, read, written, renamed and deleted (only when Anabolic has full access; Linux reports what was done, not what failed), TCP connections with the bytes they carried; with syscalls=true, every system call of a process or program like strace, with a per-call summary like strace -c (full access). Nothing is opened, stopped or injected. Reports progress every second; returns the counts and the steps kept (filter them with kinds, filter, only_failures, only_changes).

NameRequiredDescriptionDefault
pidNoRecord this process (and, with with_children, the ones under it and what they start).
nameNoRecord every running process of this name, e.g. "chrome.exe".
kindsNoKinds of steps to keep: process, file, network, syscall (default all).
limitNoSteps returned at most, the latest kept (default 300, at most 3000).
filterNoWords a step's process, path or detail must all contain; "-word" leaves out the steps that contain it.
secondsNoSeconds to record: 1 to 120 (default 10).
syscallsNoEvery system call too, as strace shows it: the call, its arguments, its result and the time it took (default false). With everything, heavy: often hundreds of thousands a second, and calls a thread was already waiting in, or still is at the end, are counted, not listed. Calls a thread repeats within a second are one step with a count; syscall_summary counts every call.
everythingNoRecord the whole machine (what a process repeats within a second is one step with a count; at most 30 seconds).
only_changesNoOnly the steps that change something (writes, deletes, renames, set values, starts).
only_failuresNoOnly the steps that failed (access denied, not found...).
with_childrenNoWith pid: the processes under it too (default true).

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this with "Nothing is opened, stopped or injected", which is the precise reassurance an agent needs about a monitoring tool. Beyond that it discloses privilege requirements, progress reporting every second, the returned artifacts (counts plus kept steps), and a load warning that syscalls can produce hundreds of thousands per second.

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?

Everything is packed into two sentences with no filler, and the core action leads. The first sentence is long and clause-stacked, and the Process Monitor / strace / strace -c analogies repeat information already conveyed, but no sentence is wasted.

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?

For an 11-parameter tool with no output schema, the description covers the essential gaps: what events are captured, permission limits, duration and heaviness of recording, and that the return value is counts plus kept steps. It could say more about how the returned steps are shaped, but nothing needed 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.

Parameters3/5

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

Schema description coverage is 100%, so every one of the 11 parameters is already precisely documented. The closing sentence does little more than restate the schema when it says to filter with kinds, filter, only_failures and only_changes, and the syscalls count-collapsing detail is also present in the schema, so added meaning is marginal beyond the baseline.

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+resource: it records what a process (or all processes of a name, or the whole machine) does for some seconds, step by step. It enumerates the captured event classes (process starts/ends, modules, file reads/writes/renames/deletes, TCP connections, optional syscalls), which makes it unmistakable from any sibling such as get_process_tree or list_modules.

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?

It gives clear context for each invocation mode (single pid, all processes of a name, everything) and states the prerequisite for the richest data: "only when Anabolic has full access" and "(full access)" for syscalls. It does not name a specific alternative tool or an explicit when-not-to-use condition, so it stops short of a 5.

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

resume_processB
Idempotent

Resumes a suspended process.

NameRequiredDescriptionDefault
pidYesThe process ID.
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the safety profile is largely covered and the description is consistent with it. However, the schema's 'force' parameter says it is true 'only after the user agreed to the risk this tool described' — yet the description describes no risk and no failure modes, so a behavioral gap remains that annotations do not fill.

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?

A single front-loaded sentence with zero wasted words; nothing is buried. Its brevity edges into under-specification, which is penalized elsewhere rather than here.

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

Completeness2/5

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

The tool is simple (2 params, no output schema, annotations present), but the description omits the risk referenced by the force parameter, what happens on failure (process not found, already running), and whether resuming has side effects. An agent could call it, but could not confidently decide when to escalate to force.

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?

Schema description coverage is 100%, so both pid and force are already documented in the schema, giving a baseline of 3. The description adds no meaning beyond the schema and does not explain when the force escalation is warranted, despite the schema hinting at an undescribed risk.

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

Purpose4/5

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

The description states a specific verb (resumes) and resource (a suspended process), which makes the intent unambiguous and clearly the inverse of the sibling suspend_process. It does not explicitly reference that sibling or scope which processes qualify, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

The word 'suspended' implies a precondition (the process must currently be suspended) and thereby the pairing with suspend_process, but no when-to-use guidance, no exclusions, and no mention of what to do if the process is not suspended are given. Usage is inferable rather than stated.

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

set_affinityC
Idempotent

Sets which logical processors a process may run on (its affinity).

NameRequiredDescriptionDefault
pidYes
cpusYesThe logical processors it may run on, from 0 (get_cpu lists them).
forceNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only a definition of affinity — nothing about whether the change takes effect on already-running threads, whether elevation or process ownership is required, or what happens on invalid CPU indices.

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

Conciseness3/5

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

A single clean, front-loaded sentence with zero filler, but it is undersized for the job: the space saved is space the agent needed for the 'force' parameter and usage conditions.

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

Completeness2/5

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

For a 3-parameter mutation tool with low schema coverage, no output schema, and an undocumented 'force' flag, the description should carry more weight. It leaves the agent guessing about prerequisites and the effect of the optional parameter.

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

Parameters2/5

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

Schema description coverage is only 33%: only 'cpus' is documented in the schema, while 'pid' and especially 'force' are bare. The description does not compensate at all — the meaning of 'force' (force past permissions? force termination of threads?) is nowhere explained, which is a real ambiguity for a mutation call.

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

Purpose4/5

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

States a concrete verb and resource: 'Sets which logical processors a process may run on (its affinity).' The parenthetical clarifies the technical term, so an agent can distinguish it from set_priority or limit_process without opening the schema. It stops short of explicitly naming the nearest sibling (set_priority) as an alternative.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is given. There is no mention that get_cpu or get_process should be consulted first, no note about required privileges per process, and no pointer to set_priority for the closely related scheduling concern.

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

set_efficiency_modeC
Idempotent

Turns efficiency mode on or off for a process: it runs only when no one else wants the processor (the idle scheduling class), and its disk I/O likewise.

NameRequiredDescriptionDefault
onYesOn: Windows runs it at low priority on efficient cores and clocks.
pidYes
forceNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description usefully explains what the mode actually does at the scheduler and I/O level. It omits failure behavior (nonexistent pid, permission requirements) and never explains the effect of the `force` flag or whether the change survives process restart.

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?

One sentence, front-loaded with the action, with the mechanism as a trailing clarification — no filler. It could be slightly tighter, but nothing is wasted.

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

Completeness2/5

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

For a system-level mutation with three parameters, a third of them undocumented, no output schema, and no stated permission or failure semantics, the description leaves real gaps an agent would need in order to call it correctly and interpret the result.

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

Parameters2/5

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

Schema description coverage is only 33%: `on` is documented in the schema, while `pid` and `force` are bare. The description implies a target process but never clarifies pid semantics or what `force` overrides, leaving the most operationally interesting parameter undocumented in both places.

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

Purpose4/5

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

The description uses a specific verb+resource ("Turns efficiency mode on or off for a process") and goes further by explaining the mechanism (idle scheduling class, idle disk I/O). It does not, however, distinguish itself from nearby siblings such as set_priority or limit_process, which also throttle a process.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over set_priority, set_affinity, or limit_process, nor any mention of prerequisites (admin rights, OS support, whether the process must be running). The agent must infer the use case purely from the phrase "efficiency mode".

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

set_priorityA
Idempotent

Sets a process' priority class: idle, below_normal, normal, above_normal, high or realtime (realtime can starve the rest of the system).

NameRequiredDescriptionDefault
pidYes
forceNo
priorityYesidle, below_normal, normal, above_normal, high or realtime.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description is only asked to add context. The starvation warning for realtime is a genuinely useful side-effect disclosure that a bare schema would not convey, though it says nothing about required privileges or what the undocumented force flag changes.

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?

A single front-loaded sentence: the verb and resource come first, the valid values follow, and the most important caveat closes it. No filler and the safety warning is placed where it will be read before invocation.

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

Completeness3/5

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

For a 3-parameter mutation tool with no output schema, the description covers what is changed and the main risk, but leaves force, privilege requirements, and the effect on other processes undocumented. Given the low schema description coverage, the agent still lacks enough information to invoke this confidently in edge cases.

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

Parameters2/5

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

Schema coverage is only 33%: the priority string is already documented in the schema, and the description merely repeats those values. The pid and force parameters are unexplained in both places, and force being a boolean defaulting to false on a mutation tool leaves the agent guessing what it overrides and when it is needed.

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

Purpose4/5

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

Names the operation (set) and the resource (a process' priority class) and enumerates the accepted values, so the agent can tell it apart from set_affinity, set_efficiency_mode, or limit_process. It stops short of explicitly contrasting with those siblings, but the purpose itself is unambiguous.

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

Usage Guidelines3/5

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

There is no explicit when-to-use or when-not-to-use guidance and no prerequisite or permission information. The parenthetical warning that realtime can starve the rest of the system is the only implied guidance, warning against one extreme value rather than routing the agent to an alternative tool.

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

set_service_startupB
DestructiveIdempotent

Sets how a systemd service starts: automatic (enabled), manual (disabled: started on demand) or disabled (masked: cannot be started). automatic_delayed does not exist on Linux.

NameRequiredDescriptionDefault
nameYes
startupYesautomatic, automatic_delayed, manual or disabled.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real context by defining 'disabled' as masked ('cannot be started'), which signals a stronger state change than a mere stop. It still omits whether the change applies immediately, whether a running service is stopped, and whether privileges are required.

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?

Two compact sentences, front-loaded with the core purpose and followed by the mode semantics and the platform caveat. No filler; the only weak spot is that the automatic_delayed caveat appears without first saying the tool is Linux/systemd-only beyond the implicit 'systemd' word.

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

Completeness3/5

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

For a destructive, idempotent configuration mutation with no output schema, the description covers what each target state means but not side effects (does disabling stop a running unit?), privilege requirements, or failure behavior. Adequate to call correctly, but not complete enough to predict consequences.

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?

Schema coverage is 50%: 'startup' is documented in the schema while 'name' is not. The description adds genuine semantics by mapping each mode to its systemd meaning (automatic=enabled, manual=disabled-on-demand, disabled=masked) and by warning that 'automatic_delayed' is not valid on Linux. It leaves 'name' underspecified — no example like 'nginx.service' — so it only partially compensates for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ('Sets how a systemd service starts') and enumerates the three resulting states, so the agent knows exactly what the mutation does. It does not name or differentiate itself from plausible siblings such as control_service or set_startup_item, which would have pushed it to a 5.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'systemd service', which scopes it away from get_service/list_services (read operations) and set_startup_item (likely OS startup items rather than systemd units). However, there is no explicit when-to-use versus control_service, no stated prerequisites such as root privileges, and no guidance on choosing among the modes beyond their definitions.

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

set_startup_itemA
Idempotent

Turns a startup item on or off the way the desktop's own settings do: an autostart entry is hidden (a system-wide one by an override in the user's folder), a systemd user unit disabled. Nothing is deleted.

NameRequiredDescriptionDefault
nameYesThe item's name, as list_startup_items gives it.
enabledYes
locationNoWhere it is, when two items share the name (list_startup_items' location).

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare idempotent, non-destructive, closed-world mutation. The description adds real content beyond them: the exact side effect per item type (hide vs. disable), where the override lives, and the reassurance that 'Nothing is deleted'. It stops short of stating permissions needed or whether changes apply immediately.

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?

A single front-loaded sentence with the action first, then the per-type mechanics in a parenthetical, then the non-destruction guarantee. Dense but every clause carries information; only the colon-and-parenthetical nesting slightly slows parsing.

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

Completeness3/5

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

For a 3-parameter mutation tool with no output schema, the definition explains the mechanism well but says nothing about return values (prior state? new state?) or error behavior for unknown names. The potential overlap with set_service_startup is left unresolved.

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?

Schema coverage is 67% and both 'name' and 'location' already carry descriptions referencing list_startup_items. The description adds the distinction between 'hidden' and 'disabled' but gives no extra meaning to the 'enabled' boolean or to what happens when neither autostart nor unit variant matches.

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

Purpose4/5

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

Specific verb and resource: 'Turns a startup item on or off', with the two concrete mechanisms spelled out (autostart entry hidden via a user-folder override; systemd user unit disabled). It does not name a sibling, so an agent must infer how this differs from set_service_startup, which also manipulates systemd units.

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

Usage Guidelines3/5

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

Usage is only implied: you need an item name 'as list_startup_items gives it', which nudges the agent to list first, and the location param hints at disambiguating duplicates. There is no explicit statement of when to prefer this over set_service_startup, or of preconditions and failure cases.

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

suspend_processA
DestructiveIdempotent

Suspends every thread of a process: it stops using the CPU until resumed (its windows stop responding meanwhile). Critical processes and Anabolic are refused; a game or anti-cheat program needs force=true.

NameRequiredDescriptionDefault
pidYesThe process ID.
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructive/non-readonly annotations, it discloses exactly what suspension affects: all threads stop using the CPU and windows stop responding. It also discloses refusal conditions and the special force=true requirement for games or anti-cheat programs.

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 front-loaded with the core action and effect, then adds the key exceptions and force requirement. It is compact with no filler.

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?

For a two-parameter mutation tool with full schema coverage and meaningful annotations, the description covers effects, refusals, and the force condition well. A minor gap is that it does not mention privilege/elevation requirements, and the term 'Anabolic' is not explained.

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 already 100%, so the schema carries the basic parameter documentation. The description adds meaningful force semantics by explaining that game or anti-cheat processes require force=true, going beyond the schema's generic consent wording.

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 states a specific verb and resource: suspend every thread of a process. It also clarifies the reversible effect ('until resumed') and user-visible impact ('windows stop responding'), which distinguishes it from termination tools such as end_process and from resume_process.

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?

It gives clear usage context: critical processes and Anabolic are refused, and game/anti-cheat processes require force=true. It does not explicitly compare this tool to end_process, limit_process, or resume_process, so the when-to-choose guidance is not fully exhaustive.

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

unblock_programB
Idempotent

Removes the firewall rules block_program (or the Network page) made for a program.

NameRequiredDescriptionDefault
pathYesThe program's full path (get_process gives it).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=true, openWorld=false), so the bar is lower. The description adds useful scope detail by naming exactly which rules are removed and who created them. It does not say whether removal takes effect immediately, whether other firewall rules for the program are preserved, or what is returned.

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?

One sentence with no filler, and the key fact (which rules are removed) is front-loaded. The parenthetical about the Network page makes the middle clause slightly clunky but it earns its place by covering the non-tool origin of the rules.

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

Completeness3/5

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

For a one-parameter tool with annotations and no output schema, the description covers what it does and what it acts on. It leaves gaps around post-call state and the no-op case, which matter for an agent verifying that an unblock actually happened.

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?

Schema description coverage is 100% and the single parameter is already documented as the program's full path obtained from get_process. The description adds no path format, matching, or error semantics beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (removes) and resource (firewall rules) and explicitly ties them to the sibling tool that created them (block_program) or the Network page. An agent can tell this is the inverse of block_program without opening either schema. It stops short of a 5 only because it describes provenance rather than stating the end effect on the program itself.

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

Usage Guidelines3/5

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

Usage is implied by the reference to block_program and the Network page, so an agent can infer this is the undo path after blocking. There is no explicit when-to-use statement, no when-not guidance, and no note about what happens if called for a program that was never blocked.

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

why_process_will_not_endA
Read-onlyIdempotent

Why a process does not go away: whether it has ended and waits for its parent to collect it (a zombie, and which parent), whether it waits inside the kernel where no signal reaches it (and where), whether Anabolic may end it at all, and whether it is the system's own. The process is only read about, not opened.

NameRequiredDescriptionDefault
pidYesThe process ID.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds that the process is 'only read about, not opened' and details the diagnostic checks, which usefully clarifies that no handle is opened and what categories of answers to expect. It stops short of discussing performance or permissions, but that is minor given the annotations.

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 front-loaded with the core question and then enumerates the specific checks in a compact list. It is dense but every clause contributes diagnostic meaning, and the closing sentence reinforces the read-only nature without waste.

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 one-parameter, read-only diagnostic with no output schema, the description covers what the tool determines and explicitly states it does not open the process. Annotations handle safety, so no important behavioral or usage information is missing for correct invocation.

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?

The single pid parameter is fully documented in the schema as 'The process ID.' The description refers to 'a process' but adds no format, range, or handling details beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.

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 states a precise diagnostic purpose: explaining why a process persists, enumerating zombie/parent status, kernel wait, whether Anabolic may end it, and whether it is a system process. This is highly specific and distinguishes it from general process-listing or termination tools, though it does not name a sibling explicitly.

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

Usage Guidelines3/5

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

The phrasing 'Why a process does not go away' implies the use case, but the description does not state when to choose this over get_process or end_process, nor does it list exclusions. The usage context is clear but alternatives are left to inference.

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

write_memory_dumpA

Writes a memory dump of a process into Anabolic's dumps folder, for a debugger: small (threads, stacks, modules, handles) or full (all of its memory, which includes any passwords and keys it holds). The process is cloned first, so it pauses only for a moment. Never for lsass.exe. OPENS THE PROCESS: the first call is refused with the risks; call again with force=true only if the user agreed.

NameRequiredDescriptionDefault
pidYesThe process ID.
kindNo"small" (threads, stacks, modules, handles; a few MB, the default) or "full" (all of its memory, as big as the process).
forceNoTrue only after the user agreed to the risk this tool described.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false and non-idempotent; the description adds the material facts an agent needs: the target process is cloned so it pauses only briefly, a full dump captures credentials and keys, lsass.exe is off-limits, and the first call is deliberately refused with a risk explanation. The destructiveHint=false is not contradicted — the risk here is confidentiality and process access, not data destruction.

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?

Front-loads what it writes and where, then the mode tradeoff, then the safety constraints in escalating order. Every sentence — including the lsass and force sentences — carries decision-relevant information, with no filler.

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?

Covers safety, side effects, and the confirmation gate thoroughly, which is the hard part for a high-risk tool. It does not say what is returned (e.g., path/filename of the created dump) and there is no output schema, so the agent must infer the result shape; that is the one remaining gap.

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 already 100%, so baseline is 3, but the description adds the consequence of each value (full dump contains passwords and keys) and the operational meaning of force (the second call in a gated confirmation flow). The pid parameter gets no extra treatment, which is fine for an unambiguous integer.

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 ("Writes a memory dump of a process") plus a destination ("Anabolic's dumps folder") and the two modes with their contents. No sibling tool in the list does anything similar, so the agent can distinguish it immediately.

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 frames the purpose ("for a debugger"), defines the small-vs-full choice with tradeoffs (few MB vs whole address space, including secrets), states a hard exclusion ("Never for lsass.exe"), and describes the two-call confirmation protocol with force=true. This is the when/when-not/alternatives bar fully met.

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. 43 tool updatesv0.1.0
    • First observedblock_program
    • First observedclose_connection
    • First observedcontrol_service
    • First observedend_process
    • First observedget_cpu
    • First observedget_disks
    • First observedget_displays
    • First observedget_gpus
    • First observedget_hardware
    • First observedget_history
    • First observedget_leaks
    • First observedget_memory
    • First observedget_network_usage
    • First observedget_process
    • First observedget_process_tree
    • First observedget_sensors
    • First observedget_service
    • First observedget_stutters
    • First observedget_system_overview
    • First observedget_thread_stacks
    • First observedget_wait_chain
    • First observedlift_limit
    • First observedlimit_process
    • First observedlist_connections
    • First observedlist_dns_lookups
    • First observedlist_handles
    • First observedlist_history_days
    • First observedlist_listening_ports
    • First observedlist_modules
    • First observedlist_processes
    • First observedlist_services
    • First observedlist_startup_items
    • First observedrecord_activity
    • First observedresume_process
    • First observedset_affinity
    • First observedset_efficiency_mode
    • First observedset_priority
    • First observedset_service_startup
    • First observedset_startup_item
    • First observedsuspend_process
    • First observedunblock_program
    • First observedwhy_process_will_not_end
    • First observedwrite_memory_dump

TDQS

B3.4/5.0

Scored across 43 tools

Disambiguation4/5

Descriptions are detailed and most tools have a clearly distinct resource or action. A few adjacent pairs, such as get_process vs list_processes and get_service vs list_services, require reading the descriptions carefully, and the large surface area raises misselection risk.

Naming Consistency4/5

Almost all tools use consistent snake_case with a verb_noun pattern such as get_cpu, list_processes, and set_priority. The main outlier is why_process_will_not_end, which breaks the predictable naming convention.

Tool Count2/5

43 tools is far beyond the typical well-scoped range and many could be consolidated or grouped under broader resource-oriented tools. The domain is broad enough to justify more than a handful of tools, but this surface is still excessive.

Completeness5/5

The set covers CPU, memory, disks, GPUs, network, hardware, sensors, processes, services, startup items, connections, handles, modules, dumps, history, leaks, and stutters. For system monitoring, troubleshooting, and process control, the lifecycle and diagnostic coverage is comprehensive.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI to monitor and analyze local system processes through custom tools. Provides real-time access to process information including CPU usage, memory consumption, process counts, and process searching capabilities.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time monitoring of system resources including CPU, GPU (NVIDIA, Apple Silicon, AMD/Intel), memory, disk, network, and processes across Windows, macOS, and Linux platforms through natural language queries.
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Exposes Windows system information and control tools including hardware stats, network details, and process monitoring. It enables AI applications to retrieve real-time data about CPU, memory, drives, and active system processes.
    12
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connect AI agents like Claude, Cursor, and Gemini to historical Windows performance and privacy data gathered by the AppControl Windows app. This server enables natural language queries into CPU, GPU, and temperature history alongside system security events for deep local auditing.
    45
    MIT