Skip to main content
Glama
openITCOCKPIT

openITCOCKPIT MCP Server

Official

openITCOCKPIT MCP Server

An MCP server that exposes an openITCOCKPIT monitoring instance to an LLM client: host and service status, log entries, downtimes, acknowledgements, check history, software inventory and pending updates - plus optional, off-by-default tools that change the monitoring configuration.

  • Requires openITCOCKPIT 5.6 or newer. See Compatibility.

  • 39 tools, 24 read-only and 15 write.

  • Write tools are disabled by default and are not even registered until you enable them.

  • Names, never IDs. Every tool takes hostnames, template names and container paths; the server resolves them itself.

  • Scope-checked writes. References are validated against the target container before anything is sent, which openITCOCKPIT's own API does not do.


Quickstart

cp .env.example .env          # fill in the two secrets, see Configuration
docker compose up --build

Then point your client at http://localhost:8000/mcp with the bearer token from your .env. Compose reads that same file for the published port, so setting OITC_PORT there moves both sides at once.


Related MCP server: Overwatch MCP

Configuration

The server needs two separate secrets and refuses to start if they are the same value:

Secret

Who presents it to whom

MCP_AUTH_TOKEN

Clients → this server. A random token you generate.

OITC_APIKEY

This server → openITCOCKPIT. The API key of a dedicated, least-privilege openITCOCKPIT user.

python -c "import secrets; print(secrets.token_urlsafe(32))"   # generate MCP_AUTH_TOKEN

Copy .env.example to .env and fill it in. Precedence, highest first: CLI flags → environment variables → .env → defaults. .env is gitignored and must never be committed.

Setting

Env var

Default

Client bearer token

MCP_AUTH_TOKEN

(required for http)

openITCOCKPIT API key

OITC_APIKEY

(required)

openITCOCKPIT base URL

OITC_BASEURL

(required)

Verify the instance's TLS certificate

OITC_VERIFY_TLS

true

CA bundle for a self-signed instance

OITC_CA_BUNDLE

(unset)

Request timeout, seconds

OITC_TIMEOUT_SECONDS

20

Register the write tools

OITC_ENABLE_WRITE_TOOLS

false

Cache scope-validation lookups

OITC_SCOPE_CACHE_ENABLED

true

Scope cache TTL, seconds

OITC_SCOPE_CACHE_TTL_SECONDS

30

Summarise the text half of a result

OITC_COMPACT_CONTENT

false

Transport, http or stdio

OITC_TRANSPORT

http

Bind address / port (http)

OITC_HOST / OITC_PORT

0.0.0.0 / 8000

Log level

OITC_LOG_LEVEL

INFO

Print the start-up banner

OITC_SHOW_BANNER

true


Connecting a client

HTTP (server runs as a service)

Clients send Authorization: Bearer <MCP_AUTH_TOKEN>. The comparison is constant-time; a missing, malformed or wrong token gets HTTP 401.

{
  "url": "http://your-mcp-server:8000/mcp",
  "headers": { "Authorization": "Bearer your-mcp-auth-token" }
}

stdio (client spawns the server)

No HTTP layer, so no MCP_AUTH_TOKEN is needed.

{
  "command": "oitc-mcp",
  "args": ["--transport", "stdio"],
  "env": {
    "OITC_APIKEY": "your-openitcockpit-api-key",
    "OITC_BASEURL": "https://openitcockpit.example.org"
  }
}

Installation

Docker

docker run -d -p 8000:8000 --env-file .env openitcockpit/mcp-server:0.1.0

Which tag? The tag is this server's own version. 0.1.0 never changes, so a redeploy gives you exactly what you tested - pin that. latest is the only other tag and it moves under you. The tag says nothing about your openITCOCKPIT version; one image serves 5.6 and newer. See Versioning.

Or with individual variables, for CI or a secret manager:

docker run -d -p 8000:8000 \
  -e MCP_AUTH_TOKEN="..." \
  -e OITC_APIKEY="..." \
  -e OITC_BASEURL="https://openitcockpit.example.org" \
  openitcockpit/mcp-server:0.1.0

No secret is baked into the image; configuration is read from the environment at start-up.

From source

pip install .
cp .env.example .env
oitc-mcp

oitc-mcp --help lists the flags that override the configuration (--transport, --host, --port, --log-level).


Tools

39 tools, 24 read-only and 15 write. Full signatures and behaviour: read tools · write tools.

Every tool carries MCP annotations, so a client can tell a read from a write before calling it, and takes names rather than database IDs - the server resolves them itself.

A few things you can ask for, and what answers them:

Ask

Tools

"What is broken right now?"

list_services_by_state, list_log_entries

"Do we already know about db-01?"

get_host_info, list_host_acknowledgements, list_host_downtimes

"Why did web-03 flap last night?"

list_host_state_changes, list_host_checks

"Which hosts need security patches?"

list_pending_security_updates

"Is the monitoring itself keeping up?"

get_monitoring_engine_stats

"Which templates could web-05 use?"

get_allowed_elements_for_container

"Add web-05 with the Linux template"

create_host

Write tools are registered only when OITC_ENABLE_WRITE_TOOLS=true. They change your monitoring configuration.

docs/openitcockpit-api-notes.md documents the API behaviour this server works around - which endpoints omit newly created objects, the two names a service template carries, and the response shapes.


Skills

skills/ ships prompt material that teaches a model how to chain these tools, plus a system prompt for an openITCOCKPIT assistant.

Skill

Use it for

system-prompt.md

Baseline assistant behaviour

system-prompt.de.md

The same, in German

oitc-incident-triage

"What is broken?", in the order that rules things out

oitc-host-onboarding

Adding a host and its services without scope rejections

oitc-patch-review

Security and update overview across the estate

oitc-config-change

Changing an object without blanking fields

oitc-capabilities

What the server cannot do, so a model does not invent it

