Skip to main content
Glama

calagopus-mcp

A Model Context Protocol server for a running Calagopus panel — users, servers, nodes, nests and eggs, database hosts, database agent hosts and templates, locations, mounts, roles, backups and system health.

Read-only out of the box. Creating records and changing a server's power state are opt-in, off by default, and every one of them requires an explicit two-phase confirmation.

Built and verified against Calagopus 1.2.0.

What it can do

Ask things like:

  • "How many servers are on node X, and how much memory is still unallocated?"

  • "Which servers use the Project Zomboid egg?"

  • "Find the account for someone@example.com and list what they own."

  • "Is the panel clock in sync and are all migrations applied?"

  • "What database agent hosts are configured, and what's left on them?"

Related MCP server: fastpanel-mcp

Safety

Read side

Property

How it is enforced

Single-panel. Cannot be redirected to another host.

Tools take API paths; a full URL is rejected, and .. is refused.

Secrets stay behind.

Values under password, token, client_secret, access_key, secret_key, connection_string and friends are replaced before the response is rendered. Set CALAGOPUS_ALLOW_SECRETS=true to opt out.

Bounded output.

Responses are summarised by default and hard-capped at CALAGOPUS_MAX_RESPONSE_CHARS; truncation is announced, never silent.

Write side

Writes are off unless you turn them on, and there are only two switches:

CALAGOPUS_ALLOW_CREATE=true   # create nests, locations, nodes, servers, eggs
CALAGOPUS_ALLOW_POWER=true    # start / stop / restart / kill ONE server

Six things hold, in layers:

  1. Not registered means not reachable. With both flags off, no mutating tool is advertised at all. There is no tool to call and no error path to argue past — the model simply cannot see one.

  2. Two-phase confirmation on every change. A tool called without confirm_token changes nothing: it resolves the real target from the panel, renders what would happen, and returns a token. Only a second call carrying that token executes.

  3. Tokens are bound to their arguments. A token is a fingerprint of the operation and every argument. A token issued for "stop server A" will not execute "stop server B", or "kill server A", or the same action with an edited limit. It is single-use and expires (5 minutes by default). This is what makes the preview meaningful: what you read is the only thing that token can do.

  4. No bulk anything. Power actions take one server UUID — not a list. The panel does expose POST /nodes/{node}/servers/power accepting {"type": "all"}, i.e. power-cycle every server on a node in one request. This server never calls it; the route is absent from the write allowlist. Restarting five servers means five previews and five confirmations.

  5. kill is its own tier. It additionally requires acknowledge_data_loss: true, because it SIGKILLs the container with no graceful shutdown and no world save. The preview says so in capitals.

  6. A transport-level allowlist. client.ts will only POST to nine exact route patterns, checked at the point of request. There is no DELETE or PATCH method on the client at all, so nothing can be deleted or modified — only created, plus power state. A wiring mistake cannot reach a route nobody reviewed.

Every executed mutation is logged to stderr with a timestamp, the operation and the resolved target.

Scope it further with the API key itself: grant only the permissions you want reachable. The read tools need admin *.read; creates need the matching *.create; power needs the server permissions control.start, control.stop and control.restart.

What a change looks like

// 1. No confirm_token — nothing is sent to the panel.
{ "server": "95b3a3a4-...", "action": "stop" }
→ {
    "status": "preview_only",
    "nothing_was_changed": true,
    "action": "STOP server \"Zomboid\" (95b3a3a4-...)",
    "target": { "name": "Zomboid", "current_status": "running",
                "node": "Integrated Node", "owner": "BerdiiNN" },
    "warnings": ["Asks the server to shut down gracefully, ... Players are disconnected."],
    "confirm_token": "cfm_...", "token_expires": "..."
  }

// 2. Same arguments plus the token — now it happens.
{ "server": "95b3a3a4-...", "action": "stop", "confirm_token": "cfm_..." }
→ { "status": "executed", ... }

Setup

npm install && npm run build

Create an API key in the panel under Account → API Keys and grant it the admin read permissions you want. Then register the server with your client.

Claude Code:

claude mcp add calagopus --env CALAGOPUS_URL=https://panel.example.com --env CALAGOPUS_API_KEY=c7sp_xxx -- node /absolute/path/to/calagopus-mcp/dist/index.js

Claude Desktop / any MCP client, in mcpServers:

