Skip to main content
Glama

Quick Start

# docker-compose.yml
services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"
    restart: unless-stopped

volumes:
  maintenant-data:
docker compose up -d

Open http://localhost:8080. Your containers are already there, with their health, restart loops, resources and logs. Nothing to configure.

Docker socket access is automatic: the entrypoint reads the mounted socket's group and grants it to the unprivileged user, on Compose and on Swarm (where docker stack deploy silently ignores group_add). A socket owned by group root needs DOCKER_GID=0. If containers do not show up, see Troubleshooting.

Kubernetes

kubectl create namespace maintenant
kubectl apply -f deploy/kubernetes/

In-cluster API auto-detected, read-only RBAC, namespace filtering, workloads (Deployments, DaemonSets, StatefulSets) as first-class citizens. Kubernetes guide.

Bare Linux, no Docker at all (systemd, amd64 and arm64, statically linked)

curl -fsSL https://install.maintenant.dev | sudo bash

Endpoints, certificates and heartbeats work without any container runtime. Container monitoring switches on by itself the moment a runtime shows up. Install documentation for pinned versions, air-gapped installs and supply-chain verification.

Cloud: one cloud-init file boots a hardened host with maintenant running on Hetzner Cloud, DigitalOcean, Scaleway, OVHcloud or Vultr.


Related MCP server: K8s Observability MCP

Why maintenant?

Monitoring your own infrastructure with the standard stack means running Prometheus, Grafana, Alertmanager, node-exporter, cAdvisor, blackbox-exporter, a certificate exporter, Loki, Promtail, Trivy and something for image updates. Ten-odd components, each with its own config, upgrades and dashboards, to answer one question: is my stack up, and what is burning?

maintenant answers that question with one container.

Built into maintenant

What you would assemble instead

Container state, health checks, restart loops

cAdvisor + node-exporter + alert rules you write

CPU, memory, network and disk, per container and per host

cAdvisor + node-exporter + Grafana dashboards you build

HTTP / TCP endpoint checks, declared as Docker labels

blackbox-exporter + a config file per target

TLS certificate expiry and chain validation

ssl_exporter

Cron and heartbeat deadlines

Pushgateway + alert rules you write

Live container logs, stdout/stderr demuxed

Dozzle, or Loki + Promtail

Image update detection, with compose-aware update and rollback commands

Diun or Watchtower

Network exposure audit: 0.0.0.0 binds, exposed database ports, host network, privileged containers

nothing standard

CVE enrichment and per-container risk score (Personal)

Trivy + its exporter

Alerts routed to Discord, webhooks, email, Telegram, Slack and Teams, with escalation (Pro)

Alertmanager

Public status page with incidents and subscribers

Cachet, Uptime Kuma, or a SaaS

One real-time dashboard for all of the above

Grafana + dashboards you build and maintain

Do I still need Prometheus? maintenant monitors your infrastructure. Prometheus monitors your application. There is no PromQL here, no custom exporters, no panels to design: maintenant already knows what a container, a certificate, an endpoint, a cron job and a CVE are, and starts watching them the moment they appear. If you ship business metrics and write your own queries, keep Prometheus for that. The two answer different questions, and plenty of people run both.

Against the tools usually stacked up next to it:

maintenant

Uptime Kuma

Portainer

Dozzle

Container auto-discovery

Yes

No

Yes

Yes

MCP server, agent-ready

Built in

Third-party

Separate

No

Live container logs

Yes

No

Yes

Yes

HTTP/TCP endpoint checks

Yes

Yes

No

No

Cron/heartbeat monitoring

Yes

Yes

No

No

SSL certificate tracking

Yes

Yes

No

No

CPU/memory/network metrics

Yes

No

Limited

No

Image update detection

Yes

No

Yes

No

Network security insights

Yes

No

No

No

CVE enrichment, risk scoring

Personal

No

No

No

Public status page

Yes

Yes

No

No

Alerting with routing

Yes

Yes

Limited

No

Kubernetes native

Yes

No

Yes

No

Single binary, zero deps

Yes

Node.js

Docker API

Docker API

Runs without a runtime

Yes

No

No

No

One container. One dashboard. Everything monitored.


Screenshots


Agents

maintenant watches, your AI agent investigates. The loop has three steps:

  1. Detect. Fixed rules decide that something is down: consecutive failures, thresholds, missed deadlines, restart loops. No model is involved, so an alert is never invented and nothing is spent while everything is fine.

  2. Push. The alert leaves as a webhook: alert.fired when it starts, alert.resolved when it recovers, with the host it belongs to (agent_id) and a link back to it.

  3. Investigate. Your agent receives the alert and queries maintenant's built-in MCP server: the container's logs, the endpoint's check history, CPU and memory, the other active alerts on the same host. You get a diagnosis, not just a red light.

flowchart LR
    S[containers, endpoints,<br>certificates, cron jobs, hosts] --> M[maintenant<br>rules fire an alert]
    M -- webhook --> A[your agent<br>Claude Code, OpenCode, n8n]
    A -- MCP: logs, history,<br>active alerts --> M

With Claude Code. A small receiver (Python, standard library only) runs on the host next to maintenant. Each fired alert starts a headless Claude Code session that can only call maintenant's read-only MCP tools, and the diagnosis lands in reports/<alert-id>.md:

export RECEIVER_TOKEN=$(openssl rand -hex 32)
python3 examples/agent-webhook/receiver.py      # listens on 127.0.0.1:9099
# what the receiver runs for each alert
claude -p "maintenant just fired this alert: {...} Investigate it read-only." \
  --setting-sources project --mcp-config mcp.json --strict-mcp-config --tools "" \
  --allowedTools mcp__maintenant__list_alerts mcp__maintenant__get_container_logs \
                 mcp__maintenant__get_endpoint_history mcp__maintenant__get_resources

mcp.json reaches maintenant over stdio with docker exec -i maintenant /app/maintenant --mcp-stdio, so no MCP port is opened: start maintenant with MAINTENANT_MCP_SOCKET=true to serve the local socket it relays to. Point a webhook channel at the receiver with an Authorization: Bearer <token> header and route alerts to it with a trigger. The AI agents guide walks through the setup.

With OpenCode, the same receiver calls opencode run instead of claude -p, with maintenant declared as a local MCP server in opencode.json. With n8n, a Webhook trigger feeds an AI Agent node whose MCP Client tool points at your instance's /mcp endpoint.

MCP server

Built-in Model Context Protocol server with 51 tools. Ask your AI assistant what is burning, read a container's logs, check the alert queue, acknowledge an alert, open an incident. stdio and Streamable HTTP transports, OAuth2 with a client id and secret for remote clients (Claude web, mobile and Desktop).


Features

Every section links to its full documentation.

Container monitoring

Zero-config auto-discovery for Docker, Docker Swarm and Kubernetes. Every container is tracked the moment it starts: state changes, health checks, restart loops, live log streaming with stdout/stderr demux. Compose projects are grouped automatically. Read-only: maintenant observes, it never touches your containers.

Multi-host monitoring

One central server, lightweight read-only agents on your other hosts, a persistent mutually-authenticated gRPC stream between them. No shared database, no message queue, no PKI to run: an agent enrolls with a one-time token and an Ed25519 keypair generated locally, and every stream is challenge-response authenticated. Revoke it from the UI at any time.

# On each remote host, one command, generated for you in the UI
docker run -d --name maintenant-agent --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /proc:/host/proc:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  -v maintenant-agent-data:/var/lib/maintenant \
  ghcr.io/kolapsis/maintenant:latest \
  --mode=agent --server=grpcs://monitoring.example.com \
  --enrollment-token=mnt_enr_XXXXXXXXXXXXXXXX --label="prod-worker-01"

Agents detect their local runtime (Docker, Swarm or Kubernetes), stream container state, endpoints, certificates, host CPU/memory/disk, and reconnect on their own, replaying what they saw while disconnected as history. Every entity is attributed to its host, so nothing gets mixed across machines. Personal: up to 20 remote machines. Pro: unlimited.

Update intelligence

Scans OCI registries: newer versions for fixed tags, and for floating tags like latest a comparison between the digest your container runs and the one the tag points at now. You know which images have an update before you docker pull blindly. Update and rollback commands for Compose, plain Docker, Swarm and Kubernetes, with the right cd into the Compose project. No Diun, no Watchtower, no extra container: it is part of the monitor.

Host OS end-of-support

Every monitored host reports its distribution and version; maintenant checks it against the support cycles of Debian, Ubuntu, RHEL, Rocky, Alma, Alpine and SLES and alerts 30 days before the free security support ends, then again once it has. Dates ship with the binary and refresh daily from endoflife.date when the network allows.

Endpoint monitoring

HTTP and TCP checks declared as Docker labels, picked up when the container starts, or added by hand. Endpoints can also be derived from Traefik and Caddy labels (opt-in). Response times, uptime history, 90-day sparklines, failure and recovery thresholds.

labels:
  maintenant.endpoint.http: "https://api:3000/health"
  maintenant.endpoint.interval: "15s"
  maintenant.endpoint.failure-threshold: "3"

Heartbeat and cron monitoring

Create a monitor, get a URL, add one curl to the job. maintenant tracks start and finish, duration, exit code, and alerts when the deadline is missed. Outbound heartbeats let two maintenant instances watch each other, so a dead monitor does not go unnoticed.

curl -fsS -o /dev/null https://now.example.com/ping/{token}/$?

TLS certificate monitoring

Auto-detected from your HTTPS endpoints, plus standalone monitors for any domain. Full chain validation, alerts at 30, 14, 7, 3 and 1 day before expiry, OCSP stapling checks (Personal).

Resource metrics

Real-time CPU, memory, network and disk I/O per container and per host, top-consumers view for instant triage, per-container thresholds with debounce. History: 7 days on Community, 30 on Personal, 90 on Pro.

Network security insights

Flags what should not be there: ports bound to 0.0.0.0, exposed database ports, host-network mode, privileged containers, Kubernetes Services of type NodePort or LoadBalancer, and database ports exposed through them. Personal adds CVE enrichment (each image is mapped to its software ecosystem through OCI manifest inspection), a risk score per container and a unified security posture dashboard.

Alert engine

One alert pipeline for every source: container restart loops, unhealthy checks and stopped containers, endpoint failures, missed heartbeats, expiring or invalid certificates, CPU and memory thresholds, available updates, Swarm and Kubernetes health, agents going offline, hosts whose OS loses support. Channels are silent by default and routed through triggers (severity, source, scope). Alerts can be acknowledged. Silence rules for planned maintenance, three delivery attempts per notification.

Channels: Discord and webhooks (Community), email and Telegram (Personal), Slack and Microsoft Teams (Pro). Pro adds escalation policies of up to five levels that page the on-call, then the backup, then the lead, plus maintenance windows.

Public status page

Real-time status page with severity aggregation across every monitor, live over SSE. Personal adds incident timelines, Pro adds email subscribers (double opt-in, through your own SMTP server), maintenance windows and branding.


Configuration

Everything is driven by Docker labels and a handful of environment variables. No YAML to maintain.

  • Environment variables: bind address, database, base URL, PostgreSQL DSN, MCP, Kubernetes namespaces, license key, telemetry.

  • Docker labels reference: endpoints, TLS, alert severity, restart thresholds, update tracking, grouping, ignore.

  • REST API under /api/v1/, plus an SSE event stream.