The oitc-* folders follow the Agent Skills layout, so cp -r skills/oitc-* ~/.claude/skills/ is enough for Claude Code and Claude Desktop; for other clients they are plain Markdown. See skills/README.md.


Security

IMPORTANT

Every client that passes the bearer check acts with the permissions of theone openITCOCKPIT user the API key belongs to. There is no per-client identity. Create that key for a dedicated, least-privilege user and treat MCP_AUTH_TOKEN as a shared secret.

  • The http transport serves plain HTTP. Terminate TLS at a reverse proxy or keep the server on a trusted network.

  • MCP_AUTH_TOKEN must differ from OITC_APIKEY; the server enforces this so the openITCOCKPIT key is never handed to a client.

  • TLS verification against openITCOCKPIT is on by default. For a self-signed instance set OITC_CA_BUNDLE rather than disabling verification.

  • Authentication is a shared static token, not OAuth 2.1 - a deliberate tradeoff for a server that authenticates as a single service user. See src/openitcockpit_mcp/auth.py.


Versioning

The image tag is this server's version, from MCP_VERSION. Two tags per release, and no others:

Image tag

Mutable?

Use for

0.1.0

no

Pin this. Exactly this build.

latest

yes

The newest release, whatever it is

Semver: patch for fixes, minor for added tools, major for anything that breaks a client. But this is still 0.x - the tool set is settling, so a minor bump may break one too. Pin the exact version and read the CHANGELOG before you move.

Compatibility

openITCOCKPIT 5.6 or newer - one image serves every supported release.

All 39 tools were exercised against live instances on the 5.6 line, and the openITCOCKPIT API is backwards compatible, so newer instances are expected to work. One caveat: list_installed_software, list_pending_updates and list_pending_security_updates need the openITCOCKPIT agent's package endpoints and fail with an API error where that feature is absent.


Development

python -m venv .venv && . .venv/bin/activate    # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
./scripts/checks-docker.sh    # ruff, mypy and pytest, exactly as CI runs them

The script runs the suite inside the image the Dockerfile is based on, so a local run and a CI run use the same Python. Individually: ruff check ., mypy, pytest (206 tests).

Adding a tool: write it in the matching module under tools/read/ or tools/write/, decorate it with @mcp.tool(title=..., annotations=...) using a preset from tools/annotations.py, and the subpackage's register() picks it up - anything under tools/write/ is gated by OITC_ENABLE_WRITE_TOOLS automatically. A new module goes into that subpackage's READ_MODULES / WRITE_MODULES tuple, and a new tool into the call table in tests/test_tools_smoke.py, which runs every tool once against stubbed responses.

Build the image yourself with docker build -t oitc-mcp-server ..

Available Tools

24 tools
get_container_treeContainer TreeA
Read-onlyIdempotent

Get the organizational structure (containers: tenants, locations, nodes) starting at the given container, including which hosts, host groups and service groups live directly under it. Leave container_name at 'root' for the top-level structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
container_nameNoroot

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: the result focuses on directly-contained objects and starts at the specified container. No contradiction with annotations.

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

Conciseness5/5

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

Two compact sentences, with the core purpose front-loaded and the root usage instruction placed at the end. No filler or redundant restating 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?

For a read-only, one-parameter tool with an output schema and full safety annotations, the description covers the essential behavior and the special root case. Nothing critical is missing for an agent to select and invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the parameter meaning. It explains that container_name is the starting container and that 'root' yields the top-level structure. It could add more detail about non-root value format, but for a single optional parameter the guidance is strong.

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

Purpose5/5

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

The description clearly names a specific verb ('Get') and resource ('organizational structure' of containers: tenants, locations, nodes), and specifies the scope: starting at a given container with hosts, host groups, and service groups directly beneath it. This makes it easily distinguishable from the sibling list_* tools.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool, including the important instruction to leave container_name at 'root' for the top-level structure. It does not explicitly name alternatives or state when not to use it, but the hierarchical container-tree purpose is evident.

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

get_host_infoHost InfoA
Read-onlyIdempotent

Detailed status of a host plus the services running on it.

hostname matches as a substring, so several hosts can come back; each entry carries its own services. Use list_services_by_state instead when you want failing services across the whole estate rather than one host's full inventory.

A host present in the configuration but not yet known to the monitoring engine is returned with monitored: false and no check results. This differs from the host not existing, which raises instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark readOnly/openWorld/idempotent/non-destructive. The description adds substantial behavior beyond that: substring matching may return several hosts, each with its own services; a configured-but-unmonitored host returns monitored:false with no check results; a non-existent host raises. This is exactly the kind of nuance the agent needs.

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 paragraphs, each with a job: core purpose, matching/alternative, edge case. No filler, and the most decision-relevant fact (substring match) 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?

With a single well-documented parameter, an output schema present, and annotations covering safety/idempotence, the description covers matching behavior, alternatives, and error semantics. Nothing needed 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?

Schema coverage is 100%, so baseline is 3, but the description adds important parameter behavior: hostname matches as a substring and can return multiple hosts. This is valuable, though it slightly conflicts with the schema's 'Exact host name' wording, which is why it doesn't get a 5.

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 pair: 'Detailed status of a host plus the services running on it.' It immediately differentiates from list_services_by_state by stating what this tool is not (estate-wide failure view), so an agent can select it correctly.

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

Usage Guidelines5/5

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

Explicitly says to use list_services_by_state instead when wanting failing services across the whole estate, and the input schema reinforces that hostname is required and there is no estate-wide form. It also points to sibling tools for obtaining a valid name.

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

get_monitoring_engine_statsMonitoring Engine HealthA
Read-onlyIdempotent

Health of the monitoring engine itself: how many hosts and services it watches, and its check throughput and latency.

