Skip to main content
Glama

Bob Ross ๐ŸŽจ

PyPI CI License: MIT

"We don't make mistakes, just happy little servers."

An MCP server for managing a Canonical Landscape estate from an AI agent (Claude Code / Desktop). Bob Ross wraps the Landscape API as calm, friendly MCP tools โ€” inventory, alerts, activities, patching, script execution, reboots โ€” with a safety layer built right in, so your agent can tend a whole fleet of happy little servers without ever beating the devil out of the wrong one.

Everybody needs a friend. Even your Ubuntu estate.


๐Ÿ–Œ๏ธ Why it's not just a dumb API wrapper

A blank canvas is a beautiful thing โ€” and so is a fleet that's still standing. Bob Ross paints carefully:

  • Blast-radius preview โ€” before you touch anything, resolve_query steps back from the easel and shows you how many machines a query matches (and a sample). Always know how big the canvas is.

  • Dry-run โ†’ confirm handshake โ€” every destructive tool returns a short-lived confirm_token on the first call. You have to call again with the token to actually do it. If the set of matched machines drifts in between, the token is refused. No happy little accident reboots 500 boxes.

  • Secure by default โ€” read-only mode is on out of the box (we all start with a clean canvas). Writes need two switches flipped on purpose. TLS is verified. Secrets never touch the logs.

  • Full audit log โ€” every stroke (dry runs, executes, denials) is appended to a redacted JSONL trail. You can always see what the brush did.

  • Activity-aware โ€” write actions in Landscape run later, asynchronously. Pass wait=true and Bob Ross watches the paint dry, then tells you succeeded / failed / still-going per machine โ€” not just "queued."

  • Dual auth โ€” legacy HMAC query API or REST bearer token, auto-detected.


Related MCP server: Cloud Pilot MCP

๐ŸŽจ Get the paints out (install)

From PyPI โ€” the whole studio in one command:

pip install bob-ross-landscape

That gives you the bob-ross command (the import package is bob_ross).

git clone https://github.com/just-an-oldsalt/bob-ross
cd bob-ross
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest                    # unit tests (safety / signing / config / health / ...)
python scripts/smoke.py   # safe live smoke test vs your instance (read-only, no writes)

๐Ÿ–ผ๏ธ Set up your palette (configuration)

Everything is BOBROSS_* env vars (or a .env file โ€” see .env.example):

Var

Default

Meaning

BOBROSS_LANDSCAPE_URL

โ€”

Landscape base URL (no trailing /api/)

BOBROSS_ACCESS_KEY / BOBROSS_SECRET_KEY

โ€”

Legacy HMAC keys (mode A)

BOBROSS_API_TOKEN

โ€”

REST bearer token (mode B)

BOBROSS_READ_ONLY

true

Blocks all writes โ€” the safe blank canvas

BOBROSS_ALLOW_WRITES

false

The second switch needed to enable writes

BOBROSS_TLS_VERIFY

true

Verify TLS certs (set false only for dev self-signed)

To let Bob Ross pick up a brush, flip both BOBROSS_READ_ONLY=false and BOBROSS_ALLOW_WRITES=true. Even then, every destructive action still needs the dry-run โ†’ confirm handshake. Belt and suspenders. Happy and safe.


๐Ÿช„ Add it to Claude Code

pip install bob-ross-landscape

claude mcp add bob-ross --scope user \
  --env BOBROSS_LANDSCAPE_URL=https://landscape.example.com \
  --env BOBROSS_ACCESS_KEY=YOUR_KEY \
  --env BOBROSS_SECRET_KEY=YOUR_SECRET \
  -- bob-ross

Prefer to keep secrets out of Claude's config? Put them in a .env file and run from that directory instead:

claude mcp add bob-ross --scope user -- \
  bash -lc 'cd /path/to/your/bobross-env && exec bob-ross'

Claude Desktop (stdio)

{
  "mcpServers": {
    "bob-ross": {
      "command": "bob-ross",
      "env": {
        "BOBROSS_LANDSCAPE_URL": "https://landscape.example.com",
        "BOBROSS_ACCESS_KEY": "YOUR_KEY",
        "BOBROSS_SECRET_KEY": "YOUR_SECRET"
      }
    }
  }
}