services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"

  api:
    image: myapp:latest
    labels:
      maintenant.group: "production"
      maintenant.endpoint.http: "http://api:3000/health"
      maintenant.endpoint.interval: "15s"
      maintenant.alert.severity: "critical"

  postgres:
    image: postgres:16
    labels:
      maintenant.endpoint.tcp: "postgres:5432"
      maintenant.alert.severity: "critical"

  redis:
    image: redis:7-alpine
    labels:
      maintenant.endpoint.tcp: "redis:6379"

volumes:
  maintenant-data:

Security model

  • No built-in authentication, by design. Like Dozzle and Prometheus, maintenant sits behind your reverse proxy and auth middleware (Traefik or Caddy, Authelia or Authentik). /ping/{token} and /status/ are meant to stay public. Reverse proxy setup.

  • Read-only everywhere. Docker socket mounted :ro, read-only RBAC on Kubernetes, read-only agents. maintenant never starts, stops or modifies a container. A socket proxy is supported if you would rather not mount the socket at all.

  • Hardened container. Drops to nobody (uid 65534) once it has fixed the ownership of its volume, read_only root filesystem, no-new-privileges.

  • Anonymous, opt-out telemetry. One snapshot per hour: counts of monitored objects, edition, storage engine, version and runtime figures (OS, architecture, CPU cores, memory). No hostnames, IPs, names, URLs or keys, ever. MAINTENANT_DISABLE_TELEMETRY=1 turns it off with no background goroutine and no outbound packet. Exact payload and details.


Architecture

  • One binary, three modes. Go backend, Vue 3 frontend embedded via embed.FS, SQLite inside. The same file runs embedded (single host, default), server (central ingestion) and agent (remote host).

  • Zero dependencies. SQLite is the only datastore. No Redis, no queue, nothing to administer. A fleet operator may back the server on a PostgreSQL they already run; agents always stay on SQLite.

  • Runtime optional. Endpoints, certificates and heartbeats run without any Docker socket or Kubernetes API. Container monitoring resumes on its own when a runtime becomes reachable.

  • Real-time. SSE pushes every state change to the browser and to the status page instantly.

  • Light on memory. A freshly started instance fits in a few tens of MB; plan on about 100 MB after several days on a busy host. Runs on a Raspberry Pi, a €4 VPS or a NAS.

Full write-up in the architecture documentation.


Editions

Community is free forever and runs production infrastructure every day: it is the full product on a single host, not a crippled trial. Personal is bought once. Pro is what a team needs.

Community

Personal

Pro

Price

Free, Apache-2.0

€149 once, for life

€29/mo or €290/yr, 14-day trial

Hosts

1

up to 20 remote machines

unlimited

Endpoints

10

unlimited

unlimited

Heartbeats

5

unlimited

unlimited

Certificates

5

unlimited

unlimited

Resource history

7 days

30 days

90 days

Alert channels

Discord, webhooks

+ email, Telegram, advanced filters

+ Slack, Teams, escalation, maintenance windows

Security

network insights

+ CVE enrichment, risk scoring, security posture, OCSP

same

Status page

3 components

unlimited, incident timelines

+ subscriber notifications, branding

Use

anything

your own infrastructure

+ running it for others, email support

Personal covers one person on infrastructure they own or run for themselves, freelancers included, and ships with one year of updates (then €59 per extra year; every version released inside a paid year stays licensed for life). Pro adds the right to monitor other people's infrastructure. Volume pricing and custom agreements: license@maintenant.dev.

Paid editions are the same binary, self-hosted the same way. The key is verified against the license server and the signed answer is cached: the instance falls back to Community only after 60 days without reaching the server, so a few weeks offline change nothing. Your monitoring data never leaves your infrastructure.

MAINTENANT_LICENSE_KEY=your-license-key   # Personal or Pro, restart, done

Support the project

maintenant is built by one developer in Bordeaux, France. No VC, no ads, no acquisition exit. 100% of revenue funds full-time development. Ranked by impact:

  1. Buy a licence. Personal if the infrastructure is yours, Pro if you run it for others. Unlocks features and pays for the roadmap. See editions →

  2. Sponsor. Any amount, one-off or monthly, credited below. GitHub Sponsors →

  3. Spread the word. Star the repo, share on HN, Lobsters, Reddit or LinkedIn. Discoverability is oxygen for indie projects.

  4. Tell me how you use it. Two minutes, read by the developer, quoted only with your permission. Give feedback →

Backers

Every Personal owner, Pro subscriber and GitHub sponsor keeps this project independent. Thank you.

Want your company logo here? Become a corporate sponsor: visibility for you, runway for the project.


Contributing

Code contributions are welcome. Open an issue first for bigger changes; small fixes, typos and docs, just send the PR.


License

Copyright 2025-2026 Benjamin Touchard / kOlapsis, Bordeaux, France.

The core is licensed under the Apache License 2.0. The code that Personal and Pro keys unlock, under internal/commercial/ and frontend/src/commercial/, is source-available under the Maintenant Commercial Source License: free to read and contribute to, production use requires a matching licence key. See NOTICE and COMMERCIAL-LICENSE.md.


Available Tools

51 tools
acknowledge_alertA

Acknowledge an active alert so it stops escalating.

NameRequiredDescriptionDefault
alert_idYesAlert ID to acknowledge
acknowledged_byNoWho is acknowledging the alert (defaults to 'mcp')

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden; it does disclose the key side effect that escalation halts, which is the main behavioral fact. However it omits idempotency, required permissions, whether acknowledging an inactive alert errors, and what the response contains.

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

Conciseness5/5

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

A single front-loaded sentence with zero waste, leading with the action and ending with the effect. Nothing could be cut without losing meaning.

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

Completeness4/5

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

For a two-parameter mutation with no output schema, explaining the purpose and the escalation-stopping effect is largely sufficient. The remaining gap is operational guidance on where alert_id comes from and error/precondition behavior.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are already described in the schema, including the 'mcp' default for acknowledged_by. The description adds no syntax, format, or sourcing detail for alert_id, so the schema does all the work.

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

Purpose5/5

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

States a specific verb (acknowledge) and resource (active alert) plus the operational consequence (stops escalating), which no sibling tool duplicates. An agent can distinguish it from list_alerts or update_incident without opening any schema.

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

Usage Guidelines3/5

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

The phrase "active alert" implies the precondition, but the description never says how to locate an alert_id (e.g., via list_alerts) nor what to do if the alert is already resolved or already acknowledged. No alternatives or exclusions are named among the many sibling tools.

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

create_channelA

Create a notification channel. The webhook type is open in every edition; email needs Personal, slack needs Pro, teams needs Pro, telegram needs Personal.

NameRequiredDescriptionDefault
urlYesDestination: an HTTPS webhook URL, an email address, or a Telegram chat id
nameYesChannel name, unique across channels
typeYesChannel type: webhook, email, telegram, slack or teams. Defaults to webhook.
configNoNon-secret per-type settings as a JSON object, e.g. {"thread_id":"42"} for Telegram
secretNoChannel credential, a Telegram bot token today. Write-only: it is never read back.
enabledNoWhether the channel accepts deliveries, default true
headersNoExtra HTTP headers as a JSON object of strings, webhook types only

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations at all, the description carries the full safety/profile burden, and it does add real value by disclosing per-type edition requirements. However it omits other mutation-relevant behavior: what happens on duplicate name (schema says unique), whether creation validates/delivers, and that the secret is write-only -- the latter only appears in the schema, not 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.

Conciseness5/5

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

Two sentences, no filler, with the core action front-loaded and the constraint data compressed into a single readable clause. Every word earns its place.

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 7-parameter create tool with 100% schema coverage and no output schema, the description covers purpose and the main gating constraint. It is slightly thin on failure/conflict behavior and write-only secret handling, which matter for a creation mutation with zero annotations.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: the edition requirement mapped per value of `type`. That is genuine constraint information an agent needs before choosing a type, lifting it above baseline.

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

Purpose4/5

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

States a specific verb and resource ("Create a notification channel"), which is clearly distinct from the other create_* siblings (create_trigger, create_incident, create_escalation_policy). It never names a sibling or points at update_channel/test_channel, so differentiation is by resource noun alone rather than explicit routing.

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 edition-gating sentence gives concrete preconditions for each channel type (webhook open everywhere, email=Personal, slack/teams=Pro, telegram=Personal), which directly informs whether the caller can use this tool for a given type. It stops short of stating when to prefer update_channel over creating, or what to do when a same-named channel already exists.

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

create_escalation_policyC

Create a new escalation policy. Requires the Pro edition.

NameRequiredDescriptionDefault
nameYesPolicy name (1-120 chars)
activeYesWhether the policy is active
levelsYesEscalation levels (min 1, max 5)
filtersYesAlert matching filters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden and discloses only the edition prerequisite. It says nothing about whether creation activates escalation immediately, whether policies notify channels upon creation, whether the policy is enabled by default, validation failure behavior, or any rate/permission constraints.

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

Conciseness4/5

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

Two short sentences with the action front-loaded and zero filler. It is appropriately sized, though its brevity reflects missing information rather than optimal densification.

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?

This is a mutation tool with four required parameters including nested escalation levels and alert filters, no annotations, and no output schema. The description does not explain what a created policy does (how levels escalate, what channels receive), what 'Pro edition' implies for failure, or what the response contains, leaving an agent without operational context.

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

Parameters3/5

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

Schema description coverage is 100%, so the nested name, active, filters, and levels semantics (scopes, severities, delay ranges, channel requirements) are fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create a new escalation policy'), which lets an agent distinguish it from list_escalation_policies, get_escalation_policy, update_escalation_policy and delete_escalation_policy by name alone. It does not explicitly contrast with siblings, so it falls short of 5.

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?

The only usage guidance is 'Requires the Pro edition', which is a prerequisite rather than a when-to-use rule. There is no mention of when to choose this over update_escalation_policy, how it relates to alert triggers, or what happens if a policy already exists.

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

create_incidentB

Create a new incident on the status page. Requires the Personal edition.

NameRequiredDescriptionDefault
titleYesIncident title
statusNoInitial incident status: investigating, identified, monitoring, or resolved (defaults to investigating)
messageNoDescription or initial update message
severityYesIncident severity: minor, major, or critical
component_idsNoIDs of affected status page components

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. The edition prerequisite is a useful disclosure, but nothing is said about side effects a status-page incident typically has (subscriber notifications, who can see it, whether the initial status defaults to investigating, or what is returned). For an un-annotated mutation tool this is a significant gap.

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

Conciseness4/5

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

Two short sentences with no filler, and the operation is front-loaded ahead of the edition caveat. It is efficient, though the brevity leaves real gaps that are scored under 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?

For a five-parameter write tool with no annotations and no output schema, the description should explain what creating an incident triggers and what comes back. Instead it covers only the edition requirement, leaving behavior and return expectations to inference.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter (title, status, message, severity, component_ids) is already documented in the schema, including the default status and allowed values. The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create a new incident') and scopes it to the status page, which lets an agent distinguish it from update_incident and create_maintenance among the siblings. It stops short of explicitly naming the update/create-maintenance alternatives, but the operation itself is unambiguous.

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

Usage Guidelines3/5

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

The description gives one real usage gate — 'Requires the Personal edition' — which is genuinely actionable prerequisite info. It never says when to use this versus update_incident or create_maintenance, so the routing guidance is only implied by the verb.

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

create_maintenanceA

Schedule a maintenance window on the status page. Requires the Pro edition.

