trmm-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@trmm-mcpwhich machines are offline and why"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TacticalRMM MCP server
Lets an AI assistant read everything in your TacticalRMM install, and — when you explicitly switch it on — run commands on your managed machines.
Ask "which machines are offline and why", "what's eating memory on the front
desk PC", "show me every failed check this week", and get answers from live
fleet data. Turn on elevate mode and the assistant can also fix things, but
only after you approve each action yourself.
Why I built it
I manage machines for a number of clients, and TacticalRMM already collects far more about each one than anyone has time to sit and read. I wanted to actually use that data: run deeper diagnostics than the dashboard puts in front of you, produce per-client reports covering every device, and find the things worth fixing before someone rings up to report them.
It does grow billable work, and I think that is fine as long as the work is real. A disk throwing early SMART errors, a server quietly filling up, patches that stopped applying three months ago and nobody noticed — catching those is worth paying for. Billing for busywork is not. The test I hold this to is whether every item on a report is something the client can see the sense in fixing once it has been explained to them.
Related MCP server: kaseya-vsa-mcp
What you get
28 tools. 20 read-only ones covering agents, checks, alerts, services, processes, event logs, software inventory, patches, scripts and audit history; 8 execution tools for running commands and scripts, rebooting, controlling services, killing processes, and waking machines.
A full audit trail of everything. Every inbound request, every tool call with its arguments, every result, every TRMM API call, every approval decision and every refusal is written to a structured JSONL log with credential redaction and rotation. For a bridge that can run commands as SYSTEM across a fleet, knowing exactly who asked for what and when is not optional — so it is on by default and cannot be silently skipped. Details in Audit logging.
An approval gate the model cannot reach. In elevate mode an execution is
refused until you approve that exact call in a browser (password + TOTP) or
from a shell on the server. Approvals are bound to a fingerprint of the
arguments, are single-use, and expire. No tool exists that grants elevation.
Read-only that actually holds. Three independent layers: the execution tools are never registered, the HTTP client refuses non-read requests, and the API key itself is bound to a TRMM role with no execution permissions.
Built for real fleets. TRMM has no pagination and returns whole tables — one agent detail call measured 192 KB here. Responses are projected, capped and truncated with an explicit notice, so a single call cannot swallow the model's context.
HTTPS with bearer auth, a self-signed certificate carrying an IP SAN, and a hardened systemd unit. Clients trust that one certificate rather than skipping verification.
Works with Claude Code, Claude Desktop and LM Studio on macOS, Windows and Linux. Built and verified against TRMM 1.5.1. The TRMM API itself is documented independently in docs/trmm-api.md.
Three modes
|
|
| |
Tools exposed | 20 read tools | 28 | 28 |
Reads | yes | yes | yes |
Executions | never | only what you approve, one call at a time | always |
TRMM key for reads |
|
|
|
TRMM key for executions | — |
|
|
Good for | pure Q&A | day-to-day chat | unattended automation |
elevate is the one to use for interactive work: Claude can look at anything,
but the moment it wants to do something it stops and waits for you.
Security
The short version:
The approval gate is out of band. In
elevatemode an execution is refused until you approve that exact call in a browser (password + TOTP) or from a shell on the server. Approvals are bound to a fingerprint of the arguments, are single-use, and expire. No tool exists that grants elevation, so the model has no route to its own approval.Read-only holds at three independent layers. The execution tools are never registered, the HTTP client refuses non-read requests, and the API key itself is bound to a TRMM role with no execution permissions.
Destructive patterns are refused client-side in
commandmode —rm -rf /,mkfs,dd of=/dev/*,format c:and the rest — with an optional agent allowlist to hard-scope what can be touched at all.HTTPS with bearer auth, a self-signed certificate carrying an IP SAN, and a hardened systemd unit. Clients trust that one certificate rather than skipping verification.
There is one honest caveat about the third read-only layer, because TRMM has no view-only permission for services, processes or Windows updates. That, the approval page's own password + TOTP gate, and why MCP elicitation is not used as the approval channel, are all written up in docs/security.md.
Setup
Already done on this box:
venv at
venv/withmcp2.0 andhttpxTRMM roles
MCP Read OnlyandMCP Command, usersmcp-readonlyandmcp-command(both blocked from UI login, unusable passwords)API keys written to
.env(mode 600)
To re-provision or rotate keys:
/rmm/api/env/bin/python /opt/trmm-mcp/provision_trmm_accounts.py --rotateRunning the server
To reach it from other machines, first tell it which address to serve on. These
go in .env, not in the unit file — the unit is in git, and an address baked in
there would follow every copy of it onto the wrong machine:
cat >> /opt/trmm-mcp/.env <<'EOF'
TRMM_MCP_HTTP_HOST=10.0.0.5
TRMM_MCP_PUBLIC_URL=https://10.0.0.5:8770
EOFSubstitute your own address. TRMM_MCP_PUBLIC_URL is what the assistant tells
you to open when something needs approving, so it has to be a URL your browser
can actually reach. Skip this step and the server binds 127.0.0.1, which is
fine if the client runs on the same box.
Then install the unit and start it:
sudo cp /opt/trmm-mcp/trmm-mcp.service /etc/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl enable --now trmm-mcpCheck what it came up on — the startup line names the address, the mode and whether TLS is on:
journalctl -u trmm-mcp -n 5 --no-pager | grep listeningIt serves HTTPS on port 8770 by default and requires the bearer token from
.env. To run it in the foreground instead, for a quick test:
/opt/trmm-mcp/run.sh readonly httpThe listener runs stateless (TRMM_MCP_STATELESS_HTTP=true, the default). This
matters: with stateful streamable HTTP the server hands out a session id that
dies with the process, so restarting the service leaves any connected client
replaying a session the server has forgotten. Through mcp-remote that shows up
as tool calls hanging for minutes and then failing, while tools/list still
answers, with Rejected request with unknown or expired session ID in
logs/server.log. Stateless removes the failure mode; we use no
server-initiated requests, so it costs nothing. restart_test.py proves both
behaviours.
The bearer token is the only authentication on that port, so anything that can reach it inherits this server's TRMM permissions. Keep it on the LAN or behind a tunnel rather than binding a public interface.
Connecting a client
You need two things from the server: the bearer token from .env, and a
copy of certs/cert.pem so the client can verify the TLS certificate.
Claude Code speaks HTTP directly and needs no bridge:
claude mcp add --transport http trmm https://192.0.2.10:8770/mcp \
--header "Authorization: Bearer <TRMM_MCP_AUTH_TOKEN>" --scope userOn the server itself you can skip the network entirely and run it over stdio:
claude mcp add trmm -- /opt/trmm-mcp/run.sh readonlySwap readonly for elevate to get the approval gate, or command for
unattended execution.
Claude Desktop needs the mcp-remote bridge, LM Studio speaks remote HTTP
natively, and either can instead be run across SSH with nothing listening on the
network at all. Working configs for all three on macOS, Windows and Linux — plus
installing the certificate into the system trust store — are in
docs/clients.md.
Tools
28 tools: 20 read-only, 8 execution. Anywhere a tool takes an agent you can pass the hostname or the agent_id — hostnames are resolved automatically, and an ambiguous one is rejected rather than guessed.
Start here —
trmm_fleet_overview: counts, plus the offline, needs-reboot, failing-check and pending-patch lists.Fleet — agents with status and filters, clients and sites, alerts, pending actions, server info and the active mode.
Diagnostics — services, processes, event log, configured checks, installed software, patch status, automated tasks, and past command and script runs with their output.
Audit and scripts — the TRMM audit log, the server debug log, the script library and full script source.
Escape hatch —
trmm_api_get: a raw GET against any API path.Execution (
elevateandcommandonly) — run a command, run a saved script, reboot, start/stop/restart a service, kill a process, wake-on-LAN, force checks to run, run an automated task.
Bulk fleet-wide execution, server-side scripts and all config mutation are deliberately not exposed. The full 28-row table, the reasoning behind the omissions, the MCP safety annotations and the context-size handling are in docs/tools.md.
Documentation
The approval gate, the three read-only layers, TLS, and the honest caveats | |
pip versus a clone, where it keeps its files, rebuilding the venv | |
Claude Code, Claude Desktop, LM Studio, SSH, and the certificate | |
All 28 tools, what is not exposed, annotations, context-size handling | |
Audit logging, the browser log pages, backups, testing, troubleshooting | |
Every environment variable, and what each file in the repo does | |
Independent documentation of the TacticalRMM API itself |
Changelog
See CHANGELOG.md.
License
AGPL-3.0-or-later (LICENSE), with per-file SPDX headers. The copyleft terms
mean anyone who runs a modified copy as a network service must publish their
changes — deliberate, to keep execution-capable forks open.
Available Tools
20 toolstrmm_agent_checksBRead-onlyIdempotent
Checks configured on an agent, with their current status.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| failing_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that statuses are included in the result, which is useful but minimal context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler or redundancy. It front-loads the resource and adds the key output dimension without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with strong annotations, this is minimally viable. However, there is no output schema and the description does not explain what a 'check' looks like or how statuses are represented, so the agent must infer some important details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the agent identifier format or the meaning of failing_only beyond what the parameter names imply. The 'agent' parameter is somewhat self-explanatory from the description, but 'failing_only' semantics are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('checks configured on an agent') and indicates that current status is included. It lacks an explicit verb like 'list' or 'get', but the meaning is unmistakable and it is distinct from sibling tools such as agent_services or agent_processes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It relies entirely on the tool name and sibling context to imply its role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_event_logBRead-onlyIdempotent
Windows event log entries from an agent. log_type is Application, System or Security. Filter by level (error/warning/information) and an optional message substring.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| agent | Yes | ||
| level | No | ||
| limit | No | ||
| search | No | ||
| log_type | No | Application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds log type and filter context but does not disclose output shape, pagination behavior, or event-source caveats, leaving some behavioral detail undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler and front-loads the core resource. It could be improved with a clearer verb, but it is efficient and every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, six-parameter tool with no output schema, the description covers the core object and main filters but omits return-value shape and full parameter semantics for days and limit. It is adequate for basic calls but leaves gaps an agent may need to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for parameter meaning. It explains log_type values, level values, and the search substring, but it does not clarify the meaning of days, limit, or how the agent identifier should be provided, though schema defaults partially mitigate days and limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as Windows event log entries from an agent and names the log types (Application, System, Security). This is clear enough to distinguish it from sibling agent inspection tools like services, processes, or software, though it lacks an explicit verb such as 'Retrieves'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to inspect Windows event log entries for an agent, with optional filtering by level and message substring. It does not explicitly state when not to use it or how it compares to related tools like trmm_agent_history or trmm_audit_log, so the usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_historyARead-onlyIdempotent
Recent command and script runs on an agent, including their captured output. Use this to see what was already tried, or to retrieve output from an asynchronous script run.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral context by stating that results include captured output and that async script output can be retrieved through history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core purpose is front-loaded and the usage guidance follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only history tool with two params, the description covers the resource, the returned content, and the main use cases. The main omissions are the behavior and formatting of the limit parameter and any ordering, but the definition is sufficient for selecting and making an initial invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate, but it only clarifies that the data is scoped to an agent. The limit parameter's meaning and behavior are not described at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies exactly what the tool exposes: recent command and script runs for a given agent, including captured output. This distinguishes it from sibling tools focused on services, processes, events, software, or updates, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit use cases: see what was already attempted or retrieve output from an asynchronous script run. It does not spell out when not to use it or name alternatives, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_processesARead-onlyIdempotent
Live process list from an agent, sorted by memory or CPU. Requires the agent to be online.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| limit | No | ||
| sort_by | No | memory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only, idempotent, and non-destructive. The description adds operational context beyond those hints by stating the data is live and that the target agent must be online, which is useful when invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler: it states what the tool returns, the sorting options, and the online prerequisite. Every clause pulls its weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool the description gives the essential: scope to an agent, live nature, sorting, and online requirement. However, there is no output schema and no mention of return fields or behavior when the agent is offline, so the agent must infer some details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies sort_by values ('memory or CPU') and implies the agent scope, but does not document the limit parameter or the exact accepted sort_by string values. Parameter names are mostly self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and action: a live process list scoped to an agent, with explicit sorting by memory or CPU. The term 'process' distinguishes it from sibling agent tools like trmm_agent_services and trmm_agent_checks, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for inspecting an agent's current processes and states a prerequisite (the agent must be online). It does not explicitly say when to choose this over alternatives such as trmm_agent_services, so usage guidance is present but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_servicesARead-onlyIdempotent
Windows services on an agent. Filter by name substring or state (running/stopped) to avoid pulling the whole list, which is large.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| limit | No | ||
| state | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations by explaining that the response can be large and that filtering is encouraged to avoid pulling the entire list. This helps the agent anticipate cost/scale and choose appropriate parameters. The read-only and non-destructive annotations are consistent with the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey the resource, scope, filtering options, and an important performance consideration with no wasted words. The key subject is front-loaded and the guidance is immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description covers the essential context: what is being queried, how to filter, and why filtering matters. The lack of an output schema is mitigated by the tool's straightforward nature, though the 'limit' parameter semantics would add completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden of explaining parameters. It usefully maps 'search' to name substring and 'state' to running/stopped. However, it does not explain the 'limit' parameter or clarify 'agent' beyond the phrase 'on an agent', so coverage is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Windows services on an agent' and distinguishes it from sibling agent-focused tools like processes, event log, and software. It lacks an explicit verb like 'List' or 'Get', but the filtering guidance makes the retrieval intent clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical guidance on using filters ('Filter by name substring or state') and warns that the full list is large. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, leaving sibling differentiation mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_softwareCRead-onlyIdempotent
Installed software inventory for an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral detail beyond the resource category itself—no mention of filtering, result shape, pagination, or edge cases. Its marginal contribution to behavioral transparency is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded noun phrase with no filler or redundant wording. It is appropriately short for a simple read-only tool, though the brevity leaves useful details about search and output unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, annotations supply the read-only and idempotent profile, and the core return concept ('installed software inventory') is present. However, with no output schema and no explanation of the optional search parameter, an agent must infer part of the calling behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema property descriptions are completely absent, so the description needed to clarify both the required 'agent' parameter and the optional 'search' parameter. It only restates that the inventory is for an agent and says nothing about the search parameter's meaning, format, or filtering behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool returns the installed software inventory for a specified agent. The resource type, 'installed software', is distinct from sibling tools like services, processes, or event logs. It could be improved by using an explicit verb like 'lists', 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as trmm_agent_services, trmm_agent_processes, or trmm_agent_windows_updates. It also provides no exclusions, preconditions, or context that would help an agent choose among the many agent-specific inventory tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_tasksCRead-onlyIdempotent
Automated tasks configured on an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. But the description adds no behavioral detail about what the tool returns or how it behaves, only a noun phrase describing the resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short phrase with no filler and the core concept is front-loaded. It is arguably too terse, but every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only tool with one parameter, but there is no output schema and the description does not state what the tool returns. It also lacks guidance relative to the many sibling agent-specific tools, leaving the agent to infer whether this lists tasks, checks their status, or something else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole 'agent' parameter has no schema description. The phrase 'configured on an agent' only hints at the parameter's purpose but does not specify whether it expects an ID, name, or how to source it, so the description fails to compensate for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'automated tasks configured on an agent,' which helps distinguish it from sibling agent subresources like services or processes. However, it lacks an explicit action verb such as 'list' or 'retrieve,' leaving the operation to be inferred from the tool name and annotations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool instead of alternatives. Among siblings like trmm_agent_services, trmm_agent_checks, and trmm_list_scripts, there is no stated selection criterion or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_agent_windows_updatesCRead-onlyIdempotent
Windows update status for an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| pending_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, and the description's 'status' phrasing is consistent with those. However, the description adds no behavioral context beyond the annotations, such as what the status includes, whether it returns only pending updates, or what the response shape is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and contains no filler words. It is front-loaded with the core subject, though its brevity leaves out meaningful detail that is penalized in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, this terse description leaves important context undefined: what counts as 'status', how pending_only affects results, and what the return value contains. The annotations cover safety but not the domain behavior an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only indicates that the tool targets an agent, which lightly maps to the required 'agent' parameter. It does not mention 'pending_only' or its default true behavior, and with 0% schema description coverage the description does not compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear resource (Windows updates) and scope (an agent) and implies a read action via 'status'. It differentiates from sibling tools like services, processes, event log, and software, though it lacks an explicit verb such as 'get' or 'list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention sibling tools, preconditions, or conditions that would favor one tool over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_api_getARead-onlyIdempotent
Escape hatch: issue a raw GET against any TRMM API path and return the JSON, for data with no dedicated tool. Example paths: /clients/, /checks/, /automation/policies/, /core/customfields/, /accounts/. Always permitted, in both modes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context: the operation is a raw GET, returns JSON, and is always permitted. The phrase 'in both modes' is ambiguous but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the key concept 'Escape hatch.' Every sentence contributes useful information, though the unexplained 'in both modes' is slightly cryptic and could be clarified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an open-world generic GET tool, the description covers the main purpose, gives concrete path examples, states the return format, and signals permissibility. It does not document query params or elaborate on 'both modes,' but the core invocation context is sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives strong semantics for the required path parameter through examples and the notion of 'any TRMM API path.' However, the optional params parameter is not described at all beyond its schema title, leaving a gap for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: issuing a raw GET against any TRMM API path and returning JSON. It clearly positions itself as an escape hatch for data with no dedicated tool, which distinguishes it from the many sibling tools that cover specific endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'for data with no dedicated tool.' It also provides concrete example paths and notes that it is 'always permitted, in both modes,' giving the agent clear guidance on availability and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_audit_logARead-onlyIdempotent
Audit log: who did what in TRMM. Filter by days, agent, or username. Useful for correlating a change with when a problem started.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| full | No | ||
| page | No | ||
| agent | No | ||
| username | No | ||
| rows_per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, and non-destructive nature of the tool. The description adds useful scoping context ('filter by days, agent, or username') and its investigative purpose, but it does not disclose pagination behavior, what the 'full' flag does, or the shape of the returned log entries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose, then list the key filters and a practical use case. There is no redundant or irrelevant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only audit log tool, the description gives enough to understand what it does and when to use it. The main gap is the absence of any explanation of the 'full' parameter and the return payload, especially because no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for days, agent, and username by framing them as filters. However, 'full', 'page', and 'rows_per_page' are left unexplained, with only their titles/defaults hinting at their role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the TRMM audit log and defines its content: 'who did what in TRMM.' It also mentions the available filter dimensions, making it easy to distinguish from sibling tools like trmm_debug_log or trmm_agent_event_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case: 'correlating a change with when a problem started.' This gives an agent a clear sense of when to invoke the tool. It does not explicitly name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_debug_logCRead-onlyIdempotent
TRMM server debug log entries.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| log_level | No | error |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds only the resource context 'server debug log entries' and no additional behavioral detail such as output format, ordering, filtering defaults, or scope. There is no contradiction with the annotations, but the description contributes little beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with no wasted words. However, it is too terse to be functional, reading more like a label than an instructional description. It is concise but under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter documentation, and no usage context, the description is incomplete for a tool with two configurable parameters. The annotations cover the safety profile, but an agent still cannot determine what the tool returns, how the parameters behave, or when it is appropriate to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining the parameters. It does not mention 'days' or 'log_level' at all, leaving agents to guess their meaning, valid values, or effects on the returned debug log entries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description, 'TRMM server debug log entries,' is a noun phrase that essentially restates the tool name and does not state a clear action such as 'retrieve,' 'list,' or 'search.' It identifies the resource but leaves the operation ambiguous, and it does not differentiate itself from sibling tools like trmm_audit_log or trmm_agent_event_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this is for server-side debug logs, how it differs from audit or agent event logs, or any conditions that would make it the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_fleet_overviewARead-onlyIdempotent
Fleet health summary: agent counts by status, plus the machines that are offline, need a reboot, have failing checks, or have pending patches. The best first call when hunting for problems.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful behavioral context by specifying exactly what the summary covers and positioning it as a problem-hunting entry point, without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences that front-load the core purpose ('Fleet health summary') before listing contents and usage. Every phrase earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only overview tool, the description provides enough detail about what is returned and when to use it. It does not enumerate every possible status, but that level of detail is unnecessary for a first-call triage tool and would reduce conciseness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the schema carries no burden. With no parameters to explain, the description's focus on output contents is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (fleet) and the kind of information returned (agent counts by status, offline machines, reboot needs, failing checks, pending patches). It stops short of an explicit verb like 'returns' or 'gets', but the meaning is unambiguous and it is clearly distinct from the per-agent sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames this as 'the best first call when hunting for problems', which gives strong usage context for triage. It does not name specific alternatives for follow-up detail, but the sibling names imply that per-agent tools are used after this overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_get_agentARead-onlyIdempotent
Full detail for one agent: hardware, OS, disks, uptime, checks and policies. Heavy sections (services, wmi_detail, graphics, timezone list) are omitted unless named in include, since they can be >100KB.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| include | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as read-only, idempotent, and non-destructive. The description adds valuable non-obvious behavior: heavy sections such as services, wmi_detail, graphics, and timezone list are omitted unless named in include, because they can exceed 100KB. This goes beyond what the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded, and the caveat about heavy sections is presented efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool, the description is complete: it states what is returned, what is excluded by default, and how to include heavy sections. Annotations cover the safety profile, so no additional behavioral context is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the include parameter with concrete section names and a size rationale, and identifies agent as the target of 'one agent' detail. The exact format of agent is not specified, but the two parameters are meaningfully described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific resource ('one agent') and enumerates the returned detail sections: hardware, OS, disks, uptime, checks and policies. This distinguishes it from sibling list/overview tools like trmm_list_agents and trmm_fleet_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this tool when full detail for a single agent is needed, as opposed to fleet or list overviews. It does not explicitly name alternative tools or state when not to use it, but the 'one agent' framing makes the primary use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_get_scriptARead-onlyIdempotent
Full detail for one script including its source code. Read this before running an unfamiliar script on a machine.
| Name | Required | Description | Default |
|---|---|---|---|
| script_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond that: the response includes full source code, and the tool is the intended pre-flight check before executing an unfamiliar script. It does not detail response structure or pagination, but the annotations carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences. The first states what the tool returns, and the second gives actionable usage context. There is no padding or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with rich annotations, the description covers the purpose, the key return content, and the right moment to use it. It omits details like where to obtain a script_id or the exact response shape, but those are not critical given the simple interface and the existing hint annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate by explaining the script_id parameter. It does not: it only says 'one script' without clarifying where the ID comes from, how it maps to a script, or any constraints. The parameter name is self-evident, but the description adds little beyond the schema's own 'Script Id' title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb-resource structure: 'full detail for one script' tells the agent this is a single-item retrieval operation, not a list. 'Including its source code' makes the scope concrete and distinguishes it from sibling tools like trmm_list_scripts or trmm_get_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence provides a strong usage cue: 'Read this before running an unfamiliar script on a machine.' This explains when the tool is valuable, though it does not explicitly name alternatives or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_list_agentsARead-onlyIdempotent
List agents with their status. Filter by client/site id, monitoring type (server/workstation), online state, or a hostname substring.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | ||
| search | No | ||
| site_id | No | ||
| client_id | No | ||
| offline_only | No | ||
| monitoring_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive, so the description does not need to repeat safety traits. It does add useful behavioral context by naming filter capabilities and the 'status' aspect of the output, but it does not disclose pagination, default limit behavior, or result shape. The extra context is moderate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the primary purpose and then enumerates filter options. Every word earns its place, with no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no required parameters and a clear filter surface, the description covers the essential calling context: what is returned conceptually (agents with status) and how to narrow results. It does not describe the response structure, but no output schema exists and the operation is simple enough that the main gap is the lack of sibling routing rather than missing invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden of explaining parameters, and it does well for most of them: 'client/site id' maps to client_id and site_id, 'monitoring type (server/workstation)' clarifies monitoring_type, 'online state' explains offline_only, and 'hostname substring' gives meaning to search. Limit and fields are not explained, but they are conventional and self-explanatory, so this is a strong partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'List agents with their status.' It also distinguishes itself from sibling tools like trmm_get_agent (single agent) and trmm_fleet_overview by focusing on the list/filter behavior. The filter axes are named specifically, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing and filtering agents, but it never explicitly says when to prefer this over siblings like trmm_fleet_overview or trmm_get_agent. It provides clear context ('List agents with their status') but no exclusions or alternative routing, leaving some ambiguity for an agent choosing among many similar trmm_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_list_alertsBRead-onlyIdempotent
Current alerts. By default returns the newest unresolved ones. severity may include 'error', 'warning', 'info'.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| days | No | ||
| severity | No | ||
| include_resolved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds default filtering behavior and acceptable severity values. However, it does not describe response shape, ordering guarantees beyond 'newest', or pagination, so the behavioral context is moderate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, front-loading the core purpose ('Current alerts') before adding the default behavior and severity values. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description is minimally sufficient: an agent can call it with no arguments or with a severity filter. However, there is no output schema and the description does not characterize the returned alert fields or fully clarify top and days semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description was expected to clarify parameter semantics, but it only explains severity values. The top, days, and include_resolved parameters are left to inference from their names and defaults; days in particular lacks a time-window unit or precise meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a resource and action: it returns current alerts, defaulting to the newest unresolved ones. It does not explicitly differentiate itself from sibling tools like trmm_pending_actions or trmm_audit_log, so it is clear but not fully distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus related tools such as trmm_pending_actions, trmm_audit_log, or trmm_debug_log. There are no selection criteria, exclusions, or alternative routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_list_clients_sitesARead-onlyIdempotent
All clients and their sites, with ids for filtering.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minor context by indicating the returned data includes IDs intended for filtering, but it does not disclose other behavioral traits such as pagination, nesting, or completeness beyond the word 'All.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly scoped sentence with no filler. The core information is front-loaded, and the filtering purpose is appended efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool, the description covers what is returned and why the results matter. It does not explicitly describe the return shape beyond 'clients and their sites,' and there is no output schema to fill that gap, but the tool is simple enough that this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and the schema is trivially complete, so there are no parameter semantics to explain. The baseline for a no-parameter tool is 4, and the description's mention of IDs for filtering refers to output rather than input, which is acceptable in this case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact resource ('clients and their sites') and the key selling point (ids for filtering). It is clearly distinct from siblings like trmm_list_agents, trmm_list_alerts, and trmm_list_scripts because it names a different entity. The verb is implied by the tool name and the noun-phrase description, but the meaning is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with ids for filtering' implies this tool should be used to retrieve client/site IDs for use as filters in other endpoints. However, the description does not explicitly say when to choose this tool over alternatives, nor does it name any sibling tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_list_scriptsARead-onlyIdempotent
List scripts available in TRMM. Returns each script's id, which is what trmm_run_script needs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful context that the tool returns script ids needed by trmm_run_script, but does not disclose other behavior like pagination, output shape beyond ids, or how search/limit affect results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words. The primary purpose is stated first, followed by the most important output detail. It is appropriately sized for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and the key output needed for trmm_run_script, but there is no output schema and no explanation of limit/search semantics or whether additional script fields are returned. For a simple optional-parameter list tool this is acceptable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the 'limit' or 'search' parameters at all. Although the parameter names are relatively self-explanatory and optional, the description provides no added meaning to help an agent understand how search filtering or result limiting behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: listing scripts available in TRMM. It also explains the key output value — each script's id — and connects it to the downstream trmm_run_script tool, which differentiates it from sibling list tools like trmm_list_agents and trmm_list_alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is useful: when you need the script id required by trmm_run_script. It does not explicitly contrast this with alternative tools or specify when not to use it, but the purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_pending_actionsARead-onlyIdempotent
Pending actions (queued agent work such as reboots or patch installs). Omit agent for the whole fleet.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds contextual meaning about queued work and fleet-vs-agent scope, but does not disclose return shape, ordering, or empty/default behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is one compact sentence with a parenthetical clarification and a usage instruction. Every word earns its place and the scoping rule is isolated at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter, read-only, idempotent tool, the description is nearly sufficient: it names the resource, gives examples, and explains the only parameter's fleet/agent behavior. It does not describe the result payload, but there is no output schema and the tool's purpose is simple enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only shows `agent` as an optional string/null with default null. The description adds the crucial fleet-vs-agent semantics, but does not specify the expected value format (ID, name, etc.), leaving part of the burden on the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('pending actions') and gives concrete examples ('queued agent work such as reboots or patch installs'), so an agent can tell it is a read/list tool for agent work. It lacks an explicit verb and does not contrast with sibling agent tools such as trmm_agent_tasks, so it stays below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete scoping guidance: omit `agent` for the whole fleet, which implies the agent parameter scopes to a single agent. This is clear operational context, though it does not explicitly name alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trmm_server_infoARead-onlyIdempotent
TRMM server version, settings and this MCP server's current mode.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds that the tool returns server version, settings, and current mode, but does not explain the output shape or what 'settings' encompasses. This is acceptable for a zero-parameter info tool but not especially rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short line with no filler words. It front-loads the most useful identifying details—server version, settings, and mode—without redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-parameter tool with no output schema, the description provides a reasonable summary of the return content. It could be more explicit about the exact structure of the response, but given the rich annotations and low complexity, little is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The baseline of 4 applies, and the description creates no parameter-related ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (TRMM server) and the specific information returned (version, settings, current mode), which distinguishes it from sibling tools focused on agents, clients, alerts, etc. However, it lacks an explicit verb like 'get' or 'return', so it reads more like a label than a full action statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as trmm_fleet_overview or trmm_api_get. No conditions, exclusions, or decision criteria are provided, leaving the agent to infer applicability from the tool name alone.
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. Dates show when Glama detected each change.
20 tool updates
v1.1.0- First observed
trmm_agent_checks - First observed
trmm_agent_event_log - First observed
trmm_agent_history - First observed
trmm_agent_processes - First observed
trmm_agent_services - First observed
trmm_agent_software - First observed
trmm_agent_tasks - First observed
trmm_agent_windows_updates - First observed
trmm_api_get - First observed
trmm_audit_log - First observed
trmm_debug_log - First observed
trmm_fleet_overview - First observed
trmm_get_agent - First observed
trmm_get_script - First observed
trmm_list_agents - First observed
trmm_list_alerts - First observed
trmm_list_clients_sites - First observed
trmm_list_scripts - First observed
trmm_pending_actions - First observed
trmm_server_info
TDQS
Each tool targets a clearly distinct resource or action: fleet overview, agent list, agent detail, services, processes, event log, checks, history, software, updates, tasks, clients/sites, alerts, scripts, pending actions, logs, and server info. Even the status-related tools (fleet_overview, list_alerts, pending_actions) are separated by scope and description.
All tools share the trmm_ prefix, but the convention after that is inconsistent: some use list_/get_ verbs, others use bare agent_* resource names, and trmm_api_get puts the verb at the end. The names are still readable and grouped by resource, but the pattern is not uniform.
At 20 tools this sits in the heavy range, though the RMM domain is broad and most tools cover a distinct resource type. Some agent read tools could potentially be consolidated, but the count is not unreasonable for the breadth of data exposed.
The read/diagnostic side is well covered: fleet health, agent inventory, processes, event logs, software, updates, scripts, alerts, and logs. However, the script lifecycle is incomplete because trmm_list_scripts explicitly references trmm_run_script, yet no run/create/update/delete script tool exists, and the management/action side of an RMM is largely absent aside from a GET-only API escape hatch.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseAqualityCmaintenanceAn MCP server that connects AI assistants to the NinjaOne remote monitoring and management platform via the REST API v2. It provides tools for device inventory, organization management, alert handling, maintenance scheduling, and automated job execution.221-
- AlicenseNot gradedqualityAmaintenanceMCP server for Kaseya VSA — endpoints, patches, procedures, alarms, and tickets. Enables AI assistants to manage and monitor devices via the Kaseya VSA RMM platform.Apache 2.0
- AlicenseAqualityDmaintenanceMCP server that exposes OSSEC HIDS security monitoring capabilities as tools, resources, and prompts for AI assistants.262MIT
- AlicenseAqualityAmaintenanceMCP server for interacting with the ThreatLocker Portal API, enabling querying of computers, applications, policies, audit logs, and more through AI assistants.181GPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shin2344234/trmm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server