Relevant when many unrelated checks fail at once: high check latency or a collapsed check rate means the engine is behind and its results are stale, which looks identical to a real outage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context by explaining that stale/lagging engine results can look like a real outage, which helps the agent interpret the numbers.

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 tightly written sentences: the first states what the tool returns, and the second justifies when it matters. No filler, and the key information is front-loaded.

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

Completeness5/5

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

For a read-only, no-input tool with an output schema present, the description provides the necessary purpose and diagnostic context. Nothing essential 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?

The input schema has no parameters, so there is nothing for the description to clarify at the parameter level. The description compensates by stating what the zero-argument call reports.

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 resource (the monitoring engine itself) and the exact data returned: watched hosts/services, check throughput, and latency. This clearly separates it from sibling tools focused on individual hosts, services, or logs.

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 an explicit trigger context: many unrelated checks failing at once, where the tool distinguishes engine lag from a real outage. It does not name alternative tools or state when not to use it, but the situational guidance is clear.

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

list_commandsCommandsA
Read-onlyIdempotent

Find monitoring commands (check, notification and event-handler commands) by name. An instance holds hundreds; pass name_filter with a substring to narrow the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
name_filterNoSubstring to search for in the name. Empty returns everything, capped by limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already communicate read-only, idempotent, non-destructive behavior. The description adds modest context about scale (hundreds per instance) and substring filtering, but does not disclose further behavioral traits such as pagination or ordering. This is above baseline but not rich.

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

Conciseness5/5

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

Two short sentences, with the core purpose front-loaded and the actionable filtering advice placed immediately after. Every word earns its place.

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

Completeness5/5

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

The tool is a simple filtered listing operation, fully covered by annotations and an output schema. The description contributes the essential scale cue ('holds hundreds') and filtering recommendation, leaving no material gap for an agent to call it correctly.

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?

Input schema already documents both parameters with 100% coverage, including defaults and meaning of empty name_filter. The description's 'pass name_filter with a substring' restates the schema rather than adding new semantic depth, so 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?

The description names a concrete verb-resource pair ('Find monitoring commands') and further specifies the resource by listing command types (check, notification, event-handler). This clearly distinguishes it from sibling list_* tools that deal with checks, states, or services.

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

Usage Guidelines4/5

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

It gives clear invocation context: an instance holds hundreds of commands, so callers should use name_filter with a substring to narrow results. It does not explicitly name alternatives or state when not to use the tool, hence not a 5.

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

list_contactgroupsContact GroupsA
Read-onlyIdempotent

List contact groups (named groups of contacts used for notifications).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, and the description adds no behavioral context beyond the bare 'List' operation. It does not contradict the annotations, but it also contributes no extra behavioral detail such as pagination behavior, filtering semantics, or return characteristics.

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

Conciseness5/5

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

The description is a single sentence with no wasted words, and the clarifying parenthetical earns its place by defining the resource. It is front-loaded with the action and resource, making it immediately scannable.

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

Completeness5/5

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

For a simple list operation with one well-documented optional parameter, a complete output schema, and strong safety annotations, the description is sufficient for correct invocation. Nothing critical is missing for an agent to use this tool effectively.

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 only parameter, 'limit', is fully documented with default, minimum, and maximum values. The description adds no extra parameter context, but the schema already carries the semantic weight, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clearly identified resource ('contact groups'), and the parenthetical ('named groups of contacts used for notifications') disambiguates it from sibling tools like list_contacts and list_hostgroups. It immediately tells an agent what resource is being operated on and why it matters.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as list_contacts or list_hostgroups. There is no mention of when this tool is preferred, what problem it solves relative to siblings, or any exclusions.

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

list_contactsContactsA
Read-onlyIdempotent

Find contacts (people who can be notified) by name. Pass name_filter with a substring to narrow the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
name_filterNoSubstring to search for in the name. Empty returns everything, capped by limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only the name-filtering behavior, which is already captured in the schema, and does not disclose additional runtime behavior such as pagination or timeout semantics beyond the schema; there is no contradiction.

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

Conciseness5/5

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

The description is two short sentences with no filler. The core purpose is front-loaded and the invocation hint ('Pass name_filter...') comes immediately after, making it easy for an agent to parse quickly.

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

Completeness5/5

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

For a simple two-parameter, read-only, idempotent tool with an output schema and 100% schema parameter coverage, this description is complete enough. Nothing material is missing that would prevent an agent from selecting and invoking the tool correctly.

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 schema already documents both name_filter (substring search, empty returns everything) and limit (defaults to 50, max 500). The description's 'name_filter with a substring' line adds no meaning beyond the schema, so it sits at the baseline for fully covered parameters.

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 ('Find contacts (people who can be notified) by name'), which clearly identifies what the tool returns and clarifies that it deals with individual notification contacts. It is clear and distinguishable from sibling list_* tools at a high level, though it does not explicitly name an alternative or exclusion.

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 the primary use case: look up notification contacts by name using name_filter. It offers no explicit when-to-use or when-not-to-use guidance relative to sibling tools such as list_contactgroups, so an agent is left to infer selection from the tool name and context.

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

list_host_acknowledgementsHost AcknowledgementsA
Read-onlyIdempotent

Acknowledgement history for one host: who acknowledged a problem, when, and with what comment.

Per host only - openITCOCKPIT exposes no estate-wide acknowledgement list. To find out whether current problems are already handled, take the hosts from list_services_by_state and call this for each one.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, non-destructive behavior. The description adds meaningful behavioral context beyond those annotations: the per-host limitation, the absence of an estate-wide form, and the specific acknowledgement fields returned (who, when, comment). No contradiction with annotations.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the purpose, the second adds the key limitation and usage workflow. Every sentence earns its place with no filler or redundancy.

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

Completeness5/5

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