Bob Ross always wakes up in read-only mode. Start there. Get comfortable. Then, when you're ready, let's get a little crazy.


๐ŸŒฒ The brushes (tools)

Read (always safe โ€” look all you like): ping ยท estate_health ยท list_computers ยท get_computer ยท resolve_query ยท pending_updates ยท list_alerts ยท list_activities ยท get_activity ยท wait_for_activity ยท list_scripts

Write (gated โ€” dry-run โ†’ confirm every time): execute_script ยท reboot_computers ยท apply_security_upgrades ยท upgrade_packages ยท install_packages ยท remove_packages ยท add_tags ยท remove_tags

Activity-creating write tools take wait=true to poll the resulting Landscape activity to a terminal status and hand back a completion summary (succeeded / failed / still-incomplete) โ€” so your agent knows the real outcome, not just "queued."

Resources: landscape://computers ยท landscape://alerts ยท landscape://health ยท landscape://computer/{computer_id} (template)

Prompts: patch_security_updates ยท triage_estate ยท reboot_reboot_required ยท patch_machine


๐Ÿ”๏ธ A happy little workflow

You have unlimited power here. Move mountains โ€” one confirmed step at a time:

you:  "what needs my attention across the fleet?"
       โ†’ estate_health  โ†’  "kaylee-mc: 138 pending upgrades, 3 boxes need reboots"

you:  "what would patching kaylee-mc actually change?"
       โ†’ pending_updates title:kaylee-mc  โ†’  the list, per package

you:  "apply the security upgrades there"
       โ†’ apply_security_upgrades  โ†’  dry-run shows blast radius + a confirm_token
       โ†’ (you approve)            โ†’  re-run with the token + wait=true
       โ†’ completion: succeeded โœ…  no failed patches, just happy little servers


"Talent is a pursued interest. Anything you're willing to practice, you can do."

Now go tend some happy little servers. ๐ŸŽจ

Available Tools

19 tools
add_tagsB

Add tags to matched machines (non-destructive, but still write-gated).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYes
queryYes
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false; description adds that it is non-destructive but write-gated, confirming safety profile. Yet it omits details like whether tags are appended or overwritten, or behavior on existing tags.

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?

Description is a single sentence with no unnecessary words, efficiently conveying the core purpose and a key behavioral trait.

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?

Given the tool has 3 parameters (including an unusual confirm_token) and no parameter descriptions, the description is insufficient. Agent would likely need to guess token purpose. Output schema exists but is not described, which is acceptable.

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

Parameters1/5

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

Schema coverage is 0% and description provides no explanation for any of the 3 parameters (tags, query, confirm_token). The agent gains no additional insight beyond the schema definition.

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?

Description clearly states the action (add tags) and target (matched machines), but does not explicitly clarify that 'matched machines' are those returned by a query parameter, though it is implied.

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?

Provides some guidance by stating the operation is non-destructive and write-gated, which helps distinguish from read-only tools. However, it does not specify when to use this tool versus removing tags or other alternatives.

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

apply_security_upgradesB
Destructive

Apply pending security (USN) upgrades to matched machines. Dry run first. Set wait=true to poll the upgrade activity to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructive behavior. The description adds that a dry run occurs first, and that the wait parameter controls polling, but fails to mention the need for confirm_token to actually apply changes, leaving a gap in understanding the full flow.

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 concise with two sentences, no redundancy, and the key action is front-loaded. It could be more structured but achieves brevity.

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?

Given the tool's destructive nature and multiple parameters, the description is incomplete. It does not explain the dry run output, the role of confirm_token, or the return behavior, forcing reliance on an output schema that is not described.

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?

With 0% schema description coverage, the description only explains the wait parameter. The required query, wait_timeout, and confirm_token parameters are not addressed, leaving agents to infer their meaning from the schema alone.

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

Purpose5/5

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