NameRequiredDescriptionDefault
titleYesMaintenance title
messageNoDescription of maintenance
end_timeYesEnd time in RFC 3339 format
start_timeYesStart time in RFC 3339 format
component_idsNoIDs of affected status page components

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden; it does disclose the Pro-edition gate, which is real behavioral context. It omits other mutation-relevant behavior: whether subscribers are notified, whether the window can later be edited or cancelled with a sibling tool, and what the call returns.

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 short sentences with zero filler, and the operation is stated before the edition constraint. Every sentence earns its place.

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 5-parameter creation tool with no annotations and no output schema, the definition covers the action and the edition gate adequately, and the schema fills in all parameter detail. Minor gaps remain around the response (e.g., the created window's ID) and notification side effects, but nothing blocks correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including the RFC 3339 formats and component_ids is already documented in the schema. The description adds no parameter-level meaning beyond that baseline.

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 pairs a specific verb ("Schedule") with a specific resource ("a maintenance window on the status page"), so the agent knows exactly what is created. It does not explicitly contrast with nearby write tools like create_incident or create_trigger, which keeps it from a 5.

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

Usage Guidelines3/5

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

"Requires the Pro edition" is a genuine gating prerequisite that tells the agent when the call will fail. However, there is no guidance on when to use a maintenance window rather than create_incident, nor any stated preconditions for the required time range.

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

create_triggerB

Create a new alert trigger, notifying recoveries by default. Scope filters require the Personal edition.

NameRequiredDescriptionDefault
nameYesTrigger name (1-120 chars)
enabledNoWhether the trigger is active. Defaults to true on creation; omitted on update, the current value is kept.
channel_idsYesNotification channel IDs (at least one required)
filter_scopesYesCSV scope filter (e.g. 'container:42,endpoint:7'). Needs the advanced filters capability. Empty matches everything.
filter_sourcesYesCSV source filter (e.g. 'container,endpoint'). Empty matches everything.
filter_severitiesYesCSV severity filter (e.g. 'critical,warning'). Empty matches everything.
notify_on_resolveNoRelay recovery (resolved) notifications, default true

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does add two genuinely useful facts beyond the schema: recovery notifications are relayed by default and scope filters are edition-gated. It says nothing about what the call returns, whether the trigger is immediately active, or what happens if channel IDs are invalid.

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 short sentences with no filler, and the core action is front-loaded before the two caveats. Every clause carries information.

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

Completeness3/5

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

For a 7-parameter creation tool with no annotations and no output schema, the description covers the action and two constraints but omits what the call returns (e.g. the new trigger ID) and any preconditions around notification channels. The fully documented schema compensates for most parameter gaps, leaving the description adequate but thin.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all seven parameters including defaults and CSV formats; baseline is 3. The description's only added semantic is tying scope filters to the Personal edition, which complements the schema's 'advanced filters capability' note but does not extend beyond it.

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

Purpose4/5

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

The description states a specific verb and resource ('Create a new alert trigger'), which cleanly separates it from update_trigger, delete_trigger, list_triggers and get_trigger in the sibling set. It stops short of naming those siblings, so differentiation comes from the verb rather than explicit routing.

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

Usage Guidelines2/5

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

There is no guidance on when to create a trigger versus updating an existing one, or what a trigger requires to be useful. The only usage-adjacent statement is an edition prerequisite for scope filters ('Scope filters require the Personal edition'), which is a constraint rather than a when-to-use rule.

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

delete_channelB

Delete a notification channel. Triggers and escalation levels pointing at it lose that destination.

NameRequiredDescriptionDefault
idYesChannel ID to delete

TDQS

B3.3/5.0
Behavior3/5

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

With zero annotations, the description carries the full burden, and it does disclose a real side effect: triggers and escalation levels pointing at the channel lose that destination. However, it does not state whether the deletion is permanent, what happens to those dependents afterward (silently broken vs blocked), required permissions, or failure behavior when the channel is in active use.

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 short sentences, action first and consequence second, with no filler. Every sentence carries information an agent cannot get from the name alone.

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

Completeness3/5

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

For a one-parameter tool with no output schema, the description covers purpose and the downstream blast radius, which is the most important thing. It falls short on the destructive-operation essentials — irreversibility and failure modes — which are especially needed since no destructiveHint annotation exists to flag the risk.

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

Parameters3/5

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

Schema description coverage is 100% and the single required 'id' parameter is documented in the schema as 'Channel ID to delete'. The description adds no format or sourcing guidance beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Delete a notification channel') that cleanly separates it from sibling deletes like delete_trigger and delete_escalation_policy. It does not explicitly name those siblings or when to choose one over another, but the resource noun carries the differentiation.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no mention of alternatives such as update_channel or deactivating a route, and no prerequisite or confirmation advice. The only implied usage is the obvious 'call it to delete a channel', which the name already conveys.

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

delete_escalation_policyA

Delete an escalation policy and stop any active runs. Requires the Pro edition.

NameRequiredDescriptionDefault
idYesPolicy ID to delete

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description does carry real burden and discloses two important traits: deletion also stops active runs, and the operation requires the Pro edition. It does not state irreversibility, whether run history is retained, or what is returned, so it falls short of full disclosure for a destructive mutation.

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

Conciseness5/5

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

Two short sentences with zero waste. The action and side effect are front-loaded, and the edition prerequisite follows as a compact caveat.

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 single-parameter destructive tool this covers the essentials: what is destroyed at a high level and a plan-level prerequisite. Missing are return behavior and irreversibility, but with no output schema and full param documentation the gap is minor.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter 'id' is documented in-schema as "Policy ID to delete". The description adds no syntax, format, or sourcing detail (e.g. where to obtain the ID) beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Delete an escalation policy") plus the consequential side effect ("stop any active runs"). An agent can distinguish this from update_escalation_policy, set_escalation_policy_active, and list_escalation_policies without opening any schema.

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

Usage Guidelines3/5

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

The description gives no explicit when-to-use or when-not-to-use guidance. It does not mention set_escalation_policy_active as a non-destructive alternative for disabling a policy, so the agent must infer that deactivate-vs-delete choice on its own; usage is only implied by the verb.

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

delete_triggerB

Delete an alert trigger. The linked channels are not deleted.

NameRequiredDescriptionDefault
idYesTrigger ID to delete

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose one genuinely useful side effect — linked channels survive the deletion — but says nothing about irreversibility, permission requirements, or whether dependent escalation policies are affected.

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 short sentences, zero waste, with the core action front-loaded and the side-effect caveat immediately after. Nothing could be removed without losing 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?

For a one-parameter delete tool with no output schema, the description plus schema covers enough to invoke it correctly, including the key non-obvious fact that channels are preserved. Only the irreversibility/confirmation expectation is missing.

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

Parameters3/5

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

Single parameter with 100% schema description coverage ('Trigger ID to delete'), so the schema already does the work. The description adds no ID format, source, or lookup guidance beyond what the schema states; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource — 'Delete an alert trigger' — which distinguishes it from the other delete_* siblings (delete_channel, delete_escalation_policy) by object type. It does not explicitly name alternatives, but the resource is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to delete versus when to use update_trigger or pause_monitor, nor any prerequisites such as confirming the trigger exists or is paused. Usage is only implied by the verb.

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

get_channelA
Read-only

Get a single notification channel by ID, with its delivery health and the triggers routing to it. Header values are masked as *** and Slack, Discord and Teams webhook URLs are cut after the host; the secret is never returned.

NameRequiredDescriptionDefault
idYesChannel ID

TDQS

A4.3/5.0
Behavior5/5

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

Beyond readOnlyHint=true, the description discloses non-obvious redaction behavior: header values are masked as ***, Slack/Discord/Teams webhook URLs are truncated after the host, and the secret is never returned. This is exactly the kind of data-exposure context an agent needs before quoting the output.

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

Conciseness5/5

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

Two sentences, both front-loaded with the most decision-relevant facts (identity lookup first, masking second). No filler or restatement of the tool name.

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?

No output schema exists, and the description compensates by naming what is returned (health, triggers) and what is withheld (secrets, masked headers, truncated URLs). For a single-record read tool with one parameter, nothing material is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is described as 'Channel ID'. The description only echoes 'by ID' and adds no format or acquisition guidance (e.g., that the ID comes from list_channels), so the baseline 3 applies.

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

Purpose5/5

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

Specific verb and resource ('Get a single notification channel by ID') plus the return contents (delivery health, routing triggers). The 'single ... by ID' phrasing cleanly separates it from the sibling list_channels without needing to name it.

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 requirement of an id implies this is a follow-up call after list_channels, but no explicit when-to-use or when-not guidance is given and no alternative is named. Usage is inferable rather than stated.

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

get_containerA
Read-only

Get detailed information about a specific container including state, health, image, labels, and recent state transitions.

NameRequiredDescriptionDefault
container_idYesInternal container ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description adds value by disclosing what the response contains, including the non-obvious 'recent state transitions' and 'health'. It does not mention behavior on an unknown or stale container_id, but that is a minor gap given the read-only 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?

A single front-loaded sentence with no filler; the field enumeration is dense, useful information rather than padding, and there is nothing to trim.

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

Completeness4/5

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

For a one-parameter read-only tool with no output schema, enumerating the returned fields is the right compensation and makes the tool callable without guessing. A note on identifier format or error behavior would close the remaining gap.

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

Parameters3/5

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

There is a single parameter with full schema coverage, so the schema already explains container_id. The description adds only that the container is 'specific' and does not clarify whether a name, short ID, or full internal ID is acceptable, so it stays at the baseline.

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

Purpose4/5

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

Specific verb ('Get') plus resource ('a specific container') with an explicit enumeration of the content returned: state, health, image, labels, and recent state transitions. It implicitly distinguishes itself from list_containers by scoping to a single container, though it never names that sibling.

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 singular 'specific container' implies this is a detail-lookup following a list operation, but no explicit when-to-use or when-not-to-use guidance is given, and no alternative (e.g., list_containers for browsing, get_container_logs for logs) is named.

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

get_container_logsB
Read-only

Get recent log lines from a container's stdout/stderr output.

NameRequiredDescriptionDefault
linesNoNumber of log lines to retrieve, max 1000, default 100
timestampsNoInclude timestamps in log output
container_idYesInternal container ID

TDQS

B3.3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe non-mutating read, and the description is consistent with that. It adds the useful scope detail that output comes from stdout/stderr and is 'recent' only, but says nothing about behavior on stopped containers, truncation at the 1000-line cap, or error cases.

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

Conciseness5/5

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

A single front-loaded sentence naming verb, resource, and source stream, with zero filler. Nothing could be cut without losing information.

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

Completeness3/5

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

For a simple 3-parameter read tool with full schema coverage and a readOnly annotation, the description covers the essentials. It is thin on operational context (container state requirements, output format tied to timestamps) that would let an agent call it confidently the first time.

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

Parameters3/5

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

Schema description coverage is 100%, so lines, timestamps, and container_id are already fully documented with defaults and bounds. The description's only added signal is 'recent', which loosely reinforces the lines default rather than extending parameter meaning.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('log lines from a container's stdout/stderr'), which clearly separates it from get_container (metadata) and list_containers. It stops short of explicitly naming a sibling to contrast with, so it lands at 4 rather than 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus get_container or list_containers, nor any prerequisites (e.g. container must exist/running). The word 'recent' weakly implies a tail-style read, but the agent must infer the use case entirely.

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

get_editionA
Read-only

Report the running edition, which capability each edition opens, the quota usage of capped resources, and the resource-history windows. Call this before offering a feature that may be gated, instead of asking the operator which edition they run.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

readOnlyHint=true already establishes the safety profile, so the description focuses on the calling convention: this is a cheap pre-flight introspection to run before making a gated offer. It also compensates for the absent output schema by disclosing what categories of data come back. It does not describe cost, freshness, or format of the quota/history figures.

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

Conciseness5/5

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