Given rich annotations, a fully documented 2-parameter schema, and an output schema, the description covers the essential usage condition (per host), the workflow, and what the result contains. Nothing needed for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. The schema already documents hostname as exact and required with upstream sources, and limit as having default 50 and maximum 500. The tool description reinforces this context but does not add significant new parameter-level meaning.

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 opening sentence states the exact object and content: 'Acknowledgement history for one host: who acknowledged a problem, when, and with what comment.' It also distinguishes itself from an estate-wide listing via 'Per host only', making the tool's scope immediately unambiguous.

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

Usage Guidelines5/5

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

The description explicitly says this tool is per-host only, explains that no estate-wide acknowledgement list exists, and gives a concrete workflow: take hosts from list_services_by_state and call this tool for each one. This clearly tells an agent when and how to use it.

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

list_host_checksHost Check HistoryA
Read-onlyIdempotent

Individual check executions for a host, newest first: output, latency and execution time per run.

Returns one row per check execution. list_host_state_changes covers only the points where the state changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many hours back to look.
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful behavioral context by specifying ordering (newest first), per-execution row cardinality, and the fields included (output, latency, execution time). This goes beyond what annotations alone convey.

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 compact sentences with no filler. The core behavior and ordering are front-loaded, and the sibling differentiation is placed at the end without disrupting the main message.

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

Completeness5/5

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

Given the rich annotations, 100% parameter schema coverage, and presence of an output schema, nothing critical is missing. The description covers purpose, ordering, cardinality, and the key alternative, making the tool fully actionable for an agent.

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 already documents hostname as required/exact, hours as a lookback window, and limit with default/maximum. The description's mention of 'per run' and 'one row per check execution' adds mild context about what the limit counts, but the schema carries the main parameter burden.

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

Purpose5/5

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

The description clearly states the tool lists individual check executions for a host, and explicitly contrasts with list_host_state_changes, which only covers state-change points. This gives the agent a precise, distinctive understanding of the tool's purpose.

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

Usage Guidelines5/5

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

The description identifies the relevant sibling alternative (list_host_state_changes) and explains the difference: this tool returns every check execution while the sibling only returns state changes. This is a clear when-to-use/when-not-to-use signal.

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

list_host_downtimesHost DowntimesA
Read-onlyIdempotent

Scheduled and running downtimes for hosts. Leave hostname empty for all hosts. Set only_active=True for downtimes running right now, rather than also those scheduled for later.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameNoRestrict to this host. Empty means every host.
only_activeNoTrue returns only downtimes running right now, not those scheduled for later.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no additional caveats about behavior such as result ordering, pagination, or response shape. This is acceptable given annotation coverage.

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 with no filler. The purpose is front-loaded, followed by two directly actionable usage tips. Every sentence earns its place.

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

Completeness5/5

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

The description, combined with full schema documentation, output schema, and read-only annotations, gives an agent everything needed to safely and correctly invoke the tool. No critical behavioral or usage information is missing for a read-only list operation.

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%, but the description adds practical semantics: it explains the effect of an empty hostname and clarifies the meaning of only_active as 'running right now' rather than simply restating the schema. This aids an agent in choosing the correct parameter values.

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

Purpose5/5

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

The description states a specific verb ('list') and resource ('host downtimes'), and clarifies it covers both scheduled and running downtimes. The tool name and description together make it distinct from sibling tools like list_service_downtimes and list_host_acknowledgements.

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

Usage Guidelines4/5

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

The description gives clear actionable guidance: leave hostname empty for all hosts, and use only_active=True to get only current downtimes. It does not explicitly name sibling alternatives or say when not to use this tool, but the parameter-level usage instructions are strong and contextually sufficient.

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

list_hostgroupsHost GroupsA
Read-onlyIdempotent

List host groups with their name and description. Use this to find a group's exact name before filtering hosts or services by it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns name and description and frames it as a lookup for exact names, but it does not disclose behavior such as ordering, pagination default, or open-world incompleteness beyond what annotations already imply.

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 deliver the purpose, output scope, and a concrete use case with no filler. The main action is front-loaded and every phrase contributes value.

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

Completeness5/5

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

For a simple, one-optional-parameter list tool with a rich output schema and strong annotations, the description is complete. It tells the agent what the tool returns, why to use it, and the schema covers limit behavior, while annotations cover safety and open-world semantics.

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 the single 'limit' parameter fully documented including default and maximum. The description adds no parameter-specific meaning, but because the schema already carries the full burden, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('List'), a clear resource ('host groups'), and the returned fields ('name and description'). It also differentiates from sibling tools by explicitly tying it to finding a group's exact name before filtering, which is distinct from list_servicegroups and other list tools.

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

Usage Guidelines4/5

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

The description gives a clear use case: 'Use this to find a group's exact name before filtering hosts or services by it.' It does not explicitly mention when not to use it or name alternative tools, but the context is clear enough for an agent to decide when this is the appropriate lookup.

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

list_host_state_changesHost State ChangesA
Read-onlyIdempotent

Only the entries where a host's state changed, i.e. the timeline of an incident rather than every check run.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many hours back to look.
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.1/5.0
Behavior4/5

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

The description adds meaningful behavioral detail beyond the readOnly and idempotent annotations by explaining that the output is a filtered subset of state-change entries, not all checks. It does not cover ordering or pagination, but annotations already cover the safety profile, so the added filtering semantics is valuable and non-contradictory.

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

Conciseness5/5

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

The description is a single sentence that immediately communicates the essential filtering behavior and incident-timeline use case. There is no filler, and the core distinction 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?

Given full schema coverage, rich annotations, and an output schema, the one-sentence description is sufficient for an agent to understand what the tool returns and when to use it. The 'rather than every check run' contrast provides the key selection context without needing a longer 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%, so the schema already documents all three parameters including defaults and the required exact hostname. The main description adds no parameter-level information, which matches the baseline score of 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?