{
  "mcpServers": {
    "calagopus": {
      "command": "node",
      "args": ["/absolute/path/to/calagopus-mcp/dist/index.js"],
      "env": {
        "CALAGOPUS_URL": "https://panel.example.com",
        "CALAGOPUS_API_KEY": "c7sp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

For running the server or the smoke test by hand, a .env beside package.json is read at startup (see .env.example). Anything already in the environment wins, so an MCP client's own config is never overridden by a stale local file.

Environment

Variable

Default

Purpose

CALAGOPUS_URL

(required)

Panel base URL. A trailing /api or / is trimmed for you.

CALAGOPUS_API_KEY

(required)

API key, c7sp_ + 43 characters.

CALAGOPUS_TIMEOUT_MS

30000

Per-request timeout.

CALAGOPUS_MAX_RESPONSE_CHARS

60000

Cap on a single tool result.

CALAGOPUS_ALLOW_SECRETS

false

Stop redacting secret-looking fields.

CALAGOPUS_INSECURE_TLS

false

Accept self-signed certificates. Process-wide — use only against a lab panel.

CALAGOPUS_ALLOW_CREATE

false

Register the create tools.

CALAGOPUS_ALLOW_POWER

false

Register the server power tool.

CALAGOPUS_CONFIRM_TTL_MS

300000

How long a confirmation token stays valid.

Tools

36 read tools, plus 6 write tools when enabled. Start with calagopus_panel_info.

Orientation calagopus_panel_info · calagopus_search · calagopus_get_system_health · calagopus_list_endpoints · calagopus_get

Userscalagopus_list_users · calagopus_get_user · calagopus_get_user_servers · calagopus_get_user_activity · calagopus_list_roles · calagopus_get_activity

Serverscalagopus_list_servers · calagopus_get_server · calagopus_get_server_resource (allocations, variables, backups, databases, database_instances, mounts, available_mounts, logs, install_logs)

Nodescalagopus_list_nodes · calagopus_get_node · calagopus_get_node_resource (servers, allocations, available_allocations, allocation_ips, backups, mounts, capacity, database_hosts, database_agent_hosts, transfers, system_overview, system_stats, system_logs, resources) · calagopus_list_locations · calagopus_list_mounts

Nests & eggscalagopus_list_nests · calagopus_list_eggs · calagopus_get_egg · calagopus_get_egg_variables · calagopus_get_egg_servers · calagopus_list_egg_repositories · calagopus_list_egg_configurations

Databasescalagopus_list_database_hosts · calagopus_get_database_host · calagopus_list_database_agent_hosts · calagopus_get_database_agent_host · calagopus_get_database_agent_host_resource (instances, capacity, config, system_overview, system_stats) · calagopus_list_database_agent_templates

Backups & SSOcalagopus_list_backup_configurations · calagopus_list_system_backup_policies · calagopus_list_oauth_providers · calagopus_list_extensions

Create (needs CALAGOPUS_ALLOW_CREATE)calagopus_create_nest · calagopus_create_location · calagopus_create_node · calagopus_create_server · calagopus_install_egg_from_repository · calagopus_import_egg

Power (needs CALAGOPUS_ALLOW_POWER)calagopus_server_power

calagopus_create_server previews more than it is asked to: it resolves the node, egg and owner by name, and checks the egg's declared variables so a missing required value shows up in the preview rather than as a rejected create.

summary vs full

List tools return a trimmed projection plus a pagination block. Raw panel records are big — a server inlines its whole node, owner and egg (~15 KB each), and an egg carries its install script and upstream copy (~13 KB) — so a page of 25 in full detail would be several hundred KB of context. Pass detail: "full" on a single-record tool when you genuinely need the scripts or every field.

Not covered by a dedicated tool?

calagopus_list_endpoints searches the panel's live OpenAPI document, so it reflects that panel's version including routes added by extensions. Feed a path you find into calagopus_get:

calagopus_list_endpoints { filter: "backup-configurations" }
calagopus_get { path: "/api/admin/backup-configurations/<uuid>/stats" }

Interpreting errors

Errors come back in-band with a hint. The one worth recognising:

500 … error sending request for url (http://…) — the panel is healthy but could not reach the daemon behind that endpoint. The node or database agent is offline, still booting, or has the wrong URL configured. Panel-stored records (calagopus_get_node, calagopus_list_servers, …) still read fine; only the live system_*, capacity, resources, transfers and log facets need the daemon up.

A 403 names the exact admin permission the key is missing.

Testing

scripts/smoke.mjs connects over real stdio MCP, lists the tools, and calls every one of them against a live panel — discovering UUIDs from earlier calls so per-record tools run with real identifiers. It fails if any tool is left unexercised.

CALAGOPUS_URL=http://localhost:8000 CALAGOPUS_API_KEY=c7sp_xxx npm run smoke

Facets that need a wings daemon or database agent are counted as skipped rather than failed when that daemon is unreachable.

scripts/safety.mjs is the suite that matters for the write side. It launches the server three times — read-only, create-enabled, power-enabled — and asserts the guard rails: that no mutating tool exists by default, that a dry run changes nothing, that a token is refused against a different server, a different action, or on a second use, that kill demands acknowledgement, that no bulk power tool exists, and that the read-side escape hatch has no method or body argument.

npm run safety              # guard rails only, no writes
SAFETY_LIVE=1 npm run safety   # also creates a real nest + location, named mcp-safety-*
npm test                    # both suites

Without SAFETY_LIVE, the suite performs no writes at all — it stops at previews. SAFETY_LIVE=1 additionally creates a real nest and location, and spends one token on a real start to prove replay protection; the records it creates stay behind, because this server cannot delete them by design. Remove them from the panel yourself.

Layout

src/
  index.ts          stdio wiring and conditional tool registration
  config.ts         environment parsing and validation
  client.ts         HTTP client, POST allowlist, error typing, hints
  confirm.ts        two-phase confirmation tokens
  format.ts         redaction, per-resource projections, size cap
  tools/
    common.ts       shared arg shapes, result rendering, error guard, twoPhase
    system.ts users.ts servers.ts nodes.ts eggs.ts databases.ts raw.ts
    create.ts       create tools   (gated on CALAGOPUS_ALLOW_CREATE)
    power.ts        power tool     (gated on CALAGOPUS_ALLOW_POWER)

Adding a read resource is normally: a projection in format.ts, and a registerTool call in the matching tools/*.ts. Adding a write also means adding its route to POST_ALLOWLIST in client.ts and a case to scripts/safety.mjs.

License

MIT

Available Tools

36 tools
calagopus_getGET any panel API pathA
Read-only

Escape hatch: issue a raw authenticated GET against any path on the configured panel and return the JSON verbatim. Use it for endpoints the dedicated tools do not cover — find paths with calagopus_list_endpoints first. Only GET is possible; this server cannot create, modify or delete anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAPI path on the configured panel, e.g. /api/admin/nodes/{uuid}/capacity. Must be a path, not a full URL.
queryNoQuery string parameters, e.g. { page: "2", per_page: "50" }.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (readOnlyHint=true, destructiveHint=false) align with the description's explicit statement that only GET is possible and the server cannot create, modify, or delete anything. The description adds context about authentication and verbatim JSON return, with no contradictions.

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

Conciseness5/5

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

Two concise sentences with purpose stated first, followed by usage guidance. No redundant wording or unnecessary detail.

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 no output schema, the description sufficiently explains the return value ('JSON verbatim'). It also covers when to use it relative to siblings and mentions authentication and method restrictions, making it complete for an escape-hatch 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% for both parameters (path and query). The description adds minimal extra context beyond the schema, so 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?

Clearly states it issues a raw authenticated GET against any panel path and returns JSON verbatim. The verb 'issue' plus resource 'any path on the configured panel' and method 'GET' distinguish it from dedicated sibling tools as an escape hatch.

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

Usage Guidelines5/5

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

Explicitly instructs to use it for endpoints not covered by dedicated tools, directs users to find paths via calagopus_list_endpoints first, and states only GET is possible, providing clear when-to-use and 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.

calagopus_get_activityGet the panel-wide admin activity logA
Read-only

Panel-wide admin audit log, most recent first. Optionally scope to one user with user. Requires activity.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
userNoFilter to a single user UUID.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the permission requirement 'Requires activity.read.' and the ordering 'most recent first', which are useful behavioral disclosures beyond the annotations. 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?

Two sentences with no filler. The core purpose and ordering are front-loaded, followed by optional scoping and permission. Every word earns its place.

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

Completeness4/5

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

For a read-only log tool with 5 parameters fully described in the schema, the description covers the purpose, ordering, permission, and optional scoping. It does not mention the return format or pagination explicitly, but pagination parameters are in the schema and the tool is safe (annotations). A brief note on the paginated list would make it fully complete, but it is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema. The description only mentions the `user` parameter explicitly, but that adds no new semantics beyond the schema's 'Filter to a single user UUID.' Baseline of 3 is appropriate because the schema carries the full semantic load.

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

Purpose5/5

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

The description clearly states the verb (get) and resource (panel-wide admin activity log), and notes it is ordered most-recent-first. It distinguishes itself from the sibling get_user_activity by being panel-wide and admin-scoped, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines3/5

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

The description gives a clear context (panel-wide admin audit log) and an optional scoping to one user, but it does not explicitly mention alternatives or when NOT to use this tool (e.g., when a user's own activity log is needed). The context implies the use case, but exclusions are left to inference.

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

calagopus_get_database_agent_hostGet a database agent hostA
Read-only

Fetch one database agent host by UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
database_agent_hostYesDatabase agent host UUID.

TDQS

A4/5.0
Behavior3/5

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

The annotations already indicate readOnlyHint and non-destructive behavior. The description adds no further behavioral details, such as side effects or permissions, but also 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 a single, clear sentence that is fully front-loaded with the essential information. There is no unnecessary detail.

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

Completeness4/5

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

For a simple single-item getter, the description is sufficient. It does not need to explain return values since there is no output schema, and the core context is complete.

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

Parameters3/5

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

The schema description coverage is 100%, so the parameters are fully documented in the schema. The description does not add additional meaning beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the verb 'Fetch' and the resource 'database agent host', and specifies lookup by UUID. It distinguishes from sibling tools like list_database_agent_hosts and get_database_host by its singular, identifier-based nature.

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

Usage Guidelines4/5

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

The description implies usage for fetching a single database agent host by UUID, which is clear context. It does not explicitly mention alternatives or when not to use it, but the name and phrasing provide sufficient guidance.

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

calagopus_get_database_agent_host_resourceGet a database agent host sub-resourceA
Read-only

Fetch one facet of a database agent host: the database instances running on it, its remaining capacity, its agent config, or live system overview/stats. The instances, capacity and system_* facets need the agent to be reachable.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).
resourceYesWhich facet of the agent host to fetch.
database_agent_hostYesDatabase agent host UUID.

TDQS

A3.9/5.0
Behavior3/5

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

The readOnlyHint annotation already signals a non-destructive read, and the description reinforces this with 'Fetch'. The reachability caveat is a meaningful behavioral disclosure, but the description does not mention pagination or filtering behavior despite the presence of page, per_page, and search parameters, which could affect how the returned data is consumed.

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 concise and well-structured, conveying the tool's purpose, the available resource facets, and the key reachability caveat in just two sentences. There is no redundancy or extraneous information.

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

Completeness3/5

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

The description is adequate for a straightforward sub-resource fetch, but it does not explain the relationship to the sibling get_database_agent_host tool or clarify what a typical response contains. Given the lack of an output schema, a bit more context about the response shape or usage scenario would improve completeness.

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 provides solid descriptions for all parameters, and the description adds value by mapping the resource enum values to their human-readable meanings (database instances, remaining capacity, agent config, live system overview/stats). It also clarifies which resource values depend on agent reachability, going slightly beyond the schema.

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

Purpose5/5

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

The description clearly states the tool fetches one facet of a database agent host and enumerates the available facets (instances, capacity, config, system overview/stats). It is specific and easily distinguished from sibling tools like calagopus_get_database_agent_host, which presumably returns the full host object.

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

Usage Guidelines3/5

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

The description gives useful guidance that the instances, capacity, and system facets require the agent to be reachable, which helps set expectations. However, it does not explicitly explain when to choose this tool over calagopus_get_database_agent_host or calagopus_list_database_agent_hosts, leaving the distinction to be inferred from naming and context.

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

calagopus_get_database_hostGet a database hostA
Read-only

Fetch one database host by UUID. Set databases: true to list the databases currently provisioned on it instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).
databasesNoList the databases on this host instead of the host record.
database_hostYesDatabase host UUID.

TDQS

A4.3/5.0
Behavior4/5

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

The annotations (readOnlyHint, destructiveHint) already indicate a safe read operation. The description adds behavioral detail by explaining that setting 'databases: true' changes the response to list databases instead of the host record. This exceeds the annotation baseline without contradicting it.

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, direct, and free of fluff. It states the core operation and the one key caveat about the 'databases' parameter. No unnecessary details or repetition.

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 get operation with no output schema, the description is complete. It tells the user exactly what to expect: either the host record or a database list when 'databases: true'. No additional context is needed.

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% with clear descriptions for all six parameters, including the 'databases' boolean. The tool description does not add significant extra meaning beyond the schema, but it reinforces the 'databases' parameter's role. This meets the baseline for fully documented parameters.

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

Purpose5/5

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

The description clearly states the primary action: 'Fetch one database host by UUID.' It also explains the alternative behavior with 'databases: true', making the tool's purpose unmistakable. The title 'Get a database host' reinforces this, and it is distinct from sibling list tools like 'list_database_hosts'.

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

Usage Guidelines4/5

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

The description implies the target use case: fetching a single record by UUID. It does not explicitly contrast with the list sibling, but the phrase 'by UUID' and the 'instead' for listing databases provide sufficient guidance. The behavior of setting 'databases: true' is also described, which helps users know when to use that feature.

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

calagopus_get_eggGet an eggA
Read-only

Fetch one egg. detail: "full" includes the install script, config files, startup parsing rules and the upstream repository copy — that is ~13 KB, so prefer the summary unless you need the scripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
eggYesEgg UUID.
nestYesNest UUID the egg belongs to.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary

TDQS

A4.5/5.0
Behavior4/5

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

Consistent with readOnlyHint, and adds behavioral context about the size (~13 KB) of full responses, which is useful for performance expectations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the primary purpose, followed by relevant detail guidance with no unnecessary fluff.

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?

Provides sufficient context for a read-only fetch operation, including parameter semantics and response size, with no obvious gaps given the schema and annotations.

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

Parameters4/5

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

Schema covers 100% of parameters, but the description enriches the 'detail' parameter by specifying exactly what 'full' includes and its size impact.

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?

Clearly states the action ('Fetch one egg') and the resource (egg), distinguishing it from list_eggs and other egg-related subresource 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?

Provides guidance on using the detail parameter ('prefer the summary unless you need the scripts'), but does not explicitly contrast with sibling tools like get_egg_variables or get_egg_servers.

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

calagopus_get_egg_serversList servers using an eggA
Read-only

List every server created from one egg. Use this before changing an egg to see the blast radius.

ParametersJSON Schema
NameRequiredDescriptionDefault
eggYesEgg UUID.
nestYesNest UUID.
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.4/5.0
Behavior4/5

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

The description clearly indicates a read-only listing and aligns with the readOnlyHint annotation. It could more fully note pagination and output shape, but the schema's page/per_page/detail descriptions cover those details.

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 carry the action, scope, and recommended use case with no filler or redundancy.

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

Completeness4/5

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

For a simple paginated list, the description plus schema is largely complete. The absence of an output schema is acceptable because the action is obvious, though a mention of pagination in the description would make it slightly more self-contained.

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 covers all six parameters with descriptions, so the tool description adds little parameter-level meaning. The blast-radius context helps overall intent but does not explain individual parameters beyond the schema.

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

Purpose5/5

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

The title and description both state exactly what the tool does: list servers created from one egg. The blast-radius phrase adds a clear purpose without obscuring the action.

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?

It explicitly says when to use it: before changing an egg, to see the blast radius. This gives an agent a concrete trigger and enough context to choose it over generic server listing.

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

calagopus_get_egg_variablesGet an egg's variablesA
Read-only

List the environment variables an egg declares: name, env var, default value, validation rules, and whether the user may see or edit each one.

ParametersJSON Schema
NameRequiredDescriptionDefault
eggYesEgg UUID.
nestYesNest UUID.
pageNo1-based page number.
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.5/5.0
Behavior5/5

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

The description accurately reflects the read-only nature (list operation) and the annotations confirm readOnlyHint=true and destructiveHint=false. It adds context about the returned fields, including user permissions, which goes beyond the annotations. No contradiction.

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

Conciseness5/5

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

The description is a single concise sentence that fully conveys the purpose and return fields without extraneous wording. Well-structured and immediately understandable.

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 no output schema, the description is sufficient. It names the resource (egg variables) and the fields returned, while the parameter details are fully documented in the schema. No missing context.

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

Parameters3/5

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

The schema provides full descriptions for all five parameters (egg, nest, page, search, per_page), so description coverage is 100%. The tool description itself does not add parameter-level detail beyond what the schema already states, hence baseline score of 3.

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 environment variables for an egg and enumerates the fields returned (name, env var, default value, validation rules, user see/edit permissions). This distinguishes it from sibling tools like calagopus_get_egg (which retrieves egg details) and calagopus_list_eggs (which lists eggs).

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 context is clear: this is a read-only list operation for egg variables, and the name aligns with its purpose. It does not explicitly state when to prefer this over alternatives, but the sibling tools cover different resources, so the usage is obvious. Lacks explicit exclusion guidance, 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.

calagopus_get_nodeGet a nodeA
Read-only

Fetch one node by UUID, including its location and backup configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesNode UUID.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Fetch' aligns with that. It adds context about the response contents (location and backup configuration), but does not detail potential side effects or additional behavior beyond what annotations cover.

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

Conciseness5/5

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

One sentence, direct, and free of filler. The key information (verb, resource, required identifier, and relevant response details) is packed in without redundancy.

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

Completeness4/5

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

Given there is no output schema, the description gives a reasonable overview of what is returned (location and backup configuration). It could be more explicit about the summary vs. full detail levels and potential error cases, but for a simple single-node fetch it is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100% for both parameters (node and detail). The description adds minimal semantic value beyond the schema, mainly confirming 'node' is a UUID and hinting that the response includes location and backup configuration, but it does not elaborate on the summary vs. full distinction beyond what the schema provides.

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?

Clearly states the action ('Fetch'), the resource ('one node'), and the identifier required ('UUID'), distinguishing it from listing tools like calagopus_list_nodes. Also mentions the included related data (location and backup configuration), adding useful specificity.

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

Usage Guidelines4/5

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

The description implies the condition for use: you need a specific node UUID. It does not explicitly name alternatives or exclusions, but the sibling tools provide enough context that an agent can infer when to use this tool versus list_nodes or get_node_resource.

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

calagopus_get_node_resourceGet a node sub-resourceA
Read-only

Fetch one facet of a node: the servers on it, its allocations (all, free, or just the IPs), backups, mounts, capacity headroom, attached database hosts, in-flight transfers, or live system overview/stats/logs from the wings daemon. The system_* facets require the node to be online.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesNode UUID.
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).
resourceYesWhich facet of the node to fetch.

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this operation has no side effects. The description adds useful behavioral context by warning that system_* facets require the node to be online, and it makes the live nature of system logs/overview/stats explicit. No side effects or destructive behavior are suggested, consistent with the annotations.

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

Conciseness5/5

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

The description is a single, focused sentence that packs the core purpose and the main facet options without redundancy. It front-loads the action and object, lists the facets compactly, and includes the important online requirement without wasting words.

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

Completeness3/5

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

The description explains what can be fetched and the online requirement for system_* facets, which is useful. However, it does not describe the shape of the response or clarify how pagination-related parameters like page, per_page, and search interact with the different resource types, especially the non-list or live-system facets.

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 schema already covers 100% of parameters with descriptions, including enums for resource and detail, pagination bounds, and search behavior. The tool description mostly restates the resource facet list rather than adding new parameter-level meaning, such as which parameters apply to which facets or how search/per_page behave for different resource types.

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 action ('Fetch') and the object ('one facet of a node'), then enumerates the specific facets available, such as servers, allocations, backups, and system stats. This distinguishes it from the sibling get_node tool, which fetches the whole node.

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 conveys that this is for fetching a specific node subresource rather than the full node, and it notes that system_* facets require the node to be online. However, it does not explicitly state when to prefer this over related tools like get_server_resource or get_database_agent_host_resource, leaving some usage inference to the agent.

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

calagopus_get_serverGet a serverA
Read-only

Fetch one server by UUID (full or short), or by external ID. detail: "full" adds the complete egg, node and owner records plus the startup command and every limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNoWhich identifier `server` holds.uuid
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
serverYesServer UUID, short UUID, or external ID when `by` is 'external'.

TDQS

A4.5/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 and non-destructive, and the description adds useful behavioral detail about the 'full' detail mode expanding the response to include egg, node, and owner records. No side effects or contradictions are hidden.

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

Conciseness5/5

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

Two concise sentences deliver the core action, identifier options, and detail behavior without redundancy. The structure is clean and front-loaded with the primary purpose.

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

Completeness4/5

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

Without an output schema, the description provides enough context by contrasting summary versus full response content. It omits error/not-found behavior but is acceptable for a read-only get operation with clear annotations.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds meaningful semantics: it clarifies that 'server' may be a UUID, short UUID, or external ID, that 'by' selects the identifier type, and that 'detail' controls payload verbosity with concrete examples of what 'full' includes.

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

Purpose5/5

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

States the exact resource (a single server) and the retrieval action, with supported identifiers (UUID, short UUID, external ID). It clearly differentiates from list_servers and get_server_resource by focusing on fetching one server and describing optional full detail.

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?

Clearly indicates when to use by specifying 'Fetch one server' and explaining the identifier modes and detail option. It does not explicitly name sibling alternatives like list_servers, but the singular 'one server' and detail semantics provide strong implicit guidance.

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

calagopus_get_server_resourceGet a server sub-resourceA
Read-only

Fetch one facet of a server: its allocations, egg variables, backups, databases, database instances, mounts, or its console and install logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
linesNoFor logs and install_logs only: how many trailing lines to return.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
serverYesServer UUID.
per_pageNoRecords per page (max 100).
resourceYesWhich facet of the server to fetch.

TDQS

A4.1/5.0
Behavior4/5

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

The description says only 'Fetch', and the annotations list readOnlyHint=true, openWorldHint=true, destructiveHint=false, with no contradiction. The description adds modest transparency by framing the operation as read-only retrieval, though it does not detail pagination or error behavior beyond what the schema implies.

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, focused sentence that immediately states the action and scope. It contains no filler or redundant phrasing and front-loads the key information.

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

Completeness3/5

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

There is no output schema, and the description does not mention return shape or pagination semantics. The parameter schema covers filtering and pagination details, so the description is adequate for a straightforward fetch operation, but it leaves some contextual details about response behavior implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by enumerating the resource values, which helps map the 'resource' parameter, but it does not provide additional explanation for pagination, filtering, or detail beyond what is already in the parameter descriptions.

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

Purpose5/5

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

The description uses the specific verb 'Fetch' and identifies the exact scope: one facet of a server. It enumerates the available facets (allocations, egg variables, backups, etc.), which clearly distinguishes it from sibling tools like get_server that fetch the whole server.

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 phrase 'one facet of a server' communicates that this tool is for sub-resource retrieval rather than full server retrieval, giving implicit usage guidance. It does not explicitly name alternatives or state when not to use it, but the resource enum and sibling context make the intended use reasonably clear.

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

calagopus_get_system_healthGet system healthA
Read-only

Health detail: clock offsets against NTP, applied vs pending database migrations, and per-node reachability. Use nodes: true for the node-by-node view.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesNoReturn per-node health instead of panel-wide health.

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with a read-only health check. However, the description adds no extra behavioral detail beyond what the annotations provide, such as side effects, freshness guarantees, or access requirements.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the core health components and immediately gives the relevant parameter guidance, making it efficient and easy to parse.

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

Completeness4/5

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

Given the simple one-parameter read-only tool and the absence of an output schema, the description sufficiently explains what the health report contains and how to request per-node detail. It does not describe response structure or error cases, but those are not necessary for basic 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?

The single boolean `nodes` parameter is fully covered by the schema description ('Return per-node health instead of panel-wide health'), and the tool description reinforces it with a concrete usage example. This adds clarity beyond the schema alone, though the schema already covers the meaning well.

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 tool's purpose: reporting system health, specifically NTP clock offsets, database migration status, and per-node reachability. This distinguishes it from sibling tools that target individual nodes or resources by framing it as a system-wide health view with optional per-node detail.

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 and gives actionable guidance for the `nodes` parameter ('Use `nodes: true` for the node-by-node view'). It does not explicitly name alternative tools or state when not to use it, but the health-focused wording makes the intended use obvious.

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

calagopus_get_userGet a userA
Read-only

Fetch one user by UUID, or by the external ID carried over from a billing system or a Pterodactyl/Pelican migration.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNoWhich identifier `user` holds.uuid
userYesUser UUID, or external ID when `by` is 'external'.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, and the description's 'Fetch' wording is consistent with a read-only operation. The description does not add behavioral details beyond what annotations provide, but it does not contradict them.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the primary purpose and includes essential identifier context without unnecessary words or repetition.

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

Completeness4/5

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

With no output schema, the description adequately frames the tool as fetching a single user and leaves the details to the parameter schema. It does not explicitly state what fields are returned, but the detail parameter provides a summary/full distinction, and the core intent is fully conveyed.

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 descriptions cover all three parameters with enums, defaults, and inline explanations. The tool description adds meaningful context for the 'external' option by explaining that external IDs are 'carried over from a billing system or a Pterodactyl/Pelican migration', enriching the schema's bare 'external ID' wording.

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

Purpose5/5

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

The description clearly states a specific verb ('Fetch') and resource ('one user'), and distinguishes it from list-oriented siblings by emphasizing retrieval of a single user. It also uniquely specifies the supported identifier types (UUID or external ID), making the tool's purpose unambiguous.

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

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: fetching a single user by UUID or external ID. It implicitly distinguishes from list_users and user-specific sub-resources, though it does not explicitly state 'use list_users to browse' or enumerate exclusions.

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

calagopus_get_user_activityGet a user's activity logA
Read-only

Audit trail for one user: logins, server actions, API key use. Requires users.activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
userYesUser UUID.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

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

The read-only and non-destructive annotations are already present, and the description adds the permission requirement and audit-trail nature. It does not describe pagination or response format, but those are partly covered by parameter defaults and the detail parameter.

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, front-loaded sentence that states the resource, the content, and the permission requirement. Every word adds value and there is no redundancy.

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

Completeness4/5

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

For a simple read-only lookup, the description gives the essential context: what the tool returns, for whom, and what permission is needed. It does not specify output shape, but no output schema exists and the parameters already cover pagination and detail level.

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%: user, page, detail, search, and per_page all have descriptions plus defaults and constraints. The tool description itself adds no additional parameter meaning, so 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 clearly identifies the resource (one user's activity) and the content (logins, server actions, API key use), and the title repeats the specific scope. This distinguishes it from broader activity or listing tools among the siblings.

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

Usage Guidelines4/5

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

The description states the required permission (users.activity) and makes the single-user scope explicit. It does not explicitly contrast with the sibling calagopus_get_activity, but the scope is clear enough for correct selection.

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

calagopus_get_user_serversList a user's serversA
Read-only

List the servers owned by one user. Answers 'what does this customer actually have' without paging the whole server list.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
userYesUser UUID.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, which fully cover the safety profile. The description adds purpose context but no additional behavioral details such as side effects or permissions, so it meets the lower bar set by the annotations.

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

Conciseness5/5

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

The description is two sentences, tightly packed with relevant purpose and use-case information without any redundant words or boilerplate.

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 operation with well-covered parameters and safety annotations, the description supplies enough context to select and call the tool correctly. No output schema is present, but that is not a deficiency given the simplicity of the resource. It could arguably include an example of the user parameter, but the schema already clarifies it.

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

Parameters3/5

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

The schema provides 100% coverage with clear descriptions for all 5 parameters (user UUID, pagination, detail level, free-text search). Since schema coverage is high, the baseline is 3; the description does not add extra parameter nuance beyond the schema.

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

Purpose5/5

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

The description clearly states the action (list), the resource (servers), and the scope (owned by one user). It effectively distinguishes this tool from the sibling list_servers (all servers) and get_server (single server) by specifying the user filter.

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 concrete use case ('what does this customer actually have') and hints at an efficiency benefit over listing all servers. It does not explicitly state when to avoid this tool, but the 'without paging the whole server list' phrasing gives practical guidance.

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

calagopus_list_backup_configurationsList backup configurationsA
Read-only

List backup configurations — the S3 / Restic / PBS / Kopia targets that locations, nodes and servers back up to. Credentials inside them are redacted unless CALAGOPUS_ALLOW_SECRETS is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond the annotations by specifying that credentials are redacted unless CALAGOPUS_ALLOW_SECRETS is set. This is valuable contextual behavior not implied by the readOnlyHint or other 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 concise, using two sentences to convey the core functionality and the redaction behavior. It is well-structured and free of unnecessary detail.

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

Completeness4/5

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

No output schema is provided, and the description does not enumerate the fields returned in the list. It does mention redaction behavior and the detail parameter, but the exact response structure remains unspecified.

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?

All parameters have descriptions, and the schema covers 100% of them. However, the description for 'detail' references server and egg sizes, which seem irrelevant to backup configurations and may confuse the agent.

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 that the tool lists backup configurations, specifying the resource type (S3/Restic/PBS/Kopia targets). It distinguishes itself from other list tools by the unique resource it operates on.

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

Usage Guidelines3/5

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

The description does not explicitly compare this tool to alternatives, such as list_system_backup_policies, or explain when to prefer one over the other. It relies on the resource type being self-evident, which may be sufficient but lacks direct guidance.

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

calagopus_list_database_agent_hostsList database agent hostsA
Read-only

List database agent hosts — machines running the Calagopus database agent, which provisions containerised database instances from templates. Shows the agent URL and its memory/disk budget. Requires database-agent-hosts.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the required permission ('database-agent-hosts.read') and the specific fields returned, which are not in annotations. This is complementary behavioral context beyond the structured metadata.

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

Conciseness4/5

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

The description is two sentences and front-loads the purpose. The first sentence is slightly wordy with the dash and subordinate clause, but it is still concise and informative. Every sentence contributes value.

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 list operation with four optional parameters and no output schema, the description provides enough context: what the tool does, what it returns, and the permission needed. It does not need to explain the detail parameter's size trade-off since that is covered in the schema. Overall, it is complete for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, and each parameter already has a clear description (page, detail, search, per_page). The tool description adds no additional parameter 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 ('List') and a precise resource ('database agent hosts'), and elaborates with a definition that distinguishes these from generic database hosts. It also mentions the output fields (agent URL, memory/disk budget), making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description provides context about what these hosts are, implying when this tool is appropriate, but it does not explicitly name alternatives or exclusions. Given the sibling calagopus_list_database_hosts, an explicit contrast would have been valuable, but the context is clear enough to infer the difference.

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

calagopus_list_database_agent_templatesList database agent templatesA
Read-only

List the templates the database agent provisions instances from: engine type, docker images, and the CPU/memory/disk each instance gets. Requires database-agent-templates.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).
templateNoTemplate UUID — list the instances created from it instead.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds the permission requirement (database-agent-templates.read), which is a behavioral gate beyond annotations. It does not contradict annotations and provides additional operational context.

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

Conciseness5/5

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

The description is two concise sentences: the first states the purpose and content, the second the permission requirement. There is no fluff, and the most important information is front-loaded. Every word earns its place.

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

Completeness4/5

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

The tool has no output schema, but the description clearly indicates what the list contains. It does not explicitly describe the return format (e.g., paginated list) or structure, but the schema covers parameter details and the title implies a list response. For a simple read-only list tool, this is nearly complete, though it could state the response is a paginated list of template records.

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

Parameters3/5

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

All 5 parameters have descriptions in the schema (100% coverage), so the tool description does not need to explain them. The description's mention of engine type, docker images, and resources relates to the response content, not the parameter details. Baseline 3 is correct given full schema coverage.

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

Purpose5/5

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

The description states a clear verb (List) and a specific resource (the templates the database agent provisions instances from), and enumerates the content (engine type, docker images, CPU/memory/disk). This distinguishes it from sibling list tools like list_database_hosts or list_eggs, which cover different resources.

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

Usage Guidelines4/5

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

It provides a clear context: lists templates with specific fields, and includes a permission requirement ('Requires database-agent-templates.read'). However, it does not explicitly mention alternatives or when not to use this tool, though its specificity makes the intended use obvious. A 4 is appropriate for clear context without exclusions.

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

calagopus_list_database_hostsList database hostsA
Read-only

List the external database servers the panel hands out user databases on, with their type, public host/port and deployment state. Connection credentials are redacted unless CALAGOPUS_ALLOW_SECRETS is set. Requires database-hosts.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A3.8/5.0
Behavior4/5

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

Adds genuine behavioral context beyond the annotations: the credential redaction behavior gated on CALAGOPUS_ALLOW_SECRETS, and the permission requirement (database-hosts.read). With readOnlyHint=true and destructiveHint=false already declaring the safety profile, the description contributes additional value about secrets handling and auth rather than repeating 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 tight sentences, each earning its place: purpose, credential-redaction caveat, and permission requirement. Purpose is front-loaded first. Zero filler or redundant wording.

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?

Complete for a filtered, paginated list tool: annotations carry the read-only safety profile, the schema documents all parameters (including the large-record warning on detail), and the description covers purpose, redaction behavior, and auth. A return-format description would be nice but is not critical given no output schema exists and the described fields (type, host/port, state) imply the response shape.

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 documents all four parameters (page, detail, search, per_page) with defaults, ranges, and the size warning on detail. The description adds no param-level semantics beyond what the schema provides; it references 'type, public host/port and deployment state' which pertains to output, not inputs. Baseline 3 is appropriate.

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

Purpose4/5

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

States a clear verb (List) and resource (external database servers the panel hands out user databases on), plus the fields returned: type, public host/port, deployment state. The 'external' qualifier and 'database servers' framing distinguish it from the agent-host sibling (list_database_agent_hosts) and the singular get_database_host, though it doesn't name them explicitly.

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

Usage Guidelines3/5

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

The 'external database servers the panel hands out user databases on' phrasing implies this is for externally-facing hosts versus agent hosts, but no explicit when-to-use/when-not-to-use or named alternative is given. The sibling calagopus_list_database_agent_hosts is the natural alternative and is never mentioned.

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

calagopus_list_egg_configurationsList egg configurationsA
Read-only

List reusable egg configuration presets (shared startup/stop/script blocks eggs can inherit).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4/5.0
Behavior4/5

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

The description states it is a list operation, which aligns with the readOnlyHint and destructiveHint annotations. It does not contradict the annotations, and the list behavior is clear enough; no additional side-effect warnings are needed.

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, focused sentence with no unnecessary words or repetition. It immediately conveys the tool's purpose without bloat.

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?

The description gives enough context to identify the entity being listed, and the schema covers pagination and detail-level parameters. Since there is no output schema, a bit more detail about the returned records could help, but it is not essential for a simple 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 coverage is 100% with each parameter described, so the description does not need to repeat parameter details. The description adds no extra parameter semantics, keeping it at the baseline for full schema coverage.

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

Purpose5/5

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

Clearly specifies the action ('List') and the resource ('reusable egg configuration presets'), and distinguishes them from plain eggs by noting these are shared startup/stop/script blocks that eggs can inherit.

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 explains what the tool returns but does not explicitly say when to prefer it over sibling tools like calagopus_list_eggs or calagopus_get_egg. The distinction is inferable from the wording but not directly stated.

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

calagopus_list_egg_repositoriesList egg repositoriesA
Read-only

List the git repositories eggs are synced from, and when each last synced. Pass repository to list the eggs available in one of them.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).
repositoryNoRepository UUID — list the eggs it offers instead of the repositories.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the bar for added behavioral context is lower. The description adds meaningful behavior beyond the annotations — the dual-mode semantics where `repository` changes what is returned — and nothing in the description 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?

Two tight sentences with the primary purpose front-loaded in the first sentence and the parameter-mode behavior in the second. No filler, no 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?

There is no output schema, so return-value documentation is not required. With all parameters documented in a fully covered schema and the description clearly explaining the tool's dual-mode purpose, an agent has everything needed to invoke 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?

Schema coverage is 100% with all five parameters described, so the baseline is 3. The description adds only marginal param meaning — it restates the `repository` behavior that the schema already covers ('Repository UUID — list the eggs it offers instead of the repositories') without adding new detail for the other four parameters.

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

Purpose5/5

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

The description names a specific verb and resource — "List the git repositories eggs are synced from" — and adds the recency dimension ("when each last synced"). It also distinguishes itself from the sibling list_eggs tool by making clear this lists repositories, with the `repository` parameter switching to per-repository egg listing.

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

Usage Guidelines4/5

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

The second sentence gives an implicit usage rule: pass `repository` to list eggs within one repository versus listing all repositories otherwise. It does not explicitly name sibling alternatives (e.g., list_eggs) or state when to prefer them, but the conditional behavior is clear enough to guide a caller.

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

calagopus_list_eggsList eggsA
Read-only

List eggs (server templates). Omit nest to get every egg on the panel grouped by nest; pass a nest UUID to page through just that nest's eggs. The summary drops the install script and the upstream repository copy — ask for a single egg with detail 'full' when you need those. Requires eggs.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
nestNoNest UUID. Omit to list every egg on the panel, grouped by nest.
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only and non-destructive behavior. The description adds transparency about response content, noting that summary mode drops install scripts and upstream repository copies, and that full details require a single egg request. It does not elaborate on pagination or rate limits, but those are not contradicted by 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 well-organized, leading with the core purpose and then adding usage nuances. It contains no unnecessary words and is easy to parse.

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

Completeness4/5

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

Given that no output schema is provided, the description gives useful context about response content (summary vs full) and required permissions. It could mention pagination behavior, but the overall context is sufficient for an agent 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?

Schema coverage is 100% with each parameter described, so the baseline is 3. The description adds a bit of semantic nuance by explaining the effect of omitting vs providing nest and the detail trade-off, but it mostly relies on the schema for parameter 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 description clearly states the tool's purpose: 'List eggs (server templates).' It also clarifies the distinction between listing all eggs or filtering by nest, which helps differentiate it from sibling tools like get_egg.

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 explicit usage guidance: omit nest for all eggs grouped by nest, or pass a nest UUID to filter. It also explains when to use detail 'full' vs the default summary, and mentions the required eggs.read permission. It does not explicitly name sibling alternatives but implies them.

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

calagopus_list_endpointsList panel API endpointsA
Read-only

Search this panel's live OpenAPI spec for endpoints. Use it when no dedicated tool covers what you need, then call calagopus_get with the path you find. Reflects the panel's actual version, including routes added by extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax paths to return.
filterNoCase-insensitive substring to match against the path, e.g. 'backup'.
methodNoOnly list paths that support this method. Defaults to get.get

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the bar is lower. The description adds useful context about reflecting the panel's actual version and extension-added routes, but does not introduce any conflicting behavior.

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 primary action and purpose, and every sentence carries essential information without 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 the tool's simplicity (3 optional parameters, no output schema), the description is complete. It explains what the tool does, when to use it, and how to proceed after listing endpoints.

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 covers 100% of parameters with clear descriptions, so the baseline is 3. The tool description does not add any extra parameter-specific explanation beyond the schema, but the schema itself is sufficient.

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 panel API endpoints by searching the live OpenAPI spec, and it explicitly distinguishes itself from sibling tools by directing use when no dedicated tool covers the needed endpoint.

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 explicit usage guidance: use when no dedicated tool covers the need, then follow up with calagopus_get. This directly addresses when to use the tool relative to alternatives.

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

calagopus_list_extensionsList installed extensionsA
Read-only

List the backend extensions installed on the panel, with their version and enabled state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, and destructiveHint as false, so the safe read-only behavior is covered. The description adds useful detail about what is listed (version and enabled state) but does not disclose ordering, pagination, failure modes, or any other behavioral traits beyond the annotation-provided guarantees.

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, direct sentence with no filler or redundancy. It states the action, the resource, and the relevant output fields in a compact form.

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-parameter, read-only listing tool, the description is complete. It identifies the target resource and the key fields returned, and since there is no output schema, the description sufficiently conveys what the caller should expect.

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

Parameters4/5

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

The tool has zero parameters and the schema coverage is effectively complete, so there is no parameter information for the description to add. The baseline for zero-parameter tools is 4, and the description does not introduce any parameter-related ambiguity.

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') with a clear resource ('backend extensions installed on the panel') and states the returned information ('version and enabled state'). This makes the tool's purpose immediately identifiable and distinct from the many 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 Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives, nor does it mention any sibling tools. However, the zero-parameter read-only nature and the unique 'extensions' resource imply that it is for simple enumeration of installed backend extensions, so usage is clear enough but not explicitly guided.

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

calagopus_list_locationsList locationsA
Read-only

List the locations nodes are grouped into, with the backup configuration each one inherits.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the behavioral detail that locations inherit backup configurations, but does not elaborate on pagination, output size, or other runtime behavior beyond what the schema already documents.

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 front-loads the primary action and includes a valuable detail. No filler or redundancy, making it highly efficient.

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 list tool with no output schema, the description adequately conveys what is returned (locations and their inherited backup configs). Pagination and detail options are documented in the schema. The description is complete enough for an agent to call it correctly, though it could mention typical response size or note that 'full' detail can be large.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (page, detail, search, per_page) are already fully described. The description adds minimal extra meaning beyond clarifying that locations carry backup configs, which is implicit in the 'detail' parameter anyway.

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 locations and adds the specific detail that each includes its inherited backup configuration. This distinguishes it from sibling list tools like calagopus_list_nodes and calagopus_list_backup_configurations, making its purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage (to get locations with backup configs) but does not explicitly state when to prefer this over alternative tools or provide any exclusions. An agent can infer context but lacks explicit guidance on choosing among the many sibling list tools.

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

calagopus_list_mountsList mountsA
Read-only

List host-path mounts that can be attached to eggs, nodes and servers.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive behavior and open-world semantics. The description adds resource scope but no additional behavioral details such as pagination or result shape; 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?

Single sentence with no filler, front-loading the verb and object while embedding the relevant attachment targets.

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 with no output schema, the description plus fully annotated parameters is sufficient to call correctly. The open-world annotation and parameter descriptions cover the remaining context.

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

Parameters3/5

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

Schema descriptions fully cover all four optional parameters (page, detail, search, per_page) with defaults and constraints. The description contributes domain context but does not need to repeat parameter behavior.

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

Purpose5/5

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

States a specific verb and resource: 'List host-path mounts' and clarifies scope with 'that can be attached to eggs, nodes and servers.' This distinguishes it from other list tools in the sibling set.

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

Usage Guidelines4/5

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

Description gives clear context for when to use: retrieving available host-path mounts for attachment to eggs, nodes, or servers. It does not explicitly name alternatives, but no sibling tool directly overlaps this purpose.

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

calagopus_list_nestsList nestsA
Read-only

List nests — the groups eggs are organised into (Minecraft, Source, Rust, ...). Requires nests.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4/5.0
Behavior4/5

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

The annotations already declare read-only and non-destructive behavior, and the description adds a meaningful authorization requirement ('Requires nests.read'). It does not contradict the annotations and provides extra context about the required permission.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action and resource, then adds a clarifying definition and permission note. Every part contributes useful information without unnecessary fluff.

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

Completeness4/5

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

For a simple read-only list tool, the description is mostly complete: it defines the resource, gives examples, and notes the required permission. It does not describe response shape or pagination behavior, but given the absence of an output schema and the presence of pagination parameters, this is a minor omission.

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

Parameters3/5

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

Schema coverage for parameters is 100%, with each parameter already having a clear description. The tool description does not add additional parameter-level semantics beyond the schema, so the baseline score of 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 clearly states the verb 'List' and the resource 'nests', and expands on what nests are ('the groups eggs are organised into') with concrete examples. This makes the tool's purpose unambiguous and distinct from sibling tools like list_eggs or list_nodes.

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

Usage Guidelines3/5

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

The description implies when to use the tool and mentions a prerequisite permission ('Requires nests.read'), but it does not explicitly contrast this with alternative list tools or state when not to use it. The usage guidance is present but largely implicit.

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

calagopus_list_nodesList nodesA
Read-only

List the wings nodes attached to the panel, with their location, public URL, SFTP endpoint and memory/disk allocation limits. Requires nodes.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes no side effects, and the description aligns with that by saying 'List' and requiring only nodes.read. It adds useful context about returned data and auth requirements, though it does not describe pagination behavior or failure modes.

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

Conciseness5/5

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

The description is a single, concise sentence that covers purpose, output fields, and required permission. There is no redundant or filler content, and parameter descriptions are similarly tight.

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 list operation with no required parameters and no output schema, the description adequately indicates what is returned and what permission is needed. It does not specify the exact response shape or pagination metadata, but the main fields are listed and the operation is clearly scoped.

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?

All four parameters have descriptions that go beyond the bare schema: page, per_page, search, and detail are each explained. The detail description explains summary vs. full but includes unrelated examples about servers and eggs, slightly reducing precision for a node-specific tool.

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

Purpose5/5

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

The description clearly states the tool lists wings nodes attached to the panel and enumerates the returned fields (location, public URL, SFTP endpoint, memory/disk allocation limits). It is distinct from sibling tools such as list_servers, list_locations, get_node, and get_node_resource.

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 the required permission scope ('nodes.read') and indicates a read-only collection operation. It does not explicitly contrast with get_node or get_node_resource, but 'List' plus the specific node resource makes the intended usage clear.

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

calagopus_list_oauth_providersList OAuth providersA
Read-only

List configured SSO/OAuth providers and their role mappings. Client secrets are redacted unless CALAGOPUS_ALLOW_SECRETS is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.3/5.0
Behavior5/5

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

Discloses that client secrets are redacted unless CALAGOPUS_ALLOW_SECRETS is set, a behavioral trait not present in annotations, and consistent with readOnlyHint and destructiveHint false.

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

Conciseness5/5

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

Two concise sentences with no redundancy. The primary purpose and an important security behavior are stated efficiently.

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 no output schema, the description covers the essential behavior, pagination implied by parameters, and the notable redaction caveat. No critical missing context.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline applies. The description does not add extra parameter semantics beyond what the schema already provides.

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?

Clearly states the verb 'List' and the specific resource 'configured SSO/OAuth providers' with scope 'role mappings', distinguishing it from other list tools that target different entities.

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?

Implies use for retrieving OAuth provider information but does not explicitly state when to choose this tool over alternatives or mention any exclusions. The redaction note provides context but not alternative guidance.

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

calagopus_list_rolesList admin rolesA
Read-only

List roles and the admin/server permission sets they grant. Useful for working out why a user can or cannot do something.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

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

The description implies a read-only listing operation, and the annotations explicitly mark readOnlyHint true and destructiveHint false. There is no contradiction and no 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 deliver the core purpose and a practical use case with no filler or redundancy.

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

Completeness4/5

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

The description covers purpose and typical usage well. There is no output schema, but for a simple list operation with pagination parameters already documented, the description is sufficient.

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

Parameters3/5

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

All four parameters are fully described in the schema with 100% coverage, so the description adds little parameter-level meaning beyond what is already available.

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?

Clearly states the verb ('List'), resource ('roles'), and what is returned ('admin/server permission sets'), plus a concrete use case. This distinguishes it from sibling list tools 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?

Provides an explicit use case: figuring out why a user can or cannot do something. It does not list alternatives or when-not-to-use, but the given guidance is clear and relevant.

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

calagopus_list_serversList serversA
Read-only

List game servers across the whole panel. search matches the server name, UUID and owner. Each record names its node, owner, egg and primary allocation. Requires servers.read.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and non-destructive behavior. The description adds the permission requirement 'Requires servers.read' and outlines output fields, which is extra transparency beyond the annotations. No contradictions 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 two sentences, focused, and free of filler. It front-loads the core purpose and adds only essential behavioral and output context.

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

Completeness4/5

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

Given the schema already explains pagination, detail levels, and search, the description is largely complete. It adds output field expectations and permission requirements, though it does not mention response envelope or ordering, which are minor gaps for a list tool with no output schema.

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 descriptions already cover all four parameters thoroughly. The tool description adds valuable detail by specifying that search matches server name, UUID, and owner, which is not fully enumerated in the schema. This goes beyond the baseline for a fully schema-covered tool.

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

Purpose5/5

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

Description clearly states the verb 'List' and resource 'game servers' with scope 'across the whole panel', and additionally specifies what each record contains (node, owner, egg, primary allocation). This is specific enough to distinguish it from sibling tools like get_server or get_user_servers.

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

Usage Guidelines3/5

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

The description gives useful context about the search filter and the panel-wide scope, but it does not explicitly mention when to prefer this tool over alternatives such as get_server, get_user_servers, or search. Usage guidance is implied rather than stated.

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

calagopus_list_system_backup_policiesList system backup policiesB
Read-only

List scheduled panel-wide backup policies and what each one targets (locations, nodes, servers).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint and destructiveHint annotations already establish that this operation is safe. The description adds 'scheduled panel-wide' context but no further behavioral caveats or side-effect disclosures, so it meets the baseline with annotations.

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

Conciseness5/5

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

The description is a single, direct sentence with no filler or redundant wording. It front-loads the core action and resource and adds the key target details efficiently.

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

Completeness4/5

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

For a simple list operation with fully documented parameters and safety annotations, the description is sufficient. It could mention output shape or pagination behavior, but those are not necessary given the list context and parameter names.

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

Parameters3/5

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

All four parameters have descriptions in the schema, so the description does not need to repeat them. It adds no additional parameter context beyond the schema, giving the baseline for full coverage.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'scheduled panel-wide backup policies' with target composition. However, it does not explicitly distinguish this from the similarly named sibling 'list_backup_configurations', so it is not fully differentiated.

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 explicit guidance is given on when to use this tool versus the closely related 'list_backup_configurations' or other list tools. The description only states what it does, not when it should be preferred.

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

calagopus_list_usersList panel usersA
Read-only

List user accounts on the Calagopus panel, newest page first. Use search to match a username, email or name. Requires the users.read admin permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
detailNosummary returns the useful fields only; full returns the panel's complete record, which can be very large (a single server is ~15 KB, an egg ~13 KB).summary
searchNoFree-text filter applied by the panel across the record's searchable columns.
per_pageNoRecords per page (max 100).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as read-only and non-destructive. The description adds behavioral detail by specifying sort order, search matching fields, and the required permission, providing useful context beyond the annotations.

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

Conciseness5/5

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

The description is concise and front-loaded, stating the primary purpose first. Each remaining sentence adds useful behavior or usage detail without redundancy.

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

Completeness4/5

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

Given the simple list operation and complete schema coverage, the description is sufficient for an agent to call the tool correctly. No output schema is present, but the purpose, filter behavior, and permission are adequately described.

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

Parameters4/5

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

The schema already covers all four parameters with descriptions. The description adds meaningful semantics for the `search` parameter by specifying it matches username, email, or name, going beyond the schema's generic text.

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 user accounts on the Calagopus panel, sorted newest first. It uses a specific verb and resource, distinguishing it from sibling tools like calagopus_get_user.

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 explicitly explains how to use the `search` parameter and notes the required users.read permission. It does not explicitly contrast with alternatives, but the listing purpose and search guidance are clear enough for correct use.

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

calagopus_panel_infoPanel overviewA
Read-only

Start here. Returns the panel version and host, the record counts (users, servers, nodes, eggs, database hosts, ...), and — unless you turn them off — CPU/memory/disk figures and clock/migration health. One call to orient yourself before drilling in.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_healthNoInclude NTP clock offsets and database migration status.
include_systemNoInclude host CPU/memory/disk and version information.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnly and non-destructive. The description adds no additional behavioral traits beyond mentioning that health/system metrics can be toggled off, which is more parameter semantics than behavior. No hidden side effects or permissions are disclosed.

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?

Very concise – two sentences. Front-loaded with 'Start here' and immediately enumerates the returned information. No fluff or redundancy.

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

Completeness4/5

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

Given no output schema, the description sufficiently lists the categories of information returned (version, host, record counts, CPU/memory/disk, clock/migration health). It is complete enough for an overview tool, though exact structure of the response is not specified.

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 descriptions cover both parameters at 100% (include_health and include_system are each described). The description text mentions 'unless you turn them off' which aligns with the defaults but does not add significant new meaning beyond what the schema already provides.

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 returns panel version, host, record counts, and health/system metrics. It distinguishes itself from sibling list/get tools by positioning as an orientation overview ('Start here', 'One call to orient yourself before drilling in').

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 tells the agent when to use it: 'Start here' and 'One call to orient yourself before drilling in' – this is direct guidance relative to the many sibling tools for specific list/get operations.

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. 36 tool updatesv0.2.0
    • First observedcalagopus_get
    • First observedcalagopus_get_activity
    • First observedcalagopus_get_database_agent_host
    • First observedcalagopus_get_database_agent_host_resource
    • First observedcalagopus_get_database_host
    • First observedcalagopus_get_egg
    • First observedcalagopus_get_egg_servers
    • First observedcalagopus_get_egg_variables
    • First observedcalagopus_get_node
    • First observedcalagopus_get_node_resource
    • First observedcalagopus_get_server
    • First observedcalagopus_get_server_resource
    • First observedcalagopus_get_system_health
    • First observedcalagopus_get_user
    • First observedcalagopus_get_user_activity
    • First observedcalagopus_get_user_servers
    • First observedcalagopus_list_backup_configurations
    • First observedcalagopus_list_database_agent_hosts
    • First observedcalagopus_list_database_agent_templates
    • First observedcalagopus_list_database_hosts
    • First observedcalagopus_list_egg_configurations
    • First observedcalagopus_list_egg_repositories
    • First observedcalagopus_list_eggs
    • First observedcalagopus_list_endpoints
    • First observedcalagopus_list_extensions
    • First observedcalagopus_list_locations
    • First observedcalagopus_list_mounts
    • First observedcalagopus_list_nests
    • First observedcalagopus_list_nodes
    • First observedcalagopus_list_oauth_providers
    • First observedcalagopus_list_roles
    • First observedcalagopus_list_servers
    • First observedcalagopus_list_system_backup_policies
    • First observedcalagopus_list_users
    • First observedcalagopus_panel_info
    • First observedcalagopus_search

TDQS

A3.9/5.0
Disambiguation5/5

Every tool targets a specific resource/action pair; even similar names such as get_database_agent_host and get_database_agent_host_resource are clearly separated by the resource versus resource-facet distinction. With 36 tools, there is no pair that appears to duplicate another.

Naming Consistency4/5

Tool names overwhelmingly follow a consistent calagopus_ + verb + noun pattern (list_*, get_*). A few exceptions—calagopus_panel_info, calagopus_search, and calagopus_get—break the verb-noun pattern, but they are minor and the overall convention is predictable.

Tool Count2/5

36 tools is above the 25-tool threshold for a focused tool set. While the Calagopus domain is broad, the large number of narrow getters and listers makes the surface heavy and more likely to confuse an agent, even though each tool individually seems justified.

Completeness4/5

The read-only surface covers most of the panel domain: users, servers, nodes, eggs, locations, mounts, OAuth, roles, activity, backups, and database infrastructure. The raw GET escape hatch plus OpenAPI discovery helps cover edge cases, though a few single-resource getters such as get_mount or get_nest are missing, and there are no mutations by design.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables AI agents to manage server infrastructure through the 1Panel API, including Docker containers, databases, and system monitoring. It provides tools for website management, file operations, and application deployment via natural language commands.
    15
    21
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables natural language management of FastPanel 2 servers, including creating sites, databases, SSL certificates, and hardening nginx configurations.
    32
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language management of Pebblehost Minecraft servers, including server status, control, console commands, file management, and backups.
    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/BerdiiNN/calagopus-mcp'

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