Two sentences, no filler. The return payload is front-loaded and the operational trigger follows immediately, which matches the order an agent needs to evaluate it.

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

Completeness4/5

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

With no parameters and no output schema, the description carries the return-value burden and does so by naming the four data categories. It leaves granularity (units of quota usage, what a 'history window' looks like) unspecified, which is a minor gap for a read-only introspection tool.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly implies no input is needed by framing the call as a blanket snapshot.

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?

Uses a specific verb (report) plus the exact resource and enumerates the four payloads it returns: edition, per-edition capability, quota usage of capped resources, and resource-history windows. That enumeration separates it cleanly from neighbours like get_health or get_resources without needing the schema.

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

Usage Guidelines4/5

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

"Call this before offering a feature that may be gated" states a concrete trigger condition, and "instead of asking the operator which edition they run" names the behaviour it replaces. It stops short of naming a sibling tool alternative or any when-not case, so it is clear context rather than a full routing rule.

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

get_endpoint_historyA
Read-only

Get detailed check history for a specific endpoint, including response times, status codes, and error messages.

NameRequiredDescriptionDefault
limitNoNumber of recent checks to return, default 50
endpoint_idYesEndpoint ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description usefully discloses the payload contents (response times, status codes, error messages), but says nothing about time-range scope, pagination, or whether only the most recent checks are returned.

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

Conciseness5/5

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

A single well-formed sentence with the resource and the returned fields front-loaded. Nothing is wasted or repeated.

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

Completeness4/5

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

For a two-parameter read-only tool with no output schema, the description adequately covers what the tool returns. The one notable gap is the absence of any mention of the time window or result ordering, which matters for interpreting 'history'.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented in the schema, so the baseline of 3 applies. The description adds no further meaning about endpoint_id format or how limit interacts with ordering.

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

Purpose4/5

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

States a specific verb and resource ('Get detailed check history for a specific endpoint') and enumerates the returned data (response times, status codes, error messages). It is clearly distinguishable from list_endpoints, though it does not explicitly name the sibling it contrasts with.

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 phrase 'for a specific endpoint' implies per-endpoint drill-down versus the list_* tools, but there is no explicit when-to-use/when-not or named alternative. Usage is inferred rather than stated.

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

get_escalation_policyA
Read-only

Get a single escalation policy by ID. Requires the Pro edition.

NameRequiredDescriptionDefault
idYesPolicy ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a non-obvious constraint the schema cannot express — that the operation requires the Pro edition — which is genuine behavioral context an agent needs to avoid calling it in a non-Pro environment. It does not say what an edition failure looks like, hence not a 5.

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

Conciseness5/5

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

Two short sentences, zero padding, with the core action front-loaded and the environment constraint following. Nothing is wasted.

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

Completeness4/5

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

For a single-object read with one fully documented parameter and a readOnly annotation, this is nearly sufficient, and the Pro-edition note closes the biggest gap. The only remaining omission is a hint about what the returned policy object contains, which would help since there is no output schema.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema fully documents "id". The description reinforces it as "by ID" but adds no format or sourcing guidance beyond what the schema provides, which matches the baseline 3.

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

Purpose4/5

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

States a specific verb and resource ("Get a single escalation policy") and the retrieval key ("by ID"), which distinguishes it from the list_escalation_policies sibling. It stops short of explicitly naming that sibling or the update/delete variants, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

"By ID" implies the tool is for direct, known-identifier lookup as opposed to listing, but there is no explicit when-to-use clause, no mention of the list or update alternatives, and no guidance on what to do if the ID is unknown.

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

get_escalation_runA
Read-only

Get full detail of an escalation run including all deliveries. Requires the Pro edition.

NameRequiredDescriptionDefault
idYesRun ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond that: the response includes all deliveries, and the call is gated on the Pro edition. It stops short of saying what happens on a non-Pro call (error shape), but the added context is substantive.

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 short sentences with zero waste. The core purpose leads, and the edition prerequisite follows as a clearly separable constraint.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the description covers purpose, the returned content ('all deliveries'), and an edition gate. The only gap is the failure behavior when the Pro edition is absent, which is a minor omission.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'id' parameter, so the schema already documents it adequately. The description adds no format or sourcing guidance beyond that, matching the baseline 3 for a fully documented parameter.

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

Purpose4/5

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

States a specific verb and resource ('Get full detail of an escalation run') plus the payload scope ('including all deliveries'). This implicitly distinguishes it from the list_alert_escalation_runs sibling, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Gives one real precondition — 'Requires the Pro edition' — which helps an agent avoid a failed call. However, it never states when to fetch a single run versus listing runs, nor names list_alert_escalation_runs as the alternative, so usage is only implied.

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

get_healthA
Read-only

Check maintenant's own health status, version, and runtime information.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, so this is a safe read. The description adds value by naming the three response areas (health status, version, runtime information), but it does not say what "health status" actually reports (dependency checks? degraded/healthy enum?) or how failures are surfaced.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. Every element (health status, version, runtime information) earns its place.

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

Completeness4/5

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

For a zero-argument read-only tool with no output schema, the description supplies enough — it enumerates the categories of returned data and the safety profile is covered by annotations. Minor gap: no indication of what a failed/unhealthy result looks like.

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?

Zero parameters, so there is nothing to disambiguate and the schema is trivially complete; baseline 4 applies. The description correctly implies a no-argument call.

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

Purpose4/5

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

Specific verb ("Check") plus a well-defined resource ("maintenant's own health status, version, and runtime information"). The self-referential framing ("maintenant's own") distinguishes it from data-querying siblings like get_swarm_info or get_edition, though it does not name those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied — an agent can infer this is a diagnostic/self-check call, but the description never states when to prefer it over get_edition or get_swarm_info, nor any preconditions. No alternatives or exclusions are named.

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

get_resourcesA
Read-only

Get current host resource metrics summary including CPU usage, memory usage, network throughput in bytes per second (net_rx_rate, net_tx_rate), and disk usage.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real value by naming the metric identifiers net_rx_rate/net_tx_rate and specifying their unit (bytes per second), but it leaves the units for CPU and memory unspecified and does not say whether this is the local host or the whole fleet.

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

Conciseness5/5

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

A single sentence that front-loads the core purpose and spends the remainder on the metric detail an agent needs. No filler or redundancy.

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

Completeness3/5

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

With no input schema and no output schema, the description carries the full burden of describing the return payload, and it only partially does so: it lists the metrics but omits units for CPU and memory and does not indicate aggregation scope (per-host vs. cluster). Adequate to call the tool, but thin for interpreting its output.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. There is no parameter surface for the description to compensate for.

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

Purpose4/5

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

States a specific verb+resource ('Get current host resource metrics summary') and enumerates the exact metrics returned, which implicitly separates it from siblings like get_top_consumers and get_health. It stops short of explicitly naming a sibling it could be confused with, so it does not reach the top band.

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

Usage Guidelines3/5

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

The word 'current' implies a point-in-time snapshot rather than historical trend data, which is a useful implied usage cue. However, there is no explicit statement of when to prefer this over get_top_consumers, get_health, or get_swarm_info, and no exclusions are given.

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

get_security_insightsA
Read-only

List security insights (dangerous runtime configurations) across containers, or for a single container. Includes a severity summary.

NameRequiredDescriptionDefault
container_idNoInternal container ID; omit to return all containers plus a summary

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's job is lighter. It adds useful substance by defining what an 'insight' is (a dangerous runtime configuration) and disclosing that a severity summary is included in the response. It says nothing about volume, pagination, or freshness of the insights.

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 short sentences, the resource definition and scope up front, the response-content note trailing. Nothing redundant and nothing padded.

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

Completeness4/5

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

For a zero-required-param read tool with a fully documented schema and no output schema, this covers purpose, scope, and a hint at return content (severity summary). A brief note on how it differs from get_security_posture or list_risk_scores is the only real gap.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is already documented there as 'Internal container ID; omit to return all containers plus a summary.' The description restates the same all-vs-one behavior without adding format or sourcing detail, so it neither compensates for nor improves on the schema.

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

Purpose4/5

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

Specific verb (List) plus resource (security insights), with the term glossed as 'dangerous runtime configurations' so an agent knows what data class this returns rather than guessing. Scope (all containers or one) is stated. It stops short of differentiating from plausible siblings like get_security_posture, list_risk_scores, or list_cve.

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

Usage Guidelines3/5

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

Usage is only implied through the scoping sentence: query broadly for an overview, or narrow to one container. There is no explicit 'use this when' framing and no named alternative for the adjacent posture/risk-score tools, leaving the agent to infer which security-view tool applies.

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

get_security_postureA
Read-only

Get the infrastructure security posture score, or the posture of a single container. Requires the Personal edition.

NameRequiredDescriptionDefault
container_idNoInternal container ID; omit for the global infrastructure posture

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds a real access constraint (Personal edition) that annotations do not convey and that could otherwise cause a failed call. It says nothing about the response shape or what happens when the edition requirement is unmet (error vs. empty result).

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 short sentences with zero waste: the capability and its two modes come first, then the edition prerequisite. Nothing is buried or repeated.

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

Completeness4/5

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

For a zero-required-param read tool with full schema coverage and readOnly annotations, this covers scope and access requirements adequately. The remaining gap is that 'posture score' is never characterized (single number? per-category breakdown?), and there is no output schema to fall back on.

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 a single parameter at 100% schema coverage, the schema already explains that container_id is an internal ID omitted for global posture, and the description restates that same distinction. No additional syntax, format, or lookup guidance is provided beyond the structured fields, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get the infrastructure security posture score') and clarifies the two scopes: global infrastructure vs. a single container. It never distinguishes itself from nearby-sounding siblings such as get_security_insights or list_risk_scores, so an agent must infer the boundary.

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 edition prerequisite ('Requires the Personal edition') is a genuinely useful gating condition, and omitting container_id implies the global scope. However, there is no explicit guidance on when to prefer this over get_security_insights, list_risk_scores, or list_cve, which all touch adjacent security data.

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

get_swarm_infoA
Read-only

Get Docker Swarm cluster info (manager/worker counts, whether this node is a manager). Reports inactive when Swarm is not detected.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds genuinely useful behavior by noting it 'reports inactive when Swarm is not detected', which tells the agent how to interpret the empty/degraded case. It does not describe the response shape beyond field names, but that is a minor gap for a read-only status call.

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 short sentences, no filler, with the core purpose front-loaded and the edge-case behavior following. Every clause adds information an agent can act on.

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?

With no parameters, no output schema, and readOnly semantics already declared, the description carries exactly the burden it needs to: what is returned and how the not-detected case is signaled. Nothing required for correct invocation is missing.

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?

Zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. The parenthetical does not need to expand on arguments that do not exist.

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?

Concrete verb+resource ('Get Docker Swarm cluster info') with the returned fields enumerated in parentheses, so the agent knows this is cluster-level state rather than a list. It does not explicitly distinguish itself from siblings like list_swarm_nodes or list_swarm_services, but the 'cluster info' framing makes the scope apparent.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the cluster-overview call versus the swarm list tools, but the description never states when to prefer it or what alternatives exist. No prerequisites or exclusions are given.

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

get_top_consumersB
Read-only

Get containers ranked by resource consumption (CPU or memory), useful for identifying resource-heavy containers.

NameRequiredDescriptionDefault
limitNoMaximum number of containers to return, default 10, at most 20
metricYesResource metric to sort by: cpu or memory
periodNoTime period for ranking: current (live), or one of 1h, 6h, 24h, 7d, 30d, 90d. How far back a history window may go depends on the edition.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds one behavioral fact beyond the structured fields — that results are ranked/ordered by the chosen metric — but says nothing about the 20-result cap being enforced, the edition-dependent history window, or what fields come back.

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