The description clearly states the tool applies pending security upgrades to matched machines, with a specific verb and resource. It distinguishes itself from sibling tools like 'upgrade_packages' by focusing on security upgrades.

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 advises a dry run first and mentions the wait parameter for polling, but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives. It lacks explanation of the confirmation token flow.

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

estate_healthA
Read-only

One-shot situational awareness across the whole estate: totals, machines needing reboots, stale/offline machines, distribution breakdown, alert counts, recent failed activities, and a ranked attention list of what to act on.

ParametersJSON Schema
NameRequiredDescriptionDefault
stale_after_hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 and openWorldHint, so the description's job is lighter. It adds value by listing the output components, which are not in annotations. No contradiction.

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

Conciseness4/5

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

The description is a single sentence that front-loads the purpose and then enumerates outputs efficiently. It is dense but not overly long; every phrase adds value.

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 an output schema present, the return values may be defined there, but the description still misses explaining the parameter's effect. Given the tool's simplicity and one param, this is a notable gap, making it minimally adequate.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description completely omits the only parameter 'stale_after_hours'. This is a critical gap: the agent cannot understand how to adjust the staleness threshold or that a default exists.

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

Purpose5/5

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

The description clearly states the tool provides 'one-shot situational awareness across the whole estate' and lists specific outputs (totals, reboots, stale machines, etc.), distinguishing it from sibling tools like list_computers or list_alerts which focus on individual aspects.

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 implies use for quick overview ('one-shot') and decision-making ('what to act on'), providing clear context. However, it does not explicitly state when not to use or name alternative tools, missing the highest bar.

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

execute_scriptA
Destructive

Run a stored script on matched machines. Dry run first (omit confirm_token). Set wait=true to poll the resulting activity to completion and report pass/fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
usernameNoroot
script_idYes
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true. The description adds context by explaining the dry run capability (omit confirm_token) and polling behavior (wait=true). This goes beyond the annotations by detailing how to safely execute and monitor. No contradiction.

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

Conciseness5/5

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

The description is two sentences with no extraneous words. The first sentence states the main action, and the second covers the two key usage patterns. It is efficiently front-loaded and easy to scan.

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?

The description covers the core workflow (dry run and polling) but lacks explanations for required parameters like query (what machines?) and script_id (from list_scripts?). With 6 parameters and destructive potential, more detail on parameter usage is needed. However, the output schema exists, reducing the need to describe return values.

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?

With 0% schema description coverage, the description must compensate. It explains confirm_token (omit for dry run) and wait (set true for polling), but does not describe query, script_id, username, or wait_timeout. These are critical, especially the required query and script_id. The description adds limited meaning for only 2 of 6 parameters.

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

Purpose5/5

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

The description clearly states 'Run a stored script on matched machines', specifying the verb, resource, and scope. This uniquely distinguishes it from sibling tools like list_scripts, and there is no ambiguity about its primary action.

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

Usage Guidelines4/5

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

The description provides explicit guidance: 'Dry run first (omit confirm_token)' and 'Set wait=true to poll the resulting activity to completion'. This clearly indicates when to use dry runs and how to wait for results. It does not explicitly state when not to use, but the advice is practical and sufficient.

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

get_activityA
Read-only

Status/detail of one activity by id (e.g. to see if a reboot finished).

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true, covering safety and openness. The description adds minimal behavioral context (returns status/detail) beyond annotations. No contradictions.

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?

Single sentence, no waste, front-loaded with key information. Efficient and to the point.

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

Completeness5/5

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

Given the low complexity (1 param, output schema exists), the description is complete. It explains purpose and a typical use case. The output schema handles return value documentation, so no need for description to cover that.

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 parameter (activity_id) has 0% schema description coverage. The description says 'by id' which adds minimal meaning, but for a simple integer ID, the schema name and tool name provide sufficient context. Does not fully compensate for missing schema description but adequate.

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

Purpose5/5

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

