Skip to main content
Glama
hecateq
by hecateq

Coolify MCP Server

A production-grade MCP (Model Context Protocol) server that provides AI agents with secure, controlled access to Coolify infrastructure management.

npm version npm downloads Node.js License: MIT

⚑ 1-Click AI Setup (Cursor, Claude, Windsurf, OpenCode, Copilot)

Give this single instruction or raw URL to any AI assistant:

Read https://raw.githubusercontent.com/hecateq/mcp-coolify/main/INSTALL_PROMPT.md and set up the Coolify MCP server for my active environment.

Table of Contents

  1. Why This MCP Exists

  2. Architecture

  3. Security Model

  4. Coolify API Permissions

  5. Quick Start

  6. Environment Variables

  7. Local stdio Usage (Client Configuration)

  8. πŸ€– LLM Install Prompt

  9. Remote HTTP Usage

  10. Tool Catalog

  11. Operation Modes

  12. Production Safeguards

  13. Docker Usage

  14. Troubleshooting

  15. Development


Related MCP server: mcp-devtools

Why This MCP Exists

Coolify ships its own MCP integration that exposes raw Coolify API resources directly to AI agents. While powerful, that MCP operates as a transparent pass-through to the API, with minimal guardrails between the agent and your production infrastructure.

This MCP is different. It adds a security and policy enforcement layer between the AI agent and Coolify:

Aspect

Coolify Built-in MCP

This MCP Server

Security Model

Direct API token passthrough

Least-privilege token selection, scoped by operation

Operation Modes

None

read-only, deploy-only, safe-write

Access Control

Coolify-native RBAC only

Allowlists by project, environment, and resource UUID

Production Guard

None

Blocks mutations on production environments by default

Audit Trail

Minimal

Structured audit events for every mutation (allowed/denied/error)

Secret Redaction

None

Automatic redaction of tokens, passwords, DB URLs, logs, SSH keys, email addresses

Rate/Scope

Full API surface

42 curated tools grouped into 10 domains: core, GitHub discovery, scheduled tasks, deployments, backups, servers, teams, configuration, storage, and environment variables

This MCP is designed for operational control β€” letting AI safely observe, deploy, and manage Coolify resources without risking accidental production damage.


Architecture

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     MCP Protocol      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚              β”‚  (stdio or HTTP SSE)   β”‚                                                  β”‚
 β”‚  AI Agent    │◄──────────────────────►│              Coolify MCP Server                  β”‚
 β”‚  (Claude,    β”‚                        β”‚                                                  β”‚
 β”‚   Copilot,   β”‚     Tool Calls         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
 β”‚   Cursor,    │◄──────────────────────►│  β”‚  Auth &  │─►│ Policy & │─►│   Scope      β”‚    β”‚
 β”‚   OpenCode)  β”‚     JSON Responses     β”‚  β”‚ Token    β”‚  β”‚ Operationβ”‚  β”‚  Allowlist   β”‚    β”‚
 β”‚              β”‚                        β”‚  β”‚ Selector β”‚  β”‚ Mode     β”‚  β”‚              β”‚    β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                        β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
                                         β”‚                      β”‚               β”‚            β”‚
                                         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                                         β”‚  β”‚           Production Guard                β”‚  β”‚
                                         β”‚  β”‚  (Deny/allow production mutations)        β”‚  β”‚
                                         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                                         β”‚                      β”‚                           β”‚
                                         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                                         β”‚  β”‚  Tool Domains (42 tools across 10 areas)  β”‚  β”‚
                                         β”‚  β”‚                                            β”‚  β”‚
                                         β”‚  β”‚  Core Read (10)   β”‚  GitHub Discovery (3)  β”‚  β”‚
                                         β”‚  β”‚  Actions (11)     β”‚  Scheduled Tasks (4)   β”‚  β”‚
                                         β”‚  β”‚  Servers (5)      β”‚  Backups (2)           β”‚  β”‚
                                         β”‚  β”‚  Teams (2)        β”‚  Configuration (2)     β”‚  β”‚
                                         β”‚  β”‚  Storage (2)      β”‚  Deployments (1)       β”‚  β”‚
                                         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                                         β”‚                      β”‚                           β”‚
                                         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                                         β”‚  β”‚        Coolify API Client                  β”‚  β”‚
                                         β”‚  β”‚  (Token-scoped HTTP requests, redaction)   β”‚  β”‚
                                         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                                         β”‚                      β”‚                           β”‚
                                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                                β”‚
                                                       HTTPS (Bearer Token)
                                                                β”‚
                                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                         β”‚              Coolify Instance                    β”‚
                                         β”‚  (Projects, Resources, Deployments, Envs,       β”‚
                                         β”‚   Servers, Teams, GitHub Apps, Backups,         β”‚
                                         β”‚   Scheduled Tasks, Storage Mounts)              β”‚
                                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Security Model

Least-Privilege Tokens

Instead of a single master token, you can configure up to 5 scoped tokens:

Token Env Var

Used For

Example Coolify Token Scopes

COOLIFY_READ_TOKEN

All read operations (list/get resources)

view:projects, view:resources

COOLIFY_SENSITIVE_TOKEN

Reading sensitive data (env vars, logs)

view:envs, view:logs

COOLIFY_WRITE_TOKEN

Write operations (set env vars)

edit:envs

COOLIFY_DEPLOY_TOKEN

Deploy/start/restart operations

deploy:applications

COOLIFY_API_TOKEN

Fallback when no scoped token matches

* (full access)

The server selects the minimum-privilege token for each operation. If COOLIFY_READ_TOKEN is set, list-projects uses it, never the master token.

Secret Redaction

  • Environment variable values are NEVER returned by coolify_list_environment_variables β€” only keys and metadata.

  • Logs are scanned for Bearer tokens, password, secret, api_key patterns and automatically redacted.

  • The Pino logger has built-in redaction paths for sensitive fields.

  • Audit events do not contain secret values.

Phase 2 Security Controls

With the addition of 21 new tools in Phase 2, the following security controls were added:

Scheduled Task Command Redaction

  • Task command output in coolify_get_task_executions is redacted to prevent command injection visibility.

  • Cron expressions are validated server-side before creation/update.

Path Traversal Prevention (Storage)

  • coolify_create_storage validates source and destination paths against directory traversal patterns (../, ..\\, absolute paths).

  • If a path contains traversal sequences, the operation is denied with a VALIDATION_ERROR.

Field Allowlisting (Configuration Updates)

  • coolify_update_application_config and coolify_update_database_config use PATCH semantics with explicit field allowlisting.

  • Only documented fields can be updated. Arbitrary field injection is blocked.

  • Each update is audited with coolify.application.config.update / coolify.database.config.update events.

Email/SSH Key Redaction

  • coolify_list_team_members gates email addresses behind policy. By default, [REDACTED] is returned.

  • coolify_get_server redacts SSH private keys and sensitive connection details.

  • coolify_list_servers redacts network information (IP addresses, ports).

GitHub Discovery Security

  • coolify_list_github_apps returns no secrets β€” only UUID, name, organization, and installation metadata.

  • Repository browsing is scoped to what the configured GitHub App can access.

  • All GitHub discovery tools are read-only with no mutation capabilities.

Database Password Protection

  • coolify_create_database never returns generated passwords or connection strings in its response.

  • coolify_list_database_backups redacts destination storage paths.

Additional Protections

  • Timing-safe API key comparison for HTTP transport auth (prevents timing attacks).

  • Scope checking via allowlists before any operation touches a resource.

  • Production guard runs before any mutation.


Coolify API Permissions

The relationship between the Coolify API token permissions and this MCP's tool categories:

Permission Class

Required Coolify Token Scope

MCP Tools

Read

view:projects, view:resources, view:deployments, view:servers, view:teams

All 25 read tools (core + discovery + servers + teams + storage)

Sensitive Read

view:envs, view:logs

coolify_get_application_logs, coolify_list_environment_variables, coolify_get_server, coolify_get_task_executions

Deploy

deploy:applications

coolify_deploy, coolify_restart, coolify_start, coolify_cancel_deployment

Write

edit:envs, operate:applications, operate:servers

All safe-write tools (create project/env/app/service/db, set env vars, create scheduled tasks, create backups, create storage, update configs, validate server)

Stop

operate:applications

coolify_stop (gated by COOLIFY_ALLOW_STOP)


Quick Start

Prerequisites

  • Node.js >= 18

  • A Coolify instance with API tokens configured

  • Coolify API token(s) with appropriate scopes

npm install -g @imhecateq/mcp-coolify
# Or run it on the fly
npx -y @imhecateq/mcp-coolify

Option B β€” Install from GitHub

git clone https://github.com/hecateq/mcp-coolify.git
cd mcp-coolify
npm install
npm run build

Then configure your MCP client (see Local stdio Usage) with:

{
  "type": "local",
  "command": ["node", "node_modules/@imhecateq/mcp-coolify/dist/index.js"],
  "environment": { "COOLIFY_URL": "...", "COOLIFY_API_TOKEN": "..." }
}

Option C β€” Clone and run locally

# 1. Clone the repository
git clone https://github.com/hecateq/mcp-coolify.git
cd mcp-coolify

# 2. Install dependencies (prepares dist/ automatically)
npm install

# 3. Configure environment
cp .env.example .env
# Edit .env with your Coolify URL and API token

# 4. Run the server (stdio mode β€” default)
npm start

Test the connection

The server exposes a health tool. In stdio mode, use an MCP client to query:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "coolify_health",
    "arguments": {}
  }
}

Expected response:

{
  "content": [{
    "text": "{\n  \"ok\": true,\n  \"coolifyUrl\": \"[CONFIGURED]\",\n  \"authStatus\": \"authenticated\",\n  \"latencyMs\": 42,\n  \"transport\": \"stdio\"\n}"
  }]
}


πŸ€– LLM Install Prompt (copy-paste this into any AI assistant)

Copy and paste this single instruction into any AI assistant (Cursor, Claude Code, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Aider, etc.):

Read https://raw.githubusercontent.com/hecateq/mcp-coolify/main/INSTALL_PROMPT.md and set up the Coolify MCP server for my environment.

Or copy the prompt instructions directly:

Configure the @imhecateq/mcp-coolify MCP server on this machine.

1. Ask me first for:
   - COOLIFY_URL (e.g. https://coolify.example.com)
   - COOLIFY_API_TOKEN (read-only token is fine)
   - COOLIFY_OPERATION_MODE (default: read-only)

2. Detect my MCP client (Cursor .cursor/mcp.json, Claude Desktop claude_desktop_config.json, OpenCode opencode.json, Cline, etc.) and add:
   - command: "npx"
   - args: ["-y", "@imhecateq/mcp-coolify"]
   - env: { COOLIFY_URL, COOLIFY_API_TOKEN, COOLIFY_OPERATION_MODE: "read-only" }

3. Verify connection by calling `coolify_health`.

Show me what changed when done.

See INSTALL_PROMPT.md for the standalone guide.


Environment Variables

All configuration is via environment variables. Read from src/config/schema.ts via Zod validation.

Required

Variable

Type

Default

Description

COOLIFY_URL

string (URL)

β€”

Base URL of your Coolify instance (e.g. https://coolify.example.com). Trailing slashes are stripped.

API Tokens (at least one required)

Variable

Type

Default

Description

COOLIFY_API_TOKEN

string

β€”

Fallback API token (used when no scoped token matches)

COOLIFY_READ_TOKEN

string

β€”

Read-only token for normal read operations

COOLIFY_SENSITIVE_TOKEN

string

β€”

Token for reading sensitive data (envs, logs)

COOLIFY_WRITE_TOKEN

string

β€”

Token for write operations (env vars, settings)

COOLIFY_DEPLOY_TOKEN

string

β€”

Token for deploy operations

Note: Scoped tokens override COOLIFY_API_TOKEN. The server automatically selects the least-privilege token for each operation.

Transport

Variable

Type

Default

Description

MCP_TRANSPORT

"stdio" | "http"

"stdio"

Transport mode

MCP_HTTP_HOST

string

"0.0.0.0"

HTTP transport host (only used when MCP_TRANSPORT=http)

MCP_HTTP_PORT

number (1–65535)

3000

HTTP transport port

MCP_SERVER_API_KEY

string

β€”

API key for authenticating HTTP MCP requests (required for HTTP transport)

Operation Mode

Variable

Type

Default

Description

COOLIFY_OPERATION_MODE

"read-only" | "deploy-only" | "safe-write"

"read-only"

Restricts what operations the MCP server allows

Allowlists (Optional)

Variable

Type

Default

Description

COOLIFY_ALLOWED_PROJECT_UUIDS

string (comma-separated identifiers)

β€”

Restrict access to specific projects. Accepts UUID v4 or Coolify-native identifiers

COOLIFY_ALLOWED_ENVIRONMENT_UUIDS

string (comma-separated identifiers)

β€”

Restrict access to specific environments. Accepts UUID v4 or Coolify-native identifiers

COOLIFY_ALLOWED_RESOURCE_UUIDS

string (comma-separated identifiers)

β€”

Restrict access to specific resources. Accepts UUID v4 or Coolify-native identifiers

Production Protection

Variable

Type

Default

Description

COOLIFY_PRODUCTION_ENV_NAMES

string (comma-separated)

"production,prod"

Environment names considered "production"

COOLIFY_DENY_PRODUCTION_MUTATIONS

"true" | "false"

"true"

Block all mutations on production environments

COOLIFY_ALLOW_PRODUCTION_DEPLOY

"true" | "false"

"false"

Allow deploy on production (only if DENY_PRODUCTION_MUTATIONS is false)

COOLIFY_ALLOW_STOP

"true" | "false"

"false"

Allow stop operations (globally)

COOLIFY_ALLOW_ENV_WRITE

"true" | "false"

"false"

Allow environment variable modifications

Logging

Variable

Type

Default

Description

COOLIFY_LOG_MAX_LINES

number (1–1000)

200

Max log lines to return from application logs

LOG_LEVEL

string

"info"

Pino log level ("fatal", "error", "warn", "info", "debug", "trace")


Local stdio Usage (Client Configuration)

1. OpenCode (opencode.local.jsonc or opencode.json)

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "coolify": {
      "type": "local",
      "command": ["npx", "-y", "@imhecateq/mcp-coolify"],
      "environment": {
        "COOLIFY_URL": "https://coolify.example.com",
        "COOLIFY_API_TOKEN": "{env:COOLIFY_API_TOKEN}",
        "COOLIFY_OPERATION_MODE": "read-only"
      }
    }
  }
}

Using a local clone? Replace "command": ["npx", "-y", "@imhecateq/mcp-coolify"] with "command": ["node", "/path/to/mcp-coolify/dist/index.js"]. A complete example is at examples/opencode.local.jsonc.