Conciseness4/5

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

One front-loaded sentence with the ranking behavior and metric options up front. The trailing 'useful for...' clause is mildly redundant with the stated purpose but still adds usage color.

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

Completeness3/5

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

For a simple three-parameter read tool this is close to adequate, but with no output schema the description could have described the shape of a returned ranking entry (container identity plus consumption value) and noted the result cap behavior rather than leaving that only in a parameter description.

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

Parameters3/5

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

Schema description coverage is 100%: metric, limit, and period are all fully documented in the schema, including the default and cap on limit. The description only echoes the cpu/memory choice and adds nothing about limit or the period windows, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with the ranking behavior made explicit: 'Get containers ranked by resource consumption (CPU or memory)'. This separates it from list_containers and get_container, though it never names those siblings directly.

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 clause 'useful for identifying resource-heavy containers' implies a use case (triage/capacity work) but gives no explicit when-not guidance or pointer to alternatives such as get_container for a single container's detail or list_containers for a flat inventory.

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

get_triggerA
Read-only

Get a single alert trigger by ID.

NameRequiredDescriptionDefault
idYesTrigger ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered externally. The description adds nothing beyond the name — nothing about behavior on a missing/invalid ID, permissions, or what a "trigger" contains — so with annotations carrying the load this is an adequate 3.

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

Conciseness5/5

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

A single nine-word sentence with zero padding that front-loads the verb, the resource, and the constraint on cardinality. Nothing further could be trimmed without losing information.

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 tool is trivial (one required, fully documented param) and annotations cover its read-only nature, so little is needed. However, with no output schema the description gives no hint of what a trigger record contains or what happens if the ID is unknown, leaving minor gaps for an agent deciding how to handle the result.

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

Parameters3/5

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

Only one parameter, and the schema already documents it at 100% coverage ("Trigger ID"). The description's phrase "by ID" restates the schema rather than adding format, sourcing, or lookup semantics, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb (Get) and resource (a single alert trigger) plus the lookup key (ID), which cleanly separates it from list_triggers and from unrelated get_* siblings on other resources. It does not explicitly name the nearest alternative (list_triggers), so it falls short of full sibling differentiation.

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

Usage Guidelines3/5

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

"Get a single ... by ID" implies the usage condition (you already have an ID and want one record rather than a list), but there is no explicit when-to-use or when-not-to-use guidance and no mention of list_triggers as the alternative.

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

get_updatesA
Read-only

List available image updates for monitored containers, and the operating system of every monitored host with its end-of-support status (supported, ending_soon, ended, unknown, untracked) and dates.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries the rest of the load, and it does disclose the full status taxonomy (supported, ending_soon, ended, unknown, untracked) plus the fact that coverage is 'every monitored host' with no filtering. It stops short of describing the shape of the returned data or how fresh it is.

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

Conciseness4/5

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

A single dense sentence with no filler, front-loaded with the primary action and resource. The compound scope (updates plus host OS EOL) is packed into one clause chain, which slightly reduces scannability but wastes no 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 no output schema, the description is responsible for conveying what comes back, and it does explain the host/EOL half in detail including status values and dates. The image-update half is described only at a high level, leaving the fields of each update entry unstated, which is a minor gap for a dual-purpose read tool.

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

Parameters4/5

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

The tool takes zero parameters and the schema is closed with additionalProperties=false, so there is no parameter meaning to convey. Baseline 4 applies; nothing in the description misleads about inputs.

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?

Uses a specific verb (List) with two clearly named resources: available image updates for monitored containers, and per-host OS end-of-support status. The enumerated status vocabulary makes the scope unambiguous. It does not explicitly contrast itself with siblings like list_containers or get_container, which is the only thing keeping it from a 5.

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

Usage Guidelines3/5

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

There is no explicit when-to-use statement or named alternative; a caller has to infer that this is the tool for update availability and end-of-life reporting. For a zero-parameter read tool the implied usage is fairly obvious, but nothing states when to prefer it over list_containers or get_endpoint_history.

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

list_agentsA
Read-only

List all registered remote agents with their connection state, runtime type, hostname, and label. Requires the Personal edition.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint annotation already covers the safety profile, so the description only needs to add context. It does add meaningful behavior beyond annotations: the set of fields returned and an edition requirement that determines whether the call will succeed. It omits pagination behavior and empty-result handling, which keeps it from a 5.

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

Conciseness5/5

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

Two sentences, fully front-loaded with the action and the returned fields, followed by the edition constraint. Every sentence earns its place; there is no repetition or filler.

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

Completeness4/5

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

For a zero-parameter read-only list tool with an annotation and no output schema, the description is nearly complete: it covers what is returned and the edition requirement. The only missing elements are return-shape details like pagination or whether results are sorted and limited.

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 zero parameters, so the baseline is 4 per the scoring rules. The description correctly does not waste space explaining parameters, as there are none and schema coverage is 100%.

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

Purpose4/5

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

States a specific verb and resource ('List all registered remote agents') and enumerates the returned fields (connection state, runtime type, hostname, label), which makes the tool's scope unmistakable. It does not explicitly name a sibling or explain how it differs, but no other tool in the sibling list covers agents, so ambiguity is low.

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 provides one useful precondition ('Requires the Personal edition') but gives no guidance on when to use this versus other listing tools (e.g., list_containers, get_swarm_info) or when not to use it. Usage is only implied by the verb 'list'.

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

list_alert_escalation_runsA
Read-only

List escalation runs attached to a specific alert. Requires the Pro edition.

NameRequiredDescriptionDefault
alert_idYesAlert ID

TDQS

A3.6/5.0
Behavior4/5

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

readOnlyHint already declares this is a safe read, so the useful addition here is the entitlement prerequisite: 'Requires the Pro edition' is a real failure mode an agent should know before calling. It still does not disclose ordering, pagination, or an empty-result behavior, which keeps it from a 5.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core action and followed by the one gating constraint. Nothing is wasted, though the bracketing of the edition note could be folded more naturally into a usage sentence.

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

Completeness3/5

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

For a one-parameter read with no output schema, the definition covers what the tool returns only by name ('escalation runs'), leaving the shape of a run implicit. The edition prerequisite is the key thing it does supply; pagination and return structure are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single required alert_id, so the schema already does the work. The description reinforces that alert_id selects the parent alert whose runs are returned, but adds no format or validation detail beyond that.

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

Purpose4/5

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

States a specific verb and resource (list escalation runs) scoped to one alert, which distinguishes it clearly from the sibling get_escalation_run. It does not explicitly name that sibling or otherwise contrast the two, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

The scoping phrase 'attached to a specific alert' implies the tool is used once an alert_id is known, but there is no explicit when-to-use statement and no pointer to the single-run alternative (get_escalation_run) for the case where a run ID is already in hand.

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

List alerts. By default returns only active (unresolved) alerts that are not yet acknowledged. Set active_only to false to return the last 100 alerts instead, acknowledged, resolved and silenced ones included.

NameRequiredDescriptionDefault
active_onlyNoOnly return active alerts, default true

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark it read-only, and the description adds real behavioral detail beyond that: default filtering excludes acknowledged alerts, and the non-default mode is capped at 100 results including acknowledged, resolved and silenced states. The result cap in particular is information an agent cannot get from the schema or 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 filler, and the default behavior is front-loaded before the override case. Every clause carries operational meaning.

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 single-optional-parameter read-only listing tool with no output schema, the description covers what an agent needs to call it and interpret the result set size. It doesn't state ordering (which alerts count as the "last 100") or the fields returned, which would fully close the gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description earns above baseline by explaining what the boolean actually toggles between — active-unacknowledged only versus the last 100 alerts across all states — which the terse schema text ("Only return active alerts, default true") does not convey.

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

Purpose4/5

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

States a specific verb+resource ("List alerts") and immediately defines the default result set. It doesn't explicitly name sibling tools like acknowledge_alert or list_alert_escalation_runs, but the scope is unambiguous on its own.

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

Usage Guidelines4/5

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

Gives an explicit condition for changing behavior ("Set active_only to false to return the last 100 alerts instead") and describes what that alternative result set contains. It stops short of pointing to the sibling tool to use when the agent actually wants to act on an alert.

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

list_certificatesA
Read-only

List all monitored TLS certificates with expiration dates, issuer, chain validity, and days until expiry.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local' for certificates checked directly by the server. Omit to return all.

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe read. The description goes beyond the annotation by disclosing the shape of the returned data (issuer, chain validity, days until expiry), which matters because there is no output schema. It stops short of mentioning pagination or volume, so not a 5.

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

Conciseness5/5

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

A single front-loaded sentence with the resource first and the returned fields trailing. No preamble, no redundancy.

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

Completeness4/5

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

For a read-only, zero-required-parameter listing tool this covers purpose, safety (via annotation), and return fields (absent an output schema). Only gaps are the agent_id/local filtering behavior and any pagination or result-size expectations.

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

Parameters3/5

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

Schema coverage is 100% and the single agent_id parameter is fully documented in the schema, including the 'local' sentinel value. The description says nothing about filtering, so the baseline 3 applies; the phrase 'List all' even slightly obscures that a filter 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?

States a specific verb ('List') and resource ('monitored TLS certificates') and enumerates the data points returned (expiration dates, issuer, chain validity, days until expiry). No sibling tool covers certificates, so it is trivially distinguishable from the surrounding list_* family.

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 verb 'List all' implies a straightforward enumeration use case, but there is no explicit statement of when to reach for this versus something like get_security_insights or get_security_posture, and no note about when the agent_id filter should be applied. Usage is only implied.

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

list_channelsA
Read-only

List notification channels. Channels are silent on their own: an alert reaches one only through an alert trigger or an escalation level. Header values are masked as *** and Slack, Discord and Teams webhook URLs are cut after the host; the secret is never returned.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

readOnlyHint=true already covers the safety profile, and the description goes well beyond it by disclosing output redaction: headers masked as ***, Slack/Discord/Teams webhook URLs truncated after the host, and secrets never returned. That is exactly the kind of behavioral detail annotations cannot express and it prevents an agent from expecting usable webhook credentials.

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?

Three short sentences, each doing distinct work: purpose first, then domain context, then return-value redaction warnings. Nothing is repeated and the most decision-relevant line (what you actually get back) is not buried.

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

Completeness4/5

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

With no output schema and no parameters, the description carries the burden of describing results, and it covers the most consequential aspect (masked secrets and truncated webhook URLs). It does not enumerate the returned fields (id, name, type, config), which leaves a modest gap for a listing endpoint.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The schema is an empty object with additionalProperties false, consistent with a no-argument list call.

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?

Opens with a specific verb+resource ('List notification channels'), which immediately separates it from get_channel, create_channel, update_channel, delete_channel and test_channel in the sibling set. The follow-up sentence also positions channels correctly relative to list_triggers and list_escalation_policies.

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?

Explains the domain relationship that motivates calling this tool: channels alone are inert, so an alert only reaches one via an alert trigger or escalation level. That gives clear context for when the list matters, but it never explicitly states when to prefer this over get_channel or how it pairs with test_channel.

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

list_containersB
Read-only

List all monitored containers with their current state (running, stopped, restarting), health status, and basic metadata.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local' for resources managed directly by the server. Omit to return all.

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read with no side effects, so the bar is lower. The description does add useful behavioral context by naming what each row contains (current state values running/stopped/restarting, health status, basic metadata), but it says nothing about result volume, pagination, or ordering for what could be a large fleet-wide listing.

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