The description clearly identifies the resource as host state changes and specifies that only entries where a host's state changed are returned, contrasting with 'every check run.' This differentiates it from sibling list_host_checks, though the verb 'list' is only implied by the tool name rather than stated in the description.

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

Usage Guidelines4/5

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

The description gives clear context: use this tool to see the timeline of an incident rather than every check run. It does not explicitly name alternative tools, but the contrast with check runs points toward the appropriate sibling and gives enough guidance for selection.

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

list_hosttemplatesHost TemplatesA
Read-onlyIdempotent

Find host templates (reusable check/notification configurations for hosts) by name. Pass name_filter with a substring to narrow the result. get_allowed_elements_for_container reports which templates a specific container accepts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
name_filterNoSubstring to search for in the name. Empty returns everything, capped by limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, open-world, and non-destructive; the description adds the behavioral context that this is a name-based list/search operation and that container acceptance is handled by a separate tool. No side effects or hidden failure modes are suggested, and nothing contradicts the annotations.

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

Conciseness5/5

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

Three concise sentences: definition, parameter usage, and related-tool pointer. Information is front-loaded and every sentence earns its place with no filler.

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

Completeness5/5

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

For a simple, zero-required-parameter listing tool with a full input schema and output schema, the description covers the domain, the filtering mechanism, and the relevant alternative. 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?

Schema coverage is 100%, so limit and name_filter are already fully documented. The description restates the substring-narrowing behavior of name_filter but adds no new semantic layer beyond what the schema provides, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Find host templates (reusable check/notification configurations for hosts) by name,' which clearly distinguishes it from sibling tools like list_servicetemplates and from container-specific template lookups. The parenthetical adds domain context without ambiguity.

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 advises using name_filter with a substring to narrow results and points to get_allowed_elements_for_container when a specific container's accepted templates are needed. It does not explicitly state when not to use this tool versus list_servicetemplates, but the host-template framing makes the context clear.

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

list_installed_softwareInstalled SoftwareA
Read-onlyIdempotent

Software installed on a host, from the openITCOCKPIT agent's inventory. OS is auto-detected (Linux, Windows, macOS).

A host carries hundreds to thousands of packages. Pass name_filter to search by package name, or only_updatable=True for just the outdated ones. For updates across the whole estate use list_pending_updates or list_pending_security_updates.

A host with no agent inventory at all raises, rather than returning zero rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.
name_filterNoSubstring to search for in the name. Empty returns everything, capped by limit.
only_updatableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond annotations, especially the error condition: 'A host with no agent inventory at all raises, rather than returning zero rows.' It also reveals OS auto-detection, which is not inferable from the schema.

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

Conciseness5/5

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

The description is compact and well-structured: a one-sentence resource definition, a usage paragraph, and an error-behavior paragraph. Every sentence earns its place, and the most important scoping information 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?

With annotations covering safety/idempotence and an output schema covering return shape, the description supplies the remaining context: when to use it, how to constrain results, where to get the required hostname, and what happens for hosts without inventory. An agent has everything needed to select and invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 75%, and the description compensates for the only_updatable parameter, which has no schema description, by explaining it means 'just the outdated ones.' It also clarifies that name_filter searches by package name and reinforces that hostname is host-scoped with no estate-wide form. This adds real meaning beyond the schema without fully documenting every parameter edge case.

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

Purpose5/5

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

The description opens with a precise statement: 'Software installed on a host, from the openITCOCKPIT agent's inventory.' This clearly identifies the resource, the scope (single host), and the data source. It also distinguishes itself from the estate-wide update siblings by noting the host-scoped nature.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use alternatives: 'For updates across the whole estate use list_pending_updates or list_pending_security_updates.' It also gives concrete usage guidance by recommending name_filter and only_updatable, and it explains that hostname is required and can be obtained from specific sibling tools.

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

list_log_entriesRecent Log EntriesA
Read-onlyIdempotent

Host and service alert log entries from the last hours hours, newest first.

Each entry resolves its host and service name, costing one extra API request per entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many hours back to look.
limitNoMaximum rows to return. Defaults to 50, maximum 500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses a meaningful behavioral trait: every returned entry resolves host/service names at the cost of one extra API request per entry. It also specifies newest-first ordering. This is exactly the kind of cost and side-effect context an agent needs; no contradiction with annotations.

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

Conciseness5/5

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

Two sentences with no filler: the first states the resource, window, and ordering; the second states the cost caveat. Information is front-loaded and every sentence earns its place.

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

Completeness5/5

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

For a simple read-only list operation, the description covers what is returned, the time window, ordering, and an important performance cost. The output schema and annotations handle the remaining return-value and safety details, so nothing critical 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 input schema already describes both parameters fully (100% coverage), so the description does not need to carry the parameter documentation burden. It reinforces the meaning of `hours` but adds no semantics 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 identifies the resource ('host and service alert log entries'), the lookback window, and ordering, which makes the tool's purpose clear. It lacks an explicit verb like 'list' or 'retrieve,' and it does not directly contrast with sibling tools, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this tool over sibling list tools such as list_host_checks or list_service_state_changes. The temporal window implies use for recent history, but no exclusions, alternatives, or selection criteria are given.

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

list_pending_security_updatesPending Security UpdatesA
Read-onlyIdempotent

Hosts with pending security updates, with the package names and versions for each.

Shorter than list_pending_updates and usually the relevant one. Naming each package costs one API request, so max_packages_per_host caps how many are resolved per host; the update count itself is always exact.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
max_packages_per_hostNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only and idempotent behavior, and the description adds non-redundant behavioral detail: 'Naming each package costs one API request' and max_packages_per_host caps per-host resolution. It also resolves ambiguity by stating 'the update count itself is always exact,' which is useful for interpreting partial results.

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 carry the full message: the first states purpose, the second explains the tool's unique trade-off. There is no repeated schema information or filler, and the most distinctive comparison 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?