The description clearly states it gets status/detail of one activity by id, with an example of checking if a reboot finished. This verb+resource combination is specific and distinguishes it from siblings like list_activities (list) and wait_for_activity (wait).

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 includes a use case ('e.g. to see if a reboot finished'), implying when to use it. However, it does not explicitly exclude alternatives or state when not to use it, lacking full contrast with siblings.

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

get_computerB
Read-only

Full detail for a single computer by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
computer_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

The description does not add behavioral context beyond the annotations (readOnlyHint, openWorldHint). It states 'full detail' but no specifics about permissions or limitations. Since annotations cover the read-only and open-world aspects, no contradiction; the description simply lacks additional transparency.

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

Conciseness4/5

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

The description is a single, well-front-loaded sentence that conveys the core purpose without unnecessary words. It is appropriately concise for a simple lookup tool.

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 the tool's simplicity (one parameter, output schema present), the description is mostly complete. It could mention the relationship to list_computers or the nature of 'full detail', but for a basic getter, it suffices.

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?

The input schema has 0% description coverage and only one parameter (computer_id). The description merely says 'by id' without adding type, format, or source suggestions (e.g., from list_computers). For a tool with no schema descriptions, this is inadequate.

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 states it returns full detail for a single computer by id. It specifies the verb ('get'), resource ('computer'), and qualifier ('by id'). However, it does not differentiate from sibling tools like 'list_computers' which might return similar but summarized data.

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 when you need detail for a specific computer, but it provides no explicit guidance on when to use this tool versus alternatives, such as using 'list_computers' first to obtain an ID.

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

install_packagesA
Destructive

Install packages on matched machines. Dry run first (omit confirm_token). Set wait=true to poll to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
packagesYes
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Discloses key behavioral traits: destructive operation (with destructiveHint annotation), requires confirm_token for actual installation, and supports synchronous polling via wait. Adds value beyond annotations.

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 concise sentences that front-load the action and include critical usage details. No wasted words.

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?

Adequate for a package installation tool, but lacks explanation of return values (output schema exists) and does not warn about potential side effects of destructive action beyond the annotation.

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?

With 0% schema description coverage, the description only partially compensates by explaining confirm_token and wait. It does not explain query or packages, leaving ambiguity about the matching mechanism and package format.

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

Purpose5/5

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

The description clearly states the tool installs packages on matched machines, with specific instructions for dry run and polling. This effectively distinguishes it from siblings like upgrade_packages and remove_packages.

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?

Provides explicit usage guidance: perform a dry run first by omitting confirm_token, and set wait=true for polling. However, it does not differentiate when to use this tool over alternatives like upgrade_packages.

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

list_activitiesC
Read-only

Recent activities (async jobs) and their status. Use to track prior actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true, so the bar is lower. Description adds 'Recent activities... status' but does not disclose ordering, pagination, or the open-world nature beyond what annotations hint. Minimal 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.

Conciseness3/5

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

The description is a single sentence, which is concise but omits important information about parameters and usage nuances. It is front-loaded with the core purpose, but brevity comes at the cost of completeness.

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?

Given the tool has 2 undocumented parameters, no output schema shown, and only minimal context, the description is incomplete. It mentions status but lacks parameter semantics, result details, and guidance on how 'recent' is defined.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The description does not mention or explain the 'limit' and 'query' parameters at all, failing to compensate. No meaning added beyond raw schema properties.

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?

Clearly states 'list recent activities (async jobs) and their status', identifying the resource and action. Distinguishes from siblings like get_activity (single) and wait_for_activity (polling) by focusing on listing all recent items with status.

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?

Says 'Use to track prior actions', giving a usage context. But does not explicitly state when not to use or mention alternatives like get_activity for details or list_alerts for alerts. Usage is implied rather than explicit.

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

list_alertsA
Read-only