Conciseness4/5

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

One front-loaded sentence with no filler; the resource and the returned fields come immediately. It is efficient, though its economy is partly why usage and filtering context are missing.

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 simple read-only single-optional-parameter tool with full schema coverage and annotations, this is close to sufficient, and the description usefully enumerates the return fields since there is no output schema. Only fleet-size/pagination behavior is unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and the single agent_id parameter is fully documented in the schema, including the 'local' sentinel and the omit-to-return-all behavior, so the baseline of 3 applies. The description adds no param meaning beyond that and in fact says 'all' without hinting that a per-agent filter exists.

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

Purpose4/5

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

States a specific verb and resource ('List all monitored containers') plus the scope and the fields returned (state, health, metadata). It does not name the sibling that overlaps most (get_container for details, list_kubernetes_pods for K8s workloads, list_endpoints), so the agent must infer the boundary itself.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The only signal is the phrase 'all monitored containers', which lets an agent infer this is a broad enumeration rather than a detail lookup, but the routing decision against get_container or the Kubernetes list tools is left entirely to inference.

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

list_cveA
Read-only

List active CVE vulnerabilities detected in container images, optionally filtered by container or minimum severity. For a single container the response carries the CVE evaluation state: an empty list only means "no known CVEs" when the state is "evaluated". Requires the Personal edition.

NameRequiredDescriptionDefault
severityNoMinimum severity filter: low, medium, high, or critical
container_idNoInternal container ID; omit to list across all containers

TDQS

A4.5/5.0
Behavior5/5

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

Read-only safety is already carried by readOnlyHint, and the description adds genuinely non-obvious behavior: the response includes a CVE evaluation state for single-container queries and an empty list only means 'no known CVEs' when that state is 'evaluated'. It also discloses the Personal-edition licensing prerequisite, which is a real gating condition.

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?

Three sentences, each earning its place: scope first, then the result-interpretation caveat, then the edition prerequisite. No filler and the most important constraint is front-loaded.

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

Completeness5/5

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

Only two optional parameters and no output schema, and the description covers the one interpretive risk an agent would otherwise get wrong (empty list vs. unevaluated state) plus the licensing gate. Nothing essential is missing for correct invocation and reading of results.

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

Parameters3/5

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

Schema coverage is 100% and both parameters already document allowed severity values and the omit-container_id behavior, so the description's restatement of the filters adds little syntax or edge-case detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List active CVE vulnerabilities detected in container images') plus the two filter dimensions, so an agent can immediately tell this apart from list_containers, list_risk_scores, or get_security_posture in the sibling set.

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

Usage Guidelines4/5

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

Gives clear usage context: filters are optional, omitting container_id lists across all containers, and the tool requires the Personal edition. It stops short of naming an alternative tool (e.g. get_security_insights) or stating when not to use it, so it is strong but not fully routing-aware.

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

list_endpointsA
Read-only

List all monitored HTTP/TCP endpoints with their current status (up/down), response time, and uptime percentage.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local' for endpoints checked directly by the server. Omit to return all.

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds genuine value by disclosing the payload contents (status, response time, uptime percentage), but says nothing about pagination, ordering, or cost of listing every endpoint in large environments.

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?

One sentence, front-loaded with the verb and resource, then the returned fields. No filler, no redundancy.

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 simple read-only list tool with annotations covering safety and a fully documented single parameter, the description is nearly complete. The enumerated return fields compensate for the absence of an output schema; only pagination/ordering behavior is left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and the single agent_id parameter is fully documented there, including the 'local' sentinel and the omit-for-all behavior. The description says 'all' endpoints and never acknowledges the filter, so it adds nothing over the schema.

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

Purpose4/5

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

States a specific verb (List) and resource (monitored HTTP/TCP endpoints) and even names the return fields (status up/down, response time, uptime percentage). It implicitly contrasts with get_endpoint_history (current snapshot vs history) but never names that sibling, so differentiation relies on inference.

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

Usage Guidelines3/5

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

The word 'current' implies a point-in-time snapshot, which is a soft signal that historical data belongs to get_endpoint_history, but no alternative or when-not condition is stated. Usage is inferable but never spelled out.

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

list_escalation_policiesA
Read-only

List all escalation policies with their filters and levels. Requires the Pro edition.

NameRequiredDescriptionDefault
active_onlyYesFilter to active policies only

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safe-read nature is covered. The description adds the edition entitlement constraint, which is real supplemental context, but says nothing about result volume, pagination, or what happens if the edition requirement is unmet.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core action and free of filler. The phrase 'with their filters and levels' earns its place by describing return content, though it borders on verbosity.

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 simple one-parameter list tool whose safety profile is covered by annotations, the description supplies the key gating fact (Pro edition) and the returned fields. Missing only minor details like pagination or empty-result behavior.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter 'active_only' is fully documented there. The description adds no filtering semantics beyond the schema, so the baseline 3 for schema-heavy coverage applies.

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

Purpose4/5

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

States a specific verb and resource ('List all escalation policies') plus what is returned ('their filters and levels'). It is not differentiated from the sibling get_escalation_policy, but the 'list all' phrasing implies a collection read versus a single-item fetch.

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 Pro-edition prerequisite is stated, which is useful gating information. However, there is no explicit guidance on when to use this versus get_escalation_policy or set_escalation_policy_active, so selection guidance is only implied.

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

list_heartbeatsA
Read-only

List all heartbeat/cron monitors with their current status, last ping time, expected period, and grace period.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local' for heartbeats received directly by the server. Omit to return all.

TDQS

A3.5/5.0
Behavior4/5

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

readOnlyHint=true already declares the safety profile, and the description adds value by naming the exact return contents (current status, last ping time, expected/grace period). No pagination or ordering behavior is disclosed, but the return-field disclosure is meaningful given there is no output schema.

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

Conciseness4/5

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

A single efficient sentence, front-loaded with the verb and resource, with zero redundant text. It could integrate a filtering hint but is well-sized.

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

Completeness4/5

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

For a one-parameter read-only list tool with no output schema, the description covering the returned fields plus the annotation covering safety makes it essentially complete. Minor gap is the absence of any usage/alternative context.

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

Parameters3/5

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

Schema coverage is 100% for the single agent_id parameter, including the 'local' enum-like value, so the schema carries the semantics. The description adds nothing about the parameter; baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('List') and resource ('heartbeat/cron monitors') and enumerates the fields returned (status, last ping, period, grace). This clearly distinguishes it from siblings like list_alerts or list_agents, though it doesn't explicitly name a competing tool.

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?

The description offers no guidance on when to use this versus alternatives (e.g., get_trigger, pause_monitor) or any prerequisites. It also doesn't mention the agent_id filtering option, leaving usage context entirely to the schema.

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

list_kubernetes_namespacesA
Read-only

List Kubernetes namespaces known to maintenant across monitored clusters.

NameRequiredDescriptionDefault
agent_idNoFilter by agent/cluster UUID, or 'local'. Omit for all.

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already establishes the safety profile, so the description only needs to add context. It adds the useful fact that results span all monitored clusters, but says nothing about whether unmonitored or stale clusters appear, ordering, or result size for large fleets.

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

Conciseness4/5

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

One front-loaded sentence with no filler or repetition of the tool name. It is borderline under-specified rather than bloated, but every word earns its place.

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 single-optional-parameter read-only list tool with no output schema and full schema coverage, almost everything an agent needs is present. The only real gap is not stating what a namespace entry contains or how clusters are attributed in the response.

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

Parameters3/5

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

Schema coverage is 100% and the single optional agent_id parameter is fully documented in-schema including the 'local' sentinel and omit-for-all behavior. The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose4/5

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

Specific verb (List) plus resource (Kubernetes namespaces) with a scoping clause ('across monitored clusters'), which cleanly separates it from list_kubernetes_nodes/pods/workloads siblings. It never explicitly names an alternative, but the resource distinction is unambiguous.

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

Usage Guidelines3/5

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

Usage is only implied: an agent infers you call this to enumerate available namespaces before drilling into pods or workloads. There is no explicit when-to-use guidance, no mention of prerequisites (agent registration/monitoring) and no exclusions relative to the many other list_* siblings.

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

list_kubernetes_nodesA
Read-only

List Kubernetes nodes with their roles, conditions, capacity and running pod counts.

NameRequiredDescriptionDefault
agent_idNoFilter by agent/cluster UUID, or 'local'. Omit for all.

TDQS

A3.8/5.0
Behavior4/5

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

readOnlyHint=true already establishes the safety profile, so the description's added value is the disclosure of result contents (roles, conditions, capacity, pod counts), which matters because no output schema exists. It does not mention whether results are live or cached, or whether large clusters are truncated.

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?

One front-loaded sentence with no filler; the resource and the returned fields are stated immediately and nothing is redundant.

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

Completeness4/5

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

For a simple, read-only list tool with a fully documented single optional parameter and no output schema, the description covers purpose and result shape adequately. Minor gaps remain on scope (cluster-wide vs filtered) and result-size behavior, but nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

The single agent_id parameter is fully documented in the schema, including the 'local' value and the omit-for-all behavior, so the description needs to add little. It adds nothing beyond the schema baseline, which is acceptable at 100% coverage.

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

Purpose4/5

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

Specific verb+resource ('List Kubernetes nodes') plus the fields returned (roles, conditions, capacity, pod counts). The resource noun alone separates it from list_kubernetes_pods, list_kubernetes_workloads, and list_swarm_nodes, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by the resource name — an agent can infer this is the right call when node-level data is needed. There is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as list_kubernetes_pods for pod-level detail.

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

list_kubernetes_podsA
Read-only

List Kubernetes pods with their status, restart count and node, optionally filtered by namespace, workload, node or status.

NameRequiredDescriptionDefault
nodeNoFilter by node name
statusNoFilter by pod status phase
agent_idNoFilter by agent/cluster UUID, or 'local'. Omit for all.
workloadNoFilter by owning workload ID
namespacesNoRestrict to these namespaces

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds value by naming the per-pod fields returned, but says nothing about result limits, pagination, default ordering, or behavior when a filter matches nothing — relevant for a list operation over a potentially large cluster.

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

Conciseness5/5

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

A single front-loaded sentence: resource and returned fields first, filters second. No redundancy or filler.

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

Completeness3/5

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

With no output schema, the description usefully discloses the returned fields, which is the main thing an agent needs. However, for a zero-required-parameter list tool over a potentially large resource, the absence of any note on result volume, pagination, or the agent_id scope leaves a meaningful gap.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter including node, status, agent_id, workload and namespaces is already documented. The description restates four of the five filters but omits agent_id, and adds no meaning (e.g. whether status matches a phase name exactly) beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("List Kubernetes pods") and names the fields returned: status, restart count, node. Clear purpose, but it does not distinguish itself from sibling listers such as list_kubernetes_nodes or list_kubernetes_workloads beyond the resource noun.

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 phrase "optionally filtered by namespace, workload, node or status" implies when this tool applies, and all filters being optional signals it can be called bare to list everything. No explicit exclusions or alternatives (e.g. when to use list_kubernetes_workloads instead) are given.

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

list_kubernetes_workloadsA
Read-only

List Kubernetes workloads (Deployments, StatefulSets, DaemonSets...) grouped by namespace, with ready/desired replica counts and status.