Given the low parameter count, no required parameters, an existing output schema, and read-only/idempotent annotations, the description covers the relevant behavior and caveats for correct invocation. It clarifies the one non-obvious cap and cost behavior, so nothing critical is left to guesswork.

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

Parameters4/5

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

The schema only describes limit, not max_packages_per_host. The description explains max_packages_per_host's purpose, linking it to API cost and per-host cap, which compensates for the parameter lacking a schema description. limit is already documented in the schema, so no further description is needed.

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

Purpose5/5

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

The description opens with 'Hosts with pending security updates, with the package names and versions for each,' clearly stating the verb, resource, and scope. It also explicitly contrasts itself with list_pending_updates, so an agent can distinguish the tool without opening the schema.

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

Usage Guidelines4/5

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

The description names list_pending_updates as the sibling and says this tool is 'Shorter' and 'usually the relevant one,' giving clear selection guidance. It does not explicitly state the condition under which list_pending_updates should be chosen instead, but the context is strong enough for typical decisions.

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

list_pending_updatesPending UpdatesA
Read-onlyIdempotent

Hosts with any pending updates, security or not, with package names and versions.

Covers all updates, not only security ones, and is correspondingly larger. Naming each package costs one API request, capped by max_packages_per_host.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
max_packages_per_hostNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, and idempotent behavior. The description adds meaningful operational behavior: 'Naming each package costs one API request, capped by max_packages_per_host' and that the result is 'correspondingly larger'. This gives cost/size awareness beyond the annotations.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the core purpose, the second clarifies scope and cost implications. Every sentence contributes meaningful information with no filler.

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

Completeness5/5

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

Given the small parameter count, strong annotations, and presence of an output schema, the description provides sufficient context. It covers scope, differentiation from the security-only variant, and an important behavioral cost cap. Nothing essential is missing for correct invocation.

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 only 50%, with max_packages_per_host lacking a description. The description compensates by explaining that max_packages_per_host caps per-host package naming and associated API request cost. The limit parameter is well described in the schema, so no additional explanation is needed there.

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

Purpose5/5

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

The description clearly identifies the resource ('Hosts with any pending updates') and the included details ('package names and versions'). It also explicitly contrasts with the security-only sibling by stating 'security or not' and 'Covers all updates, not only security ones', which distinguishes it from list_pending_security_updates.

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

Usage Guidelines4/5

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

The description makes the scope explicit: this tool returns all pending updates, not just security ones, and is 'correspondingly larger'. This effectively tells an agent to choose this tool when full update coverage is needed and implies the security-only sibling as the alternative, though it does not name it directly.

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

list_service_acknowledgementsService AcknowledgementsA
Read-onlyIdempotent

Acknowledgement history for one service: who acknowledged a problem, when, and with what comment.

Per service only - openITCOCKPIT exposes no estate-wide acknowledgement list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.
servicenameYesExact service name on that host. Required. get_host_info lists the services of a host, and list_services_by_state reports host and service together.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds modest context by specifying the content of the history (who, when, comment) but does not disclose additional behaviors such as ordering, pagination behavior, or empty-result handling. It is consistent with annotations, so no contradiction.

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

Conciseness5/5

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

The description is two concise sentences, returns the core purpose and scope upfront, and every sentence earns its place. 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?

Combined with a 100%-covered input schema, an output schema, and strong annotations, the description provides everything an agent needs to invoke the tool correctly. It states the required per-service scope, the absence of an estate-wide variant, and what the history contains, which is sufficient for a filtered read-only list tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the input schema already clearly documents all three parameters, including required hostname and servicename, the limit defaults/maximum, and where to obtain valid names. The description itself adds no additional parameter-level semantics, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource ('Acknowledgement history for one service') and immediately specifies the kind of data returned ('who acknowledged a problem, when, and with what comment'). It also differentiates from the sibling list_host_acknowledgements by adding 'Per service only - openITCOCKPIT exposes no estate-wide acknowledgement list.'

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

Usage Guidelines4/5

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

The description clearly delimits usage by saying the tool is per-service only and that no estate-wide acknowledgement list exists. It does not explicitly name the alternative list_host_acknowledgements or other siblings, but the schema parameter descriptions further direct the agent to obtain identifiers from list_services_by_state, list_log_entries, get_container_tree, and get_host_info.

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

list_service_checksService Check HistoryA
Read-onlyIdempotent

Individual check executions for a service, newest first: output, latency and execution time per run.

Returns one row per check execution; list_service_state_changes covers only the points where the state changed. A rising executionTime before a failure indicates a timeout or resource exhaustion, an instant failure a configuration, auth or service-down condition.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many hours back to look.
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.
servicenameYesExact service name on that host. Required. get_host_info lists the services of a host, and list_services_by_state reports host and service together.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context beyond the schema: newest-first ordering, one row per execution, and the meaning of rising versus instant failures. This exceeds the baseline but does not fully describe all sorting or pagination nuances.

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 with no filler: the first states precisely what the tool returns, the second routes around the sibling tool, and the third supplies diagnostic value. All information is front-loaded and every sentence earns its place.

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

Completeness5/5

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

For a read-only listing tool with a rich output schema and fully self-documented parameters, the description is complete. It covers what rows represent, ordering, the relationship to a sibling tool, and even provides diagnostic interpretation guidance. Nothing essential is missing for an agent to decide when and how to use 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 the schema already documents all four parameters including defaults and constraints. The description does not add parameter-level meaning beyond the schema, which puts it at the baseline for this dimension.

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

Purpose5/5

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

The description states a specific verb and resource: it returns individual check executions for a service, newest first, with output, latency, and execution time. It also explicitly contrasts itself with list_service_state_changes, which only covers state-change points, making the tool's scope unmistakable.

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

Usage Guidelines5/5

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