2. Claude Desktop (claude_desktop_config.json)

On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%\Claude\claude_desktop_config.json
On Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "coolify": {
      "command": "npx",
      "args": ["-y", "@imhecateq/mcp-coolify"],
      "env": {
        "COOLIFY_URL": "https://coolify.example.com",
        "COOLIFY_API_TOKEN": "your-coolify-api-token",
        "COOLIFY_OPERATION_MODE": "read-only"
      }
    }
  }
}

3. Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "coolify": {
      "command": "npx",
      "args": ["-y", "@imhecateq/mcp-coolify"],
      "env": {
        "COOLIFY_URL": "https://coolify.example.com",
        "COOLIFY_API_TOKEN": "your-coolify-api-token",
        "COOLIFY_OPERATION_MODE": "read-only"
      }
    }
  }
}

4. VS Code (Cline / Roo Code)

In your MCP settings (cline_mcp_settings.json):

{
  "mcpServers": {
    "coolify": {
      "command": "npx",
      "args": ["-y", "@imhecateq/mcp-coolify"],
      "env": {
        "COOLIFY_URL": "https://coolify.example.com",
        "COOLIFY_API_TOKEN": "your-coolify-api-token",
        "COOLIFY_OPERATION_MODE": "read-only"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Remote HTTP Usage (OpenCode)

When running the MCP server in HTTP mode behind a reverse proxy, configure OpenCode for remote access:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "coolify-remote": {
      "type": "remote",
      "url": "https://coolify-mcp.example.com/mcp",
      "headers": {
        "Authorization": "Bearer {env:MCP_SERVER_API_KEY}"
      }
    }
  }
}

A complete example is at examples/opencode.remote.jsonc.

HTTP Transport Endpoints

Endpoint

Auth Required

Purpose

GET /healthz

No

Liveness check β€” returns {"ok":true,"status":"alive"}

GET /readyz

No

Readiness check β€” verifies Coolify API is reachable

POST /mcp

Yes (Bearer)

MCP protocol endpoint β€” all tool calls go here


Tool Catalog

The server registers 42 tools: 25 read-only tools and 17 action (mutation/deploy) tools.

Note: Tool numbering is for reference only. Tools 1-15 are Phase 1 (original), tools 16-42 are Phase 2 (new).

Read Tools (25)

Core Read Tools (10 β€” Phase 1)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

1

coolify_health

Check Coolify API and MCP server connectivity. Returns health status, auth status, and latency. No secrets in response.

{}

βœ…

βœ…

2

coolify_list_projects

List all Coolify projects with optional name filter.

name? (string)

βœ…

βœ…

3

coolify_get_project

Get a single project by UUID with its environments and resource counts.

uuid (resource ID)

βœ…

βœ…

4

coolify_list_resources

List all resources with filters.

project_uuid?, environment_uuid?, resource_type? (enum: 7 types), status? (enum: 5 statuses), search? (string)

βœ…

βœ…

5

coolify_get_resource

Get a single resource detail by UUID and type. Sensitive fields (DB URLs) redacted.

uuid (resource ID), type (enum: application/service/database)

βœ…

βœ…

6

coolify_project_overview

High-level project overview: project info, envs, resources, deployments, health summary. Aggregates 4 API calls into one.

project_uuid (resource ID)

βœ…

βœ…

7

coolify_list_deployments

List deployments with filters. Newest first.

resource_uuid?, status? (enum: 5 statuses), limit? (1–50)

βœ…

βœ…

8

coolify_get_deployment

Get deployment detail by UUID: status, timestamps, commit info, error summary.

deployment_uuid (string)

βœ…

βœ…

9

coolify_get_application_logs

Get application logs (capped by COOLIFY_LOG_MAX_LINES). Secrets redacted.

application_uuid (resource ID), lines? (10–1000)

βœ…

βœ…

10

coolify_list_environment_variables

List env vars for a resource. Values are NEVER returned β€” only keys and metadata.

application_uuid (resource ID)

βœ…

βœ…

GitHub Discovery Tools (3 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

16

coolify_list_github_apps

List GitHub Apps connected to your Coolify instance. Returns team and system-wide apps. No secrets.

{}

βœ…

βœ…

17

coolify_list_repositories

List repositories accessible via a GitHub App. Supports pagination and search.

github_app_uuid (resource ID), search? (string), page? (int), limit? (int)

βœ…

βœ…

18

coolify_list_branches

List branches of a GitHub repository via a GitHub App.

github_app_uuid (resource ID), owner (string), repository (string)

βœ…

βœ…

Scheduled Task Read Tools (2 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

19

coolify_list_scheduled_tasks

List scheduled tasks for an application or service. Returns task UUID, name, command, schedule, enabled, last execution.

resource_uuid (resource ID), resource_type? (string)

βœ…

βœ…

20

coolify_get_task_executions

Get execution history for a scheduled task. Output is redacted for security.

task_uuid (string), resource_uuid? (resource ID), resource_type? (string), status? (string), limit? (1–100)

βœ…

βœ…

Backup Read Tool (1 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

21

coolify_list_database_backups

List backup configurations and executions for a database. Sensitive destination paths are redacted.

database_uuid (resource ID)

βœ…

βœ…

Server Read Tools (4 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

22

coolify_list_servers

List all servers connected to your Coolify instance. Sensitive network info and SSH keys redacted.

{}

βœ…

βœ…

23

coolify_get_server

Get a single server detail by UUID. SSH keys and sensitive network info redacted.

uuid (resource ID)

βœ…

βœ…

24

coolify_list_server_resources

List resources associated with a specific server.

server_uuid (resource ID), resource_type? (string), status? (string)

βœ…

βœ…

25

coolify_list_server_domains

List domains associated with a server.

server_uuid (resource ID)

βœ…

βœ…

Team Read Tools (2 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

26

coolify_get_current_team

Get the current team context: id, name, and permission scope.

{}

βœ…

βœ…

27

coolify_list_team_members

List members of the current team. Email addresses policy-gated and redacted by default.

{}

βœ…

βœ…

Storage Read Tool (1 β€” Phase 2)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

28

coolify_list_storages

List storage mounts for an app/service/database. Sensitive host paths redacted.

resource_uuid (resource ID), resource_type (enum: application/service/database)

βœ…

βœ…

Configuration Update Tools (2 β€” Phase 2, safe-write)

#

Tool Name

Purpose

Input

Read-Only

Idempotent

29

coolify_update_application_config

Update application config: health check, resource limits, replicas, ports, build settings. PATCH semantics. Audit: coolify.application.config.update

application_uuid (resource ID), health_check?, cpu_limit?, memory_limit?, replicas?, ports?, etc.

βœ… (safe-write)

βœ…

30

coolify_update_database_config

Update database config: CPU/memory limits, name, description. PATCH semantics. Audit: coolify.database.config.update

database_uuid (resource ID), cpu_limit?, memory_limit?, name?, description?

βœ… (safe-write)

βœ…

Action Tools (17)

Core Deploy Tools (5 β€” Phase 1)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

11

coolify_deploy

Deploy a resource. Supports force deploy (POST vs GET).

resource_uuid (resource ID), resource_type (enum), force? (bool), environment_name? (string)

❌

βœ…

Mode + Scope + Production

12

coolify_restart

Restart a resource.

resource_uuid (resource ID), resource_type (enum), environment_name? (string)

⚠️

❌

Mode + Scope + Production

13

coolify_start

Start a stopped resource.

resource_uuid (resource ID), resource_type (enum), environment_name? (string)

❌

βœ…

Mode + Scope + Production

14

coolify_stop

Stop a resource. Disabled by default β€” must set COOLIFY_ALLOW_STOP=true. Marked destructive.

resource_uuid (resource ID), resource_type (enum), environment_name? (string)

βœ…

❌

AllowStop gate + Mode + Scope + Production

15

coolify_set_environment_variable

Set a single env var on a resource. Disabled by default β€” COOLIFY_ALLOW_ENV_WRITE=true. Value NEVER returned.

resource_uuid (resource ID), key (string 1–256), value (string 1–65536), environment_name? (string)

⚠️

βœ…

AllowEnvWrite gate + Mode + Scope + Production

New Action Tools (6 β€” Phase 2, safe-write)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

31

coolify_create_project

Create a new project.

name (string), description? (string)

❌

βœ…

Mode + Scope + Production

32

coolify_create_environment

Create a new environment within a project.

project_uuid (resource ID), name (string)

❌

βœ…

Mode + Scope + Production

33

coolify_create_application

Create a new application in a project environment.

project_uuid (resource ID), environment_name (string), name (string), build_pack?, repository?, etc.

❌

βœ…

Mode + Scope + Production

34

coolify_create_service

Create a new service in a project environment.

project_uuid (resource ID), environment_name (string), name (string), image (string), etc.

❌

βœ…

Mode + Scope + Production

35

coolify_create_database

Create a new database. Passwords/connection strings NEVER returned.

project_uuid (resource ID), environment_name (string), name (string), database_type (enum: 8 types), etc.

❌

βœ…

Mode + Scope + Production

36

coolify_set_environment_variables

Set multiple env vars in bulk (1–50). Disabled by default β€” COOLIFY_ALLOW_ENV_WRITE=true. Values NEVER returned.

resource_uuid (resource ID), resource_type (enum), variables (array of {key, value}), environment_name? (string)

⚠️

βœ…

AllowEnvWrite gate + Mode + Scope + Production

Deployment Action Tool (1 β€” Phase 2)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

37

coolify_cancel_deployment

Cancel a queued or in-progress deployment. Returns UNSUPPORTED_OPERATION for terminal states. Audit: coolify.deployment.cancel

deployment_uuid (string)

❌

❌

Mode + Scope

Backup Action Tool (1 β€” Phase 2, safe-write)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

38

coolify_create_backup_config

Create a backup config for a database. Cron expression validated. Audit: coolify.database_backup_config.create

database_uuid (resource ID), schedule (cron string), destination_uuid? (resource ID), retention? (int), enabled? (bool)

❌

βœ…

Mode + Scope + Production

Scheduled Task Action Tools (2 β€” Phase 2, safe-write)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

39

coolify_create_scheduled_task

Create a scheduled task (cron job). Cron expression validated. Audit: coolify.scheduled_task.create

resource_uuid (resource ID), resource_type (enum), name (string), command (string), schedule (cron string), container?, timeout? (int), enabled? (bool)

❌

βœ…

Mode + Scope + Production

40

coolify_update_scheduled_task

Update a scheduled task.

task_uuid (string), resource_uuid (resource ID), resource_type (enum), name?, command?, schedule? (cron string), enabled? (bool)

❌

βœ…

Mode + Scope + Production

Server Validation Tool (1 β€” Phase 2)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

41

coolify_validate_server

Validate server connectivity and configuration. Audited as mutation action.

server_uuid (resource ID)

❌

βœ…

Mode + Scope

Storage Action Tool (1 β€” Phase 2, safe-write)

#

Tool Name

Purpose

Input

Destructive

Idempotent

Policy Checks

42

coolify_create_storage

Create a storage mount for a resource. Path traversal validated. Audit: coolify.storage.create

resource_uuid (resource ID), resource_type (enum), storage_type? (string), source? (string), destination (string)

❌

βœ…

Mode + Scope + Production

Policy Check Chain (Action Tools)

Every action tool runs through the following policy checks before executing:

  1. Allow Gate Check β€” Some tools have dedicated allow gates: COOLIFY_ALLOW_STOP (for stop), COOLIFY_ALLOW_ENV_WRITE (for env var modifications). If the gate is closed, the operation is denied.

  2. Operation Mode Check β€” Does the mode (read-only/deploy-only/safe-write) permit this operation?

  3. Scope/Allowlist Check β€” Is the target resource UUID in the allowed list (if configured)?

  4. Production Guard Check β€” If the environment_name matches a production pattern, is this mutation allowed?

  5. Input Validation β€” All inputs are validated via Zod schemas. Cron expressions are validated. Path traversal is prevented for storage operations.

  6. Audit Logging β€” Every mutation is logged with a structured audit event containing the operation, resource, and result (allowed/denied/error).

If any check fails, the operation is denied with a POLICY_DENIED error code and an audit event is logged.

Common Response Format

All tools return a consistent JSON response structure:

Success:

{
  "ok": true,
  "summary": "Found 3 project(s)",
  "data": [ /* ... */ ],
  "meta": {
    "durationMs": 42,
    "truncated": false
  }
}

Error (policy denied):

{
  "ok": false,
  "summary": "Operation denied by policy",
  "error": {
    "code": "POLICY_DENIED",
    "message": "Operation mode is 'read-only' β€” 'deploy' operations are not permitted",
    "retryable": false
  },
  "meta": {
    "durationMs": 5
  }
}

Error (upstream):

{
  "ok": false,
  "summary": "Failed to list projects",
  "error": {
    "code": "UPSTREAM_ERROR",
    "message": "Coolify API returned status 500",
    "retryable": true
  },
  "meta": {
    "durationMs": 1203
  }
}

Error Codes

Code

Meaning

Retryable

AUTHENTICATION_FAILED

Token missing or invalid

❌

PERMISSION_DENIED

Token lacks required scope

❌

POLICY_DENIED

Operation blocked by MCP policy (mode/scope/production)

❌

RESOURCE_NOT_FOUND

Coolify resource not found (404)

❌

RATE_LIMITED

Coolify API rate limit hit (429)

βœ…

COOLIFY_UNAVAILABLE

Coolify instance unreachable or 5xx

βœ…

REQUEST_TIMEOUT

Request exceeded 30s timeout

βœ…

VALIDATION_ERROR

Invalid input parameters

❌

UPSTREAM_ERROR

Generic Coolify API error

varies

INTERNAL_ERROR

MCP server internal error

❌


Operation Modes

The COOLIFY_OPERATION_MODE environment variable controls what operations the MCP server permits:

read-only (default)

Safe for monitoring and exploration. Only the 10 read tools are allowed. All 5 action tools return POLICY_DENIED.

Allowed

Denied

All read tools (health, list, get, logs)

All action tools (deploy, restart, start, stop, set env)

deploy-only

Read access plus deploy operations (deploy, restart, start). Write operations (stop, set env vars) are denied.

Allowed

Denied

All read tools

coolify_stop

coolify_deploy

coolify_set_environment_variable

coolify_restart

coolify_start

safe-write

Full read + deploy + write access. Stop and env-write are still gated behind their respective ALLOW_* flags.

Allowed

Gated By

All read tools

β€”

coolify_deploy

β€”

coolify_restart

β€”

coolify_start

β€”

coolify_stop

COOLIFY_ALLOW_STOP=true

coolify_set_environment_variable

COOLIFY_ALLOW_ENV_WRITE=true

Mode Decision Matrix

Operation

read-only

deploy-only

safe-write

All read tools (25)

βœ…

βœ…

βœ…

coolify_deploy

❌

βœ…

βœ…

coolify_restart

❌

βœ…

βœ…

coolify_start

❌

βœ…

βœ…

coolify_stop

❌

❌

βœ… (if ALLOW_STOP)

coolify_set_environment_variable

❌

❌

βœ… (if ALLOW_ENV_WRITE)

coolify_set_environment_variables (bulk)

❌

❌

βœ… (if ALLOW_ENV_WRITE)

coolify_cancel_deployment

❌

βœ…

βœ…

coolify_create_* (project/env/app/service/db)

❌

❌

βœ…

coolify_create_scheduled_task

❌

❌

βœ…

coolify_update_scheduled_task

❌

❌

βœ…

coolify_create_backup_config

❌

❌

βœ…

coolify_create_storage

❌

❌

βœ…

coolify_update_application_config

❌

❌

βœ…

coolify_update_database_config

❌

❌

βœ…

coolify_validate_server

❌

❌

βœ…


Production Safeguards

Production Environment Detection

The server defines "production" environments via COOLIFY_PRODUCTION_ENV_NAMES (default: production,prod). When an action tool receives an environment_name parameter, it checks if that name matches any production name (case-insensitive).

Protection Layers

Layer

Env Var

Default

Effect

Deny All Production Mutations

COOLIFY_DENY_PRODUCTION_MUTATIONS

true

Blocks ALL mutations (deploy, restart, start, stop, env write) on production environments

Allow Production Deploy

COOLIFY_ALLOW_PRODUCTION_DEPLOY

false

If DENY_PRODUCTION_MUTATIONS is false, this controls whether deploy is allowed on production

Allow Stop

COOLIFY_ALLOW_STOP

false

Globally disables stop operations. Required for production stop too

Allow Env Write

COOLIFY_ALLOW_ENV_WRITE

false

Globally disables env var modifications. Required for production env writes too

# Strict β€” no mutations on production at all (default)
COOLIFY_OPERATION_MODE=read-only
COOLIFY_DENY_PRODUCTION_MUTATIONS=true
COOLIFY_ALLOW_STOP=false
COOLIFY_ALLOW_ENV_WRITE=false
# Moderate β€” allow deploys to production, block everything else
COOLIFY_OPERATION_MODE=deploy-only
COOLIFY_DENY_PRODUCTION_MUTATIONS=false
COOLIFY_ALLOW_PRODUCTION_DEPLOY=true
COOLIFY_ALLOW_STOP=false
COOLIFY_ALLOW_ENV_WRITE=false

Docker Usage

Build from source

npm run build

Run with Docker

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist/ ./dist/
EXPOSE 3000
CMD ["node", "dist/index.js"]

Docker Compose

services:
  coolify-mcp:
    build: .
    environment:
      COOLIFY_URL: "https://coolify.example.com"
      COOLIFY_API_TOKEN: "${COOLIFY_API_TOKEN}"
      MCP_TRANSPORT: "http"
      MCP_HTTP_PORT: "3000"
      MCP_SERVER_API_KEY: "${MCP_SERVER_API_KEY}"
      COOLIFY_OPERATION_MODE: "read-only"
    ports:
      - "3000:3000"

Troubleshooting

Server won't start

Symptom: Configuration validation failed: coolifyUrl: Required

Fix: Set COOLIFY_URL environment variable to your Coolify instance URL.

export COOLIFY_URL="https://coolify.example.com"

Symptom: Configuration validation failed: coolifyUrl: Invalid URL

Fix: Ensure COOLIFY_URL is a valid URL including protocol (https://).

Authentication failures

Symptom: AUTHENTICATION_FAILED β€” "No Coolify API token configured"

Fix: Set at least COOLIFY_API_TOKEN or a scoped token like COOLIFY_READ_TOKEN.

HTTP transport not working

Symptom: MCP_SERVER_API_KEY is required for HTTP transport mode

Fix: Set MCP_SERVER_API_KEY to a strong random key when using MCP_TRANSPORT=http.

# Generate a secure key
openssl rand -hex 32

Production mutations blocked

Symptom: POLICY_DENIED β€” "Production mutations are denied"

Cause: Environment name matches a production pattern (default: production, prod) and COOLIFY_DENY_PRODUCTION_MUTATIONS is true (the default).

Fix: If intentional, use a non-production environment. To allow production mutations, set COOLIFY_DENY_PRODUCTION_MUTATIONS=false and review the specific allow flags.

Stop operations blocked

Symptom: POLICY_DENIED β€” "Stop operations are disabled"

Cause: COOLIFY_ALLOW_STOP defaults to false.

Fix: Set COOLIFY_ALLOW_STOP=true if stop operations are required.

Application logs truncated

Symptom: Logs show fewer lines than requested

Cause: Server caps at COOLIFY_LOG_MAX_LINES (default 200, max 1000).

Fix: Increase COOLIFY_LOG_MAX_LINES up to 1000, or request fewer lines.


Development

Commands

npm run dev          # Run in development mode with hot-reload (tsx watch)
npm run build        # Build to dist/ (tsup, ESM format)
npm start            # Run the built server
npm test             # Run all tests (vitest)
npm run test:watch   # Run tests in watch mode
npm run test:coverage # Run tests with coverage report
npm run lint         # Lint source code
npm run lint:fix     # Fix lint issues
npm run format       # Format with Prettier
npm run typecheck    # Type-check without emitting (tsc --noEmit)

Project Structure

src/
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ schema.ts              # Zod schema for all environment config
β”‚   └── load-config.ts         # Config loading and validation
β”œβ”€β”€ coolify/
β”‚   β”œβ”€β”€ client.ts              # Coolify API HTTP client
β”‚   β”œβ”€β”€ types.ts               # TypeScript types for Coolify data models
β”‚   β”œβ”€β”€ normalizers.ts         # Response normalizers (strip undefined, redact secrets)
β”‚   └── errors.ts              # Error handling and mapping
β”œβ”€β”€ security/
β”‚   β”œβ”€β”€ policy.ts              # Operation mode enforcement
β”‚   β”œβ”€β”€ scope.ts               # Allowlist-based scope checking
β”‚   β”œβ”€β”€ production-guard.ts    # Production environment protection
β”‚   └── redaction.ts           # Secret redaction utilities
β”œβ”€β”€ observability/
β”‚   β”œβ”€β”€ logger.ts              # Pino logger with secret redaction
β”‚   └── audit.ts               # Structured audit event logging
β”œβ”€β”€ server/
β”‚   └── create-server.ts       # MCP server setup and tool registration (42 tools)
β”œβ”€β”€ tools/
β”‚   β”œβ”€β”€ read/                  # 10 core read-only tools (Phase 1)
β”‚   β”œβ”€β”€ actions/               # 11 action tools (5 Phase 1 + 6 Phase 2)
β”‚   β”œβ”€β”€ discovery/             # 3 GitHub discovery tools (Phase 2)
β”‚   β”œβ”€β”€ scheduled-tasks/       # 4 scheduled task tools (Phase 2)
β”‚   β”œβ”€β”€ deployments/           # 1 deployment cancel tool (Phase 2)
β”‚   β”œβ”€β”€ backups/               # 2 database backup tools (Phase 2)
β”‚   β”œβ”€β”€ servers/               # 5 server tools (Phase 2)
β”‚   β”œβ”€β”€ teams/                 # 2 team tools (Phase 2)
β”‚   β”œβ”€β”€ configuration/         # 2 config update tools (Phase 2)
β”‚   └── storage/               # 2 storage tools (Phase 2)
β”œβ”€β”€ transports/
β”‚   β”œβ”€β”€ stdio.ts               # stdio transport (default)
β”‚   └── http.ts                # HTTP/SSE transport with auth
└── index.ts                   # Entry point

License

MIT

Available Tools

59 tools
coolify_cancel_deploymentA

Cancel a queued or in-progress deployment. Returns UNSUPPORTED_OPERATION for terminal states. Audit: coolify.deployment.cancel.

ParametersJSON Schema
NameRequiredDescriptionDefault
deployment_uuidYesDeployment UUID to cancel

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false (mutation), but the description adds valuable behavioral details: it explicitly says the operation is for queued/in-progress deployments and that terminal states yield UNSUPPORTED_OPERATION. The audit trail reference ('coolify.deployment.cancel') provides additional transparency about logging, exceeding what annotations convey.

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

Conciseness5/5

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

The description is two short sentences: the first delivers the core action and scope, the second adds a critical edge case and audit context. No wasted words, and the key information is front-loaded.

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

Completeness4/5

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

For a single-parameter, low-complexity cancel operation, the description covers the purpose, applicable state, error behavior for terminal states, and audit logging. It does not elaborate on return formats or asynchronous behavior, but given the lack of an output schema and the simplicity of the operation, the context 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%, with a single parameter 'deployment_uuid' fully described as 'Deployment UUID to cancel'. The description does not add additional parameter semantics beyond what the schema already provides, 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 uses a specific verb ('Cancel') and resource ('queued or in-progress deployment'), clearly distinguishing it from deployment listing, getting, or deploying tools. It also states the exact scope (non-terminal states) and notes the unsupported case for terminal states, 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 Guidelines4/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: when a deployment is queued or in-progress, not terminal. It also states that terminal states will return UNSUPPORTED_OPERATION, effectively informing users when not to attempt cancellation. However, it does not explicitly name alternative tools or provide broader context on when cancellation is appropriate versus other actions.

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

coolify_create_applicationA

Create a new application in a project environment. Subject to operation mode, allowlist, and production guard policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesApplication name
portNoApplication port
branchNoGit branch name
domainsNoComma-separated domain names
build_packNoBuild pack
source_typeNoSource type for the application
project_uuidYesProject UUID
repository_urlNoGit repository URL
environment_nameNoEnvironment name for production guard check
environment_uuidYesEnvironment UUID

TDQS

A3.9/5.0
Behavior3/5

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

The annotations already convey mutation (readOnlyHint=false) and non-idempotency. The description adds a policy caveat ('Subject to operation mode, allowlist, and production guard policies'), which is useful, but it is vague and does not explain exact failure conditions, side effects, or return 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 core purpose, and followed by a concise policy caveat. Every word earns its place with no redundancy.

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

Completeness3/5

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

For a 10-parameter create operation with no output schema, the description is minimal. It does not explain relationships like source_type to repository_url/build_pack, and the policy caveat is vague. The rich schema helps, but the description alone leaves key operational details 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% and all 10 parameters include descriptions, so the description does not need to compensate. The text adds no parameter-specific detail 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 uses a specific verb ('Create') and identifies the resource ('a new application') plus the scoping context ('in a project environment'). This clearly distinguishes it from sibling tools like coolify_create_service and coolify_create_database.

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 clearly states the intended use: creating an application within a project environment. However, it does not explicitly name alternatives or state when not to use this tool (e.g., for services or databases), though the resource type makes that implicit.

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

coolify_create_backup_configA

Create a backup configuration for a database. Cron expression is validated. Audit: coolify.database_backup_config.create

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledNoWhether the backup config is enabled
scheduleYesCron expression for backup schedule
retentionNoNumber of backups to retain
database_uuidYesDatabase UUID
destination_uuidNoStorage destination UUID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are all false, so the description carries the transparency burden. It adds behavioral context not in annotations: 'Cron expression is validated' and 'Audit: coolify.database_backup_config.create' disclose validation and audit behavior. No contradictions exist.

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 purpose, a key behavioral note, and audit information without waste. The description is front-loaded with the primary action and every sentence adds 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?

Despite having 5 parameters and no output schema, the description covers the essential purpose and one key constraint (validation). The schema handles parameter details. It could mention return value or on-success behavior, but for a straightforward create operation this 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?

Schema description coverage is 100%, so parameters are already fully documented. The description's mention of cron validation adds minimal value beyond the schema's 'Cron expression for backup schedule'. Baseline 3 is appropriate since the schema does the heavy lifting.

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 'Create' and resource 'backup configuration for a database', clearly distinguishing it from sibling tools like coolify_update_backup_config and coolify_list_database_backups. It unambiguously states what the tool does.

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

Usage Guidelines4/5

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

The description implies use when creating a new backup configuration for a database, but does not explicitly mention alternatives or exclusions. It provides clear context without naming when to use this tool over update_backup_config or list_database_backups, so it falls short of a 5.

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

coolify_create_databaseA

Create a new database in a project environment. Passwords and connection strings are NEVER returned in response. Requires safe-write operation mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDatabase name
versionNoDatabase version (e.g., 16, 8.0)
server_uuidYesServer UUID to deploy the database on
project_uuidYesProject UUID
database_typeYesDatabase type
environment_nameNoEnvironment name for production guard check
environment_uuidYesEnvironment UUID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false etc., so the description does not need to restate these. It adds valuable behavioral context by warning that 'Passwords and connection strings are NEVER returned in response,' which is a critical behavioral trait not inferable from annotations. It also mentions the safe-write mode requirement, adding further transparency about operational conditions.

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 purpose, and every sentence adds value: the first defines the function, the second provides critical safety/behavioral warnings. It is concise without 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?

The description covers the essential context for a create database tool: what it does, the safe-write mode requirement, and the crucial fact that secrets are not returned. Although there is no output schema and the response format is not described, the warning about passwords and connection strings partially compensates by setting expectations. The parameter descriptions in the schema fill in the remaining details.

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 has 100% description coverage, with each parameter already documented (e.g., name, version, server_uuid). The tool description does not add any additional parameter semantics beyond what the schema provides. Since the schema carries the full burden, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Create a new database in a project environment.' The verb 'Create' and resource 'database' are specific, and the context ('project environment') distinguishes it from sibling tools like create_application or create_service. No ambiguity about its purpose.

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 usage context by stating it creates a database in a project environment and notes a prerequisite: 'Requires safe-write operation mode.' While it does not explicitly name alternatives or exclusions, the context is clear enough for an agent to select this tool when creating a database. The safe-write requirement is important operational guidance.

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

coolify_create_destinationA

Create a Docker network destination on a server. Subject to operation mode, allowlist, and production guard policies. Audit: coolify.destination.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDestination name (defaults to <server-name>-<network> if omitted)
networkYesDocker network name (required by the Coolify API)
server_uuidYesServer UUID the destination will be attached to
destination_typeNoDestination type β€” must match the server type (standalone or swarm)

TDQS

A4/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, destructive=false), the description adds that the operation is subject to policies and creates an audit entry ('Audit: coolify.destination.create'). This gives useful behavioral context without contradicting annotations.

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

Conciseness5/5

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

Two concise sentences: the first states the purpose, the second covers policies and audit. No wasted words, and the most important information is front-loaded.

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 covers all parameters, annotations define safety, and the description adds policy/audit context, the description is sufficient for an agent to understand the tool's role and constraints. A small gap is lack of mention about return values, but there is no output schema expected.

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 provides 100% coverage with descriptions for every parameter. The tool description does not add additional parameter-level guidance, so the baseline 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 and resource: 'Create a Docker network destination on a server.' This distinguishes it from sibling create tools (application, service, database, storage) and accurately describes the core function.

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 mentions that usage is 'subject to operation mode, allowlist, and production guard policies,' which provides context about constraints but does not explicitly state when to use this tool versus alternatives or when not to use it. No alternative tools are named.

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

coolify_create_environmentA

Create a new environment within a project. Requires safe-write operation mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEnvironment name (e.g., staging, production)
project_uuidYesProject UUID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate a write operation (readOnlyHint false, destructiveHint false). The description adds a specific operational requirement: safe-write mode. However, it doesn't elaborate on failure modes or idempotency, which would be useful.

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, each carrying distinct information: the operation and the operational prerequisite. 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?

The tool is simple with two well-documented params and annotation coverage. The description covers the core purpose and a key requirement. It does not mention return values, but for a create operation it's adequate.

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?

Both parameters are fully described in the schema (100% coverage), so the description adds no additional parameter meaning. Baseline 3 applies.

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

Purpose4/5

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

The description clearly states the action ('Create a new environment') and the target resource ('within a project'). It distinguishes by resource type, though it doesn't explicitly reference alternatives.

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 for creating an environment in a project but provides no explicit when-to-use vs alternatives. It mentions a prerequisite (safe-write mode), but not selection guidance.

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

coolify_create_projectB

Create a new project. Requires safe-write operation mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
descriptionNoProject description

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate readOnly=false, so the description's 'Requires safe-write operation mode' adds a small operational requirement not covered by annotations. However, it does not disclose return behavior, uniqueness constraints, or side effects beyond the mode requirement.

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 one concise sentence with no filler. Every word contributes meaning, balancing brevity with a clear statement of purpose and a safety requirement.

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

Completeness2/5

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

With no output schema and minimal annotations, the description fails to explain what the create operation returns, any prerequisites, or how projects relate to other resources. This is inadequate for an agent to fully complete the invocation lifecycle.

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

Parameters3/5

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

Schema description coverage is 100% with clear descriptions for 'name' and 'description'. The tool description adds no additional parameter-level detail, so it meets the baseline without enhancing understanding.

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 function: 'Create a new project.' It uses a specific verb and resource, differentiating it from sibling tools like create_application or create_database based on the project resource.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as create_application or create_service. The only added note about 'safe-write operation mode' is a constraint, not usage context or exclusion criteria.

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

coolify_create_s3_storageA

Create a new S3 storage configuration for the authenticated team. Credentials are never returned or logged. Subject to operation mode policy. Audit: coolify.s3_storage.create

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesS3 access key
nameYesA friendly name for the S3 storage
bucketYesS3 bucket name
regionYesS3 region (e.g. us-east-1)
secretYesS3 secret key
endpointYesS3 endpoint URL (e.g. https://s3.amazonaws.com)
is_usableNoWhether the storage is marked usable
descriptionNoOptional description

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (all false, indicating no read-only, idempotent, or destructive hints), the description adds important behavioral context: 'Credentials are never returned or logged,' subject to operation mode policy, and audit logging. These are meaningful security and policy disclosures that the annotations do not convey, though the operation mode policy itself is vague.

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 three concise sentences, each providing distinct value: purpose, security behavior, and audit. No filler or redundancy, and the most essential information is front-loaded in the first sentence.

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 an 8-parameter create tool with no output schema, the description covers key context: purpose, authentication scope, security guarantees, policy constraint, and audit. It does not mention return values or prerequisites beyond authentication, but the essential context for invoking the tool is present and well-integrated.

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 input schema already documents all eight parameters. The description adds no parameter-specific detail beyond the schema, and any mention of credentials relates to security rather than parameter semantics. Baseline is 3 because the schema carries the burden.

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

Purpose5/5

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

The description states 'Create a new S3 storage configuration' with a clear verb and resource, and scopes it to 'the authenticated team.' This distinguishes it from generic storage creation tools in the sibling list, such as coolify_create_storage, and aligns with its S3-specific name.

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

Usage Guidelines4/5

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

The description clearly implies this tool is for creating S3 storage configurations, which is sufficient context. However, it does not explicitly name alternatives or state when not to use it, though the sibling list includes closely related tools like coolify_create_storage and coolify_validate_s3_storage. The context is clear, but exclusions are absent.

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

coolify_create_scheduled_taskA

Create a scheduled task (cron job) on an application or service. Subject to operation mode, allowlist, and production guard policies. Cron expression is validated.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTask name
commandYesCommand to execute
enabledNoWhether the task is enabled
timeoutNoTimeout in seconds (max 86400)
scheduleYesCron expression (e.g., "*/5 * * * *" or "@daily")
containerNoOptional container name
resource_typeYesResource type
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnly=false, idempotent=false, and destructive=false, but the description adds valuable behavioral context: 'Subject to operation mode, allowlist, and production guard policies' and 'Cron expression is validated.' This goes beyond the annotations by informing the agent about potential restrictions and validation 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 and 30 words, front-loaded with the action and object. It includes necessary constraints without fluff, and every sentence contributes to understanding the tool's purpose and limitations. No redundant repetition of schema information.

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

Completeness4/5

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

For a tool with 9 parameters and no output schema, the description conveys essential context: it targets applications/services, is subject to policies, and validates cron expressions. It does not explain return values or failure behavior, but the schema is richly described and the annotations provide safety profile, making the description reasonably 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 input schema has 100% description coverage, meaning all parameters are documented in the schema itself. The description adds minimal parameter-specific meaning beyond mentioning that cron expressions are validated, which aligns with the 'schedule' parameter. Since schema covers the details, a 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 clearly states the tool's action: 'Create a scheduled task (cron job) on an application or service.' This specific verb+resource combination distinguishes it from siblings like update_scheduled_task, execute_scheduled_task, and list_scheduled_tasks, which cover other lifecycle operations.

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 context by mentioning 'application or service' and constraints like 'operation mode, allowlist, and production guard policies,' but it does not explicitly state when to use this tool versus alternatives (e.g., update_scheduled_task for modifying existing tasks). No exclusions or alternative tool names are provided.

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

coolify_create_serviceA

Create a new service in a project environment. Requires safe-write operation mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesService name
server_uuidYesServer UUID to deploy the service on
project_uuidYesProject UUID
service_typeNoService type (e.g., nginx, redis)
environment_nameNoEnvironment name for production guard check
environment_uuidYesEnvironment UUID
docker_compose_rawNoRaw docker-compose YAML content

TDQS

A3.9/5.0
Behavior3/5

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

The description adds the requirement of safe-write operation mode, which is behavioral context beyond the annotations. However, it does not disclose other potential side effects, permissions, or response behavior. Annotations already indicate a write operation, so the extra value is limited but present.

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

Conciseness5/5

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

The description is two short sentences with no superfluous content. It front-loads the primary purpose and adds the key requirement, making it highly concise and well-structured.

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

Completeness3/5

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

For a creation tool, the description is minimally adequate but lacks details on return values, workflow after creation, or potential side effects. The schema and annotations cover parameter meanings and the write nature, but the description alone would leave some gaps for an agent handling complex scenarios.

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 input schema already documents all parameters. The description adds no additional parameter-level meaning, matching the baseline of 3 for high 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 clearly states the tool creates a new service in a project environment, using a specific verb ('create') and resource ('service'). It distinguishes from sibling tools like coolify_create_application and coolify_create_database by focusing on services.

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

Usage Guidelines4/5

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

The description provides useful context by noting that safe-write operation mode is required, which tells the agent when the tool can be invoked. It does not explicitly mention alternatives or exclusions, but the context is clear enough for an agent to infer appropriate use.

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

coolify_create_storageA

Create a storage mount for a resource. Path traversal is validated. Subject to operation mode, allowlist, and production guard policies. Audit: coolify.storage.create

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name for the storage mount
sourceYesSource path or volume name
destinationYesDestination mount path inside container
storage_typeNoStorage type (volume, bind, cifs, nfs)
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID

TDQS

A3.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds meaningful behavioral context: 'Path traversal is validated' and 'Subject to operation mode, allowlist, and production guard policies,' plus an audit trail. These details go beyond the annotations and help the agent anticipate validation and policy checks. No contradiction with annotations found.

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 exceptionally concise: three short sentences plus an audit tag. It front-loads the primary purpose and then adds security/policy context without unnecessary fluff. Every sentence earns its place, making it easy to scan and parse.

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

Completeness3/5

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

For a creation tool with 6 parameters, no output schema, and limited annotations, the description provides the core purpose and some constraints but lacks operational context: no mention of expected response, required permissions, potential side effects, or when to choose this over S3 storage. The schema covers parameters, but the description does not fully compensate for the missing output schema and sibling differentiation.

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 fully documents all parameters. The description adds some contextual value by mentioning path traversal validation, which relates to source/destination parameters, but it does not elaborate on parameter-specific formats, defaults, or relationships beyond what the schema already provides. Baseline of 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?

The description states a specific action ('Create a storage mount') and target ('for a resource'), clearly distinguishing this from S3 storage creation (e.g., coolify_create_s3_storage). It also mentions path traversal validation, which adds specificity. However, it does not explicitly contrast with sibling storage tools, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like coolify_create_s3_storage. It mentions policy constraints ('operation mode, allowlist, and production guard policies') but these are restrictions, not usage directions. There is no explicit 'use this when...' or reference to alternative tools, leaving the agent to infer when this tool is appropriate.

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

coolify_deployB
Idempotent

Deploy a resource. Subject to operation mode, allowlist, and production guard policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce deploy (POST instead of GET)
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already communicate safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description adds context about operation mode, allowlist, and production guard policies, which is useful but does not explain deployment behavior (e.g., asynchronous process, return format).

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 immediately states the action and key constraints. It is well-structured, front-loaded, and contains no unnecessary 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 is terse and, with no output schema, does not explain return values or post-deployment behavior. It includes policy constraints but lacks details on async behavior or error scenarios, leaving some gaps for an agent making full use of the 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%, so all parameters are already documented with descriptions. The tool description adds no additional parameter meaning beyond the schema, justifying the baseline score of 3.

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

Purpose4/5

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

The description clearly states the action ('Deploy a resource') with a specific verb and resource, differentiating it from create/update/cancel siblings. However, it does not explicitly contrast with related actions like 'start' or 'restart', so it lacks explicit sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like coolify_start, coolify_restart, or coolify_cancel_deployment. It only mentions policy constraints, which is a caveat rather than usage direction.

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

coolify_execute_scheduled_taskA

Execute a scheduled task immediately. Subject to operation mode, allowlist, and production guard policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_uuidYesScheduled task UUID
resource_typeYesResource type
resource_uuidYesResource UUID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate the operation is not read-only and not idempotent. The description adds the caveat "Subject to operation mode, allowlist, and production guard policies," which is policy context not conveyed by annotations. However, it does not disclose what happens upon execution (e.g., triggers an async run, returns an execution ID) or any side effects. It adds a little value but misses key behavioral 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?

The description is extremely conciseβ€”a single sentence that front-loads the action and includes a relevant policy caveat. Every word earns its place; there is no wasted text or redundancy with the schema.

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?

Given the tool is an action with no output schema, the description is minimal but adequate for a basic trigger operation. It lacks information about return values, error conditions, or subsequent verification steps (e.g., checking task executions via get_task_executions). Since the schema and annotations cover safety and parameters, this is a clear gap but not a fatal one.

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 provides descriptions for all three parameters (task_uuid, resource_type, resource_uuid) with full coverage (100%). The description adds no additional parameter semantics or relationships. Since the schema already documents each parameter, the baseline of 3 is appropriate; the description does not enhance understanding 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's purpose: "Execute a scheduled task immediately." This uses a specific verb and resource, and distinguishes it from sibling tools like coolify_list_scheduled_tasks (which lists) and coolify_create_scheduled_task (which creates). The action is unambiguous and directly differentiated.

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 (when you need to trigger a scheduled task right now) but provides no explicit alternatives or exclusions. It does not compare with similar action-oriented tools like coolify_deploy or coolify_restart, nor does it mention conditions under which it should not be used, aside from vague policy restrictions.

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

coolify_get_application_logsA
Read-onlyIdempotent

Get application logs with configurable line count (capped by COOLIFY_LOG_MAX_LINES). Secrets are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of log lines to fetch (default: from COOLIFY_LOG_MAX_LINES, max enforced)
application_uuidYesApplication UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent/non-destructive. The description adds meaningful behavioral context: configurable line count capped by COOLIFY_LOG_MAX_LINES, and that secrets are redacted. This goes beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action, and every word adds value. No wasted content.

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

Completeness4/5

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

Given the tool's simplicity, annotations, and full schema coverage, the description is adequately complete. It covers key behavioral details (line cap, redaction) but could mention return format since there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters (application_uuid, lines) are fully described in the schema. The description's mention of 'configurable line count' adds minimal extra meaning, as the schema already documents the default and max.

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 'Get application logs', which is a specific verb+resource combination. It also distinguishes from sibling log tools by explicitly mentioning 'application' (vs database/service logs).

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

Usage Guidelines3/5

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

The description implies usage: when you want application logs. However, it does not explicitly differentiate from sibling tools like get_database_logs or get_service_logs, nor does it provide when-to-use vs alternative guidance.

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

coolify_get_current_teamA
Read-onlyIdempotent

Get the current team context: id, name, and permission scope.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare it as read-only, non-destructive, and idempotent. The description adds value by specifying the return fields (id, name, permission scope), giving the agent a concrete idea of what to expect. No additional side effects or caveats are necessary for a simple getter.

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 starts with the action and lists the key return fields. Every word earns its place, with no filler or redundancy.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema, clear read-only role), the description fully covers what the agent needs to know: what it does and what it returns. No additional edge cases or error handling are necessary.

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 accepts zero parameters, so the description has no burden to explain parameter meanings. The baseline for zero parameters is 4, and the description provides no conflicting or redundant details. It simply states what is returned, which 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 retrieves the current team context and specifies the exact fields returned (id, name, permission scope). It uses a specific verb (Get) and identifies the resource, distinguishing it from siblings like list_team_members.

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 that this tool is for the current team, implying use when you need the active team's details. However, it doesn't explicitly contrast with alternatives such as list_team_members or list_projects, so it lacks explicit exclusions while still being clear enough for typical usage.

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

coolify_get_database_logsA
Read-onlyIdempotent

Get database container logs. Secrets are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of log lines to fetch (default: 100, capped by COOLIFY_LOG_MAX_LINES)
database_uuidYesDatabase UUID

TDQS

A4/5.0
Behavior4/5

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

The annotation declares readOnlyHint=true and idempotentHint=true, so the read-only nature is already covered. The description adds a valuable behavioral detail: 'Secrets are redacted,' which is beyond what annotations provide. This is useful context for the agent.

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

Conciseness5/5

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

The description is two short sentences: 'Get database container logs. Secrets are redacted.' Every word adds value, with no redundancy or 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 log-fetching tool with high schema coverage and annotations, the description is adequately complete. It covers the core function and a key behavior (redaction). It does not describe output format or default line counts, but these are either specified in the schema (lines default) or not critical for execution.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'database_uuid' and 'lines' having descriptions in the schema. The tool description does not add additional parameter meaning, but the schema already documents them well, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get database container logs' with a specific verb and resource. It distinguishes from sibling tools like get_application_logs and get_service_logs by explicitly targeting database logs.

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 indicates the tool is for database container logs, which implies when to use it, but it does not explicitly mention alternatives or exclusions. The sibling tool names suggest differentiation, but the description itself lacks direct guidance on choosing this over get_service_logs or get_application_logs.

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

coolify_get_deploymentA
Read-onlyIdempotent

Get deployment detail by UUID: status, timestamps, commit info, error summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
deployment_uuidYesDeployment UUID

TDQS

A4.3/5.0
Behavior4/5

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

The description adds value beyond the annotations by disclosing the return content (status, timestamps, commit info, error summary). Annotations already declare readOnly, idempotent, and non-destructive behavior. There is no contradiction, and the added detail is useful for understanding what the tool provides.

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 one concise, front-loaded sentence with a colon introducing the key data points. Every word earns its place, and the structure is clear and scannable.

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

Completeness5/5

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

For a simple read-only tool with a single parameter, the description is complete. Annotations cover safety, schema covers the parameter, and the description covers return values. No output schema exists, but the listed return fields suffice. The simplicity of the operation does not require more.

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 covers 100% of the parameter (deployment_uuid) with a clear description. The tool description only reiterates 'by UUID', adding no new meaning. With full schema coverage, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool gets a deployment detail by UUID, listing the specific data points (status, timestamps, commit info, error summary). It uses a specific verb ('Get'), identifies the resource ('deployment detail'), and distinguishes from siblings like coolify_list_deployments by specifying a single deployment lookup.

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

Usage Guidelines4/5

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

The description makes it clear this is for retrieving a single deployment by UUID, implying it is for specific deployment details rather than listing or mutating. However, it does not explicitly mention alternatives or when not to use it, though sibling tool names provide context.

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

coolify_get_destinationA
Read-onlyIdempotent

Get a single destination by UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
destination_uuidYesDestination UUID

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds no extra behavioral context (e.g., return format, errors), but for a simple getter this is acceptable given the annotations.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the key information. Every word earns its place with zero 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?

Given the simplicity of the tool (single parameter, no output schema), the description is sufficient. It clearly states what is returned (a single destination by UUID), though it doesn't detail the return structure, which is not critical for a simple getter.

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

Parameters3/5

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

The input schema already provides a complete description of the only parameter (destination_uuid: 'Destination UUID'), covering 100% of the schema. The tool description adds no additional semantic value 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 uses the verb 'Get' with the resource 'destination' and specifies the unique identifier (UUID), making its purpose obvious and distinguishing it from sibling tools like list_destinations and create_destination.

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 using this tool when you need a single destination identified by UUID. While it doesn't explicitly exclude alternatives or mention when-not-to-use, the sibling context (list/create) makes the usage context clear.

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

coolify_get_projectA
Read-onlyIdempotent

Get a single project by UUID with its environments and resource counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesProject UUID

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 safety profile is clear. The description adds behavioral context about the response contents ('environments and resource counts'), which goes beyond what the schema or annotations provide. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, compact sentence that conveys the essential information without any wasted words. It is front-loaded with the verb and resource, making it immediately scannable.

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?

This is a simple read-only tool with one parameter, strong annotations, and no output schema. The description tells the agent what it returns (environments and resource counts), which is sufficient for basic usage. A slightly richer description could mention not-found behavior or return format, but the tool's simplicity keeps this complete enough.

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 has a single parameter with a description ('Project UUID') and 100% schema description coverage. The tool description echoes 'by UUID' but does not add any new semantic detail 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?

The description uses a specific verb 'Get' with a clear resource 'project' and scope 'by UUID with its environments and resource counts'. This distinguishes it from sibling tools like list_projects (which lists all projects) and project_overview, 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 Guidelines4/5

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

The description clearly implies when to use this tool (when you need a single project by UUID with its environment and resource count details). However, it does not explicitly name alternatives or state when not to use it, so it falls short of the 'explicit when/when-not/alternatives' bar.

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

coolify_get_resourceA
Read-onlyIdempotent

Get a single resource detail by UUID and type. Sensitive fields are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesResource type: application, service, or database
uuidYesResource UUID

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 idempotentHint=true, so the safety profile is covered. The description adds value by noting 'Sensitive fields are redacted,' which informs the agent that the response will omit certain information. This goes beyond what annotations provide and is important since there is no output schema.

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

Conciseness5/5

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

The description is only two sentences, both of which carry meaningful information. It is front-loaded with the core action and includes a crucial transparency note. No wasted words 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 getter with two well-documented parameters and strong annotations, the description is complete. It covers the essential purpose and the redaction behavior. It does not detail the response structure, but with no output schema, that might be expected; still, the lack of guidance on not-found behavior or response format slightly prevents a 5.

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 has 100% description coverage for both parameters, including the enum for type and pattern for uuid. The description only restates 'by UUID and type,' adding no new meaning beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

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 function: 'Get a single resource detail by UUID and type.' This specifies the verb, resource, and method of identification, and distinguishes it from sibling list/get tools by emphasizing 'single' resource. The addition of 'Sensitive fields are redacted' also clarifies a key aspect of the response.

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 (when you have a UUID and type for a specific resource) but does not explicitly mention alternatives or exclusions. For example, it doesn't say 'use list_resources to get all resources.' The guidance is only implied by the tool's purpose, not stated.

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

coolify_get_serverA
Read-onlyIdempotent

Get a single server detail by UUID. SSH keys and sensitive network info are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesServer UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context about SSH keys and sensitive network info being redacted, which goes beyond annotations and helps set 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?

The description is a single, concise sentence that front-loads the core action and includes a useful behavior note without any waste 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 getter with one parameter and no output schema, the description covers the action and a key behavioral trait (redaction). The lack of error handling or return value details is a minor gap, but overall sufficient for the tool's simplicity.

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 the 'uuid' parameter already described as 'Server UUID'. The description only restates 'by UUID' without adding additional format or usage details, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description 'Get a single server detail by UUID' uses a specific verb and resource, clearly distinguishing from sibling tools like list_servers via the 'single' scope. It also mentions redaction, adding further specificity.

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

Usage Guidelines3/5

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

Usage context is only implied through the name and 'single' scope; there is no explicit guidance on when to use this over list_servers or validate_server, nor any mention of exclusions or alternatives.

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

coolify_get_service_logsA
Read-onlyIdempotent

Get service container logs. Secrets are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of log lines to fetch (default: 100, capped by COOLIFY_LOG_MAX_LINES)
service_uuidYesService UUID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by noting that secrets are redacted. However, it does not describe the return format, pagination behavior, or any other behavioral details, which is noticeable since no output schema is provided.

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

Conciseness5/5

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

The description is two short sentences with no filler. It states the core action and adds the useful caveat about secret redaction. 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 simple read-only log-fetching tool with good annotations and full schema coverage, the description is mostly sufficient. It lacks details about the output format, but this is a minor gap given the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters have clear descriptions (service_uuid and lines with default/cap). The description adds no additional meaning beyond the schema, so the 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?

The description clearly states the action ('Get') and the resource ('service container logs'), which is distinct from sibling tools like get_application_logs and get_database_logs. However, it does not explicitly mention those alternatives, so it slightly misses the full 5 criteria.

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 this is the tool for service logs, but it does not explicitly state when to use it over alternatives or any exclusions. The value is mostly inferred from the tool name and schema.

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

coolify_get_task_executionsA
Read-onlyIdempotent

Get execution history for a scheduled task. Output is redacted for security.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax executions to return
statusNoFilter by execution status
task_uuidYesScheduled task UUID
resource_typeNoResource type. Defaults to application if omitted.
resource_uuidYesResource UUID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is known. The description adds the key behavioral trait 'Output is redacted for security,' which is not captured by annotations. This is valuable context beyond structured data.

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, front-loaded with the action 'Get,' and includes an important security caveat without unnecessary words. Every element earns its place.

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

Completeness5/5

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

For a read-only tool with comprehensive schema descriptions and strong annotations, the description fully covers purpose and security redaction. No output schema exists, so return values need not be explained. The description is complete for its 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 input schema provides descriptions for all 5 parameters (100% coverage), so the description does not need to explain them. Since the description adds no additional parameter semantics, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get execution history for a scheduled task.' This clearly distinguishes it from sibling tools that list scheduled tasks or execute them, and the name reinforces the scope.

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 purpose statement establishes clear context for when to use the tool (to retrieve execution history for a scheduled task), but it does not explicitly mention exclusions or alternative tools. This is acceptable given the clarity of the resource and action, earning a 4 rather than a 5.

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

coolify_get_versionA
Read-onlyIdempotent

Get the Coolify instance version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no further behavioral context such as response format or error scenarios, so it provides no value 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?

A single sentence that fully states the tool's purpose with no redundant wording. It is appropriately concise and front-loaded.

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

Completeness5/5

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

For a parameterless, read-only tool with strong annotations, the description is fully sufficient. While there is no output schema, the operation is simple enough that no additional context is required.

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 an empty schema. The description correctly avoids parameter details, and the baseline of 4 for 0-parameter tools 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 uses a specific verb 'Get' and clearly identifies the resource 'Coolify instance version'. It is unambiguous and distinguishes from sibling tools like health, which is a different type of check.

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 no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions. Usage is implied for a simple read operation, but there is no stated context or alternative differentiation.

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

coolify_healthA
Read-onlyIdempotent

Check Coolify API and MCP server connectivity. Returns health status, auth status, and latency. No secrets in response.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safe-read nature is covered. The description adds behavioral context by specifying the response content (health status, auth status, latency) and guaranteeing 'No secrets in response,' which is valuable beyond the annotations. No contradictions.

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

Conciseness5/5

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

The description is three short sentences, each earning its place: the first states the primary action, the second lists expected outputs, and the third adds a security guarantee. It is front-loaded and free of unnecessary words.

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 health check with no parameters and no output schema, the description is fully sufficient. It explains what the tool does, what it returns, and reassures about sensitive data. There are no gaps in context for an agent to invoke it correctly.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds meaning by explaining the operation and return values, which is all that is needed since there is nothing to document about parameters. No param info is missing.

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 specific verb and resource: 'Check Coolify API and MCP server connectivity.' It also lists what it returns (health status, auth status, latency), making it distinct from sibling tools that create or manage resources. This is a dedicated health check tool with an unmistakable purpose.

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 for verifying connectivity before other operations, but it does not explicitly state when to use it over alternatives or include any exclusions. There is no mention of alternative tools or conditions that would make this tool inappropriate, so guidance is only implied rather than explicit.

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

coolify_list_backup_executionsA
Read-onlyIdempotent

List backup executions for a scheduled backup configuration. Output is redacted for security.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax executions to return
database_uuidYesDatabase UUID
scheduled_backup_uuidYesScheduled backup UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds a valuable behavioral detail: 'Output is redacted for security,' which explains why the returned data may be incomplete or masked. This goes beyond the annotations without contradicting 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, front-loaded sentence that immediately states the verb ('List') and resource, with no filler or redundant information. 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 simple read-only listing tool, the description covers the purpose, the required scope (scheduled backup configuration), and a notable output behavior (redaction). While there is no output schema, the description is reasonably complete for the tool's simplicity, though it could optionally mention the return format (list of execution 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?

The input schema provides full descriptions for all three parameters (database_uuid, scheduled_backup_uuid, limit), so the description adds no parameter-specific meaning beyond what's already in the schema. This meets the baseline of 3 for high 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 clearly states the action ('List backup executions') and the specific resource ('for a scheduled backup configuration'). It distinguishes itself from sibling tools like coolify_list_database_backups (which lists backup configs) and coolify_get_task_executions (generic task executions), 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 context by mentioning 'for a scheduled backup configuration', but it does not explicitly state when to use this tool versus alternatives like get_task_executions or list_database_backups, nor does it provide exclusions or prerequisites. This is implied usage, not explicit guidance.

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

coolify_list_branchesA
Read-onlyIdempotent

List branches of a GitHub repository via a GitHub App.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesRepository owner (GitHub username or organization)
repositoryYesRepository name
github_app_uuidYesGitHub App UUID

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, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds minimal extra context ('via a GitHub App') but does not disclose potential pitfalls like pagination or error modes. No contradiction with annotations.

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

Conciseness5/5

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

A single sentence with no redundant words. The description is front-loaded with the action ('List') and resource ('branches'), making it highly scannable and 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 simple, read-only list operation with clear parameters and annotations, the description is mostly sufficient. However, with no output schema, it does not state what the return value looks like (e.g., array of branch names), which is a minor omission.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter (owner, repository, github_app_uuid) has a clear description. The tool description adds no additional meaning beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'List' and clearly identifies the resource as 'branches of a GitHub repository via a GitHub App'. This makes the tool's purpose unmistakable and distinguishes it from sibling tools like list_repositories or list_github_apps.

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 use when branch listing is needed and mentions the GitHub App authentication context, but provides no explicit guidance on when not to use it or which alternatives to prefer. It is a basic list operation, so some context exists, but exclusions are missing.

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

coolify_list_database_backupsA
Read-onlyIdempotent

List backup executions for a database. Sensitive destination paths are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_uuidYesDatabase UUID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable context that 'Sensitive destination paths are redacted,' which is not captured by annotations. This is a useful disclosure about output behavior, so the description contributes 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.

Conciseness5/5

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

The description is a single, focused sentence that states the core functionality and one key exception. No filler words or redundant information. It is appropriately sized for the tool's simplicity.

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 good annotations and full schema coverage, the description is mostly complete. It explains the action and adds redaction behavior. However, the ambiguity with the sibling tool reduces its completeness, as the agent may need more context to choose correctly, though this is more of a usage guideline issue.

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 covers 100% of the single parameter 'database_uuid' with a clear description 'Database UUID.' The tool description does not add further parameter details, but since the schema already provides sufficient semantics, a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb and resource: 'List backup executions for a database.' It clearly states the action and target. However, it does not differentiate from the sibling tool 'coolify_list_backup_executions', which sounds similar, so it does not fully distinguish itself.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like 'coolify_list_backup_executions' or other backup-related tools. There are no prerequisites, exclusions, or alternative references, leaving the agent to infer usage from the description alone.

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

coolify_list_deploymentsA
Read-onlyIdempotent

List deployments with filters: resource_uuid, status, limit. Newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax deployments to return
statusNoFilter by deployment status
resource_uuidNoFilter by resource UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior, so the burden is lower. The description adds the 'Newest first' ordering detail, which is not encoded in the schema or annotations. However, it does not disclose return format, pagination, or default behavior when no filters are given.

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 action and resource, lists filters compactly, and includes the sorting order. Every word contributes value, with no redundancy or 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 list operation with strong annotations and full parameter schema, the description covers the essential purpose and ordering. It lacks explicit return structure, but the action 'list' implies a collection of deployments. It is adequate for basic invocation, though a bit more detail on response shape would improve it.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter having a descriptive comment. The tool description merely names the filters without adding any extra meaning, examples, or constraints beyond what the schema already provides. Baseline of 3 applies due to high 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 uses the specific verb 'List' with the resource 'deployments' and enumerates the available filters, making it clear this is a query operation for multiple deployments. It also specifies sorting order ('Newest first'), distinguishing it from single-deployment retrieval or cancellation 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 implies use when a user needs to list or filter deployments, but it does not explicitly reference alternative tools like fetching a single deployment or canceling one, nor does it state when not to use it. There is no comparison to sibling tools or exclusion conditions.

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

coolify_list_destinationsA
Read-onlyIdempotent

List all Docker network destinations for the authenticated team.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds the team scoping constraint, which is useful behavioral context, but does not mention pagination, ordering, or return format. This is consistent 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?

A single, front-loaded sentence that states exactly what the tool does without any filler. Every word earns its place.

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

Completeness5/5

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

The description is complete for a zero-parameter list tool with no output schema. It specifies the resource type and scope ('Docker network destinations' for the 'authenticated team'), which is sufficient context for an agent to understand what the tool returns.

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

Parameters4/5

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

There are zero parameters, so the schema coverage is trivially 100% and no parameter explanations are needed. The description adds no parameter details, but that is appropriate given the tool takes no arguments.

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 'Docker network destinations' and scope 'for the authenticated team'. It effectively distinguishes from siblings like get_destination (single item) and create_destination.

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 when to use it (to list destinations) and provides context via the team scoping, but it does not explicitly mention alternatives or exclusions. For a simple list tool, the context is clear enough.

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

coolify_list_environment_variablesA
Read-onlyIdempotent

List environment variables for a resource. Returns keys and metadata only β€” VALUES ARE NEVER RETURNED.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name (informational)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish read-only and non-destructive behavior, so the description does not need to repeat that. The description adds valuable transparency by explicitly stating that values are never returned, which is a behavioral guarantee beyond annotations. This is especially useful for agents handling sensitive data, but it doesn't detail the metadata format further.

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

Conciseness5/5

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

The description is compact and front-loaded: a single clear purpose sentence followed by a critical caveat. Every word earns its place, with no redundant filler or repetition of schema/annotation info.

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

Completeness4/5

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

For a simple read-only listing tool, the description covers the essential context: what it lists, that values are excluded, and the resource scope. The optional environment_name parameter is only labeled 'informational' in the schema, and the description does not clarify whether it filters results, which is a minor gap. Overall, it's sufficient for most use cases.

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 all three parameters with descriptions (resource_uuid, resource_type, environment_name). The description adds no additional parameter-level detail or semantics beyond what the schema provides, so baseline 3 is appropriate for this high coverage.

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

Purpose5/5

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

The description clearly states the action (List) and the resource (environment variables for a resource), with a specific scope statement. The addition 'Returns keys and metadata only β€” VALUES ARE NEVER RETURNED' provides essential distinction from sibling tools like set_environment_variables, clarifying its purpose.

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

Usage Guidelines4/5

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

The description clearly conveys when to use this tool: whenever you need to see environment variable keys/metadata for a resource. It also implies that values are not available here, signaling that this is not the tool for retrieving secret values. However, it does not explicitly name alternative tools or exclusion criteria, so it stops short of perfect guidance.

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

coolify_list_github_appsA
Read-onlyIdempotent

List GitHub Apps connected to your Coolify instance. Returns team and system-wide apps.

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?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, covering the safety profile. The description adds that the result includes team and system-wide apps, which is useful scope context, but it does not disclose additional behaviors like pagination or rate limits. This mirrors the get_calls example, so a 3 is appropriate.

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 redundancy. It front-loads the primary action and provides the key output detail (team and system-wide apps) efficiently, earning every word.

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 parameter-less list tool with strong annotations, this description is complete. It states the resource and output scope, and since no output schema exists, the mention of 'team and system-wide apps' gives sufficient return-value context. The sibling list makes the tool's niche clear.

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, so the schema provides complete coverage. With 0 params, the baseline is 4 per the rubric; the description does not need to explain inputs, and it correctly focuses on what the tool returns.

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 'List' with the resource 'GitHub Apps' and clearly differentiates from sibling tools by noting it returns team and system-wide apps. The scope is explicit and distinguishes it from other list tools like coolify_list_repositories.

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 for retrieving connected GitHub Apps but provides no explicit guidance on when to choose this tool over alternatives. There are no exclusions or alternative recommendations, leaving the agent to infer the appropriate context.

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

coolify_list_notificationsA
Read-onlyIdempotent

List notification channel settings. Credential values (webhook URLs, tokens, passwords) are never exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNoFilter by notification channel. Omit to list all channels.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations declare readOnlyHint, idempotentHint, and destructiveHint, so safety is already covered. The description adds a key behavioral detail: credential values are never exposed, which helps the agent set expectations about sensitive information in the response.

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 the main action front-loaded. The first sentence tells exactly what it does; the second adds an important caveat. No wasted words.

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

Completeness4/5

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

This is a simple tool with one optional parameter and rich annotations. The description explains the purpose and a critical security aspect. Without an output schema, the description is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

The input schema fully describes the only parameter ('channel') with an enum and description, achieving 100% coverage. The tool description does not need to repeat this; per baseline, a 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 states the tool's function with a specific verb+resource: 'List notification channel settings.' This distinguishes it from sibling tools like 'coolify_list_servers' or 'coolify_list_projects.'

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

Usage Guidelines4/5

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

The description gives clear context: it lists notification settings, so you would use it whenever you need to inspect current notification channels. It does not explicitly mention alternatives, but no exclusion is necessary given the tool's simple, read-only nature.

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

coolify_list_projectsA
Read-onlyIdempotent

List all Coolify projects with optional name filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter projects by name (case-insensitive partial match)

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, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds the optional name filter behavior, but this is also present in the input schema, so it does not provide substantial context beyond annotations. No mention of pagination, output format, or rate limits.

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

Conciseness5/5

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

A single, front-loaded sentence with no redundant words. It efficiently states the action, target, and optional modifier.

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?

This is a simple read-only list tool with one optional parameter and strong annotations. The description is sufficient for a tool of this complexity, though an explicit note about return format would be slightly more complete, but it is not critical given the obvious 'list' semantics.

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

Parameters3/5

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

The schema has 100% description coverage for the single parameter 'name', and the description itself just reiterates 'optional name filter' without adding new meaning. Baseline score of 3 is appropriate since the schema carries the parameter documentation.

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

Purpose5/5

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

The description clearly states the verb (List) and resource (Coolify projects), and specifies the scope as 'all' with an optional filter. This distinguishes it from sibling tools like coolify_get_project (which retrieves a single project) and coolify_create_project (which creates a new project).

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 use for retrieving a collection of projects, but it does not explicitly state when to use this over alternatives like coolify_get_project or coolify_list_resources. No exclusions or alternative tool names are mentioned.

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

coolify_list_repositoriesA
Read-onlyIdempotent

List repositories accessible via a GitHub App. Supports pagination and search.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoResults per page (max 100)
searchNoOptional search query to filter repositories
github_app_uuidYesGitHub App UUID

TDQS

A4/5.0
Behavior3/5

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

The annotations (readOnlyHint, idempotentHint, destructiveHint) already establish this as a safe, non-destructive operation. The description adds that pagination and search are supported, which is useful behavioral detail, but it doesn't disclose other traits like rate limits or return format.

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 short sentences that front-load the primary purpose and mention key features. Every word contributes.

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 straightforward list operation, the description is adequate: it specifies the resource type and the filter scope. Combined with the detailed schema and annotations, the context is sufficient, though no output schema exists to detail the return 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?

The input schema provides descriptions for all four parameters, giving 100% coverage. The description's mention of pagination and search reinforces the purpose of the page, limit, and search parameters, but adds limited new meaning 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's function: listing repositories accessible via a GitHub App. It uses a specific verb and resource, and distinguishes itself from sibling tools like list_branches or list_github_apps by specifying the GitHub App scope.

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β€”when you need repositories accessible through a specific GitHub App. It doesn't explicitly mention alternatives or when not to use it, but the context is sufficiently clear.

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

coolify_list_resourcesA
Read-onlyIdempotent

List all resources with filters: project_uuid, environment_uuid, resource_type, status, search.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoSearch by resource name (case-insensitive)
statusNoFilter by status
project_uuidNoFilter by project UUID
resource_typeNoFilter by resource type
environment_uuidNoFilter by environment UUID

TDQS

A3.8/5.0
Behavior3/5

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

The description adds the filter list, which is behaviorally relevant, but the read-only and idempotent nature is already disclosed by annotations. No additional behaviors like pagination or ordering are described.

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, efficient sentence that front-loads the action and lists filters. Every word earns its place, with 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 filter list with strong annotations and full schema coverage, the description is nearly complete. It clearly states the function and filters, though it omits details about return value or pagination, which are not critical given the 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 already includes comprehensive descriptions for all five parameters (100% coverage). The tool description merely lists the parameter names without adding new semantic details, 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 clearly states the tool's action (list) and resource (resources), and enumerates the filter parameters. This differentiates it from sibling tools like coolify_list_servers (lists servers) and coolify_get_resource (gets a single resource).

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 this is the general resource listing tool with filters, but does not explicitly state when to use it vs alternatives. No mention of when to prefer coolify_list_server_resources or coolify_project_overview.

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

coolify_list_rollback_imagesA
Read-onlyIdempotent

List available Docker images for rolling back an application. Returns current tag and available image tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_uuidYesApplication UUID

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds 'Returns current tag and available image tags', which is useful output context but not a behavioral trait like side effects or permissions. No additional behavioral disclosures are provided beyond the annotations.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and includes the key return information. Every word earns its place, and there is no redundancy or padding.

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 one-parameter read-only tool with strong annotations and no output schema, the description adequately explains what the tool does and what it returns ('current tag and available image tags'). It is complete enough for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The input schema provides a description for application_uuid ('Application UUID') with 100% coverage. The description does not mention the parameter, but the schema already handles its meaning. With high schema coverage, baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'List available Docker images for rolling back an application', using the specific verb 'List' and resource 'Docker images for rolling back'. This distinguishes it from sibling tools like coolify_rollback_application, which actually performs the rollback, and other list operations.

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

Usage Guidelines3/5

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

The phrase 'for rolling back an application' implies when to use the tool, but it does not explicitly state when to use it vs alternatives, nor does it mention that coolify_rollback_application would be the follow-up action. No exclusions or alternative recommendations are provided, so usage guidance is only implied.

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

coolify_list_s3_storagesA
Read-onlyIdempotent

List all S3 storages for the authenticated team with optional name filter. Credentials are NEVER returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter S3 storages by name (case-insensitive partial match)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the valuable behavioral disclosure that 'Credentials are NEVER returned', which is not captured by annotations and is important for security expectations. It also clarifies the team scope.

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

Conciseness5/5

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

Two short sentences, front-loaded with the main action, and every phrase adds value. 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 list operation with one optional parameter, the description is largely complete. It covers scope, optional filtering, and the critical security caveat about escaping credentials. No output schema exists, so return value details are not required, though pagination or field details could add richness.

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

Parameters3/5

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

Schema coverage is 100% and the 'name' parameter already has a clear description ('Filter S3 storages by name (case-insensitive partial match)'). The description merely repeats 'optional name filter' without adding further meaning, so it stays at the baseline 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 verb 'List', the resource 'S3 storages', the scope 'for the authenticated team', and the optional 'name filter'. This distinguishes it from sibling tools like coolify_create_s3_storage or coolify_validate_s3_storage, and the 'S3' qualifier disambiguates from coolify_list_storages.

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 context (authenticated team, optional name filter) but does not explicitly state when to use this tool versus alternatives such as coolify_list_storages or other list tools. There is no mention of when not to use it, so guidance is implied rather than explicit.

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

coolify_list_scheduled_tasksB
Read-onlyIdempotent

List scheduled tasks for an application or service.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeNoResource type. Defaults to application if omitted.
resource_uuidYesResource UUID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds minimal behavioral context beyond the annotations, such as implying the operation is safe and non-mutating, but does not disclose pagination, ordering, or response format. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, directly worded sentence that conveys the essential operation without any redundancy or filler. It earns its place entirely.

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 listing tool with read-only annotations and no output schema, the description is adequate. It identifies the key scope (application or service) and the action. It could mention the return type (list of task definitions) or any default behaviors, but these are not critical for the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters already described in the schema. The phrase 'for an application or service' mirrors the resource_type enum but adds no additional semantic detail beyond what the schema provides.

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

Purpose4/5

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

The description clearly states the action (List) and the resource (scheduled tasks) with a scope ('for an application or service'). It implicitly distinguishes from sibling tools like get_task_executions by focusing on the tasks themselves rather than their executions, but does not explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description provides no explicit context about selecting this over get_task_executions or other tools, nor does it mention any prerequisites or filtering options.

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

coolify_list_server_domainsA
Read-onlyIdempotent

List domains associated with a server.

ParametersJSON Schema
NameRequiredDescriptionDefault
server_uuidYesServer UUID

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is well covered. The description adds no further behavioral context, such as return format or pagination, but does not contradict annotations. With annotations present, a baseline of 3 is appropriate.

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 with no redundancy. Every word adds value, making it highly concise and well-structured.

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 tool with one parameter and strong annotations, the description is complete. It clearly states what the tool returns (a list of domains) and the input scope (a server). No output schema exists, but the nature of the tool makes the return value obvious. The description is sufficient for the tool's complexity.

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 covers the only parameter (server_uuid) with a clear description ('Server UUID'), and schema coverage is 100%. The description itself does not add semantic detail beyond referencing the server, but the baseline of 3 applies when the schema is self-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 uses a specific verb ('List') and resource ('domains') with an explicit scope ('associated with a server'). This clearly distinguishes it from sibling tools like list_servers or list_server_resources, which target 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 Guidelines3/5

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

The description makes the tool's purpose clear but provides no explicit guidance on when to use it versus alternatives. Its usage is implied: to retrieve domains for a specific server. No exclusions or alternative references are given, so it does not fully meet a 'clear context with exclusions' standard.

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

coolify_list_server_resourcesA
Read-onlyIdempotent

List resources associated with a specific server with optional type and status filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by resource status
server_uuidYesServer UUID
resource_typeNoFilter by resource type

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that results are scoped to a specific server, which is a useful behavioral context, but it does not disclose response format or any other operational 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?

The description is a single sentence with 13 words, front-loaded with the verb 'List' and including the key scoping detail. There is no redundant information.

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

Completeness5/5

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

The tool is a simple read-only list operation with well-documented parameters and clear annotations. The description, combined with the schema and annotations, provides sufficient context for an agent to select and invoke the tool correctly, even without an output schema.

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

Parameters3/5

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

Schema description coverage is 100%, with all three parameters documented including enums for status and resource_type. The description references 'optional type and status filters' but adds no additional meaning beyond the schema, so a 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 uses 'List resources associated with a specific server' which clearly names the action, resource, and scope. The optional filters are mentioned, and the name itself distinguishes it from the broader coolify_list_resources, 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 clearly states the tool scopes to a specific server, implying usage when a server_uuid is known and you need its resources. However, it does not explicitly compare to alternative tools like coolify_list_resources or state exclusions, so guidance is implied rather than explicit.

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

coolify_list_serversA
Read-onlyIdempotent

List all servers connected to your Coolify instance. Sensitive network info and SSH keys are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read-only operation. The description adds valuable behavioral context by stating that 'Sensitive network info and SSH keys are redacted', which informs the agent that output fields may be masked. This is useful 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 two crisp sentences. The first sentence front-loads the primary purpose, and the second adds a key behavioral caveat. No wasted words.

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 zero-parameter, no-output-schema listing tool, the description fully covers what it does and an important behavioral nuance (redaction). It is complete for the tool's simplicity.

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 an empty schema (100% coverage), so there is no parameter meaning to convey. The description correctly omits parameter details. Baseline for 0 params is 4, which 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 states a specific action ('List') and resource ('all servers connected to your Coolify instance'), distinguishing it from siblings like coolify_get_server (single server) and coolify_list_server_resources (resources on servers). The scope 'all servers' is unambiguous.

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

Usage Guidelines4/5

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

The phrase 'List all servers' clearly indicates when to use this tool (when you need the full server list). No explicit exclusions or alternatives are mentioned, but the simple nature of the tool and sibling names make this less critical. Still, a note about using get_server for individual details would be helpful.

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

coolify_list_storagesA
Read-onlyIdempotent

List storage mounts for an application, service, or database. Sensitive host paths are redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate a safe read-only operation (readOnlyHint=true, destructiveHint=false). The description adds valuable behavioral context by noting that sensitive host paths are redacted, which informs the agent about output masking beyond what annotations provide.

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

Conciseness5/5

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

The description is two concise sentences with no filler. It immediately states the action and scope, then adds one important behavioral note. This is optimal for quick comprehension.

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 two required parameters and no output schema, the description covers the tool's purpose, supported resource types, and key output behavior (redaction). No additional context is necessary for correct selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters (resource_type, resource_uuid) fully described. The description adds no additional parameter-level detail beyond the enum values and UUID pattern already present in the schema, so the baseline 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 tool lists storage mounts for specific resource types (application, service, database). The verb 'List' and resource 'storage mounts' distinguish it from sibling tools like create_storage or list_s3_storages.

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

Usage Guidelines4/5

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

The description makes it clear when to use the tool by specifying the supported resource types. However, it does not explicitly mention alternatives or when not to use it (e.g., for S3 storage), though the context is unambiguous.

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

coolify_list_team_membersA
Read-onlyIdempotent

List members of the current team. Email addresses are policy-gated and redacted by default.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 destructiveHint, so the safety profile is covered. The description adds valuable context about email redaction policy, which is a behavioral trait not captured by annotations or schema. This goes beyond the baseline.

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 redundant words. The purpose is stated first, followed by a single relevant behavioral note. Perfectly front-loaded and appropriately sized.

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

Completeness4/5

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

For a simple list tool with no output schema and no params, the description covers the main purpose and an important redaction detail. It does not detail return fields, but that is arguably unnecessary for a basic list operation. The behavioral note adds useful context.

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 is empty with 100% coverage. Baseline for 0 params is 4, and the description correctly does not attempt to explain params. No additional meaning is needed.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('members of the current team'), which exactly captures the tool's function. It is distinct from sibling tools like list_servers or list_projects, 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 implies usage for retrieving team members but does not explicitly state when to use this over alternatives or any exclusions. It provides context about the 'current team' scope but lacks direct guidance on alternative tools like get_current_team.

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

coolify_project_overviewA
Read-onlyIdempotent

High-level project overview: project info, all environments, resources with status, recent deployments, and health summary. Optimized to prevent multiple separate calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_uuidYesProject UUID

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds minimal behavioral context beyond listing what data is aggregated, but it does not disclose return format, pagination, rate limits, or what 'health summary' specifically contains, leaving the agent with incomplete 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 sentences with no filler. The first sentence front-loads the purpose and included data categories; the second explains its efficiency advantage. Every word earns its place, making it both concise and well-structured.

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 tool with one parameter and no output schema, the description lists the primary output categories (project info, environments, resources, deployments, health summary), which gives the agent a clear understanding of the shape. However, it does not specify the exact structure or nesting of the response, so it stops just short of fully 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 only parameter, project_uuid, is fully described in the schema as 'Project UUID' with a pattern, covering 100% of schema documentation. The tool description does not add any additional meaning or usage detail for the parameter, so it scores at the baseline for high 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 'High-level project overview' and enumerates exactly what is included: project info, environments, resources with status, recent deployments, and health summary. This clearly distinguishes it from sibling tools like coolify_get_project or coolify_list_resources by positioning it as an aggregate summary rather than a singular lookup.

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 usage context: use this for a composite overview. The phrase 'Optimized to prevent multiple separate calls' implies when to use it instead of querying several endpoint-specific tools, but it does not explicitly name alternatives or state when not to use it, so it lacks explicit exclusion criteria.

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

coolify_restartA
Destructive

Restart a resource. Production policy check is mandatory.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the destructiveHint annotation, the description adds a critical behavioral detail: 'Production policy check is mandatory.' This informs the agent that a guard condition exists, which is useful operational context not inferable from annotations alone.

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

Conciseness5/5

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

The description is two short sentences with no redundant information. It is front-loaded and 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?

Given the simplicity of the operation, the annotations covering safety, and the schema covering parameters, the description provides an important extra constraint (mandatory policy check). It is complete enough for a restart tool, though it could clarify what the policy check entails.

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 provides 100% coverage with descriptions for all parameters, including the enum for resource_type. The description adds no additional semantic meaning for the parameters, so it does not exceed the baseline.

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

Purpose5/5

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

The description states 'Restart a resource' with a clear verb and resource, distinguishing it from sibling tools like start, stop, deploy, rollback, etc. The purpose is immediately understandable.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives such as start, stop, or deploy. The mention of a mandatory production policy check is a prerequisite but does not clarify usage context or exclusions.

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

coolify_rollback_applicationA
Destructive

Queue a rollback deployment for an application to a previous image tag/commit. Deploy-only operation subject to operation mode, allowlist, and production guard policies. Audit: coolify.application.rollback

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesImage tag/commit to roll back to β€” sent as the "commit" field to the Coolify API
application_uuidYesApplication UUID
environment_nameNoEnvironment name for production guard check

TDQS

A4/5.0
Behavior4/5

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

Beyond the annotations (which already mark it as destructive), the description discloses additional behavioral traits: it is a queued operation, subject to operation mode, allowlist, and production guard policies, and has an audit trail ('Audit: coolify.application.rollback'). This adds meaningful context about side effects and controls.

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 only two sentences, with the main purpose front-loaded. It includes essential policy and audit information without redundancy. Every sentence earns its place, making it highly concise and well-structured.

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

Completeness4/5

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

Given the tool's simplicity and the full schema coverage, the description covers the purpose, policy constraints, and audit behavior. It does not mention the return value or outcome explicitly, but 'queue' implies an asynchronous deployment action. Considering the absence of an output schema, the description provides sufficient context for an agent to understand the tool's role and constraints.

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 has 100% coverage with descriptions for all parameters (e.g., image, application_uuid, environment_name). The description does not add any parameter-level detail beyond what the schema already provides. Thus, the baseline score of 3 is appropriate, as the schema does the heavy lifting.

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: 'Queue a rollback deployment for an application to a previous image tag/commit.' The verb 'queue' and the resource 'rollback deployment for an application' are specific, and the target ('previous image tag/commit') adds precision. This distinguishes it from sibling tools like deploy, restart, or cancel, which have different purposes.

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 mentions that it is a 'Deploy-only operation subject to operation mode, allowlist, and production guard policies,' which gives contextual constraints. However, it does not explicitly state when to use this tool instead of alternatives such as coolify_deploy or coolify_cancel_deployment. The usage guidance is implied through the phrase 'Deploy-only' but lacks explicit when-to-use or alternatives.

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

coolify_run_volume_backupA

Run a volume backup for a storage mount on an application, database, or service. Subject to operation mode, allowlist, and production guard policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
storage_uuidYesStorage UUID
resource_typeYesResource type: application, database, or service
resource_uuidYesResource UUID

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not idempotent, so the agent knows it's a mutating action. The description adds valuable context about being subject to operation mode, allowlist, and production guard policies, which is not captured in the annotations and helps the agent anticipate potential failures.

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

Conciseness5/5

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

Two sentences, no fluff. The first sentence states the action, the second adds important policy context. Every word earns its place.

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

Completeness3/5

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

The description covers the core action and constraints but omits what the tool returns, whether execution is asynchronous, and how storage_uuid and resource_uuid correlate. With no output schema, these are meaningful gaps for an agent invoking the tool correctly.

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

Parameters3/5

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

Schema coverage is 100% and each parameter has a basic description, but the tool description does not add meaningful explanation beyond what the schema provides. The relation between resource_uuid and storage_uuid is implied by 'storage mount on an application' but not explicitly spelled out. Baseline of 3 is appropriate because the schema covers the surface but not deeper semantics.

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 'Run' with the resource 'volume backup for a storage mount' and clearly scopes it to applications, databases, or services. This distinguishes it from sibling tools like create_backup_config which sets up a configuration, or list_backup_executions which lists results.

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 states what the tool does but does not explicitly say when to use it versus alternatives. The mention of operation mode, allowlist, and production guard policies implies constraints but does not provide clear guidance on when to choose this tool over create_backup_config or list_backup_executions.

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

coolify_set_environment_variableA
DestructiveIdempotent

Set an environment variable on a resource. DEFAULT DISABLED β€” COOLIFY_ALLOW_ENV_WRITE must be true. Value is NEVER returned in response.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesEnvironment variable key name
valueYesEnvironment variable value (will be redacted in response)
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

A3.5/5.0
Behavior4/5

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

The description discloses a key behavioral detail beyond annotations: 'DEFAULT DISABLED β€” COOLIFY_ALLOW_ENV_WRITE must be true' and 'Value is NEVER returned in response.' The redaction note partially duplicates the schema's value description, but the default-disabled gate is new context. The destructive and idempotent hints are already in annotations, so they don't need repeating.

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 long, front-loaded with the purpose, and immediately follows with the critical configuration gate and response behavior. Every sentence earns its place with no filler or repetition.

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

Completeness3/5

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

With 4 parameters, no output schema, and destructive annotations, the description covers the essential bits: purpose, the required feature flag, and the response redaction. However, it omits how this tool relates to the plural sibling, what 'destructive' implies in practice (e.g., overwriting, restarts), and does not explain the `environment_name` guard beyond the schema. It is adequate but has clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add meaningful parameter-level meaning beyond the schema; it only reiterates that the value is not returned, which is already in the value property description. The `environment_name` parameter's guard behavior is only explained via the schema.

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

Purpose4/5

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

The description states a specific action and target: 'Set an environment variable on a resource.' This is clear and uses a specific verb. However, it does not explicitly distinguish from the sibling tool `coolify_set_environment_variables` (plural), so it doesn't fully meet the 5-level bar for sibling differentiation.

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

Usage Guidelines2/5

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

The description provides a critical prerequisite (COOLIFY_ALLOW_ENV_WRITE must be true) but gives no guidance on when to use this tool versus alternatives like the plural `coolify_set_environment_variables`. It lacks any when/when-not context or comparison to other environment variable tools.

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

coolify_set_environment_variablesA
Idempotent

Set multiple environment variables on a resource in bulk (1-50). DEFAULT DISABLED β€” COOLIFY_ALLOW_ENV_WRITE must be true. Values are NEVER returned in response.

ParametersJSON Schema
NameRequiredDescriptionDefault
variablesYesEnvironment variables to set (1-50 entries)
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey that this is a write operation (readOnlyHint=false) and idempotent. The description adds critical context: values are never returned in the response and the feature is disabled by default unless an environment variable is set. This enhances safety understanding beyond the structured 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 three sentences with no fluff. It front-loads the core purpose, then includes the critical configuration caveat and a clear privacy note, each earning 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 bulk write operation with no output schema, the description covers the key safety aspects (default disabled, values never returned) and the operational scope. It doesn't explicitly mention idempotency or overwrite behavior, but the annotations cover idempotency, and the schema covers parameter validation. Sibling tools are reasonably differentiated.

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

Parameters3/5

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

The input schema already provides descriptions for all parameters (100% coverage), including the variables array constraints (1-50) and resource_type enum. The description does not add new parameter-specific semantics beyond what the schema conveys, so a 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 clearly states the action ('Set multiple environment variables'), the target ('on a resource'), and the scope ('in bulk (1-50)'). It also distinguishes itself from the sibling 'coolify_set_environment_variable' by explicitly indicating bulk operations.

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 bulk (1-50) phrasing implies use for multiple variables, and the singular sibling tool covers single-variable cases. The 'DEFAULT DISABLED β€” COOLIFY_ALLOW_ENV_WRITE must be true' note provides an important prerequisite and condition for use, effectively guiding when the tool can be invoked.

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

coolify_startA
Idempotent

Start a stopped resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=false, idempotentHint=true, and destructiveHint=false, which cover the basic safety profile. The description adds the precondition that the resource should be stopped, but does not disclose other behavioral aspects like whether starting is asynchronous or what happens if it is already running.

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 consists of a single, clear sentence with no unnecessary words. It is front-loaded and easy to read, making it highly concise.

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?

Given the low complexity of the tool and the rich schema/annotations, the description is minimally sufficient. However, it lacks any additional context about the optional environment_name parameter or the operational implications of starting a resource, like potential downtime or deployment triggers.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all parameters. The description adds no extra meaning about resource_uuid, resource_type, or environment_name; it just restates the tool's purpose.

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 'Start a stopped resource.' uses a specific verb ('Start') and a clear resource target, making its primary purpose immediately understandable. It distinguishes from sibling tools like coolify_stop and coolify_restart by the action, though it does not explicitly mention resource types or side effects.

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

Usage Guidelines3/5

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

The phrase 'stopped resource' gives an implied usage context: the tool is for resources that are currently stopped. However, it does not explicitly state when not to use it or mention alternatives such as restart or deploy, so the guidance is minimal.

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

coolify_stopB
Destructive

Stop a resource. DEFAULT DISABLED β€” COOLIFY_ALLOW_STOP must be true. Marked destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
resource_typeYesResource type: application, service, or database
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

B3.4/5.0
Behavior3/5

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

The description adds the 'DEFAULT DISABLED β€” COOLIFY_ALLOW_STOP must be true' prerequisite, which is beyond annotations, and mentions 'destructive', aligning with the destructiveHint annotation. However, it does not disclose other behavioral aspects like reversibility or effects on running resources.

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 extremely concise: a single statement and an important configuration warning. It is front-loaded with the primary action and contains no filler.

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

Completeness4/5

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

For a simple stop operation, the description plus annotations provide sufficient context: the action, destructive nature, and a critical configuration requirement. The schema covers parameters. It lacks mention of reversibility, but the existence of coolify_start as a sibling implies resources can be restarted, so this gap is minor.

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

Parameters3/5

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

The input schema already provides descriptions for all three parameters (resource_uuid, resource_type, environment_name), so the description adds no additional parameter meaning. Baseline of 3 is appropriate given 100% schema 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 'Stop a resource' clearly states the action (stop) and object (resource), and the schema enumerates valid resource types. It distinguishes from siblings like 'start' and 'restart' by the verb, but does not explicitly compare or contrast.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as coolify_start or coolify_restart. The only additional note is the environment variable requirement, which is a prerequisite rather than usage context.

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

coolify_update_application_configA
Idempotent

Update application configuration: health check, resource limits, replicas, ports, build settings. PATCH semantics. Audit: coolify.application.config.update

ParametersJSON Schema
NameRequiredDescriptionDefault
fqdnNoFully qualified domain name
nameNoApplication name
portsNoPort mapping
previewsNoEnable preview deployments
replicasNoNumber of replicas
cpu_limitNoCPU limit (e.g., "1", "500m")
build_packNoBuild pack
cpu_sharesNoCPU shares (2-1024)
auto_deployNoEnable auto-deploy on push
descriptionNoApplication description
health_checkNoEnable or disable health checks
memory_limitNoMemory limit (e.g., "512Mi", "2Gi")
base_directoryNoBase directory for build
application_uuidYesApplication UUID
dockerfile_locationNoDockerfile location

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint=false, idempotentHint=true), the description discloses two useful behavioral traits: 'PATCH semantics' (partial updates) and an audit trail ('Audit: coolify.application.config.update'). This adds context without contradicting annotations.

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

Conciseness5/5

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

The description is a single concise sentence, front-loaded with the main action and resource, followed by relevant details (config areas, PATCH semantics, audit). Every element earns its place and no filler is present.

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 15-parameter update tool without an output schema, the description covers the main scope and semantics. It could go deeper on preconditions (e.g., application must exist) or effects (e.g., triggers redeploy), but the given context plus schema descriptions provide enough for an agent to proceed safely.

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 only lists broad categories (health check, resource limits, etc.) and does not add per-parameter meaning beyond what the schema already provides. The 'PATCH semantics' note indirectly implies optionality, but that is more behavioral than parameter-specific.

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 'Update' with resource 'application configuration' and enumerates key areas (health check, resource limits, replicas, ports, build settings). This clearly distinguishes it from sibling tools like coolify_create_application and coolify_update_database_config.

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

Usage Guidelines4/5

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

The description clearly indicates this is for modifying existing application configuration via 'Update' and 'PATCH semantics'. It does not explicitly name when not to use it or provide alternatives, but the context is unambiguous enough for an agent to differentiate from create/deploy/restart tools.

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

coolify_update_backup_configA
Idempotent

Update a backup configuration for a database. PATCH semantics β€” only provided fields are updated. Cron expression is validated.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledNoEnable or disable the backup config
scheduleNoCron expression for backup schedule
retentionNoNumber of backups to retain
database_uuidYesDatabase UUID
scheduled_backup_uuidYesScheduled backup UUID

TDQS

A4.4/5.0
Behavior4/5

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

Description adds behavioral context beyond annotations: PATCH semantics (only provided fields updated) and cron validation. Combined with idempotentHint=true and destructiveHint=false, the agent understands this is a non-destructive partial update. It does not mention auth requirements or response format, but annotations cover the core safety profile.

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

Conciseness5/5

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

Two concise sentences: first identifies the action and resource, second adds essential PATCH semantics and validation behavior. No wasted words 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 update tool with full schema coverage and beneficial annotations, the description is sufficient for selection and invocation. It could mention return value since no output schema exists, but the PATCH semantics and validation note provide enough operational context.

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?

Input schema already covers all 5 parameters at 100% coverage. The description adds value by clarifying that only provided fields are updated (applying to optional params) and that schedule is validated as a cron expression, which goes beyond the raw property 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?

Clearly states verb 'Update' and object 'backup configuration for a database', which is specific and distinguishable from the sibling create tool (coolify_create_backup_config). The scope is immediately understandable.

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?

PATCH semantics explicitly indicate usage for partial updates of an existing config, and the validation note warns about cron format. However, it does not explicitly name alternatives like create_backup_config for new configurations or list_backup_executions for monitoring, leaving the when-not guidance implicit.

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

coolify_update_database_configA
Idempotent

Update database configuration: CPU/memory limits, name, description. PATCH semantics. Audit: coolify.database.config.update

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDatabase name
cpu_limitNoCPU limit (e.g., "1", "500m")
descriptionNoDatabase description
memory_limitNoMemory limit (e.g., "512Mi", "2Gi")
database_uuidYesDatabase UUID

TDQS

A4.2/5.0
Behavior4/5

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

The description adds PATCH semantics, which tells the agent that unspecified fields remain unchanged and only provided fields are updated. It also mentions the audit log event, which is contextual. Annotations already indicate idempotence and non-destructiveness, so the description builds on that.

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 extremely concise: one sentence plus two short fragments. It conveys the action, scope, semantics, and audit trail in under 25 words. 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?

Given the simple nature of the tool, an output schema is absent, and annotations cover the safety profile. The description supplies the essential semantics (PATCH) and identifies the target resource, making it sufficiently complete for an agent to invoke correctly.

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

Parameters3/5

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

The input schema covers 100% of parameters with descriptions, so the description's mention of 'CPU/memory limits, name, description' simply echoes the schema. However, PATCH semantics clarifies the optionality of parameters beyond the schema's required field.

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 ('Update database configuration') and enumerates specific fields (CPU/memory limits, name, description). It distinguishes from sibling update tools by naming 'database configuration' explicitly.

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 this tool: to update database configuration with PATCH semantics (partial updates). It doesn't explicitly name alternatives or exclusions, but the resource type is unambiguous.

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

coolify_update_notificationB

Update notification settings for a channel. PATCH semantics. Credential values are never echoed back or logged. Subject to operation mode and production guard policies. Audit: coolify.notification.update.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior4/5

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

The description discloses meaningful behavioral traits beyond the annotations: PATCH semantics, credential non-echo/logging policy, operation mode and production guard constraints, and an audit identifier. These are valuable for a write operation, even though it doesn't cover return values or error specifics.

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

Conciseness5/5

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

The description is compact and front-loaded, with each sentence adding distinct value: purpose, PATCH semantics, credential security, guard policies, and audit trail. There is no unnecessary padding.

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

Completeness2/5

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

The description is incomplete for a write-only, zero-parameter tool. It doesn't explain what notification settings are, how a channel is selected, or what success looks like. The security and policy notes are helpful but leave the core functionality underexplained.

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

Parameters2/5

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

The schema has zero properties, but the description mentions 'channel' without explaining how the tool identifies the target. This creates ambiguity about what the agent should provide or what action is implied. The description fails to clarify the parameter semantics for a zero-parameter tool.

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 and resource: 'Update notification settings for a channel,' and adds 'PATCH semantics' to clarify the update method. It is distinct from sibling update tools on other resources, though it doesn't explicitly call out the differentiation.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. It does not mention `coolify_list_notifications` or other notification-related tools, and provides no prerequisites or exclusions. The only contextual note is about mode/guard policies, which is more about constraints than usage direction.

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

coolify_update_scheduled_taskB
Idempotent

Update a scheduled task. Subject to operation mode, allowlist, and production guard policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated task name
commandNoUpdated command
enabledNoEnable or disable the task
timeoutNoUpdated timeout in seconds
scheduleNoUpdated cron expression
containerNoUpdated container name
task_uuidYesScheduled task UUID
resource_typeYesResource type
resource_uuidYesResource UUID
environment_nameNoEnvironment name for production guard check

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare it as non-read-only, idempotent, and non-destructive. The description adds that the tool is subject to operation mode, allowlist, and production guard policies, which is useful context beyond the annotations, but it does not explain consequences or response 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?

Two short sentences with no redundancy. The policy caveat is concise, and every word earns its place.

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

Completeness2/5

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

With 10 parameters, no output schema, and only a terse policy reference, the description is too minimal to fully support an agent. It doesn't explain update behavior, what fields are updated together, or how the policies might block or alter the call.

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

Parameters3/5

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

The schema provides full descriptions for all 10 parameters, so the baseline is 3. The description does not add parameter-specific details beyond the schema, though the production guard mention loosely relates to environment_name.

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 'Update' with the resource 'scheduled task', clearly distinguishing it from sibling tools like coolify_create_scheduled_task and coolify_execute_scheduled_task. The core purpose is explicit and unambiguous.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus coolify_create_scheduled_task or other update tools. The policy caveat provides a constraint but does not help select among alternatives.

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

coolify_validate_s3_storageA
Idempotent

Validate an S3 storage connection using ListObjectsV2. Audited as a mutation action.

ParametersJSON Schema
NameRequiredDescriptionDefault
s3_storage_uuidYesS3 Storage UUID

TDQS

A3.7/5.0
Behavior4/5

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

The description adds important context by stating 'Audited as a mutation action,' which explains why the readOnlyHint is false. It also mentions the specific API call (ListObjectsV2), providing insight into how the validation is performed. This goes beyond the annotations by clarifying the mutation classification and the underlying mechanism.

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 extremely concise, consisting of only two sentences. It front-loads the core purpose and includes only the essential behavioral note about being a mutation. No words are wasted.

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

Completeness3/5

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

For a simple validation tool with one parameter, the description covers the main purpose and the mutation distinction. However, it does not explain what the response will be (e.g., success indicator, error details) or what the user should expect after invocation. Since there is no output schema, the description could offer more on the outcome, making it minimally complete but with a notable gap.

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

Parameters3/5

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

The input schema has one parameter (s3_storage_uuid) with a complete description ('S3 Storage UUID'), so the schema covers 100% of the parameter semantics. The tool description does not add any additional detail about the parameter, but the schema is sufficient. 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 states the tool validates an S3 storage connection and specifies the method (ListObjectsV2). It is distinct from sibling tools like coolify_validate_server, which validates a different resource. The verb 'validate' and the resource 'S3 storage connection' are specific and unambiguous.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention any prerequisites, conditions, or refer to similar tools. The usage is only implied: you validate an S3 storage connection when you need to check its connectivity.

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

coolify_validate_serverA
Idempotent

Validate server connectivity and configuration. Audited as a mutation action.

ParametersJSON Schema
NameRequiredDescriptionDefault
server_uuidYesServer UUID

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the important context that this action is 'audited as a mutation action,' explaining why it is not read-only and providing behavioral nuance for agents that audit side effects. This goes beyond the structured fields.

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 with no unnecessary words. It is front-loaded with the action and target, and every phrase contributes to understanding the tool's purpose and audit behavior.

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 tool with one parameter, the description covers the core purpose and adds audit context. It does not describe return values or error scenarios, but with annotations present and the low complexity, the description is sufficiently complete for an agent to invoke the tool correctly.

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

Parameters3/5

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

The schema covers the only parameter (server_uuid) with a description, and schema coverage is 100%. The description does not add any additional meaning to the parameter beyond what the schema already provides, so the baseline 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 tool 'validate server connectivity and configuration' with a specific verb and resource. It distinguishes itself from sibling tools like coolify_list_servers and coolify_get_server by focusing on validation rather than listing or retrieval.

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 this tool is used to check a server's connectivity and configuration, but it does not explicitly state when to use it versus alternatives, such as coolify_get_server for checking server details. No when-not-to-use or alternative guidance is provided.

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

TDQS

A3.5/5.0
Disambiguation4/5

Most tools follow a clear resource-action pattern with distinct entities (servers, projects, deployments, etc.). A few pairs like list_database_backups vs list_backup_executions and set_environment_variable(s) could be confused, but descriptions provide adequate differentiation.

Naming Consistency4/5

Tools consistently use the coolify_ prefix followed by verb_noun (list_servers, get_server, create_application). A few tools deviate with bare verbs (deploy, restart, start, stop) or noun-only names (health, project_overview), but the pattern is largely predictable.

Tool Count2/5

With 59 tools, the server presents a very large surface area. While the domain is broad, the count exceeds reasonable expectations and places a heavy burden on agent selection, even if each tool may be individually useful.

Completeness3/5

The toolset covers creation, reading, updating, and deployment for core resources, but lacks delete operations for applications, services, databases, and other entities. Additionally, services have no dedicated update tool, leaving notable gaps in lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hecateq/mcp-coolify'

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