NameRequiredDescriptionDefault
agent_idNoFilter by agent/cluster UUID, or 'local'. Omit for all.
namespacesNoRestrict to these namespaces

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description then adds genuine behavioral value by disclosing the shape of the result: workloads grouped by namespace with ready/desired replica counts and status — important since no output schema exists. It omits pagination/limits and whether the call hits a live cluster API.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the workload kinds appear in the parenthetical right where they disambiguate scope, and the returned fields follow immediately. Nothing in it is redundant ceremony.

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 simple two-parameter, read-only list tool with full schema coverage and no output schema, the description supplies the missing return-value picture (grouping and replica/status fields). Only minor gaps remain — result size, pagination, and freshness of the data — none of which block a correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with agent_id (including the 'local' sentinel and omit-for-all behavior) and namespaces both fully documented in the schema. The description adds only the loose notion of namespace grouping, which does not extend either parameter's semantics, so the baseline of 3 applies.

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

Purpose4/5

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

Uses a specific verb (List) plus a named resource (Kubernetes workloads) and enumerates the concrete kinds covered (Deployments, StatefulSets, DaemonSets), which implicitly separates it from siblings like list_kubernetes_pods and list_kubernetes_nodes. It stops short of explicitly naming those siblings, so an agent must infer the boundary rather than read it.

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 never states when to use this over list_kubernetes_pods, list_kubernetes_namespaces, or list_kubernetes_nodes, and offers no exclusions. Usage is only implied by the resource type — an inventory/overview call — which is workable but leaves routing ambiguity for closely related sibling tools.

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

list_risk_scoresA
Read-only

List image update risk scores per container (0-100) with their risk level. Requires the Personal edition.

NameRequiredDescriptionDefault
container_idNoInternal container ID; omit to list all

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context about edition availability and the score/risk-level shape, but it does not discuss pagination, ordering, empty-result behavior, or rate limits.

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 short sentences with no wasted phrasing. The primary action and return shape are front-loaded, followed by the edition requirement.

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 simple read-only listing tool with full schema coverage and annotations, the description is largely complete: it covers what is listed, score range, risk level, and edition requirement. Minor gaps remain around result ordering or pagination, but the core invocation information is present.

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

Parameters3/5

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

Schema description coverage is 100%, and the single optional container_id parameter is already documented as omitting to list all. The description's phrase 'per container' aligns with the schema but adds no syntax or formatting detail beyond it, making the baseline 3 appropriate.

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

Purpose4/5

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

The description names a specific verb and resource: list image update risk scores per container, and it states the score range and accompanying risk level. It is clear what the tool returns, but it does not explicitly distinguish itself from sibling list/get tools beyond the unique risk-score subject.

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

Usage Guidelines3/5

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

Usage is implied by the list-risk-scores purpose, and the description adds a meaningful prerequisite: it requires the Personal edition. However, it does not say when to choose this over related security or CVE listing tools, nor does it provide exclusions or alternatives.

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

list_swarm_nodesA
Read-only

List Docker Swarm nodes with their role, status, availability and task count.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local'. Omit for all.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safe read-only nature is covered. The description adds useful context by naming the fields returned, but it does not cover pagination, authentication, or any quirks of the listing operation.

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

Conciseness5/5

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

A single front-loaded sentence with no wasted words. It immediately states the resource and the information returned.

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 simple list tool with one optional parameter, no output schema, and a readOnly annotation, the description is nearly complete. It names the returned fields, though it could mention the agent_id filter or pagination for full completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the single optional agent_id parameter is fully documented in the schema. The description adds no parameter meaning beyond what the schema already provides, which is acceptable at baseline.

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

Purpose5/5

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

States a specific verb and resource ('List Docker Swarm nodes') and enumerates the returned fields (role, status, availability, task count). The 'Docker Swarm nodes' resource clearly distinguishes it from sibling list tools for swarm services, swarm tasks, Kubernetes nodes, and containers.

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 purpose implies when to use it—when you need to see swarm node details—but there is no explicit guidance on alternatives or exclusions. It does not, for example, distinguish when to use this versus get_swarm_info or list_swarm_tasks.

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

list_swarm_servicesB
Read-only

List Docker Swarm services with their image, mode, and desired/running replica counts.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local'. Omit for all.

TDQS

B3.3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's burden is lower. It usefully discloses the shape of the result (image, mode, desired vs running replicas), which substitutes for the absent output schema, but says nothing about ordering, failure modes outside swarm mode, or result size.

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?

One sentence, front-loaded with the verb and resource, with the returned-field preview attached in the same clause. No filler, no redundancy.

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

Completeness3/5

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

For a one-parameter read-only list tool the description plus annotations cover the essentials, and the mention of returned fields compensates for the missing output schema. It is still silent on environment prerequisites and on what an empty or failed result means, which matters for a swarm-specific call.

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

Parameters3/5

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

Schema coverage is 100% on the single agent_id parameter, including the 'local' special value and the omit-for-all behavior, so the schema carries the semantics. The description adds nothing about the filter, which is acceptable at this coverage level.

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

Purpose4/5

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

The description states a specific verb and resource ("List Docker Swarm services") and even previews the returned fields (image, mode, replica counts), so it is clearly distinct from list_swarm_nodes and list_swarm_tasks. It stops short of explicitly naming those siblings as alternatives, so it lands at 4 rather than 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites (e.g. the host must be a swarm manager), and no routing to alternatives such as list_swarm_tasks or list_swarm_nodes. The agent must infer that this tool is for service-level inventory purely from the word "services".

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

list_swarm_tasksA
Read-only

List Docker Swarm tasks (the running units of a service), optionally filtered by service, with their state and node.

NameRequiredDescriptionDefault
agent_idNoFilter by agent UUID, or 'local'. Omit for all.
service_idNoFilter by service ID. Omit for all tasks.

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context by defining tasks and noting that state and node are included, but it does not cover pagination, response shape, or any access 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?

It is a single efficient sentence with the core action front-loaded and a useful parenthetical definition. Every clause contributes to understanding the 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?

For a simple list tool with only two optional parameters, full schema coverage, and a readOnly annotation, this is mostly complete. It also mentions the returned state and node, though it could note pagination or ordering behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already well documented in the schema. The description only echoes the service filter and does not mention the agent_id filter, so it adds little beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource ('List Docker Swarm tasks') and clarifies that tasks are the running units of a service, including returned state and node. It is clear on its own, but it does not explicitly distinguish itself from nearby siblings like list_swarm_services or get_swarm_info.

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

Usage Guidelines3/5

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

It says tasks can be optionally filtered by service and that omission returns all tasks, which gives implied usage. However, it does not explain when to use this tool instead of list_swarm_services, list_swarm_nodes, or get_swarm_info.

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

list_triggersA
Read-only

List all alert triggers (filter rules + channel destinations).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe read, so the description's burden is lower. It adds useful domain context about what a trigger contains, but says nothing about result size, ordering, or pagination behavior for a bulk listing.

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

Conciseness5/5

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

A single sentence with zero waste, front-loaded with the action and resource, and the clarifying parenthetical pays for itself by defining "trigger".

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

Completeness4/5

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

For a zero-parameter read-only list tool with no output schema, the description covers what is returned at a conceptual level and the annotations cover the safety profile. Only result volume/ordering is unaddressed, which is minor here.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The parenthetical explanation of trigger composition is a bonus, not a substitute for parameter documentation.

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

Purpose4/5

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

States a specific verb and resource ("List all alert triggers") and then clarifies what a trigger is — "filter rules + channel destinations" — which is genuinely informative domain context. It does not explicitly distinguish itself from get_trigger or create_trigger, but "List all" versus a singular get is reasonably self-evident.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the enumeration path for triggers, while get_trigger handles a single one. However, the description never names an alternative or states when not to use it, so the agent must infer the routing from sibling names alone.

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

pause_monitorA

Pause a heartbeat monitor to temporarily stop alerting. Only heartbeat monitors are supported.

NameRequiredDescriptionDefault
monitor_idYesMonitor ID to pause
monitor_typeYesType of monitor, only heartbeat is supported

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses the core effect and temporary nature, but does not specify permissions required, what happens to already-triggered alerts, idempotency, or what the response contains.

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 short sentences, front-loaded with the action and effect, followed by the key constraint. No wasted wording.

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

Completeness3/5

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

For a simple two-parameter mutation with no output schema, the description covers purpose and supported scope. However, with no annotations it leaves meaningful behavioral gaps around permissions and post-pause effects.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented. The description reinforces the heartbeat-only constraint for monitor_type but adds no syntax, format, or identifier details beyond the schema.

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

Purpose5/5

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

The description names a specific verb and resource: 'Pause a heartbeat monitor.' It also states the effect ('temporarily stop alerting') and the supported scope ('Only heartbeat monitors'), making the action clear relative to the sibling resume_monitor tool.

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

Usage Guidelines4/5

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

It gives a clear use case ('temporarily stop alerting') and an explicit restriction ('Only heartbeat monitors are supported'). It does not explicitly mention when to use resume_monitor instead, so it stops short of full alternative routing guidance.

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

resume_monitorA

Resume a paused heartbeat monitor. Only heartbeat monitors are supported.

NameRequiredDescriptionDefault
monitor_idYesMonitor ID to resume
monitor_typeYesType of monitor, only heartbeat is supported

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It reveals the state transition (paused to active) but says nothing about whether the call is idempotent, what happens if the monitor is not currently paused, what permissions or paid-tier gating may apply, or what is returned.

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

Conciseness5/5

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

Two short sentences with zero filler, and the core action is front-loaded before the scope caveat.

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

Completeness3/5

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

For a simple two-parameter state-changing tool with a fully documented schema and no output schema, the description covers what the tool does and its type restriction. However, with zero annotation coverage it should have addressed the failure modes and side effects of a mutation that an agent needs before invoking it.

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

Parameters3/5

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

Schema description coverage is 100%, so both monitor_id and monitor_type are already documented, including the heartbeat-only constraint. The description repeats that constraint but adds no new meaning such as ID format or accepted values beyond heartbeat.

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

Purpose4/5

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

The description uses a specific verb and resource ("Resume a paused heartbeat monitor") and adds a scope constraint ("Only heartbeat monitors are supported"). It does not explicitly name the sibling it pairs with (pause_monitor), so an agent gets a clear purpose but must infer the partner tool.

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?

"Resume a paused" establishes the precondition for use, and "Only heartbeat monitors are supported" is an explicit exclusion. It is weaker on alternatives – it never points to pause_monitor as the inverse operation or says what to do for non-heartbeat monitor types.

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

set_escalation_policy_activeA

Activate or deactivate an escalation policy; deactivating it stops its running escalations. Requires the Pro edition.

NameRequiredDescriptionDefault
idYesPolicy ID
activeYesNew active status

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the significant side effect that deactivating stops running escalations, plus the edition prerequisite. It does not cover authorization beyond edition, reversibility, or any error behavior, leaving gaps for a mutation 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?

A single compact sentence pair with zero filler; the destructive consequence is foregrounded immediately after the action, and the edition prerequisite is a tight trailing clause.

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 simple two-parameter toggle with full schema coverage and no output schema, the description supplies the two things the schema cannot: the side effect and the edition gate. Only the sibling-routing and error/permission nuance are missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both id and active. The description adds no further syntax, format, or constraint detail, which is acceptable but not additive – baseline 3 applies.

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

Purpose4/5

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

States a specific verb pair (activate/deactivate) and the exact resource (escalation policy), so an agent knows precisely what the tool mutates. It does not explicitly distinguish itself from siblings like update_escalation_policy or delete_escalation_policy, which keeps it just shy of a 5.

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

Usage Guidelines3/5

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

Usage is implied by the toggle semantics, and the Pro-edition prerequisite is a useful gating hint. However, it never says when to choose this over update_escalation_policy (which likely also touches status) or what to do if the edition requirement is unmet.

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