The description explicitly names the sibling alternative and explains the difference: list_service_state_changes covers only state changes, while this tool returns one row per check execution. It also adds diagnostic guidance for interpreting executionTime patterns, helping the agent decide when this tool's data is relevant.

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

list_service_downtimesService DowntimesA
Read-onlyIdempotent

Scheduled and running downtimes for services. Leave hostname/servicename empty for all services. Set only_active=True for downtimes running right now.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameNoRestrict to this host. Empty means every host.
only_activeNoTrue returns only downtimes running right now, not those scheduled for later.
servicenameNoRestrict to this service. Empty means every service.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish read-only, open-world, idempotent, and non-destructive behavior. The description adds the scheduled-vs-running distinction, but no further behavioral context such as response ordering, pagination, or how service downtimes relate to host downtimes.

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 with no filler. The first identifies the resource, and the second delivers the two most decision-relevant parameter tips. 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 read-only list tool with 100% schema coverage and an output schema, the description covers the core semantic distinction (scheduled vs running) and the all-services behavior. It does not explain how service downtimes relate to host downtimes, but that is not essential for invoking the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates the 'empty means all' and 'only_active' semantics but does not add syntax or format details beyond what the schema already provides.

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

Purpose4/5

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

The description opens with 'Scheduled and running downtimes for services,' which clearly identifies the resource and scope. It distinguishes from the sibling list_host_downtimes by the 'services' qualifier, though it does not explicitly name or contrast 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?

It gives concrete parameter guidance: 'Leave hostname/servicename empty for all services' and 'Set only_active=True for downtimes running right now.' However, it provides no guidance on when to choose this tool over alternatives like list_host_downtimes or the acknowledgement-listing siblings.

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

list_servicegroupsService GroupsA
Read-onlyIdempotent

List service groups with their name and description. Use this to find a group's exact name before filtering by it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds that the tool returns service group names and descriptions and positions it as an exact-name lookup, which is useful behavioral context beyond the annotations. No contradiction exists.

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 words. The first sentence states the operation and output fields, and the second provides actionable guidance. This is concise and easy to scan.

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

Completeness5/5

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

For a simple read-only list tool with one optional parameter, an output schema, and strong annotations, the description is sufficiently complete. It conveys the main use case and the practical purpose without missing information needed to call the tool correctly.

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 input schema fully documents the single optional limit parameter with default, minimum, maximum, and null behavior, so schema coverage is 100%. The description adds no parameter-specific meaning, but none is needed because the schema already carries the burden.

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 action and resource: 'List service groups with their name and description.' It also gives a concrete use case, finding a group's exact name before filtering, which helps an agent understand the tool's role. It does not explicitly differentiate from sibling list tools such as list_hostgroups, 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 Guidelines4/5

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

The description provides a clear usage context: 'Use this to find a group's exact name before filtering by it.' This tells the agent when to invoke the tool. However, it does not mention when not to use it or point to alternatives, so it stops short of full routing guidance.

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

list_services_by_stateServices by StateA
Read-onlyIdempotent

Services currently in a given state. Pass state="critical" for the usual "what is broken" question.

Before reporting an entry as a new incident, check list_service_acknowledgements and list_service_downtimes: a problem already acknowledged or inside a downtime window is known work.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
stateYesService state to filter by. Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds meaningful context: the result is a current snapshot and may include acknowledged/downtime-covered services, which is why cross-checking is needed. This is useful behavior beyond the annotations.

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

Conciseness5/5

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

Two tightly written sentences. The core behavior is front-loaded in the first sentence, and the second sentence adds a necessary workflow caveat without redundancy. Every sentence earns its place.

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

Completeness5/5

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

For a simple read-only list tool with a full input schema, an output schema, and complete annotations, the description covers purpose, parameter usage, and cross-tool workflow. Nothing essential 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?

Schema coverage is 100% for both parameters, but the description adds practical semantic value by recommending state='critical' for the common incident question. This helps an agent choose the right enum value for the typical use case beyond what the schema lists.

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

Purpose5/5

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

The description states a specific verb+resource+scope: 'Services currently in a given state.' The word 'currently' distinguishes it from historical state-change tools, and the example state='critical' anchors the intended query. It clearly identifies itself as a current-state listing tool, not a downtime or acknowledgement list.

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

Usage Guidelines5/5

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

The description gives an explicit use case: 'Pass state="critical" for the usual "what is broken" question.' It also names sibling alternatives and instructs the agent to check list_service_acknowledgements and list_service_downtimes before reporting an incident, providing concrete when-not-to-use guidance.

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

list_service_state_changesService State ChangesA
Read-onlyIdempotent

Only the entries where a service's state changed. Shows when it broke and whether it is flapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many hours back to look.
limitNoMaximum rows to return. Defaults to 50, maximum 500.
hostnameYesExact host name. Required - there is no estate-wide form of this tool. Get a name from list_services_by_state, list_log_entries or get_container_tree first.
servicenameYesExact service name on that host. Required. get_host_info lists the services of a host, and list_services_by_state reports host and service together.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already disclose read-only, open-world, idempotent, and non-destructive behavior, so the description does not need to repeat that. It adds useful behavioral context: results are filtered to state-change entries and indicate breakage/flapping. No contradictions or hidden side effects are suggested.

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, both informative and front-loaded. The result filtering is stated first, and the behavioral implications load second, with no filler or repetition of the tool name and title.

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

Completeness5/5

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

For a read-only list tool with a full input schema, strong annotations, and an existing output schema, the description is complete enough. It adds the key domain semantics that the schema cannot express while leaving structured detail to the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters like hours, limit, hostname, and servicename are fully documented. The description adds little parameter-level detail, which is acceptable because the baseline is 3 when the schema carries that burden.

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

Purpose4/5

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