Active alerts across the estate (pending security upgrades, offline, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true. The description adds specific behavior by listing the types of alerts (pending security upgrades, offline) without contradicting annotations. It discloses no side effects, which is appropriate for a read-only tool.

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

Conciseness5/5

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

The description is a single concise sentence that is front-loaded and contains no unnecessary words. It efficiently communicates the tool's purpose.

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

Completeness5/5

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

Given zero parameters, annotations, and an output schema, the description is complete enough. It clarifies the scope of alerts, and the output schema handles return value details.

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

Parameters4/5

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

There are no parameters, so the schema covers all. Per guidelines, baseline is 4 for zero parameters. The description does not need to add parameter info.

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

Purpose5/5

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

The description clearly states the tool lists active alerts across the estate with examples like pending security upgrades and offline. The name 'list_alerts' reinforces the purpose, and it distinguishes from sibling tools like list_computers and estate_health.

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 does not explicitly state when to use this tool versus alternatives. It explains what alerts are included, but lacks guidance on when to use it over related tools like estate_health or pending_updates. Usage is implied from context.

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

list_computersA
Read-only

List computers in the estate. query uses Landscape's query language (e.g. 'tag:web', 'os:noble', 'alert:security-upgrades').

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true (safe) and openWorldHint=true. Description adds behavioral context about Landscape query language, which is useful beyond annotation.

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

Conciseness5/5

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

Two compact sentences with essential information. No wasted words.

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 an output schema, return values are covered. Description explains the query language and usage. Could mention pagination behavior, but sufficient for a list 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?

Only the 'query' parameter is explained with examples. 'limit' and 'offset' are not described beyond their names and defaults. Schema has 0% coverage, so description partly compensates but is incomplete.

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?

Description clearly states 'List computers in the estate', using a specific verb and resource. It distinguishes from siblings like 'get_computer' (singular) and 'resolve_query' (query-only).

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?

Provides query language examples ('tag:web', etc.), implying usage for filtering. No explicit when-not-to-use or alternatives, but context is clear for a list operation.

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

list_scriptsA
Read-only

Stored scripts available to run via execute_script.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the description adds minimal new behavioral info beyond stating that it lists scripts. 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.

Conciseness5/5

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

The description is a single, concise sentence that is fully front-loaded. Every word is essential, with no filler or repetition.

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 the tool's simplicity (no parameters, read-only, open world), the description sufficiently covers its purpose. An output schema exists, so return format details are not needed.

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

Parameters4/5

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

The tool has no parameters, and schema coverage is 100%. The description does not need to add parameter details, meeting expectations for a no-parameter tool.

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

Purpose5/5

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

The description clearly states the tool lists stored scripts for execution via execute_script. It uses specific verb 'list' and resource 'scripts,' and the sibling execute_script is mentioned, aiding differentiation.

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 implies usage before running scripts with execute_script. While it does not explicitly mention when not to use, the context of listing available scripts is clear for the intended use case.

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

pending_updatesA
Read-only

List packages with pending upgrades on matched machines โ€” what would actually change if you patched. Returns totals, a per-machine upgrade count, and a sample of packages. Preview this before apply_security_upgrades / upgrade_packages.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sampleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already include readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds behavioral context beyond annotations by detailing the return structure: 'totals, a per-machine upgrade count, and a sample of packages.' No contradictions.

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, front-loaded with the main action and returns. No superfluous text; every sentence adds value.

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

Completeness5/5

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

Given the presence of an output schema, annotations, and sibling tools, the description covers all essential aspects: purpose, usage guidance, return structure, and relation to other tools. It is complete for this type of 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?

Schema description coverage is 0%, so the description must compensate. It provides some meaning: 'on matched machines' relates to the query parameter, and 'a sample of packages' relates to the sample parameter. However, it lacks explicit details on the query syntax or the exact interpretation of the sample count.

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

Purpose5/5

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

The description clearly states the verb 'List', the resource 'packages with pending upgrades', and the scope 'on matched machines'. It also mentions what is returned (totals, per-machine count, sample) and distinguishes from siblings by naming related tools like apply_security_upgrades.

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 states when to use the tool: 'Preview this before apply_security_upgrades / upgrade_packages.' This provides clear context for use and suggests it as a prerequisite step, differentiating it from sibling tools.

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

pingA
Read-only

Check connectivity and that credentials work against Landscape.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint and openWorldHint. The description adds context about what is checked (connectivity and credentials), which is useful but does not go significantly 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.

Conciseness5/5

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

The description is a single concise sentence that conveys the purpose without any unnecessary words.

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 the tool's simplicity (no parameters, clear purpose, and an existing output schema), the description is adequate. It could mention the return value, but the output schema likely covers that.

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?

With zero parameters and 100% schema description coverage, the description needs no parameter details. The baseline for no-parameter tools is 4, and the description satisfies this.

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

Purpose5/5

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

The description clearly states the tool checks connectivity and credential validity against Landscape. It uses a specific verb-resource pair and is distinct from sibling tools that perform more complex management tasks.

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?

No explicit guidance on when to use this tool versus alternatives is provided. However, its nature as a basic connectivity check implies it should be used before operations that depend on active credentials, but the description does not state this.

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

reboot_computersA
Destructive

Reboot matched machines. Dry run first (omit confirm_token). Set wait=true to poll until the reboot activity finishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as destructive. The description adds the dry-run mode (non-destructive without confirm_token) and polling behavior via wait. It does not detail all side effects but adds significant context beyond annotations.

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, no redundancy, and front-loaded with the verb and object. Every word serves a purpose.

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 annotations and output schema exist, the description adequately covers key behaviors (dry run, confirmation, polling). However, it lacks details on query syntax and error handling, which could be important for safe use.

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

Parameters3/5

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

With 0% schema coverage, the description must explain parameters. It covers query (matched machines), confirm_token (dry run), and wait (polling), but does not mention wait_timeout. This leaves a notable gap.

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

Purpose5/5

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

The description uses the verb 'Reboot' and specifies 'matched machines', clearly indicating the action and target. Among siblings, no other tool has a rebooting verb, making it distinct.

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

Usage Guidelines5/5

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

Explicitly instructs to dry run first by omitting confirm_token, and suggests setting wait=true to poll until completion. This provides a clear sequence and hints for safe usage.

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

remove_packagesA
Destructive

Remove packages from matched machines. Dry run first (omit confirm_token). Set wait=true to poll to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
packagesYes
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate destructiveHint true, but the description adds critical context: dry run safety mechanism and polling behavior. No contradiction; supplements annotations well.

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, no filler, front-loaded with the core action. Every word serves a purpose.

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 5 parameters, required fields, and output schema, the description covers the main workflow (dry run then confirm, polling). Leaves out parameter details but overall adequate for the complexity.

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 0%, and description only adds meaning for confirm_token (dry run) and wait (polling). The other three parameters (query, packages, wait_timeout) remain unexplained, failing to compensate for low coverage.

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

Purpose5/5

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

The description clearly states the tool removes packages from matched machines, with a specific verb ('remove') and resource ('packages'), distinguishing it from sibling tools like install_packages and upgrade_packages.

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?

Provides explicit guidance: dry run first by omitting confirm_token, and set wait=true to poll. This is clear context but doesn't explicitly exclude when not to use, which is acceptable.

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

remove_tagsC

Remove tags from matched machines (write-gated).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYes
queryYes
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds 'write-gated' which hints at permission requirements but does not disclose other behaviors like whether removal is reversible or what happens if tags don't exist.

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?

The description is brief (one sentence) but sacrifices necessary parameter details. It could be restructured to include parameter semantics without losing conciseness.

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?

Given the tool has 3 parameters, 2 required, no parameter descriptions, and is a write operation, the description lacks completeness. The existence of an output schema reduces need to explain return values, but parameter usage is critically missing.

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

Parameters1/5

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

Schema coverage is 0%, and the description provides no explanation of the three parameters (tags, query, confirm_token). The agent must infer their meaning solely from names and the schema, which is insufficient.

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 states the action (remove) and the resource (tags from matched machines), but does not explicitly differentiate from sibling tools like 'add_tags'. The phrase 'write-gated' adds some context about permissions.

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 guidance on when to use this tool versus alternatives (e.g., add_tags, modify_tags). The description implies it's for writing operations but lacks explicit usage context.

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

resolve_queryA
Read-only

Preview the BLAST RADIUS of a query: how many machines it matches and a sample of them. Always run this before a destructive action.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. Description adds that it returns match count and a sample, and positions it as a pre-destructive preview, which is valuable behavioral context.

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, front-loaded with purpose, no waste. Efficient and clear.

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 output schema and annotations, description covers purpose, sample output, and usage. Lacks details on pagination or query semantics, but otherwise adequate.

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 has one required string parameter 'query' with 0% description coverage. Description does not specify query format, syntax, or examples, failing to compensate for the lack of schema documentation.

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?

Description clearly states the tool previews the blast radius, giving count and sample. Uses specific verb 'preview' and distinguishes from destructive siblings.

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?

Explicitly says 'Always run this before a destructive action', providing clear context. Does not detail when not to use or list alternatives, but sibling tools imply destructive alternatives.

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

upgrade_packagesA
Destructive

Upgrade packages on matched machines (omit packages to upgrade all). Dry run first. Set wait=true to poll to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
queryYes
packagesNo
wait_timeoutNo
confirm_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Addes behavioral context beyond annotations: omitting packages upgrades all, and dry run is implied. The destructiveHint annotation is confirmed, and description provides additional constraints.

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 concise sentences with front-loaded purpose. Every phrase adds value, no fluff.

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?

Despite having an output schema, the description is too brief for a destructive 5-parameter tool. Missing explanations for query matching, confirm token, and wait timeout reduce completeness.

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?

Only two of five parameters (packages and wait) are explained. Critical parameters like query, wait_timeout, confirm_token are ignored, and schema descriptions are absent. This leaves significant gaps.

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

Purpose5/5

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

The description clearly states the verb 'Upgrade' and resource 'packages on matched machines', and distinguishes from sibling tools like install_packages and remove_packages.

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?

Describes a workflow instruction ('Dry run first') and a polling option ('Set wait=true to poll to completion'). However, it does not explicitly compare with alternatives or state when not to use.

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

wait_for_activityA
Read-only

Poll an activity (e.g. a reboot or patch job) until it finishes or times out, then report its final status. Use after a write action to confirm success.

ParametersJSON Schema
NameRequiredDescriptionDefault
activity_idYes
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint and openWorldHint, which are consistent with polling behavior. The description adds that it polls until finish or timeout and reports final status, providing useful behavioral context beyond annotations.

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, each adding value: the first defines purpose and behavior, the second provides usage guidance. No unnecessary words, front-loaded key information.

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 the tool's simplicity (2 params, no nested objects, output schema present), the description covers core purpose and usage. However, parameter descriptions are missing, and timeout behavior details are absent, which holds it back from a perfect score.

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 0%, so the description must explain parameters. However, it does not mention activity_id or timeout_seconds explicitly. The example 'activity (e.g. a reboot or patch job)' hints at activity_id, but no details on parameter types, defaults, or constraints.

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

Purpose5/5

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

The description clearly states it polls an activity until completion or timeout and reports final status. This distinguishes it from siblings like get_activity (one-shot status) and list_activities (listing).

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?

Explicitly says 'Use after a write action to confirm success,' providing clear context. It does not explicitly state when not to use or list alternatives, but the intended use case is well-defined.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from package management to query resolution and system health. Even similar operations like apply_security_upgrades and upgrade_packages are differentiated by description and scope, leaving no ambiguity for an agent.

Naming Consistency4/5

Most tool names follow a verb_noun pattern (e.g., install_packages, list_computers), with a few exceptions like pending_updates (adjective_noun) and estate_health (noun_noun). The pattern is largely consistent, aiding predictability.

Tool Count4/5

With 19 tools covering a broad IT estate management domain, the count is slightly above the ideal range but justified by the need for granular operations (e.g., separate security upgrades, pending updates, scripts). No tool feels superfluous.

Completeness4/5

The tool surface covers core CRUD and lifecycle operations for computers, packages, tags, scripts, and activities. Minor gaps exist, such as lack of computer creation/deletion or patch scheduling, but the set is sufficient for common management tasks.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/just-an-oldsalt/bob-ross'

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