test_channelA

Send a test notification through a channel and report whether it was delivered.

NameRequiredDescriptionDefault
idYesChannel ID to test

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description does disclose the important behavior that a real notification is emitted (a side-effecting action, not a passive read) and that delivery status is returned. It omits failure semantics, whether the test message is visibly marked/counted in the channel, and any rate limits or auth requirements.

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?

One sentence, front-loaded with the action and ending with the observable result. No filler.

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

Completeness4/5

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

For a one-parameter tool with no output schema, the description covers the action and hints at the return (delivery status). It would be stronger if it stated what is returned on failure and whether the test notification is distinguishable from a real alert.

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?

Single parameter 'id' is fully documented in the schema (100% coverage), so the schema already carries the semantics. The description only reinforces that the target is a channel; it adds no format or sourcing guidance beyond the schema.

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

Purpose4/5

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

The description names a specific verb+resource combination (send a test notification through a channel) plus the outcome (report delivery). No sibling tool does a test-notification action, so it is distinguishable in practice, though it never explicitly contrasts itself with get_channel/list_channels/create_channel.

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?

Use case is implied — verify a channel works by sending a test notification — but there is no explicit when-to-use, when-not, or alternative routing (e.g. get_channel to inspect config vs this tool to prove delivery).

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

update_channelA

Update a notification channel. Omitted fields keep their stored value; a stored secret is never cleared this way.

NameRequiredDescriptionDefault
idYesChannel ID to update
urlNoNew destination
nameNoNew channel name
typeNoNew channel type
configNoNew non-secret per-type settings as a JSON object
secretNoNew credential. Omit to keep the stored one; it cannot be set to empty.
enabledNoWhether the channel accepts deliveries
headersNoNew extra HTTP headers as a JSON object of strings. Omit to keep the stored ones; {} clears them.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose two non-obvious mutation semantics: omitted fields retain stored values, and a stored secret is never cleared this way. It does not address permissions, validation on type changes, or what happens to dependent config when type is altered, which are meaningful gaps for an unannotated mutation 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?

Two short sentences, zero filler, with the core action first and the partial-update caveat immediately after. Nothing is wasted and nothing important is buried.

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

Completeness3/5

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

For an eight-parameter mutation tool with no annotations and no output schema, the description covers the key update semantics but omits return behavior, error conditions, and interaction between type and config/secret changes. It is adequate but leaves real gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all eight parameters are already documented per-field, establishing the baseline of 3. The description only restates the omit-to-keep semantics already present in individual parameter descriptions, adding no new per-parameter meaning.

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

Purpose4/5

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

States a specific verb and resource ("Update a notification channel") that clearly separates it from create_channel, delete_channel and get_channel. However, it says nothing about how it differs from other update_* siblings such as update_trigger or update_escalation_policy, so differentiation is by resource name only.

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 clause "Omitted fields keep their stored value" implies partial-update usage, which is useful context, but there is no explicit statement of when to use this versus create_channel or the other update tools, and no prerequisites or preconditions are given.

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

update_escalation_policyB

Update an existing escalation policy (name, filters, levels, active). Requires the Pro edition.

NameRequiredDescriptionDefault
idYesPolicy ID to update
nameYesPolicy name (1-120 chars)
activeYesWhether the policy is active
levelsYesEscalation levels (min 1, max 5)
filtersYesAlert matching filters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the Pro edition gating, which is genuinely useful. However it omits that all five parameters are required, meaning this is effectively a full replacement rather than a partial patch — an important behavioral trait for an update tool. It also says nothing about whether omitted/prior levels are replaced, side effects on running escalations, or error behavior.

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

Conciseness4/5

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

A single front-loaded sentence with the edition requirement as a second clause; every element earns its place. It is arguably too terse for a tool with nested object parameters, but there is no filler.

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

Completeness2/5

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

The tool has a complex nested schema, no output schema, and no annotations, so the description must compensate — yet it only lists field names. An agent gets no explanation of replacement semantics, interactions with the sibling set_escalation_policy_active, or what happens to in-flight escalation runs.

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

Parameters3/5

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

Schema description coverage is 100% and the nested levels/filters constraints (delay ranges, 1-5 levels, scope kinds, severities) are fully documented there. The description merely echoes the top-level field names, adding no semantics beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource (update an existing escalation policy) and names the mutable fields, which distinguishes it from create_/delete_/get_escalation_policy siblings. It does not explicitly contrast with set_escalation_policy_active, which overlaps on the 'active' field.

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?

'Update an existing escalation policy' implies a policy must already exist, and 'Requires the Pro edition' gives a precondition. But there is no explicit guidance on when to use this versus set_escalation_policy_active for a simple toggle, or versus delete+create.

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

update_incidentA

Post a status update to an existing status page incident. Requires the Personal edition.

NameRequiredDescriptionDefault
statusYesNew status: investigating, identified, monitoring, or resolved
messageYesUpdate message
incident_idYesIncident ID to update

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the mutation nature and the Personal-edition prerequisite, but says nothing about whether updates are idempotent, whether subscribers are notified, what happens to an already-resolved incident, or required permissions.

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 short sentences, zero filler, with the core action front-loaded ahead of the prerequisite. Nothing to trim.

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

Completeness3/5

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

For a three-parameter required mutation with no annotations and no output schema, the definition is minimally adequate: action and edition requirement are covered. It leaves open the effect on subscribers, status transition validity, and whether the tool fails on a resolved incident.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are documented in the schema, including the status value set. The description adds no meaning beyond 'status update' — no format hints for message, no constraints on incident_id.

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

Purpose4/5

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

Names a specific verb and resource: 'Post a status update to an existing status page incident,' which clearly separates it from create_incident in the sibling list. It does not explicitly contrast with any sibling, but the 'existing' qualifier implies the distinction.

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 when to use it (only for incidents that already exist) and states an edition prerequisite, but it names no alternatives and gives no explicit when-not guidance. Usage is inferable rather than spelled out.

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

update_triggerB

Update an existing alert trigger (last-write-wins). Scope filters require the Personal edition.

NameRequiredDescriptionDefault
idYesTrigger ID to update
nameYesTrigger name (1-120 chars)
enabledNoWhether the trigger is active. Defaults to true on creation; omitted on update, the current value is kept.
channel_idsYesNotification channel IDs (at least one required)
filter_scopesYesCSV scope filter (e.g. 'container:42,endpoint:7'). Needs the advanced filters capability. Empty matches everything.
filter_sourcesYesCSV source filter (e.g. 'container,endpoint'). Empty matches everything.
filter_severitiesYesCSV severity filter (e.g. 'critical,warning'). Empty matches everything.
notify_on_resolveNoRelay recovery (resolved) notifications, default true

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose two useful traits: last-write-wins concurrency semantics and the edition requirement for scope filters. It omits important mutation behavior — whether unspecified required fields overwrite existing values, permission requirements, and error behavior — so it is partial rather than thorough.

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

Conciseness4/5

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

Two tight clauses with the core action front-loaded and the constraint second; no filler. Slightly clipped to the point that the edition note reads as an unexplained caveat, but overall efficient.

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

Completeness3/5

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

For a 6-required-parameter mutation tool with no annotations and no output schema, the schema covers defaults well, but the description never addresses full-replacement semantics or what a successful call returns/changes. Adequate but with clear gaps for an agent reasoning about side effects.

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

Parameters3/5

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

Schema description coverage is 100%, including CSV formats, defaults, and 'empty matches everything', so the baseline of 3 applies. The description adds only the edition caveat tied to filter_scopes and no other parameter-level meaning beyond the schema.

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

Purpose4/5

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

States a specific verb+resource ('Update an existing alert trigger'), which cleanly separates it from create_trigger, delete_trigger, and get_trigger in the sibling list. It doesn't go further to distinguish from update_channel/update_escalation_policy, but the resource noun does that implicitly.

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

Usage Guidelines3/5

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

Usage is implied by the name and the '(last-write-wins)' parenthetical, and the Personal-edition constraint on scope filters is a genuine gating note. However, there is no explicit when-to-use guidance, no mention of prerequisites (an existing trigger id), and no statement of what to use instead for partial/field-level edits.

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

Tool Schema Changelog

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

  1. 51 tool updatesv1.10.1
    • First observedacknowledge_alert
    • First observedcreate_channel
    • First observedcreate_escalation_policy
    • First observedcreate_incident
    • First observedcreate_maintenance
    • First observedcreate_trigger
    • First observeddelete_channel
    • First observeddelete_escalation_policy
    • First observeddelete_trigger
    • First observedget_channel
    • First observedget_container
    • First observedget_container_logs
    • First observedget_edition
    • First observedget_endpoint_history
    • First observedget_escalation_policy
    • First observedget_escalation_run
    • First observedget_health
    • First observedget_resources
    • First observedget_security_insights
    • First observedget_security_posture
    • First observedget_swarm_info
    • First observedget_top_consumers
    • First observedget_trigger
    • First observedget_updates
    • First observedlist_agents
    • First observedlist_alert_escalation_runs
    • First observedlist_alerts
    • First observedlist_certificates
    • First observedlist_channels
    • First observedlist_containers
    • First observedlist_cve
    • First observedlist_endpoints
    • First observedlist_escalation_policies
    • First observedlist_heartbeats
    • First observedlist_kubernetes_namespaces
    • First observedlist_kubernetes_nodes
    • First observedlist_kubernetes_pods
    • First observedlist_kubernetes_workloads
    • First observedlist_risk_scores
    • First observedlist_swarm_nodes
    • First observedlist_swarm_services
    • First observedlist_swarm_tasks
    • First observedlist_triggers
    • First observedpause_monitor
    • First observedresume_monitor
    • First observedset_escalation_policy_active
    • First observedtest_channel
    • First observedupdate_channel
    • First observedupdate_escalation_policy
    • First observedupdate_incident
    • First observedupdate_trigger

TDQS

B3.4/5.0

Scored across 51 tools

Disambiguation4/5

Most tools are cleanly separated by resource + action (list_containers/get_container/get_container_logs, swarm vs kubernetes vs endpoint resources). A few clusters come close: get_security_insights vs get_security_posture, and get_updates vs list_cve vs list_risk_scores all touch image risk from different angles. Descriptions disambiguate these well, so collisions should be rare.

Naming Consistency5/5

Every tool follows a strict snake_case verb_noun pattern (list_*, get_*, create_*, update_*, delete_*, plus set_/pause_/resume_/acknowledge_/test_ verbs used deliberately). No camelCase or stylistic drift anywhere in the 51 names.

Tool Count2/5

51 tools is heavy even for a multi-domain monitoring platform, and several families could be consolidated (six escalation-policy tools, three swarm list tools, four kubernetes list tools, four image-risk tools). Many tools also differ only by a boolean filter that could be a parameter, inflating the surface an agent must scan.

Completeness3/5

Full lifecycle exists for channels, triggers, and escalation policies, but there are notable dead ends: alerts can be listed and acknowledged but not resolved or silenced despite silenced state existing; heartbeats and endpoints can be listed/paused but not created; incidents and maintenance can be created but not listed, resolved, or cancelled.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A comprehensive Model Context Protocol (MCP) server for Grafana, Prometheus, Kafka UI, and Datadog. Features a secure "Bring Your Own Key" (BYOK) architecture where credentials stay local. Provides tools for metrics querying, dashboard inspection, Kafka lag monitoring, and unified health checks.
    23
    13 npm
    4
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Server Monitor MCP is a Linux server inspection service with web backend and MCP interface. It allows you to manage SSH hosts and query server metrics via natural language.
    -