The description names a specific resource (service state changes) and clearly restricts results to entries where the state actually changed, with semantics like 'when it broke' and 'whether it is flapping.' It is distinguishable from general log listing, though it does not explicitly differentiate from list_host_state_changes beyond the word 'service.'

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 the tool is relevant: investigating service state transitions, outages, and flapping. The schema adds useful guidance about requiring an exact hostname/service and obtaining names from sibling tools. There is no explicit when-not-to-use or a stated alternative, so guidance is adequate but not explicit.

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

list_servicetemplategroupsService Template GroupsA
Read-onlyIdempotent

List service template groups (named groups of service templates, used e.g. to bulk-apply services to hosts).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already comprehensively cover the behavioral profile: readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful domain context about what these groups are used for and contradicts none of the annotations. For a simple list operation with this annotation coverage, there are no meaningful behavioral gaps left to disclose.

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 tight, front-loaded sentence. The verb and resource come first, followed by a compact parenthetical that defines the entity and its purpose. Every word earns its place, and there is no repetition of information already present in the schema or annotations.

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

Completeness5/5

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

For a tool with one optional, fully documented parameter, an output schema, and a complete four-hint annotation set, nothing an agent needs to invoke it correctly is missing. The description supplies the domain context (what a service template group is and why it matters), while the schema and annotations carry the structural burden.

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%: the single `limit` parameter is fully documented with its default (50), maximum (500), type constraints, and allowed values. The description adds no parameter-specific information, and with full schema coverage 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?

The description states a specific verb and resource ('List service template groups') and expands on what the resource is: 'named groups of service templates, used e.g. to bulk-apply services to hosts'. This entity-level clarification helps an agent distinguish it from the sibling list_servicetemplates. However, it does not explicitly differentiate itself from any sibling by name, so it falls short of full differentiation.

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

Usage Guidelines3/5

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

The phrase 'used e.g. to bulk-apply services to hosts' provides a concrete application context that implies when this tool's data is relevant. There is no explicit when-to-use vs alternatives guidance — no mention of list_servicetemplates for individual templates or list_servicegroups for runtime service groups. The usage context must be inferred by the agent.

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

list_servicetemplatesService TemplatesA
Read-onlyIdempotent

Find service templates (reusable check/notification configurations for services) by name. An instance holds hundreds; pass name_filter with a substring to narrow the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Defaults to 50, maximum 500.
name_filterNoSubstring to search for in the name. Empty returns everything, capped by limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoHow to narrow the query when truncated.
countYesNumber of rows in `items`.
itemsYesThe rows, at most `limit` of them.
truncatedYesTrue if openITCOCKPIT held more rows than were returned.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context about data volume ('holds hundreds') and substring filtering, which helps an agent anticipate large result sets. It does not contradict the annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and followed by practical filtering guidance. It contains no filler and avoids repeating information already present in the schema or annotations.

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

Completeness5/5

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

For a simple read-only listing tool, the description combined with full parameter documentation, rich annotations, and an output schema is sufficient for correct selection and invocation. The only minor omission is explicit naming of sibling alternatives, but that is not necessary for calling this tool correctly.

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 limit and name_filter are already well-documented. The description reinforces the purpose of name_filter but does not add substantial meaning beyond the schema, so the baseline score is appropriate.

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

Purpose5/5

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

The description states a specific action ('Find'), a clear resource ('service templates'), and explains what service templates are ('reusable check/notification configurations for services'). It also includes the key search behavior via name_filter, clearly distinguishing this from sibling list tools by resource type.

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

Usage Guidelines4/5

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

The description gives practical context for when to use name_filter: 'An instance holds hundreds; pass name_filter with a substring to narrow the result.' It clearly communicates the filtering workflow, though it does not explicitly mention alternatives or exclusions relative to sibling tools like list_servicetemplategroups.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv0.1.0
    • First observedget_container_tree
    • First observedget_host_info
    • First observedget_monitoring_engine_stats
    • First observedlist_commands
    • First observedlist_contactgroups
    • First observedlist_contacts
    • First observedlist_host_acknowledgements
    • First observedlist_host_checks
    • First observedlist_host_downtimes
    • First observedlist_host_state_changes
    • First observedlist_hostgroups
    • First observedlist_hosttemplates
    • First observedlist_installed_software
    • First observedlist_log_entries
    • First observedlist_pending_security_updates
    • First observedlist_pending_updates
    • First observedlist_service_acknowledgements
    • First observedlist_service_checks
    • First observedlist_service_downtimes
    • First observedlist_service_state_changes
    • First observedlist_servicegroups
    • First observedlist_services_by_state
    • First observedlist_servicetemplategroups
    • First observedlist_servicetemplates

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct monitoring object or query dimension, and the host/service, check/state-change, and update/security-update pairs are clearly separated. Descriptions include cross-references to prevent misselection.

Naming Consistency5/5

Names follow a consistent pattern: list_* for plural collection queries and get_* for singular detail queries. There is no camelCase mixing or confusing verb variation.

Tool Count3/5

With 24 tools, the surface is in the heavy range and above the typical 3-15 sweet spot. Each tool maps to a distinct capability, but the overall count is more than would normally be expected.

Completeness4/5

The read-only monitoring surface is broad, covering logs, statuses, checks, state changes, downtimes, acknowledgements, configuration objects, and software updates. Minor gaps exist such as no direct list-all-hosts tool and no mutation actions, but these appear intentionally out of scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol (MCP) server for Grafana. This provides access to your Grafana instance and the surrounding ecosystem.
    3,416
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables querying logs and metrics from Graylog, Prometheus, and InfluxDB 2.x. It provides tools for executing Lucene log searches, PromQL queries, and Flux queries directly within MCP-compatible clients.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for monitoring health of MCP servers, GitHub Actions, GitLab pipelines, and HTTP endpoints with health history, TLS expiry, assertions, diagnostics, and alerts.
    22
    74
    2
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openITCOCKPIT/openITCOCKPIT-MCP-Server'

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