coolify-mcp
Allows management of Docker-based applications and services on a Coolify instance, including creation from Dockerfiles or images, starting, stopping, and restarting.
Provides tools for managing MariaDB databases on a Coolify instance, including creation, backup, and lifecycle operations.
Provides tools for managing MongoDB databases on a Coolify instance, including creation, backup, and lifecycle operations.
Provides tools for managing MySQL databases on a Coolify instance, including creation, backup, and lifecycle operations.
Provides tools for managing PostgreSQL databases on a Coolify instance, including creation, backup, and lifecycle operations.
Provides tools for managing Redis databases on a Coolify instance, including creation, backup, and lifecycle operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@coolify-mcplist all applications"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
coolify-mcp
MCP server for managing Coolify instances (v4.3+ API). Control applications, databases, services, servers, and more directly from Claude or any MCP-compatible client.
136 tools | 7 resources | 4 prompts
Requires Coolify v4.3.0 or newer (/api/v1); v4.4.2 is recommended and is the integration-test target for MCP 4.2.0. Tools and options marked v4.4+ need Coolify v4.4.0 or newer and answer 404 or 422 on older instances. Legacy GET-based state-changing endpoints are not supported.
See the 4.2.0 API audit for pinned upstream sources, compatibility changes, and endpoints that are not wrapped. The 4.1.0 audit covers v4.3.23.
Installation
Claude Code
claude mcp add coolify \
-e COOLIFY_API_URL=http://your-server:8000/api/v1 \
-e COOLIFY_TOKEN=your-token \
-- npx mcp-coolifyCodex
codex mcp add coolify \
--env COOLIFY_API_URL=http://your-server:8000/api/v1 \
--env COOLIFY_TOKEN=your-token \
-- npx mcp-coolifyOther MCP clients
COOLIFY_API_URL=http://your-server:8000/api/v1 \
COOLIFY_TOKEN=your-token \
npx mcp-coolifyFrom source
git clone https://github.com/0xtlt/coolify-mcp
cd coolify-mcp && pnpm install
COOLIFY_API_URL=... COOLIFY_TOKEN=... pnpm startClaude Desktop
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"coolify": {
"command": "pnpm",
"args": ["exec", "tsx", "/path/to/coolify-mcp/src/index.ts"],
"env": {
"COOLIFY_API_URL": "http://your-server:8000/api/v1",
"COOLIFY_TOKEN": "your-token"
}
}
}
}Get your API token
Coolify dashboard: Keys & Tokens > API tokens
On Coolify v4.4+ pick the token abilities for what you want to do:
Ability | Needed for |
| List and get tools |
| All log tools, |
| [WRITE] and [DESTRUCTIVE] tools |
| Deploy, start, stop and restart tools, |
Related MCP server: Coolify MCP Server
Available Tools
Applications (8)
Tool | Description |
| List all applications (summary) |
| Get application details |
| [WRITE] Create from public/private repo, Dockerfile, or Docker image |
| [WRITE] Update application config |
| [WRITE] Start a stopped application |
| [DESTRUCTIVE] Stop an application |
| [DESTRUCTIVE] Restart an application |
| [DESTRUCTIVE] Delete an application |
Preview Deployments (6)
Each tool takes the parent application uuid; all but the list take a pull_request_id between 1 and 2147483647. List, get and deploy need Coolify v4.4+.
Tool | Description |
| List previews of an application (summary) |
| Get one preview with its domains and status |
| [WRITE] Open or redeploy the preview of a pull request ( |
| Read preview runtime logs with the same filters as application logs |
| [WRITE] Replace preview domains using |
| [DESTRUCTIVE] Remove the preview, its containers, volumes, and networks |
Databases (11)
Tool | Description |
| List all databases (summary) |
| Get database details |
| [WRITE] Create PostgreSQL, MySQL, MariaDB, MongoDB, Redis, KeyDB, Dragonfly, ClickHouse, or SQLite (v4.4+) |
| [WRITE] Update database config |
| List backups for a database |
| [WRITE] Create a backup schedule ( |
| [DESTRUCTIVE] Delete a scheduled backup config |
| [WRITE] Start a stopped database |
| [DESTRUCTIVE] Stop a database |
| [DESTRUCTIVE] Restart a database |
| [DESTRUCTIVE] Delete a database |
Backup Schedule Updates & Executions (3)
Tool | Description |
| [WRITE] Update schedule, retention, S3 and missing-backup alerts |
| List execution history for a database backup schedule |
| [DESTRUCTIVE] Delete a backup execution |
Database Imports (4)
Coolify v4.4+. An import runs in the background: start it, then poll the status tool until status is finished or error. source is s3 (s3_storage_uuid + path), server (absolute path on the database server) or upload (upload_id of a file sent to POST .../imports/uploads).
Tool | Description |
| [DESTRUCTIVE] Restore a backup into a standalone database |
| Get the status of a standalone database import |
| [DESTRUCTIVE] Restore a backup into a database of a service |
| Get the status of a service database import |
Services (8)
Tool | Description |
| List all services (summary) |
| Get service details |
| [WRITE] Create a one-click Docker Compose service |
| [WRITE] Update service config |
| [WRITE] Start a stopped service |
| [DESTRUCTIVE] Stop a service |
| [DESTRUCTIVE] Restart a service |
| [DESTRUCTIVE] Delete a service |
Servers (8)
Tool | Description |
| List all servers (summary) |
| Get server details |
| [WRITE] Add a new server (requires SSH key) |
| [WRITE] Update server config |
| [WRITE] Validate SSH connectivity and Docker (POST) |
| List all resources on a server |
| List all domains on a server |
| [DESTRUCTIVE] Delete a server ( |
Docker Registry Logins (4)
Coolify v4.4+. Coolify runs docker login on the server and does not store the token. registry is a host such as ghcr.io or registry.example.com:5000.
Tool | Description |
| List registries a server is logged in to and the ones its applications need |
| [WRITE] Log in to a registry or update the login |
| [WRITE] Check that a stored login still works |
| [DESTRUCTIVE] Log out of a registry |
Private Keys (5)
Tool | Description |
| List all SSH private keys (summary) |
| Get private key details |
| [WRITE] Create a new SSH key |
| [WRITE] Update an SSH key |
| [DESTRUCTIVE] Delete an SSH key |
Projects & Environments (9)
Tool | Description |
| List all projects (summary) |
| Get project details |
| [WRITE] Create a new project |
| [WRITE] Update a project |
| [DESTRUCTIVE] Delete a project |
| List environments in a project |
| Get environment details |
| [WRITE] Create an environment |
| [DESTRUCTIVE] Delete an environment |
Deployments (5)
Tool | Description |
| List currently running/queued deployments |
| List deployment history for an application (with pagination) |
| Get deployment details |
| [WRITE] Trigger a deployment (POST |
| [WRITE] Cancel a running deployment |
Application Env Vars (4)
Tool | Description |
| List env vars for an application |
| [WRITE] Create an env var |
| [WRITE] Bulk update env vars |
| [DESTRUCTIVE] Delete an env var |
Service Env Vars (4)
Tool | Description |
| List env vars for a service |
| [WRITE] Create a service env var |
| [WRITE] Bulk update service env vars |
| [DESTRUCTIVE] Delete a service env var |
Database Env Vars (4)
Tool | Description |
| List env vars for a database |
| [WRITE] Create a database env var |
| [WRITE] Bulk update database env vars |
| [DESTRUCTIVE] Delete a database env var |
Storages (12)
Tool | Description |
| List application persistent + file storages |
| [WRITE] Create storage ( |
| [WRITE] Update storage (body: uuid + type) |
| [DESTRUCTIVE] Delete application storage |
| List database storages |
| [WRITE] Create database storage |
| [WRITE] Update database storage |
| [DESTRUCTIVE] Delete database storage |
| List service storages |
| [WRITE] Create service storage ( |
| [WRITE] Update service storage |
| [DESTRUCTIVE] Delete service storage |
Volume Backups (9)
Tool | Description |
| [WRITE] Create/replace application volume backup schedule |
| [WRITE] Run on-demand application volume backup |
| [DESTRUCTIVE] Delete application volume backup schedule |
| [WRITE] Create/replace database volume backup schedule |
| [WRITE] Run on-demand database volume backup |
| [DESTRUCTIVE] Delete database volume backup schedule |
| [WRITE] Create/replace service volume backup schedule |
| [WRITE] Run on-demand service volume backup |
| [DESTRUCTIVE] Delete service volume backup schedule |
Scheduled Tasks (10)
Tool | Description |
| List application tasks |
| [WRITE] Create an application task |
| [WRITE] Update an application task |
| [DESTRUCTIVE] Delete an application task |
| List application task executions |
| List service tasks |
| [WRITE] Create a service task |
| [WRITE] Update a service task |
| [DESTRUCTIVE] Delete a service task |
| List service task executions |
GitHub Apps (6)
Tool | Description |
| List GitHub integrations |
| [WRITE] Create an integration |
| [WRITE] Update an integration |
| [DESTRUCTIVE] Delete an integration |
| List accessible repositories |
| List repository branches |
Logs (3)
Tool | Description |
| Get application logs with filtering |
| Get database logs with filtering |
| Get service logs with filtering |
System (3)
Tool | Description |
| Get Coolify instance version |
| Check if Coolify is healthy |
| List resources across projects |
Audit Log (1)
Coolify v4.4+. Requires a team admin/owner API token.
Tool | Description |
| List UI, API, MCP and webhook activity, newest first ( |
Secret Managers (2)
Coolify v4.4+. After linking, reference secrets in environment variables as {{vault.KEY}}.
Tool | Description |
| [WRITE] Store a Doppler, Infisical, or HashiCorp Vault token for the team |
| [WRITE] Link an application to a secret manager token |
Instance Email Settings (2)
Verified on Coolify v4.3.23. Requires a root-team admin/owner API token. Reading secret values requires read:sensitive or root; updating requires write:sensitive.
Tool | Description |
| Read instance-wide SMTP and Resend settings |
| [WRITE] Update SMTP/Resend settings; |
Teams (5)
Tool | Description |
| List all teams |
| Get token team ( |
| [WRITE] Set the build server fallback of the token team (v4.4+) |
| List token team members ( |
| List members of a team by ID |
Available Resources
URI | Description |
| List of all applications |
| List of all databases |
| List of all services |
| List of all servers |
| List of all deployments |
| List of all projects |
| List of all SSH private keys |
Available Prompts
Prompt | Description |
| Step-by-step guide to debug a failed deployment |
| Get a complete overview of all infrastructure |
| Guided workflow to deploy an application |
| Guided workflow to create and configure a new app |
Safety Modes
Variable | Description |
| Only read operations available (list, get, logs) |
| Destructive operations require |
Log Filtering
The coolify_get_logs, coolify_get_application_preview_logs, coolify_get_database_logs, and coolify_get_service_logs tools support:
level: Minimum log level (debug, info, warn, error, fatal)since/until: ISO 8601 timestamps for time rangesearch: Case-insensitive text searchlines: Server lines to fetch (defaults tolimit, up to 10000;"all"or-1fetches all)show_timestamps: Include server timestamps (default true)limit: Max filtered entries returned (default 100, max 1000)tail: Get most recent logsservice_name(application and preview logs, v4.4+): Compose service whose container to read
Coolify v4.4+ only serves logs to tokens with the read:sensitive ability.
API Compatibility Notes for 4.2.0
Logs need
read:sensitiveon Coolify v4.4+. A token with onlyreadgets403from every log tool. Create a new token withread:sensitive, orroot.instant_deployon application, database and service creation, and on application updates, needs thedeployability on Coolify v4.4+.Servers have a
server_role(deployment,build,both).is_build_serverstill works but is deprecated; sending both with different meanings fails before the request.Scheduled task
timeoutis limited to 1-36000 seconds, as Coolify v4.4 validates it.Database start and restart answer
409while another start, restart or import runs.The multipart upload endpoint for imports (
POST .../imports/uploads, up to 10 GiB) is not wrapped. Usesource: "s3"orsource: "server", or upload the file yourself and pass itsupload_id.
API Compatibility Notes for 4.1.0
Storage creation/update no longer accepts
host_path. Calls supplying it receive a migration error before contacting Coolify. Use a namedtype: "persistent"volume, or createtype: "file"withfs_pathand eitheris_directory: trueoris_host_file: true. Existing mount sources cannot be changed through the update endpoint.coolify_create_database_backupnow requiresfrequencyand creates a schedule; setbackup_now: trueto also execute it immediately. The result includes the schedule UUID. Create/update support retention, S3 (s3_storage_uuid), timeout, andmissing_backup_notification_days(0 disables alerts). The unsupported update fieldss3_storage_idanddatabase_name_prefixhave been removed.Preview-domain updates replace the entire domain configuration. Supply exactly one of
domains(regular app;nullclears it) ordocker_compose_domains(Compose app;[]clears it).
Environment Variables
Variable | Required | Description |
| Yes | Coolify API URL (e.g. |
| Yes | Bearer token from Coolify dashboard |
| No | Request timeout in ms (default: 30000) |
| No | Read-only mode (default: false) |
| No | Require confirmation for destructive ops (default: false) |
| No | Enable debug logging (default: false) |
Development
pnpm install # Install dependencies
pnpm run dev # Watch mode
pnpm run inspect # MCP Inspector
pnpm run check # Lint + typecheck + test
pnpm test # Run tests onlyLicense
MIT
Available Tools
136 toolscoolify_cancel_deploymentC
[WRITE] Cancel a running or queued deployment
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the deployment to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. The description does not state whether the operation is reversible, what side effects occur (e.g., if a queued deployment is removed entirely), or whether any confirmation or rollback is possible. The only hint is the "[WRITE]" prefix indicating mutation, but deeper behaviors remain opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at a single phrase. However, the "[WRITE]" prefix is a useful semantic marker that adds structure without redundancy. Every element earns its place. It could be slightly more informative while remaining concise, but as it stands it is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no output schema), the description is minimal but adequate for basic invocation. However, it fails to explain important context like what happens after cancellation, whether the operation is synchronous or asynchronous, or how to verify the result. For a cancellation tool, these details matter for an AI agent's execution confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter 'uuid', including a description that says "UUID of the deployment to cancel". The description does not add any additional meaning beyond what the schema already provides, such as how to obtain the UUID or any format constraints. Given full schema coverage, the baseline is 3, and the description does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with "[WRITE]" to signal the operation type, and then uses a specific verb and resource: "Cancel a running or queued deployment". This clearly states what the tool does and distinguishes it from other deployment tools like coolify_trigger_deploy or coolify_get_deployment. However, it does not explicitly differentiate from coolify_restart_application (which also affects running state), but the resource is clearly deployments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention prerequisites (e.g., needing the deployment UUID from a tool like coolify_list_deployments) or constraints (e.g., only works on running or queued deployments). Without such guidance, an AI agent may attempt to cancel a deployment that has already completed or fail to understand the required input context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_check_server_registryA
[WRITE] Check that the stored login of a server for a Docker registry still works (Coolify v4.4+). Changes nothing, but the API requires write ability.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server | |
| registry | Yes | Registry host without scheme or path, e.g. ghcr.io or docker.io |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does well: it flags the [WRITE] classification and explains the non-obvious reason ('Changes nothing, but the API requires write ability'), preventing an agent from assuming this mutates state. It falls short of describing what the call returns or how a failed check surfaces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The [WRITE] tag and the core purpose are front-loaded, and every clause (version requirement, non-mutating reassurance) adds information. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter validation call with no output schema, the description covers purpose, side-effect profile and version gating. It omits what a successful versus failed check yields, which is the one gap an agent would still want closed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the registry parameter carrying a format example ('ghcr.io or docker.io'). The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Check') and precise resource ('the stored login of a server for a Docker registry'), plus a version constraint (v4.4+). It is distinguishable from login/logout/list siblings by implication, but never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing 'still works' implies this is a validation step after a login has been stored, but the description never states when to call it versus coolify_login_server_registry or coolify_list_server_registries, nor any prerequisite that a registry entry must already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_applicationC
[WRITE] Create a new Coolify application from various sources
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Application name | |
| domains | No | Domain name(s) for the application | |
| build_pack | No | Build pack (dockerfile, nixpacks, static, dockercompose, dockerimage) | |
| dockerfile | No | Inline Dockerfile content (for dockerfile source_type) | |
| git_branch | No | Git branch (default: main) | |
| description | No | Application description | |
| server_uuid | Yes | UUID of the server to deploy on | |
| source_type | Yes | Source type for the application | |
| project_uuid | Yes | UUID of the project | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| ports_exposes | No | Exposed ports, comma-separated (e.g. '3000,8080') | |
| git_repository | No | Git repository URL (required for public/private-github-app/private-deploy-key) | |
| instant_deploy | No | Deploy immediately after creation | |
| github_app_uuid | No | GitHub App UUID (required for private-github-app) | |
| environment_name | Yes | Environment name (e.g. 'production') | |
| private_key_uuid | No | Private key UUID (required for private-deploy-key) | |
| docker_registry_image_tag | No | Docker image tag (default: 'latest') | |
| docker_registry_image_name | No | Docker image name (required for dockerimage, e.g. 'nginx') | |
| custom_container_name_prefix | No | Readable prefix for generated container names (Coolify v4.4+; slugified, max 30 chars, unique per server) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses that this is a write operation via "[WRITE]" and "Create," but does not explain side effects, permission requirements, how instant_deploy behaves, or what happens across the different source types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with a useful "[WRITE]" prefix and is front-loaded with the core action. It contains no wasted language, though "from various sources" is vague enough to reduce precision slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex write tool with 19 parameters, no annotations, and no output schema, the description is too minimal. It omits source-type distinctions, required field relationships, and operational consequences, leaving the schema to carry nearly all of the explanatory load.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 19 parameters including required fields, enums, and source-specific requirements. The description adds no parameter-level meaning beyond the vague phrase "from various sources," 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: "Create a new Coolify application." The "[WRITE]" tag reinforces the operation type. However, it does not explicitly distinguish this tool from sibling alternatives such as coolify_update_application or coolify_delete_application, leaving that distinction implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor are prerequisites such as needing a server UUID, project UUID, and environment name called out in prose. The create intent is inferable from the name, but no explicit usage context or exclusions 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_application_scheduled_taskC
[WRITE] Create a scheduled task for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Task name | |
| uuid | Yes | UUID of the application | |
| command | Yes | Command to execute | |
| enabled | No | Whether the task is enabled | |
| timeout | No | Timeout in seconds | |
| container | No | Container name to run in | |
| frequency | Yes | Cron frequency (e.g. '* * * * *') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that this is a write operation; it says nothing about required permissions, side effects, idempotency, or what happens to existing tasks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Its brevity contributes to conciseness, though the resulting under-specification is penalized elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is far too thin. It does not explain creation behavior, permission requirements, response format, or how this interacts with application deploys or existing scheduled tasks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters including uuid, command, frequency, timeout, and enabled are already documented in the input schema. The description adds no parameter meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('scheduled task') scoped to a Coolify application, which distinguishes it from the sibling service scheduled-task tool. It is clear but does not explicitly name alternatives or contrast with update/list/delete scheduled-task siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The only usage signal is the implied '[WRITE]' prefix, which is not sufficient to route an agent among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_application_storageA
[WRITE] Add a persistent or file storage mount to a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (required for persistent storages) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the application | |
| content | No | File content (file storages only) | |
| fs_path | No | Host path (required with is_directory or is_host_file) | |
| host_path | No | Unsupported by current Coolify; use type=file with fs_path instead | |
| mount_path | Yes | Container mount path (e.g. /data) | |
| is_directory | No | Whether this is a directory mount (file only) | |
| is_host_file | No | Mount an existing host file (type=file, requires fs_path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The '[WRITE]' tag and 'Add' signal mutation, but nothing is said about prerequisites, side effects, reversibility, or what happens with different storage types. This is a thin disclosure for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with the '[WRITE]' marker and a clear action/resource pair. There is no filler or repetition of schema details, making it efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nine parameters and conditional field interactions, and there is no output schema or annotations. However, the schema's per-field descriptions are unusually thorough, covering file-only fields, unsupported host_path, and requirements like fs_path with is_directory/is_host_file. The description itself is too sparse to explain return values or prerequisites, but the overall definition is adequate for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters, including conditional requirements like name being required for persistent storages. The description itself adds no parameter-level meaning, which is acceptable given the rich schema, but it also doesn't highlight the most important conditional logic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '[WRITE]' and uses the specific verb 'Add' with a concrete object ('persistent or file storage mount') and target ('Coolify application'). This clearly distinguishes it from sibling storage tools for services/databases and from update/list/delete storage tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Add' and the phrase 'to a Coolify application' imply this tool is for creating new storage mounts on an application, as opposed to updating or listing them. However, it does not explicitly name alternatives or state when not to use it, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_databaseC
[WRITE] Create a new Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Database name | |
| type | Yes | Database engine type | |
| image | No | Docker image (e.g. postgres:16-alpine) | |
| is_public | No | Make database publicly accessible | |
| description | No | Database description | |
| limits_cpus | No | CPU limit (e.g. 0.5, 2) | |
| public_port | No | Public port number | |
| server_uuid | Yes | UUID of the server to deploy on | |
| type_config | No | Type-specific config. Postgres: postgres_user, postgres_password, postgres_db. MySQL/MariaDB: mysql_root_password, mysql_database, mysql_user, mysql_password. MongoDB: mongo_initdb_root_username, mongo_initdb_root_password. Redis: redis_password. ClickHouse: clickhouse_admin_user, clickhouse_admin_password. SQLite (Coolify v4.4+, no is_public/public_port): sqlite_databases (comma-separated file names) | |
| project_uuid | Yes | UUID of the project | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| limits_memory | No | Memory limit (e.g. 512m, 1g) | |
| instant_deploy | No | Deploy immediately after creation | |
| environment_name | Yes | Environment name (e.g. 'production') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. The '[WRITE]' marker confirms mutation, but the description does not mention required permissions, side effects, whether deployment happens immediately, or what happens when dependencies are missing. For a create operation with 14 parameters and no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded phrase with no waste, but it is under-sized for a complex mutation with 14 parameters and nested configuration. It is concise without being appropriately complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 14-parameter creation tool with nested type_config, no annotations, and no output schema, the description is too thin. It does not explain required relationships, engine-specific configuration expectations, or post-creation behavior, leaving critical context to the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters, including the enum type and nested type_config, are documented in the schema itself. The description adds no parameter meaning beyond that, which meets the baseline for high-coverage schemas but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and resource ('Coolify database'), and the '[WRITE]' tag signals mutation. Its specificity distinguishes it from siblings such as coolify_create_application and coolify_create_service, though it adds no scope detail beyond the noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like coolify_import_database, nor any prerequisites such as an existing server, project, or environment. The agent is left to infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_database_backupB
[WRITE] Create a database backup schedule (frequency required). Set backup_now=true to also run it immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| enabled | No | ||
| save_s3 | No | ||
| timeout | No | ||
| dump_all | No | ||
| frequency | Yes | Cron expression, e.g. 0 2 * * * | |
| backup_now | No | Run the backup immediately as well as scheduling it | |
| s3_storage_uuid | No | S3 storage UUID (required with save_s3) | |
| databases_to_backup | No | ||
| missing_backup_notification_days | No | Alert after this many days without an execution; 0 disables alerts (Coolify v4.3.23) | |
| database_backup_retention_days_s3 | No | ||
| database_backup_retention_amount_s3 | No | ||
| database_backup_retention_days_locally | No | ||
| database_backup_retention_amount_locally | No | ||
| database_backup_retention_max_storage_s3 | No | ||
| database_backup_retention_max_storage_locally | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it does disclose that this is a write operation and that backup_now triggers an immediate execution in addition to scheduling. It omits permissions/auth requirements, what happens to an existing schedule, and any side effects of enabling S3 or retention options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, mutation marker front-loaded, required parameter flagged, and the optional immediate-run behavior called out immediately after. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter mutation with no annotations, 31% schema coverage and no output schema, the description covers only two fields and says nothing about return values, failure behavior, or how the many retention/S3 knobs interact. It is well short of what an agent needs to call this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 31% across 16 parameters, so the description needs to compensate and does not. Its two hints (frequency is required, backup_now runs immediately) merely restate the schema's own field descriptions, while enabled, save_s3, timeout, dump_all, databases_to_backup and all six retention parameters remain undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a database backup schedule'), which separates it from the sibling update_database_backup, delete_database_backup and list_database_backups. It does not explicitly name those siblings, but the create-schedule framing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[WRITE]' tag and '(frequency required)' imply this is the mutation path for setting up a schedule, and backup_now is explained. However, it never says when to pick this over coolify_update_database_backup or how it relates to coolify_run_database_storage_backup, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_database_envB
[WRITE] Create a new environment variable for a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Variable name (e.g. POSTGRES_PASSWORD) | |
| uuid | Yes | UUID of the database | |
| value | Yes | Variable value | |
| comment | No | Comment or note for this variable | |
| is_literal | No | Do not interpolate/expand the value | |
| is_preview | No | Only for preview deployments | |
| is_multiline | No | Value contains newlines | |
| is_shown_once | No | Value is only shown once then hidden |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of behavioral disclosure. It only includes a '[WRITE]' tag implying mutation but does not describe what happens on success (e.g., returns the created variable?), error conditions, idempotency (does it overwrite existing keys?), or authentication/rate-limit considerations. The behavioral information is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a '[WRITE]' tag, making it very concise. However, it lacks structure (e.g., no separate sections or additional details). While it is not verbose, a few more words could improve clarity without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters, no output schema, and is a mutation operation. The description only says 'Create a new environment variable for a Coolify database' without explaining return values, error scenarios, or any side effects. Given the complexity (multiple boolean flags, optional comment), this is notably incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add any additional meaning beyond the schema; it merely restates the overall action. The schema already fully describes each parameter with names, types, and descriptions. The description adds no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('environment variable for a Coolify database'), and the '[WRITE]' prefix further clarifies it's a mutating operation. It distinguishes itself from sibling tools like coolify_delete_database_env (delete), coolify_update_database_envs_bulk (bulk update), and coolify_create_env (generic env creation) by specifying it's database-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like coolify_create_env or coolify_create_service_env. It does not mention prerequisites (e.g., needing a database UUID), nor does it explain when not to use it. The description lacks any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_database_storageA
[WRITE] Add a persistent or file storage mount to a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (required for persistent storages) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the database | |
| content | No | File content (file storages only) | |
| fs_path | No | Host path (required with is_directory or is_host_file) | |
| host_path | No | Unsupported by current Coolify; use type=file with fs_path instead | |
| mount_path | Yes | Container mount path (e.g. /data) | |
| is_directory | No | Whether this is a directory mount (file only) | |
| is_host_file | No | Mount an existing host file (type=file, requires fs_path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It includes '[WRITE]' hinting at mutation, but does not mention prerequisites, side effects, reversibility, or any consequences of the operation. For a create operation, this is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no unnecessary words. The [WRITE] marker and the action are immediately clear, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but sufficient for a create operation when the schema already details parameters. However, it does not explain the difference between storage types or conditional parameter usage (which the schema handles), and it lacks guidance on usage context beyond the database scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all parameters with descriptions. The description does not add any parameter-specific meaning beyond what the schema provides, meeting the baseline for tools with full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action: 'Add' a 'persistent or file storage mount' to a 'Coolify database'. This precisely identifies the verb, resource, and scope, distinguishing it from similar storage tools for applications and services (e.g., coolify_create_application_storage). It is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies database usage but does not explicitly mention alternative tools or conditions for when to use this over coolify_create_application_storage or coolify_create_service_storage. No exclusions or alternatives are given, leaving the agent to infer context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_envB
[WRITE] Create a new environment variable for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Variable name (e.g. DATABASE_URL) | |
| uuid | Yes | UUID of the application | |
| value | Yes | Variable value | |
| comment | No | Comment or note for this variable | |
| is_literal | No | Do not interpolate/expand the value | |
| is_preview | No | Only for pull request preview deployments | |
| is_multiline | No | Value contains newlines | |
| is_shown_once | No | Value is only shown once then hidden |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral traits. The description only states 'Create a new environment variable' but does not disclose what happens if a variable with the same key already exists (overwrite, error, or skip), whether the operation is idempotent, or any authorization requirements. The '[WRITE]' tag is redundant with 'Create'. For a mutation tool, this lack of behavioral detail is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action. It is concise and avoids fluff. However, the '[WRITE]' prefix is redundant because 'Create' already implies a write operation. Still, it is appropriately sized for a straightforward tool, earning a 4 rather than a 5 due to the slight redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters (3 required), no output schema, and no annotations, the description is incomplete. It does not explain the tool's behavior regarding duplicates, the effect of boolean flags (is_literal, is_preview, etc.) beyond the schema, or what the return value is. The presence of many related env sibling tools (create/update/delete for apps, databases, services) calls for more context to prevent misuse, but the description provides none.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a meaningful description (e.g., 'key' says 'Variable name (e.g. DATABASE_URL)', 'uuid' says 'UUID of the application'). The tool description adds no additional meaning beyond the schema. With high schema coverage, the baseline is 3; the description does not elevate it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 variable') and the resource ('for a Coolify application'). The '[WRITE]' prefix reinforces the action. This distinguishes it from sibling tools like coolify_list_envs (list), coolify_update_envs_bulk (update bulk), coolify_delete_env (delete), and coolify_create_database_env (creates for database, not application). The purpose is 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.
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 (e.g., coolify_create_database_env, coolify_create_service_env). It does not mention that this tool is specifically for application environment variables, nor does it provide prerequisites, exclusions, or context for when it should be chosen over other env creation tools. The agent must infer from the tool name and siblings, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_environmentC
[WRITE] Create a new environment in a Coolify project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Environment name (e.g. 'staging', 'production') | |
| project_uuid | Yes | UUID of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states '[WRITE]' indicating a mutation, but does not describe what happens after creation (e.g., whether it's automatically activated, or if it triggers any side effects). The description lacks details on permissions, idempotency, or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the '[WRITE]' marker. Every word is necessary, but it could be slightly more descriptive without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters, no output schema, and no annotations, the description is too sparse. It does not explain the response format, potential errors, or the relationship between environments and projects. The low complexity is offset by the lack of behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are described in the schema (100% coverage), so the baseline is 3. The description does not add any additional meaning beyond what the schema already provides. The schema documents 'name' as 'Environment name (e.g. 'staging', 'production')' and 'project_uuid' as 'UUID of the project', which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with '[WRITE]' to indicate a mutation, and clearly states 'Create a new environment in a Coolify project'. The verb 'create' and resource 'environment' are specific. However, it does not differentiate from sibling tools like 'coolify_create_project' or 'coolify_create_application', which also create resources, but the target resource is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. There is no mention of prerequisites (e.g., project must exist) or when not to use it. Siblings like 'coolify_list_environments' or 'coolify_get_environment' are not referenced for context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_github_appC
[WRITE] Create a new GitHub App integration in Coolify
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | GitHub App name | |
| custom_fields | No | Additional fields not listed above (advanced) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It only states 'create' but does not mention if the operation is irreversible, requires special permissions, or has side effects like API rate limits. For a write operation, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is brief and front-loaded. It does not waste words, but could be improved with a bit more detail without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the tool has only one required parameter, so completeness is partially covered. However, the description does not explain what happens after creation (e.g., does it return an app ID?), and the nested object (custom_fields) may confuse agents without further guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents both parameters. The description adds no additional meaning beyond what the schema provides, such as how the 'name' might be validated or what 'custom_fields' typically expects. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool creates a new GitHub App integration in Coolify, which is clear for a single purpose. However, it does not differentiate from sibling tools like coolify_update_github_app or coolify_delete_github_app, which is a minor gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, such as creating a GitHub App via the Coolify UI or using other integration tools. No prerequisites or context 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_integration_tokenA
[WRITE] Store a Doppler, Infisical, or HashiCorp Vault token for the team (Coolify v4.4+). Coolify validates the token against the provider before saving it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the token | |
| token | Yes | Provider credential. Doppler: service token (dp.st.) or service account token (dp.sa.). Infisical: client secret. Vault: token. | |
| metadata | No | ||
| provider | Yes | Secret manager provider |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses that this is a WRITE operation and that Coolify validates the token against the provider before saving. However, it does not state required permissions, whether the token can be retrieved later, failure behavior, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the [WRITE] marker and the core action. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, write behavior, validation, and version, which is useful. But with no annotations and no output schema, it leaves gaps around authorization requirements, post-creation behavior, and what the operation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the schema itself describes token formats and provider-specific metadata fields in detail. The description names the providers but adds little parameter-level meaning beyond the schema, so baseline adequacy is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Store a Doppler, Infisical, or HashiCorp Vault token," with team scope and version context. It is clear, though it does not explicitly distinguish this tool from sibling secret-management operations such as coolify_update_application_secret_manager.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the secret-manager token context and the Coolify v4.4+ note, but there is no explicit when-to-use guidance, no when-not-to-use guidance, and no named alternatives. The agent can infer the intended context but is not routed against close siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_private_keyB
[WRITE] Create a new SSH private key for server/application authentication
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the private key | |
| description | No | Description of the key | |
| private_key | Yes | PEM-formatted private key content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It only states the creation action but does not explain side effects (e.g., behavior on duplicate name, key validation, persistence, or return value). The '[WRITE]' prefix adds minimal transparency. Critical behavioral traits such as error conditions or idempotency are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a useful '[WRITE]' prefix. Every word carries meaning and there is no redundancy. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no output schema, no annotations), the description is insufficient. It does not explain expected return values, potential failure modes (e.g., duplicate name, invalid key format), or pre-conditions such as the key being unique. The agent lacks critical context to handle the tool robustly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context that the key is used for server/application authentication, which complements the schema parameter descriptions. However, it does not elaborate on specific parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and the resource ('SSH private key') and its purpose ('for server/application authentication'). The '[WRITE]' prefix explicitly marks it as a write operation. It is distinct from sibling tools like 'coolify_update_private_key' and 'coolify_delete_private_key'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. For example, it does not mention that this is for adding a new key before associating it with a server, nor does it differentiate it from 'coolify_update_private_key' or 'coolify_delete_private_key'. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_projectC
[WRITE] Create a new Coolify project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name | |
| description | No | Project description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. 'Create' implies a mutation (write operation), but it doesn't mention whether the tool has side effects like auto-assigning IDs, creating default environments, or requiring specific permissions. There's no statement about the return value or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence fragment), which is concise but not necessarily well-structured. The '[WRITE]' prefix is unnecessary and adds clutter without value. It could front-load with a more informative verb phrase or omit the prefix entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, no output schema, no annotations, and vast sibling tools, the description is incomplete. It doesn't explain the project concept, confirm that projects are containers for applications/databases, or hint at the expected output (e.g., created project ID/name). An agent might not understand the role of this tool in the Coldify workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's lack of parameter details is partially excused. The input schema already documents 'name' (required, project name) and 'description' (optional, project description). The description adds no additional meaning beyond what the schema provides, but the schema is self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Create') and resource ('a new Coolify project'), which is clear. However, the '[WRITE]' prefix is redundant with the verb 'Create' and doesn't help differentiate this tool from other creation tools like 'coolify_create_application' or 'coolify_create_database'. It's adequate but not explicit about what a 'project' is in Coolify's context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not mention when to use this tool over alternatives like 'coolify_update_project' or 'coolify_create_environment'. It also lacks context about prerequisites (e.g., whether a team or server must exist first) or that it's typically the first step before creating applications or databases within the project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_serverC
[WRITE] Create a new Coolify server (requires SSH private key)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | Server IP address or hostname | |
| name | Yes | Server display name | |
| port | No | SSH port (default: 22) | |
| user | No | SSH username (default: root) | root |
| description | No | Server description | |
| server_role | No | Deployments only, builds only, or both (Coolify v4.4+; replaces is_build_server) | |
| is_build_server | No | Use as build server (Coolify v4.4+: deprecated, use server_role=build) | |
| instant_validate | No | Validate immediately after creation | |
| private_key_uuid | Yes | UUID of the SSH private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only discloses the SSH key requirement. It says nothing about required permissions, whether the server is validated/connected on creation, whether instant_validate triggers a remote SSH probe, what happens on duplicate IPs, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded with the action and contains no filler. It is arguably too terse for a nine-parameter mutation tool, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no annotations, no output schema, and nine parameters, the description is far too thin. An agent gets no picture of side effects, prerequisite lookups (private key creation), or what the call returns, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, including the deprecated is_build_server and server_role enum. The description adds no extra meaning (e.g., that private_key_uuid should come from coolify_list_private_keys), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new Coolify server'), which cleanly separates it from siblings like coolify_update_server, coolify_delete_server, and coolify_list_servers by verb alone. It does not explicitly name or contrast with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Beyond the 'requires SSH private key' precondition, there is no guidance on when to choose this tool versus coolify_validate_server or coolify_update_server, nor any note about obtaining the key UUID via coolify_list_private_keys. The [WRITE] tag implies mutation but gives no workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_serviceB
[WRITE] Create a new Coolify service (one-click Docker Compose service)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Service name | |
| type | Yes | Service type (e.g. 'plausibleanalytics', 'minio', 'grafana') | |
| description | No | Service description | |
| server_uuid | Yes | UUID of the server to deploy on | |
| project_uuid | Yes | UUID of the project | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| instant_deploy | No | Deploy immediately after creation | |
| environment_name | Yes | Environment name (e.g. 'production') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully disclose behavioral traits. It states '[WRITE]' and 'one-click Docker Compose service', hinting at creation behavior, but lacks details on idempotency, validation steps, required permissions, or return value (no output schema). With zero annotation coverage and minimal description, the agent has insufficient context to anticipate side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At one short sentence, the description is concise with no wasted words. However, it could be slightly more informative without sacrificing brevity, e.g., by mentioning required resources (server, project) or that the service type must be one of the supported Docker Compose services. The '[WRITE]' tag is a helpful structural hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters (4 required), a nested 'custom_fields' object, no output schema, and dozens of sibling tools, the description is too minimal. It doesn't explain what constitutes a 'service' vs. an 'application' or 'database', what the consequence of 'instant_deploy' is, or how to obtain valid UUIDs for server, project, and environment. The agent lacks enough context to reliably invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds 'one-click Docker Compose service' context but does not elaborate on parameter semantics beyond what the schema already provides. For example, it doesn't clarify how 'custom_fields' or 'instant_deploy' interact with the overall creation flow. Coverage is high, so no penalty, but the description doesn't add significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Create' and resource 'Coolify service', and specifies it's a 'one-click Docker Compose service', which distinguishes it from sibling tools like coolify_create_application or coolify_create_database. The prefix '[WRITE]' further clarifies the operation type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs. alternatives (e.g., coolify_create_application for custom apps). The description implies usage for pre-packaged Docker Compose services, but does not explain which service types are valid or when to use this instead of coolify_update_service. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_service_envC
[WRITE] Create a new environment variable for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Variable name (e.g. DATABASE_URL) | |
| uuid | Yes | UUID of the service | |
| value | Yes | Variable value | |
| comment | No | Comment or note for this variable | |
| is_literal | No | Do not interpolate/expand the value | |
| is_preview | No | Only for preview deployments | |
| is_multiline | No | Value contains newlines | |
| is_shown_once | No | Value is only shown once then hidden |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It correctly states this is a write operation but does not mention whether updating an existing key overwrites, what the return value is, whether the operation is idempotent, or any side effects (e.g., triggering a redeploy). The description does not contradict anything since there are no annotations, but it is insufficient for understanding behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that clearly states the action and target. It is appropriately concise with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that creates an environment variable with 8 parameters and no output schema, the description is minimally adequate. It tells the agent the basic action and target, but does not explain what happens after creation (e.g., does the service restart?), nor does it clarify the role of optional parameters like 'is_literal' or 'is_preview' beyond the schema. With no annotation support, more context is warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all 3 required parameters have clear schema descriptions. The description adds only the tool-level context that this is an environment variable for a service, but does not add meaning beyond the schema. Since coverage is high, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with '[WRITE]' which signals it's a mutation, but then says 'Create a new environment variable for a Coolify service'. While 'Create' and '[WRITE]' are consistent, the description does not differentiate this tool from 'coolify_create_env' which does the same for applications, not services. Without specifying that this targets services, the agent may confuse it with the generic environment variable creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like 'coolify_create_env' (for applications) or 'coolify_create_database_env'. The description does not mention prerequisites (e.g., the service must exist), nor does it specify when not to use it. This is a critical gap given the large number of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_service_scheduled_taskB
[WRITE] Create a scheduled task for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Task name | |
| uuid | Yes | UUID of the service | |
| command | Yes | Command to execute | |
| enabled | No | Whether the task is enabled | |
| timeout | No | Timeout in seconds | |
| container | No | Container name to run in | |
| frequency | Yes | Cron frequency (e.g. '* * * * *') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It includes a '[WRITE]' tag indicating a mutation, but gives no further behavioral details like required permissions, side effects, or whether the task is immediately enabled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It efficiently conveys the core action and the '[WRITE]' tag adds a quick signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of seven parameters and no annotations, the description is minimal. While the schema covers parameter details, the description could provide more context about the creation process, such as what a scheduled task entails or any post-creation effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all seven parameters well-documented. The description adds no extra parameter semantics, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('scheduled task') for a Coolify service, making the action clear. However, it does not explicitly differentiate from sibling tools like coolify_create_application_scheduled_task, though the tool name itself helps distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, such as the application scheduled task creation. There is no mention of prerequisites, appropriate scenarios, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_create_service_storageB
[WRITE] Add a persistent or file storage mount to a Coolify service sub-resource
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (required for persistent storages) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the service | |
| content | No | File content (file storages only) | |
| fs_path | No | Host path (required with is_directory or is_host_file) | |
| host_path | No | Unsupported by current Coolify; use type=file with fs_path instead | |
| mount_path | Yes | Container mount path (e.g. /data) | |
| is_directory | No | Whether this is a directory mount (file only) | |
| is_host_file | No | Mount an existing host file (type=file, requires fs_path) | |
| resource_uuid | Yes | UUID of the service application or database sub-resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only labels the operation as [WRITE] and states the resource type, but does not disclose side effects (e.g., whether existing mounts are affected), permission requirements, or reversibility. The description adds minimal behavior context beyond the explicit action verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero filler, front-loaded with the write indicator. Highly efficient and appropriately concise for a tool with a relatively clear action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters, conditional requirements (e.g., `name` required for persistent, `fs_path` for file), and no output schema or annotations, the description is far too sparse. It does not explain the relationship between parameters, required combinations, or behavioral expectations, leaving an agent with significant gaps when deciding how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters already have descriptions. The description itself adds no extra parameter semantics beyond indicating 'persistent or file storage mount', which echoes the `type` enum already present in the schema. Baseline 3 is appropriate because the schema handles full parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (Add) and the resource (storage mount to a Coolify service sub-resource), with specificity that distinguishes it from sibling tools operating on application or database storage. It is a precise verb-object construction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternative storage creation tools (e.g., coolify_create_application_storage or coolify_create_database_storage). The description does not mention prerequisites, constraints, or decision criteria for choosing persistent vs file storage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_applicationA
[DESTRUCTIVE] Permanently delete a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| delete_volumes | No | Also delete associated volumes | |
| docker_cleanup | No | Clean up Docker resources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It clearly states the action is permanent and destructive with '[DESTRUCTIVE]' and 'Permanently', which is good. However, it does not disclose side effects like whether the deletion is irreversible, what happens to associated resources (e.g., if delete_volumes and docker_cleanup are false), or whether it requires confirmation via the 'confirm' parameter. The description partially compensates for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. The '[DESTRUCTIVE]' tag immediately conveys critical behavioral context, and 'Permanently delete a Coolify application' is precise and complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature and no output schema, the description does not explain what the return value is (e.g., success message or ID). However, the schema covers all parameters well, and the description clearly sets expectations for the operation's finality. A note about the confirmation parameter or return behavior would increase completeness, but it is adequate for a deletion tool with well-documented params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters with descriptions. The tool's description adds no additional parameter meaning beyond the schema's structured definitions. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear, specific verb ('delete') and resource ('Coolify application'), immediately stating the action's permanent nature with the '[DESTRUCTIVE]' prefix. This clearly distinguishes it from siblings like 'coolify_stop_application' (temporary halt) and 'coolify_delete_application_storage' (storage deletion only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly signals the destructive nature and permanence of the operation via '[DESTRUCTIVE]' and 'Permanently delete'. This implies careful consideration before use, though it does not explicitly state when not to use it (e.g., use 'coolify_stop_application' instead) or list any prerequisites (e.g., application must exist). The sibling list contains safer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_application_previewA
[DESTRUCTIVE] Delete a preview deployment, cancel its deployments, and remove its containers, volumes, and networks.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the parent application | |
| confirm | No | Set to true to confirm this destructive operation | |
| pull_request_id | Yes | Pull request number of the preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the cascading effects (cancels deployments, removes containers, volumes and networks). It stops short of stating irreversibility or required permission scope, which for a destructive operation would be the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the destructive marker front-loaded and zero waste; every clause adds factual effect information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive tool with no annotations and no output schema, the description covers target and destruction scope adequately. The only missing context is irreversibility and permission requirements, which is a modest gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (uuid, pull_request_id, confirm) are already documented, including the confirm flag for destructive operations. The description adds no further meaning about how uuid and pull_request_id combine to identify the target preview, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('a preview deployment') and immediately enumerates the cascade. It is unambiguously distinct from siblings like coolify_delete_application or coolify_update_application_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[DESTRUCTIVE]' tag implies caution, but the description never states when this should be used versus alternatives such as deleting/updating the parent application, nor when to avoid it. Usage is implied by the verb rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_application_scheduled_taskB
[DESTRUCTIVE] Delete a scheduled task from a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| confirm | No | Set to true to confirm this destructive operation | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description tags '[DESTRUCTIVE]' and the confirm parameter's description ('Set to true to confirm this destructive operation') clearly disclose the destructive nature. Since no annotations are provided, the description carries the full burden and does so adequately for the safety aspect. However, it does not disclose other behavioral traits like idempotency, permission requirements, or side effects (e.g., whether cascading deletions occur).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a useful '[DESTRUCTIVE]' prefix. It is concise and front-loaded with the warning. No extraneous words. Could be slightly expanded (e.g., mentioning the confirm parameter) without losing conciseness, but current form is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description is too minimal. It does not explain what happens after deletion (e.g., success/failure response, silent removal), nor does it clarify the relationship between the two required UUIDs. The confirm parameter is mentioned in the schema but not reinforced in the description. More context would help the agent understand the full impact and flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—all three parameters (uuid, task_uuid, confirm) have descriptions in the schema. The tool description adds no additional information about the parameters beyond what is already in the schema. Thus, baseline 3 is appropriate; the schema already documents each parameter's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a scheduled task from a Coolify application'). The verb and resource are specific, and the name differentiates it from sibling tools for different resources (e.g., coolify_delete_application, coolify_delete_service_scheduled_task). However, it does not explicitly distinguish between similar scheduled task delete tools for different parent entities (applications vs. services).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 when to choose delete over update or create. It does not mention prerequisites (e.g., the application must exist) or conditions under which deletion is appropriate. The confirm parameter implies caution, but the description lacks explicit 'when to use' or 'when not to use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_application_storageA
[DESTRUCTIVE] Remove a persistent or file storage mount from a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full burden. It marks the operation as '[DESTRUCTIVE]', which adds transparency about irreversibility. However, it does not disclose any other behavioral traits such as required permissions, side effects on the application, whether it warns or requires a confirm parameter (though schema has 'confirm' boolean), or potential impact on running applications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with the destructive flag front-loaded. Every word serves a purpose with no redundancy. Ideal length for a delete operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description could be improved by explaining what happens after deletion (e.g., storage is removed immediately, application may need restart). For a destructive operation with 3 parameters, the description is minimally adequate but lacks completeness regarding effects and confirmation flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the three parameters ('uuid', 'storage_uuid', 'confirm') are already well-documented in the schema with types, patterns, and descriptions. The description adds no additional semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Remove'), the target resource ('persistent or file storage mount'), and the subject ('Coolify application'). It distinguishes clearly from sibling tools like 'coolify_delete_database_storage' by specifying 'application storage'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not specify when to use this tool versus alternatives (e.g., updating storage, or deleting database/service storage). However, the tool name and context provide implied guidance since it is the only delete for application storage among siblings. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_application_storage_backupB
[DESTRUCTIVE] Delete the backup schedule and archives for an application storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description labels the tool as '[DESTRUCTIVE]' and states it deletes both schedule and archives, which provides adequate transparency about its irreversible effects. However, no annotations are provided to offer further context (e.g., destructiveHint, idempotency), so the description carries the full burden. It doesn't disclose whether the operation requires confirmation (the 'confirm' parameter is documented in the schema but not mentioned in the description), nor what happens if schedules/archives don't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at 12 words, fitting the pattern of a clear one-liner. It includes a '[DESTRUCTIVE]' marker upfront that signals danger, which is helpful. Every word adds value—'backup schedule and archives' provides specificity. The description is efficient without being under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and the tool is destructive with 3 parameters, the description is minimally adequate. It identifies what is deleted but does not explain return behavior (e.g., success/error message), whether it is idempotent, or how to confirm the operation (the 'confirm' parameter). It covers the core intent but leaves gaps about the execution flow and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all three parameters (uuid, storage_uuid, confirm) have descriptions in the schema. The description adds no additional parameter meaning beyond the schema, which is acceptable since the schema is rich and clear. However, the description does not hint that 'confirm' must be true for the operation to proceed, which could be useful context. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Delete the backup schedule and archives for an application storage', which clearly specifies the verb (delete), resource (backup schedule and archives), and scope (application storage). This differentiates it from siblings like 'coolify_delete_application_storage' (which deletes the storage itself) and backup tools for other resource types (database, service). However, it does not explicitly articulate the nuance of deleting both the schedule and existing archives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when you want to remove backups for an application storage) but provides no guidance on when not to use this tool versus alternatives. There is no mention of prerequisites (e.g., needing to identify the storage_uuid first via coolify_list_application_storages) nor warnings about irreversible data loss. A sibling like 'coolify_set_application_storage_backup' suggests a counterpart for setting up backups, but the description does not connect these concepts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_backup_executionC
[DESTRUCTIVE] Delete a specific backup execution record
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| confirm | No | Set to true to confirm this destructive operation | |
| backup_uuid | Yes | UUID of the scheduled backup | |
| execution_uuid | Yes | UUID of the backup execution to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes the tag '[DESTRUCTIVE]' but provides no additional context about the destructive nature, such as irreversibility, impact on dependent records, or permission requirements. With no annotations provided, the description carries the full burden but fails to disclose more than what the tag implies. The presence of a 'confirm' parameter hints at a confirmation step, but the description doesn't explain its necessity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and to the point. It front-loads the important information (destructive tag, verb, resource). No filler or redundancy. It earns a 4 because it is efficient, though it could be slightly more structured to include usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, output schema, or nested objects, the description is under-specified. It doesn't explain the confirmation parameter's role, the irreversible nature, or how to correctly obtain the necessary UUIDs. With 4 parameters and one being a required confirmation, this needs more context to guide correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters with high coverage (100%), so the description doesn't need to add much. However, the schema descriptions are minimal (e.g., 'UUID of the database') and the description adds nothing about the relationships between parameters (e.g., that execution_uuid belongs to backup_uuid). The baseline of 3 is appropriate since schema coverage is high and the description provides no extra parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Delete a specific backup execution record' which clearly identifies the action (delete) and the resource (backup execution record). While it doesn't explicitly distinguish from sibling tools like coolify_delete_database_backup, the naming and description are clear enough. A score of 4 is appropriate as it lacks explicit differentiation from potentially similar deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, or any prerequisites or context. It only states the action without mention of required identification details or confirmation step. There is no mention of avoiding use or alternative tools, leaving the agent without clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_databaseB
[DESTRUCTIVE] Permanently delete a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| delete_volumes | No | Also delete associated volumes | |
| docker_cleanup | No | Clean up Docker resources |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It notes the action is destructive and permanent, but fails to explain critical requirements such as the mandatory 'confirm' parameter, the impact on volumes, or any irreversible side effects. Important behavioral traits are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. '[DESTRUCTIVE]' immediately signals severity, and the action is succinctly stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive operation with multiple boolean parameters (confirm, delete_volumes, docker_cleanup) and no output schema, the description is unduly brief. It does not explain the deletion process, safety checks, or what happens to associated resources, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters with descriptions. The description adds no additional semantic information about parameters beyond the schema, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a Coolify database', specifying the action (delete) and resource (database), and explicitly marks it as destructive. This distinguishes it from sibling tools like coolify_stop_database (temporary) and coolify_create_database (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 stopping or restarting the database, nor does it mention prerequisites like the need for a uuid or confirmation. It simply states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_database_backupB
[DESTRUCTIVE] Delete a scheduled backup configuration for a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| confirm | No | Set to true to confirm this destructive operation | |
| delete_s3 | No | Also delete backup files from S3 storage | |
| backup_uuid | Yes | UUID of the scheduled backup to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only labels the operation as '[DESTRUCTIVE]' and states it deletes a configuration. It does not disclose that the 'confirm' parameter must be set to true, that the default behavior does not delete S3 files unless 'delete_s3' is true, or any consequences of deletion. The transparency is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a '[DESTRUCTIVE]' prefix, which is concise. However, it is under-specified and lacks any structure or additional context. It could be improved without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, is destructive, and has no output schema, the description is incomplete. It does not mention prerequisites (e.g., listing backups first), the requirement to set 'confirm' to true, or what the return value indicates. The description fails to cover key contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the parameter names and types already documented in the schema. It does not explain the role of 'confirm' or 'delete_s3' in the context of deletion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'scheduled backup configuration for a Coolify database'. It distinguishes from sibling tools like 'coolify_delete_backup_execution' (which deletes executions) and 'coolify_delete_database' (which deletes the database itself). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. It does not mention that this tool deletes the configuration (not the execution) or that it requires a confirmation parameter. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_database_envC
[DESTRUCTIVE] Delete an environment variable from a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| confirm | No | Set to true to confirm this destructive operation | |
| env_uuid | Yes | UUID of the environment variable to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It includes a '[DESTRUCTIVE]' tag, which hints at the operation's nature, but it does not disclose whether the operation is irreversible, what happens to the database, or that confirmation is required. The confirm parameter is present in the schema but not mentioned in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence, which is good for front-loading. However, it lacks structure and does not use the available space to add useful information. It is not overly verbose, but it is too sparse to be considered well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and many sibling tools, the description is incomplete. It does not explain the return value, how to interpret the confirmation parameter, or how this tool differs from similar ones like coolify_delete_env. The context signals suggest a need for more detail, but the description provides only a single line.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides. For example, it does not explain the purpose of each parameter or provide context for their values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Delete an environment variable from a Coolify database'. It uses a specific verb and resource, and the mention of 'from a Coolify database' distinguishes it from sibling tools like coolify_delete_env (which might delete from other contexts). However, it does not elaborate on the exact inputs or scope, which could be more precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives. For example, there is no mention of prerequisites (e.g., needing the database UUID and env UUID), when to prefer this over coolify_update_database_envs_bulk, or when not to use it. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_database_storageB
[DESTRUCTIVE] Remove a persistent or file storage mount from a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly marks the tool as '[DESTRUCTIVE]', which is helpful for behavioral transparency. With no annotations provided, this is a positive disclosure. However, it does not explain what happens after deletion (e.g., whether it's permanent, if confirmation is required, or if it affects running databases). The presence of a 'confirm' parameter is implied by the behavior but not explicitly stated in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that takes about 15 words to convey the core purpose. The '[DESTRUCTIVE]' tag at the start provides immediate warning. It is front-loaded and to the point. While it could include a bit more guidance, it does not waste words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description should compensate by explaining what the tool returns upon success or failure (e.g., confirmation message, error if storage not found). It also lacks any mention of error states, idempotency (e.g., deleting already-deleted storage), or dependencies (e.g., backup relationships). For a destructive tool with no annotations or output schema, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters adequately. The description adds no additional meaning beyond the schema's parameter descriptions. The tool name and description implicitly clarify that 'uuid' is the database's UUID and 'storage_uuid' is the storage to delete, but 'confirm' is only documented in the schema. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Remove'), resource ('persistent or file storage mount'), and target ('from a Coolify database'). It distinguishes itself from sibling tools like `coolify_delete_application_storage`, `coolify_delete_service_storage`, and `coolify_delete_database_storage_backup` by specifying it targets database storage mounts. However, it could be more precise by noting it deletes a specific storage UUID rather than all storage for a database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Among siblings, `coolify_list_database_storages` lists available storages, `coolify_create_database_storage` creates them, and `coolify_update_database_storage` modifies them, but no mention is made of prerequisites (e.g., listing storages first to get the storage_uuid) or when not to use it (e.g., if storage is in use by backups). The description assumes the agent already knows the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_database_storage_backupB
[DESTRUCTIVE] Delete the backup schedule and archives for a database storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. While it marks the tool as [DESTRUCTIVE] and mentions it deletes 'the backup schedule and archives', it doesn't disclose whether this action is irreversible, what happens to in-progress backups, whether it requires specific permissions, or what the response looks like. The 'confirm' parameter in the schema hints that confirmation is needed, but the description doesn't explain that it must be set to true to proceed. The contradiction flag is false because there are no annotations to contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately marks the tool as destructive with a bracket prefix. It front-loads the key warning. The sentence could be slightly improved by placing the [DESTRUCTIVE] label at the very beginning before 'Delete' for even clearer emphasis, and by adding a brief note about confirmation, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that parameters are fully covered in the schema, no output schema exists, and the tool is destructive, the description provides adequate but not comprehensive detail. It names the two deleted components (schedule and archives) and warns of destruction, but lacks behavioral context (irreversibility, prerequisites) and usage guidelines. For a destructive operation, more guidance is warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all three parameters ('uuid', 'confirm', 'storage_uuid'). The description adds no additional semantic information beyond what's in the schema – it doesn't explain how the uuid and storage_uuid relate (e.g., that uuid is the database's UUID and storage_uuid is the storage's UUID, and both are needed to identify a specific backup schedule). It also doesn't clarify that 'confirm' must be true for the operation to succeed. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the specific resource: 'backup schedule and archives for a database storage'. This distinguishes it from siblings like 'coolify_delete_database_backup' (which likely deletes only a backup execution result) and 'coolify_delete_application_storage_backup'. However, it could be more precise by explicitly noting that this refers to the entire backup schedule, not just a single backup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some context by labeling it [DESTRUCTIVE], implying it should be used with caution, but it provides no explicit when-to-use or when-not-to-use guidance. There's no mention of alternatives or prerequisites (e.g., that the database and storage must exist). The sibling tools list suggests there are other backup-related tools (like 'coolify_set_database_storage_backup', 'coolify_run_database_storage_backup', 'coolify_delete_database_backup'), but the description doesn't help the agent choose among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_envB
[DESTRUCTIVE] Delete an environment variable from a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| confirm | No | Set to true to confirm this destructive operation | |
| env_uuid | Yes | UUID of the environment variable to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, so the description bears full burden. It marks the operation as '[DESTRUCTIVE]' but does not explain consequences (e.g., the env var is permanently removed, no undo, impact on running application). It also does not confirm whether the confirm parameter is required or what happens if omitted. No side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, effective sentence. It front-loads the destructive nature with '[DESTRUCTIVE]', saving the agent from misinterpreting the tool as non-destructive. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (3 params, no nested objects, no output schema). The description is mostly adequate given the simplicity, but it lacks confirmation about the return value (e.g., success message or error format) and does not state that env_uuid must come from a list call. For a destructive operation, more completeness would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all parameters with descriptions. The description adds the label '[DESTRUCTIVE]' which aligns with the confirm parameter's intent, but adds no further semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Delete an environment variable from a Coolify application'. The verb 'Delete' and resource 'environment variable' are specific. It distinguishes from sibling tools like coolify_create_env, coolify_update_envs_bulk, and coolify_delete_application_storage by naming the exact resource type. However, it does not differentiate from coolify_delete_database_env or coolify_delete_service_env, which are similar delete-env tools for other contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives like coolify_list_envs (to find env_uuid) or coolify_delete_database_env. It only implies usage for deleting env vars from applications. No prerequisites or when-not-to-use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_environmentC
[DESTRUCTIVE] Delete an environment from a Coolify project. Environment must be empty.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Set to true to confirm this destructive operation | |
| project_uuid | Yes | UUID of the project | |
| environment_name_or_uuid | Yes | Name or UUID of the environment to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explicitly marks the tool as [DESTRUCTIVE] and requires environment emptiness, but does not disclose other behaviors like whether the operation is irreversible, if it affects dependent resources, or any permission/authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is direct and front-loaded with key information: it states the destructive nature, the resource type, the target, and the precondition. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is destructive and has 3 parameters (including a confirm flag), the description should explain when to set confirm, potential return values, or error states (e.g., what happens if the environment is not empty). Without an output schema, the description must compensate but does not. It is underspecified for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema; for example, it does not explain the difference between environment_name and environment_uuid, nor that 'confirm' is required for destruction. The description adds no parameter-specific context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it deletes an environment from a Coolify project, with a clear precondition ('must be empty'). The name 'coolify_delete_environment' is descriptive and distinct from siblings like 'coolify_delete_project' and 'coolify_delete_application'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a precondition ('environment must be empty') but does not guide when to use this tool vs. alternatives like updating an environment or listing environments first to verify emptiness. No when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_github_appB
[DESTRUCTIVE] Delete a GitHub App integration from Coolify
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the GitHub App | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It marks the operation as '[DESTRUCTIVE]' but does not disclose what happens to the integration, any side effects, or the need for the 'confirm' parameter. Important behavioral details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with the '[DESTRUCTIVE]' prefix front-loaded. It is concise without unnecessary words, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal for a destructive operation. It does not explain the 'confirm' parameter's role, how to obtain the 'id' (e.g., from coolify_list_github_apps), or what the outcome looks like. Given the simplicity of the tool, more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both 'id' and 'confirm' documented. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Delete' and the resource 'GitHub App integration', clearly distinguishing it from sibling tools like coolify_list_github_apps and other delete tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for deleting GitHub App integrations but provides no explicit guidance on when to use it versus alternatives or what prerequisites are needed. The usage is implied by the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_private_keyB
[DESTRUCTIVE] Delete an SSH private key. Blocked if in use by any server or application.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes the destructive nature with '[DESTRUCTIVE]' and the condition 'Blocked if in use'. These are valuable behavioral hints. However, it fails to mention the confirm parameter, which is critical for executing the destructive operation. Without annotations, the description carries full burden and misses this key safety behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using one sentence plus a tag. It is front-loaded with the destructive marker. However, it omits necessary context about the confirm parameter, which would only add minimal length. Slightly under-specified for safe operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with 2 parameters and no output schema, the description should cover the confirm requirement and what the user expects after deletion. It mentions the block-if-in-use constraint but ignores the confirm parameter, which is critical for operation. This leaves the agent potentially unaware of required confirmation, making the tool hazardous to use incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no additional parameter information beyond what the schema already provides (uuid and confirm explanations). It does not compensate for or enrich the semantic understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Delete an SSH private key', providing a specific verb and resource. The tool name includes 'delete_private_key', so there is no ambiguity. It distinguishes itself from sibling tools like coolify_create_private_key or coolify_list_private_keys through clear naming and action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives (e.g., list keys first or use update). It does not mention prerequisites or scenarios where deletion is appropriate. The only contextual hint is 'Blocked if in use', but that is a constraint 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_delete_projectA
[DESTRUCTIVE] Permanently delete a Coolify project and all its environments
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It explicitly calls out that the operation is destructive, permanent, and deletes all environments. The description also aligns with the confirm parameter, which is a common safety pattern. This is strong behavioral transparency for a deletion tool, though it could mention that other resources within the project are also removed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with a valuable [DESTRUCTIVE] prefix. It is concise and front-loaded, though the tag could potentially be formatted more clearly (e.g., bold or italic) for readability. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description doesn't mention return values or error cases. However, for a deletion tool, the side effect (deletion) is the primary behavior, and the description covers that well. A brief note about what happens on success (e.g., 'Returns success message') would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions: uuid as 'UUID of the resource' and confirm as 'Set to true to confirm this destructive operation'. The description does not add extra meaning beyond what the schema already provides. A baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete', the resource 'Coolify project', and the scope 'all its environments'. It also uses the [DESTRUCTIVE] tag to signal severity. This effectively distinguishes it from sibling tools like coolify_create_project or coolify_get_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a '[DESTRUCTIVE]' prefix that implies caution, and the tool has a confirm parameter for safety. However, there is no explicit guidance on when to use this versus other delete tools (e.g., coolify_delete_environment) or any prerequisites like needing the project's UUID. Usage context is implied but not fully detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_serverB
[DESTRUCTIVE] Permanently delete a server and stop all its resources
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| force | No | Force delete even if server has running resources | |
| confirm | No | Set to true to confirm this destructive operation | |
| delete_from_provider | No | Also delete the machine at Hetzner, Vultr, or DigitalOcean (Coolify v4.4+; needs a cloud token of the team) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does usefully flag irreversibility ("[DESTRUCTIVE]", "Permanently") and the cascading stop of hosted resources. However it says nothing about the confirm flag requirement, the force bypass, or that delete_from_provider invokes external cloud APIs, all of which matter for a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the destructive warning front-loaded in brackets. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, unannotated tool the description covers permanence and the resource cascade, and the schema covers parameters thoroughly. Still missing is any mention of confirmation requirements or the external-provider side effect, which an agent needs before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so uuid, force, confirm, and delete_from_provider are already well documented in the schema. The description adds no parameter-level detail beyond what the structured fields provide, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Permanently delete a server") plus the cascade consequence ("stop all its resources"). It is clearly distinguishable from siblings like coolify_delete_application or coolify_delete_database by the server resource, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus coolify_update_server, coolify_delete_application, or other delete variants, and no stated prerequisites such as needing the server stopped or a provider token. The agent must infer when deletion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_serviceB
[DESTRUCTIVE] Permanently delete a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| delete_volumes | No | Also delete associated volumes | |
| docker_cleanup | No | Clean up Docker resources | |
| delete_from_coolify_only | No | Remove the service from Coolify and leave its Docker resources on the server (Coolify v4.4+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose irreversibility ('Permanently'). However, it omits key behavioral details the agent needs: that a confirm flag gates execution, and that by default associated volumes and Docker resources are also destroyed unless the boolean params are changed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the critical warning front-loaded in brackets; nothing is wasted. It is arguably too terse given the tool's destructive, five-parameter nature, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-parameter mutation tool with no annotations and no output schema, the description should at least flag the confirm requirement and the default destruction of volumes/Docker resources. It leaves the agent to discover those from the schema alone, which is a meaningful gap for an irreversible operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including confirm, delete_volumes, docker_cleanup, and delete_from_coolify_only is documented in the schema itself. The description adds no additional parameter semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('delete a Coolify service'), and the DESTRUCTIVE tag plus 'Permanently' makes the intent unambiguous. It distinguishes itself from siblings like coolify_delete_application and coolify_delete_database by naming the resource type, though it doesn't explicitly contrast with coolify_delete_service_storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over alternatives such as coolify_delete_application or coolify_delete_service_storage, and no mention that the 'confirm' flag must be set to true for the operation to proceed. The only implicit cue is the destructive warning, which is not the same as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_service_envB
[DESTRUCTIVE] Delete an environment variable from a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| confirm | No | Set to true to confirm this destructive operation | |
| env_uuid | Yes | UUID of the environment variable to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It includes the label '[DESTRUCTIVE]' and the schema has a 'confirm' parameter, both hinting at destructiveness. However, it does not explain side effects (e.g., whether deletion triggers a redeploy), permanence, or auth requirements. The label provides some transparency but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a clear action and a useful '[DESTRUCTIVE]' prefix. There is no redundant information, and every word contributes to understanding. It is ideally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema and no annotations, the description is too sparse. It does not explain what happens after deletion, how to confirm, what the response looks like, or how the two required UUIDs relate to each other. The presence of the 'confirm' parameter is a key usage detail that the description omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters have descriptions), so baseline is 3. The tool description adds no extra meaning beyond what the schema already provides (e.g., it does not explain how to obtain the UUIDs or the role of 'confirm'). The schema is self-sufficient, so the description does not degrade but also does not enhance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('environment variable from a Coolify service'), making the core purpose clear. However, it does not differentiate this tool from sibling tools like 'coolify_delete_env' or 'coolify_delete_database_env', which have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., coolify_delete_env for applications, coolify_delete_database_env for databases). Prerequisites (e.g., having the service UUID and env_uuid) are not mentioned, and no when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_service_scheduled_taskB
[DESTRUCTIVE] Delete a scheduled task from a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| confirm | No | Set to true to confirm this destructive operation | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description labels the tool as '[DESTRUCTIVE]', explicitly warning about its irreversible nature. This is helpful beyond the input schema, which includes a 'confirm' parameter for destructive operations. However, with no annotations provided, the description could further detail that deletion is permanent and not recoverable, or note that it only removes the schedule, not the service itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is clear and to the point, front-loading the destructive nature. It is short but not overly terse. Could be slightly improved by adding a note about the 'confirm' parameter requirement, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (all documented in schema) and no output schema, the description conveys the core operation. However, it lacks context about the relationship to sibling tools (e.g., scheduling/lifecycle) and does not mention that the 'confirm' boolean is likely required for execution. A mention of the task lifecycle (e.g., 'This cannot be undone') would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all 3 parameters (uuid, confirm, task_uuid) with constraints (patterns, lengths), achieving 100% coverage. The description does not add any additional parameter-level guidance beyond what the schema offers. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly says 'Delete a scheduled task from a Coolify service', which specifies the verb 'delete', the resource 'scheduled task', and the scope 'from a Coolify service'. It is clearly distinguished from sibling tools like 'coolify_delete_application_scheduled_task' and 'coolify_list_service_scheduled_tasks'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., service vs. application scheduled tasks). It does not mention prerequisites (e.g., needing UUIDs), or when not to use it. A destructive operation like this would benefit from explicit caution or alternative tools for listing tasks first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_service_storageA
[DESTRUCTIVE] Remove a persistent or file storage mount from a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds the '[DESTRUCTIVE]' prefix to signal that this is a destructive operation, which is helpful. The description does not clarify whether removing storage deletes data permanently or what permissions are needed, but given the tool name and the common semantics of deleting storage mounts, a 3 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with a critical warning prefix. It contains no filler, is front-loaded with the destructive indicator, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 3 simple parameters, no output schema, and no nested objects, the description is adequate. It communicates the core action, the resource type, and the destructive nature. It could optionally clarify that removal is permanent (but that is implied by 'delete'). Given the complexity level, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with well-defined parameters (uuid, confirm, storage_uuid). The description's mention of 'storage mount' and 'Coolify service' adds context by implying that 'uuid' refers to a service UUID and 'storage_uuid' to a storage mount, which is already in the schema but reinforced. The description adds value by linking the action to the parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Remove), the resource (persistent or file storage mount), and the target (Coolify service). The sibling tools include coolify_delete_application_storage and coolify_delete_database_storage, so this tool's scope is precisely differentiated by the 'service' context in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly marks this as [DESTRUCTIVE] in the text, which provides a strong usage signal. The sibling tools include create and update variants for service storage, offering implied alternatives. However, there is no explicit statement about when to use this tool vs coolify_delete_application_storage (e.g., for a service vs application context), missing a minor clarity opportunity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_delete_service_storage_backupA
[DESTRUCTIVE] Delete the backup schedule and archives for a service storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| confirm | No | Set to true to confirm this destructive operation | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description labels the tool as '[DESTRUCTIVE]', which is appropriate for a delete operation. Since no annotations are provided, the description must disclose behavioral traits, and it does flag the destructive nature. However, it does not specify what exactly gets destroyed (e.g., backup schedule, archives, or both), nor does it mention whether the operation is reversible or requires authorization beyond the confirm parameter. The description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that quickly communicates purpose and a key behavioral trait (destructive). It is front-loaded with the '[DESTRUCTIVE]' label. One minor improvement could be moving the label to the end or adding a brief second sentence for when to use, but it remains efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, 100% schema coverage, and no output schema, the description is somewhat complete but lacks guidance on what happens after deletion (e.g., no response structure) and does not explain the relationship between `uuid` and `storage_uuid`. The sibling tools offer many storage/backup operations, so the description could better clarify the exact scope of deletion, but it is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that the operation is 'destructive' and that the `confirm` parameter is required to proceed, which is not fully conveyed by the parameter description alone ('Set to true to confirm this destructive operation'). This extra context raises the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action—'Delete the backup schedule and archives'—which establishes the verb (delete) and the resource (service storage backup). It distinguishes this tool from siblings like `coolify_delete_service_storage` (which deletes only the storage, not its backups). However, it does not explicitly mention that it is a sibling-related differentiation, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a general context for when to use the tool: to delete a backup schedule and its archives. It does not explicitly state when not to use it or contrast with alternatives like `coolify_set_service_storage_backup` or `coolify_run_service_storage_backup`. The tool is destructive, requiring a confirm parameter, but no guidance on prerequisites (e.g., storage must exist) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_deploy_application_previewA
[WRITE] Open or redeploy the preview of a pull request (Coolify v4.4+; token needs deploy). Git apps take git_type/commit, Docker Image apps take docker_tag.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the parent application | |
| force | No | Force rebuild without cache | |
| commit | No | Commit SHA to deploy (required with git_type=bitbucket; Git apps only) | |
| git_type | No | Git provider of the pull request. Required for apps without a GitHub/GitLab App source; not allowed for Docker Image apps. | |
| docker_tag | No | Image tag to deploy (Docker Image apps only; required for a new preview) | |
| instant_deploy | No | Queue the deployment right away (default true); false only saves the preview | |
| pull_request_id | Yes | Pull request number of the preview | |
| pull_request_html_url | No | Pull request URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: the [WRITE] marker signals mutation, the version floor and required deploy token scope are spelled out, and the git-vs-docker branch clarifies which parameter set applies. It stops short of saying what happens when the preview does not yet exist versus already exists, or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the [WRITE] marker front-loaded and the app-type branching in a compact parenthetical. Every clause carries information, though the parentheticals make it slightly dense to parse in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no annotations and no output schema, the description covers the essential context: that it deploys, the auth scope, the version requirement, and the app-type parameter split. Remaining gaps (creation-vs-redeploy semantics, response shape) are minor given the rich schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents uuid, force, commit, git_type, docker_tag, instant_deploy, and the PR fields. The description's mention of git_type/commit for Git apps and docker_tag for Docker Image apps adds a useful at-a-glance summary but largely restates schema text, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (open or redeploy) and resource (preview of a pull request) with the parent application scope implied by the required uuid. The [WRITE] tag and the explicit 'preview' qualifier cleanly separate it from siblings like coolify_trigger_deploy and coolify_update_application_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear triggering conditions (opening or redeploying a PR preview) plus prerequisites: Coolify v4.4+ and a token with deploy permission. It does not name alternatives such as coolify_update_application_preview or coolify_get_application_preview, so an agent must infer when not to use it, which keeps it below 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_applicationB
Get detailed information about a specific Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The description only states it 'Get detailed information', which implies a safe, read-only operation. However, it does not disclose whether the operation requires specific permissions, what 'detailed information' encompasses (e.g., configuration, status, logs), whether it triggers side effects, or if there are rate limits. For a read tool without annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence of 10 words with no wasted language. It is efficient and front-loaded. However, it could be slightly improved by adding a line about UUID source or return value without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 1 parameter, no output schema, and no annotations, the description provides minimal but sufficient context for a simple retrieval operation. It states the resource type and action. However, for an agent to invoke it correctly, more context would be helpful, such as how to obtain the UUID (e.g., from list results) or the kind of data returned (e.g., 'Returns configuration, status, and deployment details'). It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter with 100% description coverage ('UUID of the resource'). The description does not add any meaning beyond the schema; it does not clarify what type of UUID (application-specific), nor does it define constraints like format or where to find it. Baseline 3 is appropriate as the schema already fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed information about a specific Coolify application', using a specific verb ('Get'), a specific resource ('Coolify application'), and the qualifier 'detailed information' to indicate scope. It effectively distinguishes this tool from siblings like 'coolify_get_database' and list tools like 'coolify_list_applications'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to retrieve details for a single application. However, it provides no explicit guidance on when to use it versus alternatives (e.g., 'coolify_list_applications' for overview, or what 'detailed information' includes), nor does it state prerequisites or exclusions. The context is clear but shallow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_application_previewA
Get one preview deployment of an application by pull request number (Coolify v4.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the parent application | |
| pull_request_id | Yes | Pull request number of the preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. 'Get' clearly implies a read operation and the version note adds useful compatibility context, but it does not describe permissions, failure behavior, or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tightly scoped sentence with no wasted wording. The core operation is front-loaded, and the version constraint is appended efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with fully documented schema fields, the description is largely complete and tells the agent what resource is returned. Because there is no output schema, it could say more about the returned preview object, but that is a minor gap for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented as the parent application UUID and pull request number. The description aligns with that but adds no additional parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 one preview deployment of an application by pull request number.' It also distinguishes the retrieval of a single preview from listing previews, and notes the Coolify version requirement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'one preview ... by pull request number,' suggesting this is for retrieving a single known preview. However, it does not explicitly say when to use this instead of coolify_list_application_previews, coolify_get_application_preview_logs, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_application_preview_logsA
Retrieve runtime container logs for an application preview by pull request number (Coolify v4.3.23), with level/time/text filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Return the most recent logs (tail behavior) | |
| uuid | Yes | UUID of the resource | |
| level | No | Minimum log level to include | |
| limit | No | Maximum number of filtered log entries to return | |
| lines | No | Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit. | |
| since | No | ISO 8601 timestamp - only logs after this time | |
| until | No | ISO 8601 timestamp - only logs before this time | |
| search | No | Text to search for in log messages (case-insensitive) | |
| service_name | No | Compose service whose container to read (Coolify v4.4+); defaults to the first container | |
| pull_request_id | Yes | Pull request number of the preview | |
| show_timestamps | No | Include server timestamps for accurate time filtering |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states that it retrieves logs and supports filtering, but says nothing about authentication requirements, rate limits, ordering, behavior when the preview is missing, whether the operation is read-only, or other runtime characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the action, target, scoping key, and filtering support efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only log retrieval tool with 11 parameters and no output schema, the description is minimally adequate but incomplete. It does not describe the return structure or behavior around pagination, default service selection, or tail interactions, which are relevant when no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines all 11 parameters, including level, time filters, tail, limit, and service_name. The description mentions level/time/text filtering but does not add syntax or semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('runtime container logs for an application preview by pull request number'), clearly distinguishing this from generic log tools and other preview operations. It names the key scoping parameter and the filtering capabilities up front.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool applies: retrieving logs for an application preview identified by PR number. However, it does not explicitly compare against sibling tools such as coolify_get_logs or coolify_get_application_preview, nor does it state when not to use it.
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
Get the team bound to the API token (GET /team)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states the HTTP method (GET) and path, which implies a read-only operation, but does not mention idempotency, side effects, error handling, or authentication requirements. It adds minimal value beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the purpose and the underlying endpoint without any extraneous words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no parameters, the description explains the input context (team bound to token) but does not describe the return value (e.g., team object structure). For a simple tool, this is adequate but could be improved by mentioning the output format or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema documentation coverage is 100% by default. The description adds meaningful context by specifying that the retrieved team is 'bound to the API token', which explains the implicit parameter (the token). This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and specifies the resource as 'the team bound to the API token'. It also includes the REST endpoint (GET /team), which reinforces the action. This is distinct from sibling tools like coolify_list_teams (which lists all teams) or coolify_get_current_team_members (which gets members).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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_list_teams or coolify_get_team_members. It does not explain that this tool is for retrieving the team associated with the current API token, nor does it mention any exclusions or prerequisites. The agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_current_team_membersA
List members of the team bound to the API token (GET /team/members)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. The description indicates the tool is a read-only listing operation (GET and list), which implies no side effects. However, it does not mention authentication requirements beyond the implicit API token binding, rate limits, or any pagination behavior. Given the simplicity of a no-parameter list call, the behavioral disclosure is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that clearly states the action and scope. It includes the endpoint in parentheses for reference without redundancy. Every part of the sentence is informative and there is no wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, no-parameter, read-only listing tool, the description is nearly complete. It identifies the endpoint and the scope. The only minor omission is a note on what the response contains (e.g., a list of member objects). However, since there is no output schema, a brief note on return structure would be helpful. Still, the description effectively explains the tool's function without being overly verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100% (since there are no parameters to miss). The description adds no parameter semantics because none are needed. The baseline for 0 parameters is 4, and the description appropriately handles this by not adding extraneous information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as listing members of the team associated with the API token. It includes the specific API endpoint (GET /team/members), which disambiguates it from siblings like coolify_get_team_members (which might list members for any team) and coolify_list_teams (which lists teams, not members). The verb 'list' is appropriate and the resource 'members of the team bound to the API token' is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'bound to the API token' explicitly clarifies that this operation is scoped to the current authentication context. This tells the agent when to use this tool (when needing members of the current team) versus alternatives like coolify_get_team_members (if there is one that allows specifying a team ID). While it doesn't explicitly list alternatives, the sibling tools context provides a clear differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_databaseB
Get detailed information about a specific Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The description only states it 'gets' information, which implies a read-only operation, but it does not explicitly mention that it is safe, does not modify data, or any side effects. It also doesn't indicate whether the database must exist or what error occurs if not found. Given the lack of annotations, a simple read operation should at least hint at its safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that clearly states the tool's purpose with no filler or redundant information. It is appropriately front-loaded with the action and resource. Every word earns its place, contributing to an efficient and clear description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a minimal parameter (one UUID) and no output schema, so the agent has no information about what 'detailed information' means or what the return structure is. The description is vague about the response fields, and with no annotations or output schema, the agent cannot anticipate what data will be available. A more complete description would list examples of the information returned (e.g., status, connection details, configuration).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter 'uuid', including a description ('UUID of the resource') and validation pattern. The description adds no additional semantics about the parameter, but since the schema is complete, a baseline of 3 is appropriate. The description does not clarify what kind of resource (e.g., database ID) the UUID refers to, but the schema's description suffices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to get detailed information about a specific Coolify database. It uses the verb 'Get' with the resource 'database', which aligns with the name and distinguishes it from sibling tools like 'list_databases' (which lists all databases) and 'get_database_logs' (which retrieves logs). However, it could be more specific about what 'detailed information' entails, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is used to retrieve information about a single database, which is evident from the context. However, it does not explicitly state when to use this tool vs alternatives like 'list_databases' for overview or 'get_database_logs' for logs. There is no mention of when not to use it, but the simplicity of the tool reduces the need for extensive guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_database_importB
Get the status of a standalone database import (Coolify v4.4+). output needs the read:sensitive token ability.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| activity_id | Yes | Import ID returned when the import was started |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does add real behavioral context: a minimum server version and the required 'read:sensitive token ability', which affects whether a call can succeed. It does not cover what status values come back or whether the caller should poll, which matters for a status-check tool on an async import.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource and status qualifier front-loaded; nothing superfluous. The second sentence ('output needs the read:sensitive token ability') is grammatically rough but does carry useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no output schema and no annotations, the definition covers version and auth prerequisites but leaves the return shape and polling expectations unstated, which is a meaningful gap for a status-check endpoint on a long-running import.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both uuid and activity_id are already documented in the schema. The description adds no additional meaning about either parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the status of a standalone database import', plus a version qualifier (Coolify v4.4+). The word 'standalone' implicitly separates it from coolify_get_service_database_import and from the mutating coolify_import_database, but neither sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the schema note that activity_id is the 'Import ID returned when the import was started' hints this is called after coolify_import_database, but the description itself gives no when-to-use/when-not guidance or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_database_logsC
Retrieve logs for a Coolify database with optional filtering by level, time range, or text search
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Return the most recent logs (tail behavior) | |
| uuid | Yes | UUID of the database | |
| level | No | Minimum log level to include | |
| limit | No | Maximum number of filtered log entries to return | |
| lines | No | Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit. | |
| since | No | ISO 8601 timestamp - only logs after this time | |
| until | No | ISO 8601 timestamp - only logs before this time | |
| search | No | Text to search for in log messages (case-insensitive) | |
| show_timestamps | No | Include server timestamps for accurate time filtering |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only conveys 'retrieve' (a read implication) and the filter options. It says nothing about pagination, whether logs are streamed or returned in a single batch, response size limits, or how tail/lines/limit interact — meaningful gaps for a logs tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence of about 17 words, front-loaded with verb and resource, containing no fluff. The brevity is efficient, though it comes at the cost of missing usage and behavioral context captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no output schema, no annotations, and a crowded sibling set (coolify_get_logs, coolify_get_service_logs), the description is too thin. It omits return format, the behavior of tail/limit/lines, and any differentiation from the generic get_logs tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters in detail. The description adds only a light grouping — 'level, time range, or text search' maps to level, since/until, and search — which is a minor semantic contribution. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('logs for a Coolify database') and enumerates the filtering dimensions (level, time range, text search). It clearly identifies the resource type, which implicitly sets it apart from coolify_get_service_logs and coolify_get_application_preview_logs, but it does not explicitly contrast with the generic coolify_get_logs sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over siblings like coolify_get_logs or coolify_get_service_logs, and no prerequisites or exclusions are stated. The filtering clauses hint at contexts (e.g., debugging by level or time) but never make them explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_deploymentB
Get detailed information about a specific deployment
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only says 'Get detailed information' but does not specify what details are returned (e.g., status, logs, timestamps), nor mention side effects, permissions, or rate limits. For a read operation, this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no waste. Could be slightly more structured (e.g., list expected output), but overall efficient for the information provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description does not explain what 'detailed information' includes. With sibling tools like coolify_list_deployments, it would be helpful to clarify that this returns full details for a specific deployment UUID. Incomplete for a get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description 'UUID of the resource' is clear. The tool description adds no additional meaning beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get detailed information about a specific deployment', using a specific verb ('Get') and resource ('deployment'). This distinguishes it from sibling tools like coolify_list_deployments (list) or coolify_trigger_deploy (action).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., list deployments for overview, or cancel deployment for mutation). The description does not mention prerequisites, context, or that the UUID must come from a listing operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_environmentB
Get detailed information about a specific environment in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_uuid | Yes | UUID of the project | |
| environment_name | Yes | Name or UUID of the environment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states the tool 'gets' information, implying a read-only operation with no side effects. However, it does not mention what happens if the environment doesn't exist (e.g., error vs. null), rate limits, or authentication requirements. A 3 is reasonable as it conveys the basic nature but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 12 words, which is very concise. It is front-loaded with the key information. However, it could be slightly improved by adding a brief note about the required parameters or response format without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters, no output schema, and no annotations, the description is minimally complete. It tells the agent what the tool does and implies the parameters are needed, but doesn't explain what 'detailed information' includes or how to interpret the response. A 3 reflects adequate but not comprehensive coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters described in the schema: 'project_uuid' as 'UUID of the project' and 'environment_name' as 'Name or UUID of the environment'. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed information about a specific environment in a project', which is a specific verb+resource combination. It distinguishes from siblings like 'coolify_list_environments' (which lists all environments) and 'coolify_create_environment' (which creates), but doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Among many sibling tools, there is no indication of prerequisites (e.g., needing a project UUID first), nor when to prefer this over 'coolify_list_environments' (which might be faster for overview). The agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_instance_email_settingsA
Get instance-wide SMTP/Resend settings (Coolify v4.3.23). Requires a root-team admin/owner token; secrets require read:sensitive or root ability.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses authentication requirements and the need for elevated permissions for secrets, which goes beyond the obvious 'get' semantics. It doesn't mention side effects, but as a read operation the name implies none. The addition of the version and auth conditions adds useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences that lead with the action and resource, then add the necessary auth context. No wasted words, and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless getter with no output schema, the description covers everything needed: what it retrieves, the required permissions, and the version. The simple nature of the tool means no further details are necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description has no need to explain them. The description does mention 'secrets' which could relate to the response data rather than parameters, but this is acceptable given the empty schema. The baseline for no parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Get', the resource 'instance-wide SMTP/Resend settings', and even includes the Coolify version. It implicitly distinguishes from the sibling 'coolify_update_instance_email_settings' by using 'get' vs 'update', 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides the prerequisite access token requirement (root-team admin/owner) and the additional ability needed for secrets, which is valuable context. However, it does not explicitly state when to use this tool versus the update sibling, nor does it mention any exclusions or alternatives. The usage guidance is implied by the tool name but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_logsB
Retrieve logs for a Coolify application with optional filtering by level, time range, or text search
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Return the most recent logs (tail behavior) | |
| uuid | Yes | UUID of the application | |
| level | No | Minimum log level to include | |
| limit | No | Maximum number of filtered log entries to return | |
| lines | No | Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit. | |
| since | No | ISO 8601 timestamp - only logs after this time | |
| until | No | ISO 8601 timestamp - only logs before this time | |
| search | No | Text to search for in log messages (case-insensitive) | |
| service_name | No | Compose service whose container to read (Coolify v4.4+); defaults to the first container | |
| show_timestamps | No | Include server timestamps for accurate time filtering |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond "retrieves". It doesn't say the read is non-destructive, that results are capped (limit default 100, max 1000), that lines/tail control how much raw log is pulled, that filtering truncates output, or that service_name defaults to the first container. All of that lives only in schema parameter descriptions, leaving the agent's mental model of the operation thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb, resource, and the three filter categories — nothing wasted. It is arguably too terse for a 10-parameter tool, but the sentence itself is well-formed and uncluttered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only log fetch with 10 parameters, 100% schema coverage and no output schema, the description does the minimum: it tells the agent what it gets and what it can filter on. It omits the interaction between lines/tail/limit, the default-to-first-container behavior of service_name, and any sense of the return shape (array? raw text? entries with timestamps?). Adequate, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter including level, since/until, search, tail, and limit. The description only echoes the three filter categories (level, time range, text search) and adds no syntax, precedence, or defaulting semantics beyond that. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Retrieve logs for a Coolify application") and names the filtering axes, and the phrase "for a Coolify application" implicitly separates it from coolify_get_database_logs / coolify_get_service_logs / coolify_get_application_preview_logs. It stops short of explicitly naming those siblings, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can tell this is the tool for application logs with optional filtering, but there is no "use this when X, use coolify_get_service_logs when Y" guidance and no prerequisites (application must exist / be deployed). The optional filters are mentioned but not when to combine them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_private_keyB
Get detailed information about a specific SSH private key
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get detailed information', implying a read-only operation, but does not confirm idempotency, discuss auth requirements, rate limits, or what happens if the key does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise single sentence that front-loads the verb and resource. It is efficient, though it could be slightly improved by hinting at the required parameter or return value without adding much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter, the description is adequate but incomplete. It does not mention that the result is a private key object (no output schema), nor does it explain how to interpret the 'detailed information' or any error conditions. Given the large sibling set, a little more context for an AI agent would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the UUID parameter is described in the schema). The tool description adds no additional meaning beyond the schema's property description. Baseline 3 is appropriate as the description neither harms nor significantly improves parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Get') and the resource ('detailed information about a specific SSH private key'), clearly distinguishing it from sibling tools like 'coolify_list_private_keys' (which lists keys without details) and create/update/delete variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. For example, it does not suggest using 'coolify_list_private_keys' first to obtain UUIDs, nor does it specify prerequisites or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_projectC
Get detailed information about a specific Coolify project
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. The description only says 'Get detailed information' but does not specify that this is a read-only operation, what exactly is returned, or if any side effects occur. It fails to disclose whether the operation is safe (non-destructive) or idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the tool's purpose without extraneous information. It is well-structured and easy to parse for an AI agent. However, it could be slightly more precise (e.g., 'a specific Coolify project' could be 'a Coolify project by UUID').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the sibling tools and the lack of an output schema, the description is insufficient. It does not hint at the structure of the returned information (e.g., project name, environments, status) or how this tool integrates with other project-related tools. The agent may need to infer too much about the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with a detailed field description. The description adds no additional meaning about the 'uuid' parameter beyond what the schema provides. Baseline score of 3 is appropriate since the schema already handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('detailed information about a specific Coolify project'). It effectively distinguishes this tool from siblings like 'coolify_list_projects' (which lists projects) and 'coolify_update_project' (which modifies). However, it does not explicitly contrast with these siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like 'coolify_list_projects' or 'coolify_get_application'. The description also lacks any prerequisites or context about permissions or the relationship between project UUID and other resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_serverB
Get detailed information about a specific Coolify server
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'Get detailed information' without specifying what 'detailed information' includes, whether it's read-only, or any required permissions. The agent cannot infer the tool's safety profile or output characteristics from this minimal text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundancy. It is appropriately short for a simple read tool, though it could be slightly more informative without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and only one parameter, the description is insufficient. It does not explain the return format, what 'detailed information' entails, or how the output relates to other tools. The agent lacks context to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (1 parameter 'uuid' with description 'UUID of the resource'). The tool description adds no extra meaning beyond what the schema already provides, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('detailed information about a specific Coolify server'), clearly distinguishing it from sibling tools like 'coolify_list_servers' (which lists servers) and 'coolify_validate_server' (which validates). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Siblings include 'coolify_list_servers' for listing all servers, 'coolify_get_server_resources', and 'coolify_get_server_domains', but no criteria or prerequisites are given to help the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_server_domainsA
List all domains configured on a server with their resource mappings
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It accurately describes a read-only operation and mentions the output contains resource mappings, but does not clarify whether the operation is idempotent, requires special permissions, or has any rate limits. The tool is simple, so the lack of details is not critical, but still leaves room for doubt.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words that conveys the core purpose and key output detail. It is front-loaded, contains no filler, and every word earns its place. This is an excellent example of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description should explain what the returned data looks like. It mentions 'resource mappings' but does not elaborate on the structure (e.g., list of domain objects with resource identifiers). No pagination, sorting, or error behavior is mentioned. For a straightforward list operation, the description is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter 'uuid' with a description ('UUID of the server') and validation constraints. The tool description does not add any extra meaning beyond what the schema already provides. Since schema description coverage is 100%, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list'), the resource ('domains'), and the scope ('configured on a server') along with an additional detail about output ('with their resource mappings'). It immediately distinguishes itself from sibling tools like coolify_get_server_resources or coolify_list_servers by specifying the domain focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving domain mappings for a given server, but does not explicitly state when to prefer this tool over alternatives (e.g., coolify_get_server_resources) or note any preconditions (e.g., server must exist). No exclusion criteria or sibling references are provided, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_server_resourcesB
List all resources (applications, databases, services) deployed on a server
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states it lists resources, implying a read operation, but does not disclose any behavioral traits such as permissions required, rate limits, or whether the list is paginated. The description adds minimal value beyond what the name implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is clear and to the point. There are no redundant words or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description is largely complete, but it could mention the response format or clarify that it returns a list of resources with their types. However, given the low complexity, it is adequately informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'uuid', which is already described as 'UUID of the server'. The tool description does not add any additional meaning or context for the parameter beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'all resources (applications, databases, services) deployed on a server'. It uses a specific verb 'list' and a specific resource 'resources on a server', distinguishing it from type-specific siblings like coolify_list_applications or coolify_list_databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention when not to use it, nor does it reference siblings like coolify_list_services or coolify_list_resources as alternatives for different scopes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_serviceC
Get detailed information about a specific Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Get detailed information' with no mention of read-only semantics, error handling, authentication requirements, or rate limits. For a get operation, the safety profile is implied but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. It is front-loaded with the verb and resource. However, it could benefit from a bit more structure or additional context without becoming verbose. It is not wasteful, but it is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should hint at what 'detailed information' includes. Without that, the agent cannot fully understand what data will be returned. Given the tool's simplicity (one parameter), the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage (one parameter, uuid, fully described with type, pattern, and constraints). The description adds no additional meaning beyond the schema, which is acceptable since the schema is complete. Baseline 3 due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get detailed information') and the resource ('a specific Coolify service'). It distinguishes from sibling tools by specifying 'service' rather than applications, databases, etc., though it does not explicitly contrast with other 'get' tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The sibling list includes many similar 'get' tools (e.g., coolify_get_application, coolify_get_database), but the description offers no criteria for selection or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_service_database_importA
Get the status of a service database import (Coolify v4.4+). output needs the read:sensitive token ability.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| activity_id | Yes | Import ID returned when the import was started | |
| database_uuid | Yes | UUID of the database inside the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the required read:sensitive token ability and version constraint, and 'Get the status' implies a read-only operation, but it does not describe side effects, rate limits, or return behavior in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words. The core purpose is front-loaded, followed by the version and authorization requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The three required parameters are fully described in the schema, and the description adds useful version and authorization context. However, for a status-retrieval tool with no output schema, it does not indicate what status values or return shape the agent should expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all three required parameters are documented in the schema itself. The description adds no parameter-specific semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get) and resource (status of a service database import), and explicitly scopes it to Coolify v4.4+ service-level database imports. This distinguishes it from the sibling database-level import status tool and from the import-starting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying it gets import status, and the required activity_id suggests it is called after an import has started. However, it does not explicitly say when to use this versus coolify_get_database_import or coolify_import_service_database, nor does it state prerequisites beyond the token ability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_service_logsC
Retrieve logs for a Coolify service with optional filtering by level, time range, or text search
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Return the most recent logs (tail behavior) | |
| uuid | Yes | UUID of the service | |
| level | No | Minimum log level to include | |
| limit | No | Maximum number of filtered log entries to return | |
| lines | No | Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit. | |
| since | No | ISO 8601 timestamp - only logs after this time | |
| until | No | ISO 8601 timestamp - only logs before this time | |
| search | No | Text to search for in log messages (case-insensitive) | |
| show_timestamps | No | Include server timestamps for accurate time filtering |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It mentions filtering but does not disclose tail behavior, default limits, the meaning of lines versus limit, or whether the operation is read-only. The schema covers some of this, but the description itself adds minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; the core purpose and key filter options are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no annotations, and no output schema, the single-sentence description leaves the agent without guidance on parameter interplay (e.g., limit vs lines, tail) or when to choose this tool over sibling log tools. The schema covers parameter semantics, but contextual usage and behavior are incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 9 parameters have descriptions. The description adds a helpful summary of the main filter types (level, time range, text search) but does not elaborate on tail, limit, lines, or show_timestamps, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('logs for a Coolify service'), and mentions the key filtering dimensions. It clearly distinguishes from database logs and application logs by resource type, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 coolify_get_logs, coolify_get_database_logs, or coolify_get_application_preview_logs. The description implies a service context but does not state 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_team_membersA
List members of a specific team by ID (GET /teams/{id}/members)
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes | ID of the team |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates a GET request (read-only) but does not disclose any other behavioral traits such as required permissions, rate limits, pagination, error responses, or side effects. The minimal statement is not misleading but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 15 words that immediately conveys the action, resource, and endpoint. No filler or redundancy. It is optimally concise for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description is adequate but not fully complete. It does not mention the return format (e.g., list of member objects) or any filtering/pagination behavior. Since no output schema exists, a brief note on the expected result would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with team_id described as 'ID of the team'. The description adds value by explaining how the parameter is used in the API call ('by ID (GET /teams/{id}/members)'), which clarifies the URL mapping. This goes beyond the schema's bare description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List members), the resource (members of a specific team), and the required identifier (by ID). It also includes the HTTP endpoint for further clarity. This distinguishes it from sibling tools like coolify_get_current_team_members and coolify_list_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It simply describes the action without mentioning when to choose this over coolify_get_current_team_members or coolify_list_teams. Implicit differentiation from tool names is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_get_versionB
Get the Coolify instance version
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations to indicate read-only or destructive behavior, and the description does not disclose whether this is a safe, read-only operation. For a simple getter, it likely is read-only, but without explicit statement or annotations, the agent must assume. The description also does not mention any potential side effects (e.g., network call to external service, cost implications), though for a simple version check, these are unlikely. The description is minimal, providing no behavioral context beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence: 'Get the Coolify instance version'. It is extremely concise, front-loaded, and contains zero wasted words. It perfectly matches the tool's trivial nature – a simple getter with no parameters. There is no superfluous information, making it ideal for quick parsing by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, no output schema, no complex logic), the description is adequate but not complete. It tells what it does, but it doesn't explain what the agent should expect as output (e.g., a string version like '4.0.0' or a JSON object). Since there's no output schema, the description could have provided a hint about the return format. Also, it doesn't mention that this might be a read-only operation, which is a minor gap. Overall, it's sufficient for a trivial tool but leaves a few details to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 (100% coverage by definition, as there's nothing to cover). The description correctly implies that no inputs are needed, which is sufficient. Since there are no parameters to explain, the description inherently does not need to add parameter semantics. A score of 4 is given because the description clearly signals 'no arguments required' by its simple phrasing, avoiding any confusion about needing input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: to retrieve the Coolify instance version. The verb 'Get' and the resource 'Coolify instance version' are specific and unambiguous, distinguishing it from sibling tools that focus on applications, databases, or servers. It lacks a bit of nuance (e.g., what 'version' refers to – API version vs. software version), but it's clear enough for an agent to understand its primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus others. It does not mention that this is a general-purpose utility to check the Coolify installation's version, nor does it explain that it might be useful before other operations to verify compatibility. Without any context on when to call it (e.g., initial setup, troubleshooting), an agent might overlook it or call it inappropriately. No alternatives are named, but given its uniqueness (no other sibling seems to retrieve instance version), the lack of exclusions is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_healthcheckA
Check if the Coolify instance is healthy and reachable
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool performs a health check but does not disclose what 'healthy' means, expected responses, or side effects. For a read-only check, this is minimally adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is direct and immediately understandable. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless health check with no output schema, the description is mostly complete. It tells the agent what the tool does. Could be improved by hinting at the response format, but it is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100%. The baseline is 4. The description adds no parameter information, which is appropriate since no parameters exist. It does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks Coolify instance health and reachability. The verb 'check' and resource 'Coolify instance' are specific, and the tool is distinct from sibling CRUD tools. However, it somewhat redundantly restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 or any prerequisites. Although the health check is self-explanatory in the context of many sibling tools, the description does not explicitly address usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_import_databaseA
[DESTRUCTIVE] Restore a backup into a standalone database from S3, a server path, or an earlier upload (Coolify v4.4+). Runs in the background; poll coolify_get_database_import. source=server also needs the deploy token ability.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Object key (source=s3) or absolute server path (source=server) | |
| uuid | Yes | UUID of the database | |
| source | Yes | Where the backup file comes from: an earlier upload, an S3 storage, or a path on the database server | |
| confirm | No | Set to true to confirm this destructive operation | |
| dump_all | No | The file is an all-databases dump | |
| upload_id | No | Upload ID returned by POST .../imports/uploads (source=upload only) | |
| keep_owners | No | Keep owners and privileges of a PostgreSQL archive | |
| s3_storage_uuid | No | S3 storage UUID (source=s3 only) | |
| sqlite_database | No | Target SQLite database file | |
| replace_existing | No | Replace objects that already exist (PostgreSQL --clean behavior) | |
| restore_mysql_users | No | Restore users and privileges of an all-databases MySQL/MariaDB dump |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does well: the [DESTRUCTIVE] prefix warns of data loss, 'runs in the background' plus the named polling tool discloses async behavior, and the token requirement for server sources is stated. It stops short of saying whether existing objects in the target database are overwritten or that the action is irreversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the destructive warning and the core action front-loaded and the async-poll and prerequisite notes trailing in priority order. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what an agent needs to invoke it safely for an 11-parameter async mutation with no output schema: destructive nature, background execution, polling target, and a source-specific prerequisite. A note on failure/overwrite semantics for the target database would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter documentation baseline is already met. The description adds genuine value beyond the schema by linking source selection to a permission prerequisite (deploy token for source=server) and by naming the required follow-up poll, which no individual property description conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (restore/import) plus resource (a standalone database) plus the three accepted backup origins. The word 'standalone' distinguishes it from coolify_import_service_database, so an agent can pick correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the operation's context (restoring a backup from S3, a server path, or an earlier upload) and routes the agent to coolify_get_database_import for polling. It also flags the deploy-token prerequisite for source=server, though it never explicitly contrasts itself with coolify_import_service_database.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_import_service_databaseA
[DESTRUCTIVE] Restore a backup into a database of a service from S3, a server path, or an earlier upload (Coolify v4.4+). Runs in the background; poll coolify_get_service_database_import. source=server also needs the deploy token ability.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Object key (source=s3) or absolute server path (source=server) | |
| uuid | Yes | UUID of the service | |
| source | Yes | Where the backup file comes from: an earlier upload, an S3 storage, or a path on the database server | |
| confirm | No | Set to true to confirm this destructive operation | |
| dump_all | No | The file is an all-databases dump | |
| upload_id | No | Upload ID returned by POST .../imports/uploads (source=upload only) | |
| keep_owners | No | Keep owners and privileges of a PostgreSQL archive | |
| database_uuid | Yes | UUID of the database inside the service | |
| s3_storage_uuid | No | S3 storage UUID (source=s3 only) | |
| sqlite_database | No | Target SQLite database file | |
| replace_existing | No | Replace objects that already exist (PostgreSQL --clean behavior) | |
| restore_mysql_users | No | Restore users and privileges of an all-databases MySQL/MariaDB dump |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it tags the operation [DESTRUCTIVE], states it runs in the background rather than returning a result, and discloses an authorization prerequisite for one source mode. It does not say what existing database contents are replaced or how failures surface, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, with the destructive warning and the action front-loaded and the polling/authorization caveats following. Nothing is redundant with the name or with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter destructive async tool with no output schema and no annotations, it covers the essentials an agent must know before calling: destructiveness, async polling target, and the server-source token requirement. The remaining parameter interactions are carried by the fully described schema, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, including the source enum, confirm, and the source-specific fields. The description only restates the three source options without adding format or interaction rules (e.g., how replace_existing interacts with keep_owners), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb plus resource: restores a backup into a database of a *service*, with the three allowed sources enumerated inline. The sibling-provisioning note (poll coolify_get_service_database_import) also separates it from the plain coolify_import_database / coolify_get_database_import pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: this is the async entry point, and coolify_get_service_database_import is the follow-up. It also flags the prerequisite that source=server needs the deploy token ability. It stops short of an explicit when-not/alternative rule versus coolify_import_database, so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_application_deploymentsA
List deployment history for a specific application (all statuses: finished, failed, queued, in_progress, cancelled). Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of records to skip (pagination) | |
| take | No | Number of records to return | |
| uuid | Yes | UUID of the application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It correctly indicates a read operation (listing) and supports pagination, but does not disclose safety traits (e.g., non-destructive, no side effects) or potential constraints like authorization needs or rate limits. It adds value by enumerating statuses but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence conveys the core purpose and constrained scope, the second adds pagination detail. Every word earns its place; the description is optimally concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully covered, but the absence of an output schema means the description should clarify what fields are returned (e.g., deployment ID, timestamps). It only says 'deployment history' without structure, which is insufficient for complete tool understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by explaining the result includes all statuses and mentioning pagination, which directly relates to the skip/take parameters. This goes beyond mere schema repetition, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List deployment history for a specific application' with explicit mention of included statuses, distinguishing it from the generic coolify_list_deployments sibling. However, it does not explicitly differentiate using the sibling's name, leaving some reliance on the tool name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when targeting a specific application via UUID, but provides no explicit guidance on when not to use it or mention of alternatives like coolify_list_deployments for broader queries. The context is clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_application_previewsA
List preview deployments of an application (Coolify v4.4+; returns summary: uuid, pull_request_id, status, domains, git_type)
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the parent application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the Coolify version requirement and the summary fields returned, but omits pagination behavior, authentication requirements, failure modes, and explicit confirmation that the operation is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The version requirement and return summary are compactly placed in parentheses after the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no output schema, the description supplies useful return-field context and a version constraint. It is nearly complete, but the absence of pagination or authorization notes leaves a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single uuid parameter is already documented in the schema as the parent application UUID. The description adds no additional semantics about the parameter, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and resource ('preview deployments of an application'), making the tool's scope clear. It implicitly distinguishes itself from deployment-listing siblings by specifying 'preview', but does not explicitly name an alternative sibling for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose: an agent can infer this tool should be used when preview deployments for an application are needed. However, it gives no explicit when-to-use guidance, no exclusions, and no comparison to siblings like coolify_list_application_deployments or coolify_get_application_preview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_applicationsA
List all applications managed by Coolify (returns summary: uuid, name, status, fqdn)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It states the tool returns a 'summary' with four fields, which implies a lightweight read operation. It does not mention side effects, performance characteristics, or whether authentication is required. The lack of annotation support means the description carries the burden, and while it is adequate for a simple list, it omits details like whether it returns all applications or requires a team context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence containing all essential information: what the tool does and what it returns. Every word serves a purpose, and it is front-loaded with the action. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it is a simple, parameterless list tool, the description is mostly complete. It identifies the resource type and the fields returned. However, it does not specify the scope (e.g., all applications across all projects or teams), mention pagination, or indicate if the list is sorted. Without an output schema, slightly more detail on returned data would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% schema description coverage, so the description's role is minimal. It adds value by explaining the output fields (uuid, name, status, fqdn), which is helpful for the agent to understand what data will be returned. This exceeds the baseline of 3 by providing explicit context about the return values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all applications managed by Coolify and specifies the returned summary fields (uuid, name, status, fqdn). It is distinct from sibling tools like coolify_list_databases, coolify_list_services, etc., which list other resource types. The verb 'list' matches the function well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this is for obtaining a summary list of applications, which is appropriate when an overview is needed. However, it does not explicitly advise when to use it versus a more detailed tool like coolify_get_application, nor does it mention any prerequisites or limitations (e.g., pagination or filtering). Sibling tools provide other list options, but no contrast is drawn.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_application_scheduled_task_executionsB
List executions of a scheduled task for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The description correctly labels it as a list operation (non-destructive, read-only). However, it does not disclose any behavioral details such as pagination, ordering, filtering capabilities, or response format. For a basic list tool with no annotations, a score of 3 is appropriate—adequate but not informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that captures the core functionality without any waste. It is front-loaded and efficient, earning its place with zero extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 required parameters, no output schema, no nested objects), the description is minimally complete. It communicates the basic function, but for a list tool, additional context about result ordering, limit, or update recency would be helpful. The lack of output schema means the description could have indicated the return type, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters (uuid and task_uuid) with descriptions and constraints. The description adds no additional meaning beyond what the schema provides, such as how to obtain the UUIDs or their relationship. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'executions of a scheduled task for a Coolify application'. It distinguishes itself from sibling tools like coolify_list_application_scheduled_tasks (which lists tasks themselves) and coolify_list_service_scheduled_task_executions (which targets services instead of applications). The purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. While the sibling set includes similar tools for services and backup executions, there is no mention of prerequisites or conditions (e.g., requiring a valid application and task UUID). The agent must infer usage purely from the name and context, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_application_scheduled_tasksB
List all scheduled tasks for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. However, it only repeats the tool name and parameter description. It does not disclose whether the operation is read-only, whether it requires any permissions, whether results are paginated, or what the response structure looks like. This is a significant gap for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and contains zero wasted words. It efficiently conveys the tool's purpose and scope. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description is minimally adequate. It tells what the tool does and identifies the required parameter. However, it does not describe the return format (e.g., a list of scheduled task objects) or any constraints like whether the UUID must be for an existing application. For a bare-bones tool, it is functional but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – the parameter `uuid` has a description ('UUID of the application'). The description adds 'for a Coolify application' which reinforces the parameter's purpose but does not add new meaning beyond what the schema already provides. Baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('scheduled tasks'), and the scope ('for a Coolify application'). This distinguishes it from sibling tools like `coolify_list_application_scheduled_task_executions` (which lists executions) and `coolify_list_service_scheduled_tasks` (for services). The verb+resource combination is 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.
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. For example, there is no mention of prerequisites (e.g., needing a valid application UUID first), or when to use this over `coolify_list_applications` or `coolify_list_application_scheduled_task_executions`. The description is purely declarative without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_application_storagesC
List persistent and file storages for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. The description only states that the tool lists storages but doesn't mention whether it is read-only, what permissions are needed, how pagination or rate limits work, or whether the tool returns a list or single items. The word 'list' implies a read operation, but without annotations to confirm this, the description is insufficient for a safe agent decision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 9 words in a single sentence, conveying the core action. It front-loads the verb 'List' and the resource, which is good. However, it could be slightly more efficient by removing 'persistent and file' if that is redundant or implied by 'storages', but it's clear and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (single parameter, no output schema), the description is too brief. The tool has a critical sibling 'coolify_delete_application_storage' that suggests storage management is more involved, but the description doesn't hint at the tool's return format, whether it returns a list or array, or any edge cases. With no output schema, the description should provide more context about expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single required parameter 'uuid' documented as 'UUID of the application'. This baseline 3 is appropriate because the schema already fully describes the parameter, and the description adds no further semantics (e.g., where to find the UUID, format hints, or validation constraints). The description does not go beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List persistent and file storages for a Coolify application' – it uses the verb 'List', specifies the resource 'storages', and distinguishes it from sibling 'list_*' tools by targeting a specific resource type. However, it could be more precise by stating 'all' or 'the' to confirm scope, and it doesn't differentiate from closely related storage tools like 'coolify_list_database_storages' or 'coolify_list_service_storages' beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Among siblings, there are list storage tools for databases and services, but the description doesn't mention when an agent should choose this application-specific tool over those. There's also no mention of prerequisites, such as the application needing to exist, or what the tool returns if no storages are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_audit_eventsA
List the team audit log, newest first (Coolify v4.4+). Requires a team admin/owner token; actor email, token, metadata, changes, and IP need read:sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| action | No | Filter by action; all returns every action | |
| search | No | Search in event, description, resource name, and actor | |
| source | No | Filter by where the change came from | |
| per_page | No | Items per page (default 25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses the sort order (newest first), the admin/owner token requirement, and that sensitive fields (actor email, token, metadata, changes, IP) need read:sensitive. It doesn't cover pagination or response shape, but the authorization profile is well conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose then constraints. Every clause (version, sort order, auth, sensitive scope) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with full schema coverage and no output schema, the description supplies the key auth and version context an agent needs. Missing only minor details like pagination behavior and return shape, which are modest given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters including enums are already documented in the schema. The description adds no filter semantics beyond that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the team audit log') plus sort order and version context. There is no competing audit-log sibling, so an agent can immediately recognize what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite ('Requires a team admin/owner token') that gates correct invocation. It doesn't describe when to reach for it versus other tools, but no sibling competes for this function, so guidance is largely adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_backup_executionsB
List executions of a database backup schedule
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| backup_uuid | Yes | UUID of the scheduled backup |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It merely states it lists executions, but does not mention that it is read-only, non-destructive, or any side effects. The agent cannot infer safety or impact beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, grammatically complete sentence with no unnecessary words. It is front-loaded and highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 required parameters and no output schema. The description does not explain the return format, pagination, ordering, or what constitutes an 'execution'. For a list tool, this is insufficient to fully inform the agent about expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions of both 'uuid' (UUID of the database) and 'backup_uuid' (UUID of the scheduled backup). The description adds no additional meaning beyond what the schema already provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List executions of a database backup schedule' clearly states the action (list) and the resource (executions) with context (database backup schedule). It distinguishes from siblings like coolify_list_database_backups (lists schedules) and coolify_delete_backup_execution (deletes executions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives. It implies usage when you have a database and backup schedule UUID, but does not state when not to use it or mention sibling tools like coolify_list_database_backups or coolify_delete_backup_execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_database_backupsB
List backups for a specific database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavioral traits. It only states the action but does not clarify if the operation is read-only, what constitutes a 'backup' (configuration vs. snapshots), whether authentication is required, or any side effects. This leaves significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is appropriately succinct for a simple list operation, though it could be front-loaded with key behavioral notes if needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits what the response contains (e.g., backup IDs, timestamps, status) and does not mention pagination, ordering, or typical usage patterns. For a list tool without an output schema, this leaves the AI agent guessing about the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for the single parameter 'uuid' is 100% with description 'UUID of the database'. The tool description adds no additional meaning beyond the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List backups for a specific database' clearly states the action (list), the resource (backups), and the scope (specific database). It effectively distinguishes from siblings like 'coolify_list_backup_executions' (which lists backup runs) and various create/delete backup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'coolify_list_backup_executions' or how to pair it with 'coolify_create_database_backup' or 'coolify_delete_database_backup'. The description lacks usage context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_database_envsB
List all environment variables for a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It is read-only (implied by 'list'), but does not clarify if it returns all variables or only user-defined ones, if it requires specific permissions, or whether the response includes hidden/system variables. The minimal description adds little beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with zero wasted words. Every element ('list', 'all', 'environment variables', 'Coolify database') is meaningful and necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 1 parameter (well-documented in schema), no output schema, and no annotations, the description is minimally adequate. It states the core operation but omits context about the response format (e.g., whether it returns values or just keys) and potential edge cases (empty databases, large numbers of variables). For such a simple tool, a 3 reflects it being 'okay but could add one more sentence about response content'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning the schema already documents the uuid parameter's type, constraints, and purpose. The description does not add any additional semantic context beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb+resource combination 'List all environment variables for a Coolify database', clearly identifying both the action (list) and the target (database environment variables). It differentiates from siblings like `coolify_list_envs` (which likely lists generic environment variables) by explicitly scoping to databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives like `coolify_list_envs` or environment variable manipulation tools. It does not mention prerequisites (e.g., the database must exist) or scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_databasesA
List all databases managed by Coolify (returns summary: uuid, name, database_type, status)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates the tool returns a summary (not full details) and lists the fields in the result, which is helpful. However, it does not disclose whether the operation is read-only (likely safe), whether authentication is required, or any rate limits. Given the simplicity (zero parameters, listing), the baseline disclosure is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficient and front-loaded with the core purpose. It wastes no words. However, it could be slightly more structured (e.g., separating purpose from return info) but remains very clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema, and a clear listing purpose), the description is fairly complete for an agent to understand what it does and what it returns. It does not need to explain return values in depth because the summary fields are explicitly listed. The sibling context shows many database-specific tools, but this tool is broad; the description appropriately sets expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (no parameters exist), so no parameter documentation is needed. The description does not add any parameter semantics because there are none to discuss. Per the guidelines, with zero parameters, the baseline score is 4, but since the description adds no extra value beyond the schema (which already covers everything), a 3 is appropriate as the description is merely adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all databases managed by Coolify and specifies the return summary fields (uuid, name, database_type, status). It is a specific verb+resource pair that distinguishes it from siblings like coolify_list_applications or coolify_list_projects, but it does not explicitly contrast with other database listing tools (e.g., coolify_list_database_backups).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is a straightforward listing operation with no parameters, suitable when you need an overview of all databases. However, it provides no explicit guidance on when to use this versus alternative tools like coolify_get_database (for details of a specific database) or coolify_list_database_backups (for backups). There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_database_storagesC
List persistent and file storages for a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'list', implying a read operation, but does not disclose any behavioral traits such as permission requirements, pagination, rate limits, or what happens if the database does not exist. The description adds minimal value beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, which is concise but lacks substance. Every word earns its place, but the brevity sacrifices useful information. It could be expanded slightly to improve clarity without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description does not hint at what the response contains (e.g., fields like name, mount path, size). No annotations are provided. For a simple list tool, the description is incomplete; the agent would need to infer or inspect the API to understand the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the 'uuid' parameter is fully described in the schema). The description does not add any additional meaning or context about the parameter beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 (persistent and file storages for a Coolify database). It distinguishes this tool from siblings like 'coolify_list_databases' (which lists databases) and 'coolify_list_database_backups' (which lists backups) by specifying 'storages'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as 'coolify_list_application_storages' or 'coolify_list_service_storages'. The context of database-specific storage is implied but not stated as a selection criterion. No when-not-to-use examples are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_deploymentsA
List currently running/queued deployments only (returns summary). For deployment history, use coolify_list_application_deployments instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the scope of results (currently running/queued) and notes that it returns a summary. However, it does not clarify if the tool is read-only, whether results are sorted, or what data is included in the summary beyond what 'limit' controls. A 3 is appropriate given decent but incomplete behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. The first sentence clearly states scope and output type, the second provides an explicit alternative. Ideal front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description is nearly complete. The only gap is that it doesn't mention whether the results are paginated or what 'summary' means structurally, but this is minor given the simplicity. A score of 4 reflects strong completeness for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single well-documented 'limit' parameter (type, default, min, max). The description adds no additional parameter information because none is needed. Baseline 3 is correct as the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'list currently running/queued deployments only', specifying both the verb (list) and the resource (deployments) with a precise scope (currently running/queued). It distinguishes from the sibling tool 'coolify_list_application_deployments' which handles deployment history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for currently running/queued deployments) and when to use the sibling tool instead ('For deployment history, use coolify_list_application_deployments instead'). This is perfect usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_environmentsB
List all environments in a Coolify project
| Name | Required | Description | Default |
|---|---|---|---|
| project_uuid | Yes | UUID of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only implies a read operation ('List') but discloses no behavioral traits such as whether it is safe, requires authentication, has rate limits, or returns paginated results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should hint at return values. It only says 'list all environments' without mentioning what fields are returned (e.g., names, UUIDs) or whether the list is filtered. This is insufficient for an agent to fully understand the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter fully described with name, type, pattern, and description). The description adds no extra meaning beyond 'in a Coolify project', which is already implied by the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'List' and resource 'environments in a Coolify project', which distinguishes it from sibling tools like coolify_list_projects (lists projects) and coolify_get_environment (gets a single environment).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 coolify_get_environment for a specific environment. There is no mention of prerequisites, filters, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_envsA
List all environment variables for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. While 'List' implies a read-only operation, the description does not explicitly state the absence of side effects, permissions required, rate limits, or pagination behavior. It is adequate for a simple list but adds no value beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded, concise, and contains no unnecessary words. Every word contributes to the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does not explain the return format (e.g., array of key-value pairs, JSON object). It also does not mention whether the list is flat or nested, or how errors are handled. For a simple list tool, this is minimally adequate but leaves gaps for an agent to understand the full response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the only parameter 'uuid' has a description: 'UUID of the application'). The description reinforces that the uuid refers to an application but does not add new meaning such as how to obtain the UUID or format constraints beyond what the schema's pattern and length constraints already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all environment variables for a Coolify application' uses a specific verb ('List') and clearly identifies the resource ('environment variables') and the context ('for a Coolify application'). This distinguishes it from sibling tools like coolify_list_database_envs (database envs) and coolify_list_environments (environments, not env vars).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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_create_env, coolify_update_envs_bulk, or coolify_list_database_envs. It does not mention prerequisites, context, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_github_app_branchesC
List branches for a repository accessible by a GitHub App
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the GitHub App | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or organization) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'List branches' without disclosing potential side effects, rate limits, authentication requirements, or return format. For a read operation, the description is too minimal to inform an agent of behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is appropriately concise for a simple list operation. However, it lacks front-loading of key information such as the required parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, no output schema, no annotations), the description is minimally complete. It states the purpose but omits return value details, potential errors, and prerequisites. For a list operation, an agent might infer the response, but more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter adequately. The description does not add any additional meaning beyond what the schema provides. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list branches) and the resource (repository accessible by a GitHub App). It distinguishes from sibling tools like coolify_list_github_app_repositories by specifying branches rather than repositories. However, it could be more explicit about the repository being specified by owner and repo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives such as coolify_list_github_app_repositories. There is no mention of prerequisites, context, or when this tool is appropriate versus other list operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_github_app_repositoriesB
List repositories accessible by a GitHub App
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the GitHub App |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action without mentioning that the tool is read-only, what happens if the ID is invalid, authentication requirements, rate limits, or pagination behavior. The description is too minimal for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded and efficient. However, it could be slightly more informative without sacrificing conciseness, hence a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no annotations), the description is inadequate. It does not explain what the tool returns (e.g., a list of repository names, URLs) or if any additional context is needed. An agent would lack information about the output format, which is critical for subsequent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the 'id' parameter has a description 'ID of the GitHub App' in the schema). The tool description adds no additional meaning beyond what the schema already provides except for clarifying that the tool lists repositories, which is implicit. With full coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List repositories accessible by a GitHub App' uses a specific verb ('List') and resource ('repositories accessible by a GitHub App'), clearly distinguishing it from sibling tools like 'coolify_list_github_apps' (which lists GitHub apps themselves) and 'coolify_list_github_app_branches' (which lists branches).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 when to list all GitHub apps or branches. It does not mention prerequisites, context (e.g., needing the GitHub App ID beforehand), or scenarios where another tool would be more appropriate.
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
List all GitHub App integrations configured in Coolify
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states 'List all GitHub App integrations'. It does not disclose behavioral traits such as whether the tool is read-only, whether it returns paginated results, authentication needs, or response format. This leaves the agent to infer behavior from naming alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently communicates the tool's purpose without extra detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 parameters and no output schema, the description is mostly complete. It tells the agent exactly what this tool does. However, it could be improved by noting the return type (e.g., array of GitHub App objects) or read-only nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the input schema is fully covered. The description does not need to add parameter meaning. Baseline for 0 parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is clear and specific: verb 'List', resource 'GitHub App integrations', scope 'configured in Coolify'. It distinguishes itself from sibling tools like coolify_create_github_app, coolify_update_github_app, and other list tools for different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides basic purpose but no explicit guidance on when to use this tool vs alternatives (e.g., coolify_list_github_app_repositories). For a simple list tool, the absence of when-not or alternative references is acceptable but not excellent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_private_keysA
List all SSH private keys (returns summary: uuid, name, description, fingerprint)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavioral traits. It only states it returns a summary, leaving out whether this is a read-only operation, any prerequisites, or potential side effects. Minimal behavioral context beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that efficiently communicates the tool's purpose and output. No redundant or unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool, the description covers the core purpose and return fields adequately. However, it could add context like whether the list is globally scoped or if any default ordering applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so baseline 4 applies. The description adds value by clarifying the return format, which the empty schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all SSH private keys and specifies the exact fields returned (uuid, name, description, fingerprint). It distinguishes from sibling tools like coolify_list_applications and coolify_list_databases by focusing on a specific resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 over alternatives is provided. Although the name and description make the purpose obvious, there are many other list tools, and an agent would benefit from knowing this is the sole tool for listing SSH private keys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_projectsA
List all projects in Coolify (returns summary: uuid, name, description)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It accurately describes the tool as a read-only listing operation returning a summary. No behavioral quirks (e.g., pagination, filtering) are mentioned, but for a simple list with no parameters, this is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the tool's purpose and return value. No wasted words; every part of the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with no parameters and no output schema, the description is complete. It states what is returned (summary fields). Could optionally mention that the output is a list of objects, but this is implied by 'List all projects'. The description provides enough context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is 100% and the description adds no parameter detail. With 0 parameters, the baseline is 4, and the description does not need to add anything further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists all projects in Coolify and specifies the summary fields returned (uuid, name, description). The verb 'list' and resource 'projects' are specific and distinct from sibling list tools that 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.
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. While the usage is straightforward, a sentence like 'Use this for a quick overview of all projects; for detailed info on a specific project, use coolify_get_project' would improve clarity. The current description implies usage but does not provide exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_resourcesA
List all resources (applications, databases, services) across all projects
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It indicates this is a read-only operation ('List'), which is transparent. However, it does not disclose any additional side effects, output format, or pagination behavior. It is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the purpose and includes a parenthetical listing of resource types. Every word serves a purpose with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters, no output schema, no annotations, and the tool is a straightforward list operation, the description covers the essential semantics. It could mention whether the output is paginated or ordered, but for such a simple tool, the current level is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with zero parameters, so there are no parameters for the description to explain. The description correctly sets no expectations about parameters. The baseline of 4 is appropriate given there is nothing to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'all resources', and specifies what those resources include (applications, databases, services), and the scope 'across all projects'. This distinguishes it well from sibling tools like coolify_list_applications, coolify_list_databases, and coolify_list_projects, which are more specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a broad, unfiltered listing purpose—getting a comprehensive overview. It doesn't explicitly state when not to use it or name alternatives, but the sibling tool list makes it self-evident that more specific list tools exist for filtered views. It lacks explicit exclusions but offers clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_server_registriesA
List the Docker registries a server is logged in to and the registries its applications need (Coolify v4.4+; token needs read:sensitive)
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does add real context: the Coolify v4.4+ version requirement and the read:sensitive token scope. It stops short of saying whether registry credentials or secrets are returned or how large the response may be — relevant given the sensitive scope it names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence that front-loads the resource and tucks the version and auth requirements into a compact parenthetical. Every clause carries information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, the description covers what is listed, the version gate, and the auth scope — enough for an agent to call it correctly. A brief note on return shape would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'uuid' parameter is fully documented in the schema (100% coverage), so the baseline is 3. The description adds no extra meaning about the UUID beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and precisely scoped resource ('Docker registries a server is logged in to and the registries its applications need'), which cleanly distinguishes it from the login/check/logout registry siblings. It doesn't explicitly name those siblings, but the read semantics are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only 'List' framing and the note that a read:sensitive token is needed, which effectively signals a prerequisite. However, there is no explicit when-to-use guidance or statement of when to prefer coolify_check_server_registry or the login/logout variants instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_serversA
List all servers managed by Coolify (returns summary: uuid, name, ip)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey all behavioral context. It describes the action (list) and the return data (summary fields), which hints at a read-only, safe operation. However, it does not disclose if there are any side effects, authorization requirements, or performance considerations (e.g., rate limiting, pagination). It does not contradict annotations but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the purpose and output. It is front-loaded and contains no unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and no annotations, the description is fairly complete for a simple listing tool. It states what it returns, which is sufficient. The only minor gap is missing any context about pagination or result limits, but overall it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is no additional meaning needed beyond what the schema already provides. The description confirms that no input is required. The mention of return fields adds value for the user without parameter ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists servers managed by Coolify and specifies the returned fields (uuid, name, ip). It uses a specific verb ('list') and a clear resource ('servers'). It does not explicitly differentiate it from sibling tools like coolify_get_server, but the action of listing vs getting is fairly self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly suggests this is for getting a summary of servers, but it provides no explicit guidance on when to use this tool versus alternatives (e.g., coolify_get_server for details, coolify_validate_server for validation, or coolify_get_server_resources for resource info). No exclusions or context for when not to use it are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_service_envsA
List all environment variables for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It states a read-only list operation, which is transparent enough for a simple tool. However, it does not disclose whether hidden variables are included, if any filtering applies, or the response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no redundant information. It front-loads the action and resource effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read operation, the description adequately conveys what it does and for what type of resource. It lacks details about return values or potential errors, but no output schema exists and the operation is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the single 'uuid' parameter with 'UUID of the service' (100% coverage). The tool description adds no additional parameter meaning, so it relies on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all environment variables for a Coolify service' uses a specific verb (List) and clearly identifies the resource (environment variables) and the scope (Coolify service). This distinguishes it from sibling tools like coolify_list_database_envs or coolify_list_envs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a Coolify service' provides clear context about when this tool is appropriate, implying it is for service-specific env vars rather than database or application envs. However, it does not explicitly name alternative tools 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_list_servicesA
List all services managed by Coolify (returns summary: uuid, name, status, service_type)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns a summary of services with specific fields, which is useful. However, it does not explicitly state that the operation is read-only or has no side effects. Since no annotations are provided, the description carries the full burden; it is adequate but could be more transparent about the behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose, includes the return summary in parentheses, and contains no unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 parameters and no output schema, the description is complete. It states what is listed, the scope (all services), and the fields returned. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description's job is to explain the tool's behavior. It does so by indicating the tool returns 'all services' and lists the summary fields. This adds value beyond the empty schema. With 0 parameters, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'List all services managed by Coolify' with a specific verb 'List' and resource 'services'. It distinguishes from sibling tools like 'coolify_list_applications' and 'coolify_list_databases' by naming the resource category. It also specifies the return fields (uuid, name, status, service_type), adding precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives. The tool name and resource category implicitly differentiate it from sibling list tools, but the description does not direct the agent to use this for services and not for applications/databases, nor does it mention any conditions or side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_service_scheduled_task_executionsC
List executions of a scheduled task for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not state whether this is a read-only operation (implied by 'List'), any rate limits, pagination behavior, or ordering of results. The description only restates the purpose without adding behavioral nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no wasted words. It is appropriately sized for a simple list tool and front-loads the action ('List') and target ('executions of a scheduled task').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters, no output schema, and no annotations, the description is too minimal. It does not explain the result format, whether filtering or sorting is supported, or how to interpret the execution data. The sibling tools include many similar list operations, and the description fails to help an agent understand unique constraints or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides for the two parameters (uuid and task_uuid). It does not explain how to obtain these UUIDs or specify their source (e.g., from the service or task list tools).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists executions of a scheduled task for a service, using a specific verb ('List') and resource ('executions of a scheduled task for a Coolify service'). It effectively distinguishes from sibling tools like 'coolify_list_service_scheduled_tasks' which lists tasks, not executions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. While it is clear what it does, there is no mention of prerequisites (e.g., needing a service UUID and task UUID), no context about the relationship to other list tools, and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_service_scheduled_tasksB
List all scheduled tasks for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure, but it only states the basic action. It omits whether the operation is read-only, requires specific permissions, returns all tasks or paginates, or any error conditions. This leaves the agent with insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence that efficiently conveys the core purpose. No superfluous words. For such a simple tool, this is appropriately concise, though slightly more context could be beneficial without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects, no output schema). However, the description does not explain what the response contains (e.g., list of scheduled tasks with their IDs, commands, cron expressions). An agent lacks clarity on the return format, which is important for invocation. Given low complexity, 3 is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the only parameter (`uuid`), whose schema description already explains it is 'UUID of the service'. The tool description adds no further meaning or usage details beyond that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all scheduled tasks for a Coolify service' uses a specific verb ('List') and identifies the resource ('scheduled tasks') scoped to a service. It clearly distinguishes from sibling tools like `coolify_list_application_scheduled_tasks` (for applications) and `coolify_list_service_scheduled_task_executions` (for executions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., create, update, delete, or execution listings). It lacks explicit context for usage, prerequisites, or conditions that would help an agent choose correctly among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_service_storagesB
List persistent and file storages for a Coolify service (includes sub-resource UUIDs)
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the listing action and includes sub-resource UUIDs, but omits critical behavioral traits such as read-only semantics, permission requirements, error handling (e.g., missing service), or pagination behavior. The description is insufficient for an agent to fully understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 13 words, front-loading the key action and resource. It is efficient and free of unnecessary words. While it could be more structured, it earns a 4 for being concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one required parameter, no output schema, and no annotations, the description is somewhat incomplete. It hints at the output (includes sub-resource UUIDs) but does not explain the return format, error conditions, or prerequisites. For a simple list tool, it just meets the minimum adequacy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage for the single parameter 'uuid' with a description ('UUID of the service'). The description adds no additional meaning for the parameter beyond mentioning 'sub-resource UUIDs', which relates to the output not the input. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'storages for a Coolify service', with the additional detail about including sub-resource UUIDs. This effectively distinguishes it from sibling tools like coolify_list_application_storages and coolify_list_database_storages, which target different entity types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use the tool (to list storages for a service), but it does not provide explicit guidance on when not to use it or compare it to alternative tools like coolify_list_application_storages for application-level storage listing. No when-to-use or when-not-to-use criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_list_teamsA
List all teams (returns summary: id, name, description)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read operation ('List') and mentions the return fields, but does not explicitly state traits like idempotency, authentication requirements, or any limitations. For a simple list tool, this is minimally adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the key action and return information. Every word earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately covers the tool's purpose and return shape. It could optionally mention that it returns all teams accessible by the user, but it remains sufficiently complete for a basic list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%. The description adds no parameter information because none is needed, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all teams' with a specific verb and resource, and specifies the returned fields (id, name, description). This distinguishes it from sibling tools like coolify_list_applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description simply states the action without any contextual usage advice or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_login_server_registryA
[WRITE] Log a server in to a Docker registry, or update the login (Coolify v4.4+). Coolify runs docker login on the server and does not store the token.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server | |
| password | Yes | Registry password or access token | |
| registry | Yes | Registry host without scheme or path, e.g. ghcr.io or docker.io | |
| username | Yes | Registry username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it does add substantive behavior: that Coolify executes docker login on the target server and does not persist the token. Still missing whether an existing login is overwritten, how failures surface, and whether credentials are validated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences; the mutating nature and version constraint are front-loaded and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four required params, no annotations, and no output schema, the definition covers the essential mechanics but leaves the response behavior and failure modes unaddressed; an agent knows what it does but not what it gets back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-property descriptions (uuid, registry host format, username, password/token), so the schema does the heavy lifting. The description adds no per-parameter meaning beyond what is already structured, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Log a server in to a Docker registry") plus the update-login variant and a version note. The verb naturally separates it from the sibling coolify_logout_server_registry and coolify_check_server_registry without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mutating verb and the [WRITE] tag, and the Coolify v4.4+ note hints at applicability, but the description never states when to pick this over check/logout or what preconditions exist (e.g., registry reachable from the server). No explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_logout_server_registryB
[DESTRUCTIVE] Log a server out of a Docker registry (Coolify v4.4+). Deployments that pull private images from it will fail.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server | |
| confirm | No | Set to true to confirm this destructive operation | |
| registry | Yes | Registry host without scheme or path, e.g. ghcr.io or docker.io |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the key consequence—deployments pulling private images will fail—but omits other important behavior such as whether confirmation is enforced, whether re-login restores access, and what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste, and the destructive warning is front-loaded before the operational consequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive mutation tool with no output schema, the description covers purpose, version compatibility, and the primary risk. It could be more complete by stating that confirm:true is required and mentioning the inverse login operation, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents uuid, registry, and confirm with examples and validation rules. The description adds no parameter-level semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Log a server out of a Docker registry') and names the relevant platform version. It does not explicitly contrast with the inverse sibling coolify_login_server_registry, so it falls short of the strongest differentiation score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It flags the operation as destructive and describes the downstream consequence, but it offers no explicit guidance on when to use this versus alternatives like coolify_check_server_registry or coolify_login_server_registry. The agent must infer usage entirely from the tool name and the warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_restart_applicationA
[DESTRUCTIVE] Restart a Coolify application. Causes brief downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly labels the operation as '[DESTRUCTIVE]' and notes it causes brief downtime, which is critical behavioral context. It does not mention any authentication or authorization needs, but the destructive label and downtime warning cover key expectations for a restart operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with only two short sentences that are front-loaded with the most critical info ([DESTRUCTIVE], restart action). Every word adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple restart tool with no output schema and only two parameters (both fully documented in schema), the description adequately covers purpose, behavioral impact, and a key constraint (downtime). It does not explain what happens on success/failure or how to confirm the operation, but these are covered by the confirm parameter. Overall, it is sufficiently 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed schema descriptions for uuid (pattern, length) and confirm (boolean flag). The description does not add any extra semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool restarts a Coolify application, using a specific verb and resource. It distinguishes from siblings like coolify_start_application and coolify_stop_application by implying a restart (stop then start). However, it does not explicitly differentiate from the sibling coolify_restart_database, which is for a different resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'causes brief downtime', which warns about usage context but does not explicitly state when to use this vs alternatives like coolify_start_application (for initial starting) or coolify_stop_application (for stopping). No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_restart_databaseA
[DESTRUCTIVE] Restart a Coolify database. Causes brief downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It tags the operation as [DESTRUCTIVE] and notes brief downtime, but does not disclose other behaviors such as idempotency, error conditions, or prerequisites (e.g., database must be running).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: a single sentence plus a [DESTRUCTIVE] tag, front-loaded with the warning. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description covers purpose and consequence but lacks guidance on edge cases (e.g., what happens if database is already stopped or missing) and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline is 3. The description adds no additional meaning to the parameters beyond what the schema already provides (uuid, confirm).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Restart' and the resource 'Coolify database', and adds a consequence 'Causes brief downtime', distinguishing it from siblings like start, stop, delete, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need to restart a database) but does not provide explicit guidance on when to use it vs alternatives like start or stop, or mention prerequisites like database running state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_restart_serviceA
[DESTRUCTIVE] Restart a Coolify service. Causes brief downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly marks the operation as destructive (via [DESTRUCTIVE] tag) and discloses the brief downtime consequence. Since no annotations are provided, the description fully carries the burden of behavioral disclosure, and it does so clearly and accurately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences that immediately state the action, its destructive nature, and the impact (brief downtime). Every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple restart tool with 2 parameters, 100% schema coverage, and no output schema, the description sufficiently covers the core behavior and risk. It does not provide post-restart state or error scenarios, but that is reasonable given the tool's simplicity and the existence of sibling tools that return status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the uuid parameter and confirm parameter already have descriptions in the schema. The description does not add any new information about the parameters, so it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Restart a Coolify service' with a specific verb and resource. Among sibling tools, there are also start_service, stop_service, and restart_application, so the description correctly targets services, but it does not explicitly distinguish itself from restart_application, which is handled by the tool name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a warning that it is destructive and causes brief downtime, which implies when to be cautious. However, it does not explicitly state when to use this tool versus the sibling tools like coolify_restart_application, nor does it mention prerequisites or that the confirm parameter must be set to true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_run_application_storage_backupC
[WRITE] Run an on-demand backup for an application storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states 'run an on-demand backup', which implies mutation but doesn't explain side effects, idempotency, asynchronicity, or authorization requirements. The '[WRITE]' prefix is not part of the description and is not a substitute for behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action type ('[WRITE]'). It is efficient and avoids unnecessary words. However, it could include more context without being verbose, so not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters, no output schema, and no annotations, the description should provide more context about the backup process, what happens after invocation, and any success indicators. It fails to explain return values, potential errors, or the effect of the backup. This is inadequate for a potentially impactful operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters have descriptions in the schema). The description adds no additional meaning beyond the parameter names and their schema descriptions. It does not explain how to obtain the UUIDs or what 'storage' refers to. Baseline score of 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Run an on-demand backup for an application storage'. The verb 'run' and resource 'application storage backup' are specific. It distinguishes from siblings like 'coolify_set_application_storage_backup' (which likely schedules backups) and 'coolify_run_database_storage_backup' (database vs application), though it doesn't explicitly call out the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives (e.g., set vs run, or database vs application). There is no mention of prerequisites, such as needing the application to be running or having a storage configured. The description is purely declarative with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_run_database_storage_backupC
[WRITE] Run an on-demand backup for a database storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states it is a write operation ('[WRITE]') but does not disclose whether the backup is synchronous, how long it might take, what resources are affected, or whether it requires specific permissions. Critical behavioral details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and includes the [WRITE] prefix. It wastes no words, but it could be slightly more structured without adding length. It earns points for being efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and many sibling tools, the description should explain what an 'on-demand backup' entails, how it differs from scheduled backups, and what the agent can expect after execution. It fails to provide this context, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having descriptions ('UUID of the database', 'UUID of the storage'). The tool description adds no additional meaning beyond the schema. Baseline is 3, and the description does not improve on it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Run an on-demand backup') and the resource ('database storage'). The [WRITE] prefix signals it's a write operation. This distinguishes it from sibling tools like 'coolify_list_database_backups' and 'coolify_create_database_backup', which involve listing or scheduling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'coolify_create_database_backup' (which might set up recurring backups) or 'coolify_run_application_storage_backup'. There is no mention of prerequisites, preconditions, or when to avoid using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_run_service_storage_backupA
[WRITE] Run an on-demand backup for a service storage
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| storage_uuid | Yes | UUID of the storage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the burden of behavioral disclosure. The '[WRITE]' prefix and 'Run' verb indicate a mutating operation, but the description does not state whether this triggers an immediate execution, whether it requires the system to be in a certain state, or what side effects occur (e.g., backups overwrite or append). It is adequate but lacks detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and intent. It uses a single sentence that conveys the core purpose without unnecessary words. The '[WRITE]' prefix is a useful signal for the agent. It could be slightly more precise but is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 well-documented parameters and no output schema, the description is adequate for basic usage. However, it does not explain what happens after triggering the backup (e.g., whether it returns success/failure, or requires polling), or how it relates to backup schedules. It falls short of being fully self-contained for a complex operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage with two parameters ('uuid' and 'storage_uuid'), each well-documented with patterns and lengths. The description states 'for a service storage' which clarifies that 'storage_uuid' refers to a specific storage entity. While the description does not add much beyond the schema, the schema itself is clear, earning a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and resource ('on-demand backup for a service storage'), clearly stating what the tool does. It is distinguished from siblings like coolify_set_service_storage_backup and coolify_delete_service_storage_backup by the 'run' action, but could be more explicit about the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[WRITE]' prefix hints that this is a mutation tool, but there is no explicit guidance on when to use it versus alternatives (e.g., coolify_list_backup_executions for monitoring, coolify_set_service_storage_backup for configuration). No prerequisites or exclusions are mentioned. The context of on-demand backups is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_set_application_storage_backupC
[WRITE] Create or replace a backup schedule for an application persistent volume/directory
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| enabled | No | Whether the schedule is enabled (default true) | |
| save_s3 | No | Also upload backups to S3 | |
| timeout | No | Backup timeout in seconds | |
| frequency | Yes | Cron frequency for the backup (e.g. '0 2 * * *') | |
| storage_uuid | Yes | UUID of the persistent volume or directory storage | |
| s3_storage_uuid | No | S3 storage UUID when save_s3 is true | |
| retention_days_s3 | No | ||
| stop_during_backup | No | Stop the resource during backup | |
| retention_amount_s3 | No | ||
| disable_local_backup | No | Disable local backup retention | |
| retention_days_locally | No | ||
| retention_amount_locally | No | ||
| retention_max_storage_s3 | No | ||
| retention_max_storage_locally | No | ||
| missing_backup_notification_days | No | Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Create or replace' usefully implies an idempotent upsert, but for a mutation tool with 16 parameters it does not say whether replacing wipes previously configured retention settings, what permissions/auth are required, or what happens to fields left unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the '[WRITE]' mutability marker front-loaded and the core resource stated immediately. It is efficient, though for a 16-parameter upsert it is arguably under-sized rather than over-sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 16-parameter mutation with no annotations, no output schema, and only 63% schema coverage, the description is far thinner than the tool's complexity warrants. It omits prerequisites, upsert/replace semantics details, retention behavior, and any hint at the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 63%, leaving several retention parameters (retention_days_s3, retention_amount_locally, retention_max_storage_*) undocumented anywhere. The description adds no parameter-level meaning at all — no explanation of frequency format, save_s3/s3_storage_uuid coupling, or stop_during_backup implications — so it fails to compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create or replace a backup schedule for an application persistent volume/directory', and the '[WRITE]' prefix signals the mutation class. It is distinguishable from the sibling run/delete backup tools by name and intent, though it never explicitly contrasts itself with coolify_set_database_storage_backup or coolify_set_service_storage_backup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus coolify_run_application_storage_backup (trigger an immediate run) or the delete counterpart, nor any prerequisite such as the application and storage UUIDs having to exist first. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_set_database_storage_backupC
[WRITE] Create or replace a backup schedule for a database persistent volume/directory
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| enabled | No | Whether the schedule is enabled (default true) | |
| save_s3 | No | Also upload backups to S3 | |
| timeout | No | Backup timeout in seconds | |
| frequency | Yes | Cron frequency for the backup (e.g. '0 2 * * *') | |
| storage_uuid | Yes | UUID of the persistent volume or directory storage | |
| s3_storage_uuid | No | S3 storage UUID when save_s3 is true | |
| retention_days_s3 | No | ||
| stop_during_backup | No | Stop the resource during backup | |
| retention_amount_s3 | No | ||
| disable_local_backup | No | Disable local backup retention | |
| retention_days_locally | No | ||
| retention_amount_locally | No | ||
| retention_max_storage_s3 | No | ||
| retention_max_storage_locally | No | ||
| missing_backup_notification_days | No | Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses that this is a write operation and uses 'create or replace,' implying that an existing schedule is overwritten, but it does not explain permission requirements, whether unspecified parameters reset, or what happens to existing backup data—critical gaps for a 16-parameter mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, though its extreme brevity leaves much unexplained for a complex 16-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—16 parameters, no annotations, no output schema—the one-sentence description is insufficient. It fails to explain how the replace behavior works, what defaults apply, or how retention parameters interact, leaving an agent without enough context to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning beyond the schema, which covers only 63% of parameters. Several parameters (e.g., retention_days_s3, retention_amount_s3, retention_max_storage_locally) lack description text, and the tool's description does nothing to compensate for these gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Create or replace') and resource ('a backup schedule for a database persistent volume/directory'). It distinguishes itself from siblings like coolify_run_database_storage_backup and coolify_delete_database_storage_backup by focusing on schedule creation/replacement, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no prerequisites, and no exclusions. The '[WRITE]' tag implies mutability but offers no further usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_set_service_storage_backupC
[WRITE] Create or replace a backup schedule for a service persistent volume/directory
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service | |
| enabled | No | Whether the schedule is enabled (default true) | |
| save_s3 | No | Also upload backups to S3 | |
| timeout | No | Backup timeout in seconds | |
| frequency | Yes | Cron frequency for the backup (e.g. '0 2 * * *') | |
| storage_uuid | Yes | UUID of the persistent volume or directory storage | |
| s3_storage_uuid | No | S3 storage UUID when save_s3 is true | |
| retention_days_s3 | No | ||
| stop_during_backup | No | Stop the resource during backup | |
| retention_amount_s3 | No | ||
| disable_local_backup | No | Disable local backup retention | |
| retention_days_locally | No | ||
| retention_amount_locally | No | ||
| retention_max_storage_s3 | No | ||
| retention_max_storage_locally | No | ||
| missing_backup_notification_days | No | Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. The '[WRITE]' tag and 'create or replace' do disclose the mutation/upsert nature, which is valuable. But it says nothing about permissions required, whether an existing schedule is fully overwritten (including retention settings not passed), or whether a backup fires immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a useful '[WRITE]' marker and zero filler. Its brevity is efficient, though it tips into under-specification given the 16-parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, no-annotation, no-output-schema mutation tool, the agent needs to know how retention options interact, what S3 configuration is required, and what 'replace' overwrites. None of that is present, leaving the definition insufficient to call correctly without reading the whole schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, leaving roughly six retention parameters (retention_days_s3, retention_amount_s3, retention_days_locally, retention_amount_locally, retention_max_storage_s3, retention_max_storage_locally) undocumented anywhere. The description explains none of the 16 parameters or the dependency between save_s3 and s3_storage_uuid, so it fails to compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create or replace a backup schedule') scoped to a service persistent volume/directory, which implicitly distinguishes it from the application and database siblings. It stops short of naming those siblings explicitly, so differentiation relies on the word 'service'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus coolify_run_service_storage_backup, coolify_delete_service_storage_backup, or coolify_update_service_storage, nor any stated prerequisites (e.g. that the storage_uuid must already exist via coolify_create_service_storage). Intent is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_start_applicationB
[WRITE] Start a stopped Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosure. It only states 'Start' and '[WRITE]', which implies mutation but does not explain side effects (e.g., changing status, requiring permissions, or impact on deployments). The description is too brief to give an agent confidence about what happens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (5 words plus a tag), but it is borderline under-specified. It is front-loaded with the tag but lacks necessary details. Every sentence is earned, but the overall length may leave gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 param, no output schema), the description is minimally adequate. It covers the core action but does not mention error conditions (e.g., what if the application is already running) or the return value. It is complete enough for a simple tool but could be improved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds the context of starting an application but does not add meaning beyond the schema. Baseline 3 is appropriate per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Start' and the resource 'Coolify application', with the prefix '[WRITE]' indicating it's a write operation. It distinguishes itself from sibling tools like coolify_stop_application and coolify_restart_application by specifying it starts a stopped application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., coolify_restart_application). No prerequisites or context about the application needing to exist or be stopped are provided. The description does not help the agent decide between similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_start_databaseA
[WRITE] Start a stopped Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The '[WRITE]' prefix explicitly signals a write/mutative operation, which is appropriate for starting a database. It does not disclose error conditions (e.g., starting a running database) or state transitions, but for a simple start action this is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single very short sentence with a useful '[WRITE]' prefix, which is concise and front-loaded. It earns its place but could slightly expand on what 'start' entails (e.g., initiates the database service).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple start action with one parameter and no output schema, the description is minimally complete. However, for a write operation, it could mention idempotency or error behavior (e.g., 'no effect if already running').
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the required 'uuid' parameter as 'UUID of the resource'. The description adds no further parameter meaning, which is acceptable baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies 'Start a stopped Coolify database', which clearly identifies the verb (start) and resource (Coolify database), distinguishing it from siblings like 'stop_database' and 'restart_database'. However, it does not differentiate from 'start_service' or 'start_application' explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is for starting a stopped database, implying when to use it, but provides no guidance on when not to use it (e.g., if already running) or alternatives like restart_database.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_start_serviceB
[WRITE] Start a stopped Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only indicates it's a write operation but omits critical details such as what happens if the service is already running, required permissions, or error responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short—one sentence with a clear prefix. It is front-loaded and contains no fluff, though it could be slightly more structured without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 1-parameter input and no output schema, the description is too minimal. It lacks context about when to prefer this tool over service vs application variants, and does not mention return behavior or side effects, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the parameter as 'UUID of the resource'. The description adds no additional meaning beyond that, so it achieves the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start') and the resource ('a stopped Coolify service'), distinguishing it from siblings like stop_service and restart_service. The '[WRITE]' prefix further clarifies the operation type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs similar tools like coolify_start_application or coolify_start_database. The description implies the service must be stopped but does not state prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_stop_applicationA
[DESTRUCTIVE] Stop a running Coolify application. Causes downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| docker_cleanup | No | Clean up Docker resources on stop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden for behavioral disclosure. It clearly marks the operation as destructive and warns about downtime, which is critical for an agent deciding to use this tool. The flag '[DESTRUCTIVE]' at the start is effective. It does not detail what happens to Docker resources or the state of the application beyond 'stop', but the confirm parameter and docker_cleanup hints are indirectly supported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences) and front-loaded with the critical '[DESTRUCTIVE]' flag. Every sentence adds value. One might argue that 'Causes downtime' is slightly redundant after '[DESTRUCTIVE]', but it clarifies the specific impact for an application, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no annotations, the description is minimal but covers the essential: it stops an application with destructive consequences. It does not explain return values, state transitions, or error scenarios, but for a straightforward stop operation, this may be sufficient. The sibling tools (like coolify_start_application) provide complementary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any additional parameter-level details beyond the schema definitions. However, the description's 'destructive' context reinforces the need for the 'confirm' parameter, which is a minor benefit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Stop'), resource ('Coolify application'), and states a key consequence ('Causes downtime'). This clearly distinguishes it from siblings like coolify_start_application or coolify_restart_application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes the tool is destructive and causes downtime, implying caution. However, it does not explicitly state when to use this tool versus alternatives like coolify_restart_application, or when not to use it (e.g., if only a temporary pause is needed). No prerequisites or context are given beyond the destructive nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_stop_databaseA
[DESTRUCTIVE] Stop a running Coolify database. Causes downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| docker_cleanup | No | Clean up Docker resources on stop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It adds '[DESTRUCTIVE]' and 'Causes downtime', which are useful behavioral traits. However, it does not disclose the requirement for the 'confirm' parameter, the role of 'docker_cleanup', or any authorization or side effects beyond downtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences, front-loading the destructive warning. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 parameters and no output schema, the description is adequate but could be improved by explicitly noting that the 'confirm' parameter must be set to true for the operation to proceed. It covers the core purpose and a key effect (downtime) but lacks a few details that would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no information about the uuid, confirm, or docker_cleanup parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Stop a running Coolify database', which is a specific verb+resource combination. It clearly distinguishes from sibling tools like coolify_start_database, coolify_restart_database, and coolify_delete_database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (stop a database) but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. The '[DESTRUCTIVE]' label hints at caution but is not a full guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_stop_serviceB
[DESTRUCTIVE] Stop a running Coolify service. Causes downtime.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource | |
| confirm | No | Set to true to confirm this destructive operation | |
| docker_cleanup | No | Clean up Docker resources on stop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It labels the operation as '[DESTRUCTIVE]' and notes 'causes downtime', which is helpful. However, it doesn't clarify whether the action is reversible, whether data might be lost, or what happens to dependent resources (e.g., attached storage). The description adds some value beyond the schema but could be more detailed for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short—two sentences—and front-loads the destructive warning. Every sentence earns its place. Slightly more detail on parameters or behavior would not hurt conciseness significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a 3-parameter destructive operation with no output schema, the description is minimally adequate. It covers the main purpose and the most important effect (downtime). However, it omits return value info (e.g., does it return success status?), error conditions, or idempotency behavior. For a destructive tool, these gaps reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description doesn't add any information about the parameters beyond what the schema provides (e.g., 'uuid', 'confirm', 'docker_cleanup' are already described). No enrichment of parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Stop', the resource 'Coolify service', and the effect 'Causes downtime'. It distinguishes this from sibling tools like 'coolify_stop_application' and 'coolify_stop_database' by using 'service' in the name and description, though it doesn't explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs. alternatives like pausing or scaling down. It doesn't mention prerequisites, ordering of operations, or situations where stopping is inappropriate (e.g., during a deployment). The only usage hint is the [DESTRUCTIVE] tag and 'causes downtime', which is basic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_trigger_deployB
[WRITE] Trigger a new deployment for a resource (application, service, or database)
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the resource to deploy | |
| force | No | Force rebuild even if no changes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. The [WRITE] prefix indicates a mutation, but the description does not disclose side effects (e.g., cancellation of ongoing deployments), idempotency, auth requirements, or whether the deployment is synchronous. The behavioral transparency is very limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the [WRITE] prefix, which is efficient and front-loaded. It conveys the core action without fluff. However, it could be slightly more structured (e.g., listing resource types in a clearer way) without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain what the tool returns (e.g., deployment ID, status). It also lacks details on prerequisites (resource must exist), error handling, or concurrency behavior. With many siblings, it does not help differentiate from other management actions. The description is incomplete for a tool that triggers an asynchronous operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning both parameters (uuid, force) are already documented in the input schema. The description adds no additional meaning beyond what the schema provides. Baseline is 3, and no extra value is contributed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Trigger a new deployment' and specifies the resource types (application, service, or database). The [WRITE] prefix reinforces the action type. This distinguishes it from sibling tools like start/stop/restart which manage lifecycle but not deployments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., start/stop/restart). The context is implied: trigger a deployment when you want to deploy a new version. No exclusions or prerequisites are mentioned. Minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_applicationC
[WRITE] Update configuration of a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Fully qualified domain name(s) | |
| name | No | Application name | |
| uuid | Yes | UUID of the resource | |
| is_static | No | Serve as static site | |
| build_pack | No | Build pack (dockerfile, nixpacks, static, dockercompose, dockerimage) | |
| git_branch | No | Git branch | |
| description | No | Application description | |
| build_command | No | Build command (e.g. npm run build) | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| ports_exposes | No | Exposed ports (e.g. 3000,8080) | |
| start_command | No | Start command (e.g. npm start) | |
| base_directory | No | Base directory in repo | |
| git_repository | No | Git repository URL | |
| instant_deploy | No | Deploy immediately after update | |
| install_command | No | Install command (e.g. npm install) | |
| publish_directory | No | Publish directory for static builds | |
| is_auto_deploy_enabled | No | Auto-deploy on push | |
| custom_container_name_prefix | No | Readable prefix for generated container names (Coolify v4.4+; slugified, max 30 chars, unique per server) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. The '[WRITE]' prefix usefully signals mutation, but nothing is said about partial-update semantics (whether omitted fields are preserved or reset), required permissions, deployment side effects, or reversibility — all critical for an 18-parameter update call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, which satisfies brevity. However, for a tool with 18 parameters and nested objects, that brevity tips into under-specification rather than economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complex, high-parameter-count mutation tool with no annotations and no output schema, yet the description is a ten-word fragment. An agent cannot tell whether this is a PATCH-style partial update, whether instant_deploy triggers a rebuild, or what happens on uuid mismatch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 18 parameters including the nested custom_fields object is documented in the schema itself. The description adds no parameter-level meaning beyond the schema, which is acceptable but not additive, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update configuration of a Coolify application'), so an agent knows the mutation target. It does not distinguish this from near-name siblings such as coolify_update_application_storage, coolify_update_application_preview, or coolify_update_application_secret_manager, which an agent could easily confuse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus the preview/storage/secret-manager update tools, no prerequisite information (e.g., that the uuid must come from coolify_get_application or coolify_list_applications), and no mention of what to do if the application is currently deployed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_application_previewA
[WRITE] Replace preview deployment domains (Coolify v4.3.23). Provide domains for a regular app or docker_compose_domains for a Compose app.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the parent application | |
| domains | No | Replace regular preview domains; null clears them. Mutually exclusive with docker_compose_domains. | |
| pull_request_id | Yes | Pull request number of the preview | |
| force_domain_override | No | Allow domain conflicts with other resources | |
| docker_compose_domains | No | Replace Compose preview domains by service name; [] clears them. Mutually exclusive with domains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It discloses the write/mutation nature and that domains are replaced, but omits permissions, conflict behavior (force_domain_override), clearing semantics, and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the write flag and purpose front-loaded. No filler; the version tag is minor and does not distract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation, no annotations, no output schema, and rich input schema, the description is too thin on side effects and prerequisites. It covers the core action but leaves the agent to infer permission and conflict behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters, including mutual exclusivity and null-clearing behavior. The description adds a high-level rule for choosing domains vs docker_compose_domains, but is largely redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Replace') and resource ('preview deployment domains'), and flags the write nature with '[WRITE]'. It implicitly differentiates from application-wide updates via 'preview', though it does not name a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over siblings like coolify_update_application or coolify_list_application_previews. The sentence about domains vs docker_compose_domains is parameter selection guidance, not tool-level usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_application_scheduled_taskB
[WRITE] Update a scheduled task for a Coolify application
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Task name | |
| uuid | Yes | UUID of the application | |
| command | No | Command to execute | |
| enabled | No | Whether the task is enabled | |
| timeout | No | Timeout in seconds | |
| container | No | Container name | |
| frequency | No | Cron frequency | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden, and all it provides is a '[WRITE]' marker. It does not state whether this is a partial or full replacement update (i.e., whether omitted optional fields like 'command' or 'frequency' are preserved or cleared), nor anything about permissions, side effects, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the mutation marker front-loaded and no filler. It is efficient, though the brevity reflects under-specification rather than tightness in service of a complete definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Incorrect on my part? Let me restate: given eight parameters, an unannotated mutation path, and no output schema, the definition is thin. It omits partial-update semantics and the discovery step for task_uuid, which an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all eight parameters are individually documented in the schema. The description adds nothing beyond that, so the baseline 3 applies — the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Update') and resource ('scheduled task for a Coolify application'), and the '[WRITE]' tag signals mutation. Naming the application context implicitly separates it from coolify_update_service_scheduled_task, but it never explicitly contrasts with that sibling or coolify_create_application_scheduled_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create/delete/list scheduled task siblings, and no prerequisite such as needing a task_uuid from coolify_list_application_scheduled_tasks. The agent must infer the workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_application_secret_managerA
[WRITE] Link an application to a secret manager so {{vault.KEY}} references resolve on deploy (Coolify v4.4+). settings: Doppler service account needs project+config; Infisical needs project_id+environment; Vault needs mount+path.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application | |
| settings | No | Provider-specific location of the secrets | |
| integration_token_uuid | Yes | UUID of a Doppler, Infisical, or Vault integration token of the team |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that this is a write operation, the deploy-time effect, and version requirements, but omits permissions, reversibility, whether existing secret-manager configuration is replaced, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, starting with the write marker and core action, then provider-specific settings guidance. Every clause adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-settings mutation tool with no annotations or output schema, the description covers the key provider requirements and version context needed to invoke it correctly. It stops short of explaining prerequisites such as obtaining an integration token or how existing configuration is handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful provider-specific guidance beyond the schema: Doppler requires project+config, Infisical requires project_id+environment, and Vault requires mount+path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (link an application to a secret manager) and the outcome ({{vault.KEY}} references resolve on deploy), plus a version constraint. It is clearly distinct from the generic coolify_update_application sibling by scoping the update to secret-manager integration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool is needed: enabling vault-style references at deploy time. It also adds provider-specific settings requirements for Doppler, Infisical, and Vault, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_application_storageB
[WRITE] Update a persistent or file storage for a Coolify application (PATCH body includes storage uuid + type)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (persistent only) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the application | |
| content | No | File content (file only) | |
| host_path | No | Unsupported by current Coolify; mount sources cannot be updated | |
| mount_path | No | Container mount path | |
| storage_uuid | Yes | UUID of the storage to update | |
| is_preview_suffix_enabled | No | Add -pr-N suffix for preview deployments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully flags '[WRITE]' and notes the PATCH body includes storage uuid + type, disclosing mutation behavior. However, it does not mention permissions, partial-update semantics, irreversibility, or side effects, leaving significant behavioral context uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted language. The '[WRITE]' marker and parenthetical detail are compact and directly useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is fully documented, but the tool has no annotations and no output schema. For an 8-parameter mutation tool, the description covers the core action but omits safety, return behavior, and operational caveats that would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in the input schema. The description only restates that storage_uuid and type are in the PATCH body and adds no syntax or behavioral meaning beyond the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('persistent or file storage for a Coolify application'), making the tool's purpose clear. It does not explicitly distinguish itself from sibling create/delete/list storage tools, but the name plus 'Update' is sufficient to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_application_storage or delete_application_storage. The '[WRITE]' tag implies mutation but does not explain when this tool should be selected over related storage operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_current_teamA
[WRITE] Update the team bound to the API token (Coolify v4.4+). Sets whether builds fall back to the deployment server when no build server is usable.
| Name | Required | Description | Default |
|---|---|---|---|
| is_build_server_fallback_enabled | Yes | Build on the deployment server when no build server is usable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does mark the operation as a write and identifies the exact setting changed, but it omits permissions, side effects, and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the write marker and target resource front-loaded. Every sentence contributes to identifying the operation and its effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter boolean mutation with no output schema, the description gives sufficient context to call the tool correctly: target resource, version constraint, and setting controlled. It could be stronger on permission or response behavior, but the core call context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter is already documented. The description mirrors the schema meaning of the fallback flag without adding format or behavioral detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: update the team bound to the API token, and narrows it to the build-server fallback setting. It is clearly distinct from sibling read tools such as coolify_get_current_team and coolify_list_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this tool is relevant by naming the fallback setting it controls, but it does not explicitly say when to use this instead of read alternatives or list any prerequisites. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_databaseB
[WRITE] Update configuration of a Coolify database
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Database name | |
| uuid | Yes | UUID of the resource | |
| image | No | Docker image (e.g. postgres:16-alpine) | |
| is_public | No | Make database publicly accessible | |
| description | No | Database description | |
| limits_cpus | No | CPU limit (e.g. 0.5, 2) | |
| public_port | No | Public port number | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| limits_memory | No | Memory limit (e.g. 512m, 1g) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral transparency burden. The '[WRITE]' prefix indicates a mutating operation, which aligns with 'Update' in the description. However, the description doesn't disclose whether changes are immediately applied, require a restart, what happens to unspecified fields (default persistence vs reset), or whether any authorization properties are needed. For a mutation tool without annotations, this is adequate but not comprehensive. It doesn't contradict any annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. It immediately communicates the action (Update) and resource (configuration of a Coolify database). The '[WRITE]' prefix adds a tiny bit of extra context without becoming verbose. Every word earns its place, making it as concise as possible for a description of this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters (including one required), no output schema, and no annotations. For a moderately complex update tool, the description is too brief. It doesn't mention what the return value looks like (which is partially excused by no output schema), nor does it clarify that the uuid parameter is essential to identify which database to update. The agent might need to infer that updating a non-existent database could fail. Given the complexity and lack of additional schema/annotation support, a score of 3 is appropriate—minimally adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning every parameter already has a description. The description doesn't add any new meaning beyond the schema—it simply states 'Update configuration of a Coolify database'. With full schema coverage, the baseline score is 3, and since no additional context is provided (e.g., which parameters are commonly used together, or that uuid identifies the target), the score remains 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Update' and resource 'configuration of a Coolify database', which clearly states the tool's purpose. It distinguishes the tool from siblings like coolify_create_database, coolify_delete_database, and others that perform different actions on databases. However, the prefix '[WRITE]' adds context about the operation type, which is useful but not strictly necessary for clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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_database (for new databases) or the stop/start database tools. It doesn't mention prerequisites (e.g., the database must exist), nor does it note that other update tools exist for specific aspects (e.g., update_database_envs_bulk, update_database_storage). The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_database_backupC
[WRITE] Update a database backup schedule configuration
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the database | |
| enabled | No | ||
| save_s3 | No | ||
| timeout | No | ||
| dump_all | No | ||
| frequency | No | Cron expression for the backup schedule | |
| backup_uuid | Yes | UUID of the scheduled backup | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| s3_storage_uuid | No | S3 storage UUID (required with save_s3) | |
| databases_to_backup | No | ||
| missing_backup_notification_days | No | Alert after this many days without an execution; 0 disables alerts (Coolify v4.3.23) | |
| database_backup_retention_days_s3 | No | ||
| database_backup_retention_amount_s3 | No | ||
| database_backup_retention_days_locally | No | ||
| database_backup_retention_amount_locally | No | ||
| database_backup_retention_max_storage_s3 | No | ||
| database_backup_retention_max_storage_locally | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It correctly labels the operation as "[WRITE]" and "Update," but does not disclose side effects, whether updates are partial or full replacements, permission requirements, or what happens to omitted fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted language, and the "[WRITE]" marker is useful. However, it is arguably too terse for a 17-parameter update operation, so it is not maximally appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, absence of annotations, no output schema, and many undocumented parameters, the description is incomplete. It identifies the mutation and target resource but omits update semantics, prerequisites, and enough behavioral context for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 17 parameters and only 35% schema description coverage, so the description should compensate but provides no parameter-level meaning. Fields such as enabled, save_s3, timeout, dump_all, retention settings, and databases_to_backup are left entirely to the schema, which itself documents many of them poorly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Update") and resource ("database backup schedule configuration"), making the operation clear. It does not explicitly distinguish this from nearby siblings such as set_database_storage_backup or update_database_storage, but the resource scope is still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, prerequisites, or alternatives. It does not say whether this should be used instead of set_database_storage_backup, update_database_storage, or create_database_backup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_database_envs_bulkB
[WRITE] Bulk update environment variables for a Coolify database (creates or updates)
| Name | Required | Description | Default |
|---|---|---|---|
| envs | Yes | Array of environment variables to set | |
| uuid | Yes | UUID of the database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It labels the operation as '[WRITE]' and notes 'creates or updates', but fails to clarify whether the bulk update is additive (merges) or replaces all existing environment variables. It also does not mention idempotency, partial failure handling, or whether unchanged variables are preserved. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action type '[WRITE]' and includes the critical upsert clarification. Every word is necessary and no information is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is too brief. It does not explain the bulk semantics (replacement vs. merge), error conditions, limits, or behavior for missing keys. It also fails to differentiate from sibling tools beyond the resource mention, leaving the agent with uncertainty about consequences of invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – both parameters (uuid, envs) have descriptions. The description adds no parameter-level details beyond what the schema already provides (e.g., 'Array of environment variables to set' and 'UUID of the database'). 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('update'), the resource ('environment variables for a Coolify database'), and includes the upsert behavior ('creates or updates'). The name itself indicates 'bulk', and the description distinguishes it from single env creation (coolify_create_database_env) and the generic coolify_update_envs_bulk by specifying 'for a Coolify database'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., coolify_create_database_env for a single variable, or coolify_update_envs_bulk for non-database resources). There are no prerequisites, exclusions, or context hints. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_database_storageB
[WRITE] Update a persistent or file storage for a Coolify database (PATCH body includes storage uuid + type)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (persistent only) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the database | |
| content | No | File content (file only) | |
| host_path | No | Unsupported by current Coolify; mount sources cannot be updated | |
| mount_path | No | Container mount path | |
| storage_uuid | Yes | UUID of the storage to update | |
| is_preview_suffix_enabled | No | Add -pr-N suffix for preview deployments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does add real value by tagging this as a mutation ('[WRITE]') and disclosing PATCH semantics, implying a partial rather than full replacement update. It says nothing about permissions, reversibility, or that unsupported fields (e.g. host_path) are ignored, which the schema mentions but the description does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: mutation marker and action first, then the PATCH hint. Nothing wasted, though it is terse enough that some substance (which it could have carried) is absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters (3 required) and no annotations or output schema, the description leaves the agent to infer the return behavior and side effects. The rich schema compensates for the parameter side, but for a mutation tool with zero annotation coverage the description is only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully documented in the schema. The description only echoes that the body includes storage uuid + type, adding no format, default, or constraint detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Update') plus resource ('storage for a Coolify database') and even the storage subtypes (persistent or file). It implicitly distinguishes itself from the sibling update_application_storage / update_service_storage by naming the database scope, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Update' plus required uuid/storage_uuid makes it clear you must already have an existing storage record, and the separate create/delete siblings cover the other lifecycles. There is no explicit when-to-use vs when-not-to-use text and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_envs_bulkC
[WRITE] Bulk update environment variables for a Coolify application (creates or updates)
| Name | Required | Description | Default |
|---|---|---|---|
| envs | Yes | Array of environment variables to set | |
| uuid | Yes | UUID of the application |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states '[WRITE]' and 'creates or updates', but fails to disclose idempotency, overwrite behavior, side effects like redeployment, permission needs, or rate limits. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 18-word sentence with a verb prefix. It is concise and front-loaded, though blending the create/update note in parentheses is slightly less clean. Efficient but not perfectly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a bulk update operation, the description should mention what the response contains, whether an application restart is triggered, and any limitations. It provides none of this context, leaving the agent underinformed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds the nuance 'creates or updates' beyond the schema's 'Array of environment variables to set'. However, it does not explain optional sub-fields like comment, is_literal, etc. Adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'Bulk update' and the resource 'environment variables for a Coolify application', and clarifies it also creates if not existing. It distinguishes from single env tools and database/service bulk tools in the sibling list, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives like coolify_create_env (single) or the database/service bulk variants. The agent receives no context about preferred scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_github_appC
[WRITE] Update a GitHub App integration in Coolify
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ID of the GitHub App | |
| name | No | GitHub App name | |
| custom_fields | No | Additional fields not listed above (advanced) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. The description labels the operation as '[WRITE]', implying mutation, but fails to disclose permissions required, side effects, reversibility, idempotency, or response behavior. The custom_fields parameter also hints at advanced behavior that is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very brief (one short sentence with a prefix tag) and front-loaded with the action and resource. However, it is under-specified for a mutation tool with nested parameters, so conciseness borders on insufficient completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (including a nested object), no output schema, and no annotations, the description should provide more context about return values, failure modes, or usage examples. The current text leaves an agent guessing about the outcome and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no further detail about the parameters beyond the schema's own brief descriptions (e.g., 'ID of the GitHub App', 'GitHub App name', 'Additional fields not listed above (advanced)'). It does not clarify how custom_fields interacts with the other parameters, but the schema is self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states '[WRITE] Update a GitHub App integration in Coolify', which clearly indicates the verb (update), resource (GitHub App integration), and system (Coolify). This distinguishes it from siblings like coolify_create_github_app and coolify_delete_github_app, but could be more specific about what aspects of the integration can be updated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Given siblings like coolify_update_application or coolify_update_github_app likely targets different resource types, the description does not clarify or offer any context on prerequisites, success conditions, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_instance_email_settingsA
[WRITE] Update instance-wide SMTP/Resend settings (Coolify v4.3.23). Requires a root-team admin/owner token with write:sensitive ability. Null clears a field.
| Name | Required | Description | Default |
|---|---|---|---|
| smtp_host | No | ||
| smtp_port | No | ||
| smtp_enabled | No | ||
| smtp_timeout | No | ||
| smtp_password | No | ||
| smtp_username | No | ||
| resend_api_key | No | ||
| resend_enabled | No | ||
| smtp_from_name | No | ||
| smtp_encryption | No | ||
| smtp_ehlo_domain | No | ||
| smtp_from_address | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the [WRITE] nature, the elevated auth requirement, and the important null-clears-a-field semantics, which are genuine behavioral signals. It omits whether omitted fields are left unchanged (0 required params makes this critical), whether SMTP and Resend settings interact, and whether existing config is overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the [WRITE] marker and key constraint front-loaded; no filler, and the null rule is placed where it is needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no annotations and no output schema, the description says too little about partial-update semantics, field interactions, and effect on live instance email delivery. It is directionally correct but not complete enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 12 parameters, so the description must compensate. 'Null clears a field' usefully explains the anyOf-null pattern, but nothing explains smtp_* vs resend_* selection, smtp_enabled/resend_enabled roles, encryption enum choices, or what omitting a parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (update) and a specific resource (instance-wide SMTP/Resend settings), and the [WRITE] tag plus version marker makes the scope unambiguous. It is clearly distinguishable from the sibling read counterpart coolify_get_instance_email_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'instance-wide' and the prerequisite ('root-team admin/owner token with write:sensitive ability') tells the agent whether it can call it at all. But there is no explicit guidance on when to prefer this over the read tool, nor any note on partial vs. full updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_private_keyC
[WRITE] Update an existing SSH private key
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Key name | |
| uuid | Yes | UUID of the resource | |
| description | No | Key description | |
| private_key | No | New PEM-formatted private key content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only adds '[WRITE]' which hints at mutation. It does not explain whether the update replaces the entire key, merges fields, or any side effects, leaving the agent underinformed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence with a front-loaded '[WRITE]' prefix. However, for a tool with four parameters, more context could be added without bloat; the space is not fully utilized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool modifies an SSH private key with four parameters and no output schema, the description lacks essential context such as which fields are updatable, that uuid is required, and the implications of updating the key. It feels incomplete for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters sufficiently. The description adds no additional meaning beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates an existing SSH private key, specifying the verb 'Update' and the resource. It distinguishes from siblings like create or delete by implication, but does not explicitly call out those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 creating a new key or deleting one. No prerequisites or context are provided, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_projectC
[WRITE] Update a Coolify project
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Project name | |
| uuid | Yes | UUID of the resource | |
| description | No | Project description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. The [WRITE] prefix suggests mutability, but the description does not state required permissions, side effects, whether fields are overwritten or merged, or the response format. Without annotations, this is a significant gap in transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single line, which is concise. However, it is too brief and lacks structure or front-loaded key details. Every sentence should earn its place, and this description misses the opportunity to add value beyond the name. A score of 3 reflects adequate brevity but insufficient content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (all with schema descriptions), no output schema, and no annotations, the description is incomplete. It does not explain the update behavior (e.g., partial vs full update, what happens to unspecified fields), return value, or any prerequisite steps. An 'update' operation with a required 'uuid' suggests the project must exist, but this is not mentioned. For a tool with this complexity, the description is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (name, uuid, description) has a schema description. However, the description itself adds nothing beyond the schema—it simply says 'Update a Coolify project' with no additional context on parameter semantics. For example, it doesn't clarify that 'uuid' is the identifier, that 'name' and 'description' are optional and what happens if omitted, or any value constraints. With a baseline of 3 due to high coverage, the lack of added value reduces the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says '[WRITE] Update a Coolify project', which clearly states the verb (update) and resource (Coolify project). The [WRITE] prefix hints at a mutation operation, distinguishing it from list/get tools. However, the description does not differentiate this from the sibling coolify_update_application or other update tools, and the title is null, missing an opportunity for further clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With many sibling tools like coolify_update_application, coolify_update_server, coolify_update_database, etc., the description fails to specify the context or prerequisites (e.g., needing a project UUID) for using this tool. There are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_serverC
[WRITE] Update configuration of a Coolify server
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Server IP address | |
| name | No | Server display name | |
| port | No | SSH port | |
| user | No | SSH username | |
| uuid | Yes | UUID of the resource | |
| description | No | Server description | |
| server_role | No | Deployments only, builds only, or both (Coolify v4.4+; replaces is_build_server) | |
| is_build_server | No | Use as build server (Coolify v4.4+: deprecated, use server_role=build) | |
| private_key_uuid | No | UUID of the SSH private key | |
| server_disk_usage_notification_interval_hours | No | Hours between repeated high disk usage alerts (Coolify v4.4+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, yet it only contributes a '[WRITE]' tag. It does not say whether updates are partial or full replacement, whether omitted fields are preserved, whether SSH connectivity is re-tested, whether the change is reversible, or what permissions are required. For a 10-parameter mutation on infrastructure, this is a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded line with the mutation signal leading. It wastes nothing, but the brevity comes at the cost of the behavioral detail a write tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no annotations, and no output schema, the description should explain partial-update semantics and side effects; it explains neither. An agent can call it correctly from the schema alone but cannot predict what happens to the server.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each field is documented inline, including the server_role enum and the is_build_server deprecation note, so the description has little left to add. It does not mention that only uuid is required, which is the key semantic (partial update) an agent would want stated in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (Coolify server configuration), which cleanly separates it from coolify_create_server, coolify_delete_server, and coolify_get_server. It stops short of saying what 'configuration' covers, but the schema title plus the WRITE marker make the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over siblings such as coolify_validate_server, coolify_update_private_key, or coolify_get_server, and no prerequisites. The agent must infer that this is the tool for changing an existing server's name/IP/port/role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_serviceC
[WRITE] Update configuration of a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Service name | |
| uuid | Yes | UUID of the resource | |
| description | No | Service description | |
| custom_fields | No | Additional fields not listed above (advanced) | |
| docker_compose_raw | No | Raw Docker Compose content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden of behavioral disclosure. It only says 'Update configuration' without revealing side effects (e.g., service restart, downtime), idempotency, or required permissions. This is insufficient for an agent to understand the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is so minimal that it does not fully earn its place. It front-loads '[WRITE]' as a verb hint, but the overall lack of informative content makes it less effective than a more detailed but still concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (including a nested object and a raw string field), no output schema, and no annotations, the description is severely lacking. It does not explain what happens after updating, how fields interact, or what the agent should expect in return. The description is inadequate for an agent to use this tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 any additional meaning beyond the parameter names and brief schema descriptions. For example, it doesn't explain how 'custom_fields' works or the relationship between 'docker_compose_raw' and other fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and identifies the resource ('configuration of a Coolify service'). It distinguishes from sibling tools that update other resources (applications, databases, etc.) by the resource type. However, it does not specify what aspects of configuration are updateable, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like coolify_update_application or coolify_update_database. The description simply states what it does without context on prerequisites, state requirements, 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_update_service_envs_bulkA
[WRITE] Bulk update environment variables for a Coolify service (creates or updates)
| Name | Required | Description | Default |
|---|---|---|---|
| envs | Yes | Array of environment variables to set | |
| uuid | Yes | UUID of the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The tool has no annotations, so the description must carry the full burden of behavioral disclosure. It discloses that the tool writes (creates/updates) data, which is critical for the agent's decision-making. However, it does not disclose potentially important behaviors like whether the operation replaces all envs or patches them, whether it triggers a redeploy, what happens with existing envs not in the array, or if there are idempotency or rate-limit considerations. The description provides basic transparency but lacks sufficient depth for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that includes the WRITE tag, the action, the resource, and the behavioral nuance of creating or updating. Every part of the sentence adds value: it identifies the operation type, the resource, and the method of operation (upsert). There is no wasted text, and the information is front-loaded with the most critical detail. It is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters with 100% schema coverage, no output schema, and no annotations, the description covers the basic purpose and states that it creates or updates. However, it is incomplete for a bulk-write operation—it does not explain what the return value looks like, whether the operation is synchronous or asynchronous, or how the system handles the batch (e.g., all-or-nothing vs. partial success). The description is minimally viable but leaves gaps that could cause incorrect agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning the schema itself documents both parameters (uuid and envs). The description adds value by explaining the operation in terms of the environment variables array—that it 'bulk update[s]... environment variables' and 'creates or updates' them. This provides semantic context about the purpose of the 'envs' parameter beyond the schema's bare 'Array of environment variables to set'. The description correctly sets expectations for the bulk operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Bulk update', the specific resource 'environment variables for a Coolify service', and lists an important behavioral detail 'creates or updates'. However, it does not distinguish itself from closely related sibling tools like 'coolify_update_service_envs_bulk' (itself) or 'coolify_update_database_envs_bulk', which have nearly identical functionality for different resource types. The leading '[WRITE]' tag is helpful for identifying the action type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the agent wants to set multiple environment variables at once on a service, with the note that it both creates and updates. However, it does not explicitly state when this tool should be used versus alternatives like 'coolify_create_service_env' (single env) or 'coolify_delete_service_env', nor does it mention any prerequisites (e.g., service must exist). The sibling tool list is extensive, but the description offers no comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_service_scheduled_taskC
[WRITE] Update a scheduled task for a Coolify service
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Task name | |
| uuid | Yes | UUID of the service | |
| command | No | Command to execute | |
| enabled | No | Whether the task is enabled | |
| timeout | No | Timeout in seconds | |
| container | No | Container name | |
| frequency | No | Cron frequency | |
| task_uuid | Yes | UUID of the scheduled task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet beyond the '[WRITE]' tag it discloses nothing: no partial-vs-full update semantics, no permission requirements, no effect on running executions, no irreversibility notes. For a mutation tool with 8 parameters this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding, and the crucial '[WRITE]' marker is front-loaded. It is efficient but borders on under-specified rather than optimally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no annotations and no output schema, the description says almost nothing an agent couldn't get from the tool name and schema. It omits update semantics, side effects, and sibling routing, leaving real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (uuid, task_uuid, name, command, frequency, timeout, container, enabled) is documented in the schema itself. The description adds no extra meaning, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (scheduled task for a Coolify service), and the '[WRITE]' tag flags the mutation. It distinguishes from the application-level sibling by naming 'service', though it doesn't call out coolify_update_application_scheduled_task explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus coolify_create_service_scheduled_task or coolify_delete_service_scheduled_task, and no prerequisites such as needing an existing task_uuid. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_update_service_storageB
[WRITE] Update a persistent or file storage for a Coolify service (PATCH body includes storage uuid + type)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Volume name (persistent only) | |
| type | Yes | Storage type: persistent volume or file mount | |
| uuid | Yes | UUID of the service | |
| content | No | File content (file only) | |
| host_path | No | Unsupported by current Coolify; mount sources cannot be updated | |
| mount_path | No | Container mount path | |
| storage_uuid | Yes | UUID of the storage to update | |
| is_preview_suffix_enabled | No | Add -pr-N suffix for preview deployments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. The mention of a 'PATCH body' hints at partial-update semantics, which is useful, but it does not state whether omitted fields are preserved, what permissions are needed, whether changes are reversible, or what the response returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the write indicator and scope front-loaded, no wasted words. The parenthetical largely echoes required schema fields, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter write tool with no annotations and no output schema, the description is thin on mutation semantics and expected behavior. The schema fills in parameter detail, but the behavioral gap on a write operation is only partly addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters well. The description only restates that the body includes storage uuid + type, adding marginal value over the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (persistent or file storage for a Coolify service), and the '[WRITE]' tag flags mutation intent. It distinguishes service-level storage from the application/database storage siblings implicitly by scope, though it never names the alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[WRITE]' prefix and 'Update' verb imply this is for modifying existing storage, distinguishing it from create_service_storage or list_service_storages. But there is no explicit when-to-use/when-not guidance or prerequisite (e.g., storage must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coolify_validate_serverC
[WRITE] Validate a Coolify server (SSH connectivity and Docker prerequisites). Requires POST on Coolify v4.2+.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the server to validate | |
| install | No | Install missing prerequisites and Docker (may restart Docker) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It mentions the operation is a WRITE (though the tag may be part of the overall description, it's helpful) and notes the version requirement. However, it fails to mention what happens upon failure or success, whether the operation is destructive (e.g., if it restarts Docker), what side effects exist, or what permissions are needed. The description partially covers the mutation aspect but is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. It front-loads the purpose and includes a key version constraint. However, the format is somewhat informal with brackets around 'WRITE', and it could be more structured or include more information without becoming verbose. It earns its place but leaves room for more detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters, no output schema, and no annotations, the description is incomplete. It doesn't explain what a successful or failed validation looks like, whether the 'install' parameter has side effects (e.g., restarting Docker as hinted in the schema), or how to interpret the results. For a validation operation, an agent needs to know what outputs to expect and what constitutes success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('uuid' and 'install'). The description does not add additional context for the parameters—e.g., it doesn't explain the relationship between the install flag and the check for Docker prerequisites. The baseline of 3 is appropriate since the schema covers the parameters, but the description contributes no extra meaning beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's purpose clearly: validating a Coolify server by checking SSH connectivity and Docker prerequisites. The verb 'validate' combined with the specific resources ('SSH connectivity and Docker prerequisites') makes the action well-defined. However, it doesn't explicitly differentiate it from the many sibling tools that also start with 'coolify', though the name 'validate_server' is fairly unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks guidance on when to use this tool versus alternatives. While the WRITE tag indicates it's a write operation, and the version requirement 'v4.2+' is helpful, there are no exclusions, no mention of prerequisites or dependencies, and no comparison to sibling tools like 'coolify_get_server' or 'coolify_update_server'. An agent has no context on whether validation is needed before deployment or other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
39 tool updates
v4.3.0- Added
coolify_check_server_registry - Changed
coolify_create_application1 field changed- added
Input schema / properties / custom_container_name_prefixAdded value: +{ + "description": "Readable prefix for generated container names (Coolify v4.4+; slugified, max 30 chars, unique per server)", + "maxLength": 255, + "type": "string" +}
- Changed
coolify_create_application_scheduled_task2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +1
- Changed
coolify_create_database2 fields changed- changed
Input schema / properties / type / enumPrevious value: -[ - "postgresql", - "mysql", - "mariadb", - "mongodb", - "redis", - "dragonfly", - "keydb", - "clickhouse" -]New value: +[ + "postgresql", + "mysql", + "mariadb", + "mongodb", + "redis", + "dragonfly", + "keydb", + "clickhouse", + "sqlite" +] - changed
Input schema / properties / type_config / descriptionPrevious value: -"Type-specific config. Postgres: postgres_user, postgres_password, postgres_db. MySQL/MariaDB: mysql_root_password, mysql_database, mysql_user, mysql_password. MongoDB: mongo_initdb_root_username, mongo_initdb_root_password. Redis: redis_password. ClickHouse: clickhouse_admin_user, clickhouse_admin_password"New value: +"Type-specific config. Postgres: postgres_user, postgres_password, postgres_db. MySQL/MariaDB: mysql_root_password, mysql_database, mysql_user, mysql_password. MongoDB: mongo_initdb_root_username, mongo_initdb_root_password. Redis: redis_password. ClickHouse: clickhouse_admin_user, clickhouse_admin_password. SQLite (Coolify v4.4+, no is_public/public_port): sqlite_databases (comma-separated file names)"
- Changed
coolify_create_database_backup4 fields changed- removed
Input schema / properties / databases_to_backup / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / databases_to_backup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / s3_storage_uuid / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / s3_storage_uuid / typeAdded value: +[ + "string", + "null" +]
- Added
coolify_create_integration_token - Changed
coolify_create_server2 fields changed- changed
Input schema / properties / is_build_server / descriptionPrevious value: -"Use as build server"New value: +"Use as build server (Coolify v4.4+: deprecated, use server_role=build)" - added
Input schema / properties / server_roleAdded value: +{ + "description": "Deployments only, builds only, or both (Coolify v4.4+; replaces is_build_server)", + "enum": [ + "deployment", + "build", + "both" + ], + "type": "string" +}
- Changed
coolify_create_service_scheduled_task2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +1
- Changed
coolify_delete_application_preview1 field changed- changed
Input schema / properties / pull_request_id / maximumPrevious value: -9007199254740991New value: +2147483647
- Changed
coolify_delete_server1 field changed- added
Input schema / properties / delete_from_providerAdded value: +{ + "description": "Also delete the machine at Hetzner, Vultr, or DigitalOcean (Coolify v4.4+; needs a cloud token of the team)", + "type": "boolean" +}
- Changed
coolify_delete_service1 field changed- added
Input schema / properties / delete_from_coolify_onlyAdded value: +{ + "description": "Remove the service from Coolify and leave its Docker resources on the server (Coolify v4.4+)", + "type": "boolean" +}
- Added
coolify_deploy_application_preview - Added
coolify_get_application_preview - Changed
coolify_get_application_preview_logs3 fields changed- changed
Input schema / properties / pull_request_id / descriptionPrevious value: -"ID of the resource"New value: +"Pull request number of the preview" - changed
Input schema / properties / pull_request_id / maximumPrevious value: -9007199254740991New value: +2147483647 - added
Input schema / properties / service_nameAdded value: +{ + "description": "Compose service whose container to read (Coolify v4.4+); defaults to the first container", + "minLength": 1, + "type": "string" +}
- Added
coolify_get_database_import - Changed
coolify_get_logs1 field changed- added
Input schema / properties / service_nameAdded value: +{ + "description": "Compose service whose container to read (Coolify v4.4+); defaults to the first container", + "minLength": 1, + "type": "string" +}
- Added
coolify_get_service_database_import - Added
coolify_import_database - Added
coolify_import_service_database - Added
coolify_list_application_previews - Added
coolify_list_audit_events - Added
coolify_list_server_registries - Added
coolify_login_server_registry - Added
coolify_logout_server_registry - Changed
coolify_set_application_storage_backup3 fields changed- added
Input schema / properties / missing_backup_notification_daysAdded value: +{ + "description": "Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1)", + "maximum": 365, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / s3_storage_uuid / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / s3_storage_uuid / typeAdded value: +[ + "string", + "null" +]
- Changed
coolify_set_database_storage_backup3 fields changed- added
Input schema / properties / missing_backup_notification_daysAdded value: +{ + "description": "Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1)", + "maximum": 365, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / s3_storage_uuid / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / s3_storage_uuid / typeAdded value: +[ + "string", + "null" +]
- Changed
coolify_set_service_storage_backup3 fields changed- added
Input schema / properties / missing_backup_notification_daysAdded value: +{ + "description": "Alert after this many days without an execution; 0 disables alerts (Coolify v4.4.1)", + "maximum": 365, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / s3_storage_uuid / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / s3_storage_uuid / typeAdded value: +[ + "string", + "null" +]
- Changed
coolify_update_application1 field changed- added
Input schema / properties / custom_container_name_prefixAdded value: +{ + "description": "Readable prefix for generated container names (Coolify v4.4+; slugified, max 30 chars, unique per server)", + "maxLength": 255, + "type": "string" +}
- Changed
coolify_update_application_preview5 fields changed- removed
Input schema / properties / docker_compose_domains / items / properties / domain / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / docker_compose_domains / items / properties / domain / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / domains / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / domains / typeAdded value: +[ + "string", + "null" +] - changed
Input schema / properties / pull_request_id / maximumPrevious value: -9007199254740991New value: +2147483647
- Changed
coolify_update_application_scheduled_task2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +1
- Added
coolify_update_application_secret_manager - Changed
coolify_update_application_storage4 fields changed- removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / host_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / host_path / typeAdded value: +[ + "string", + "null" +]
- Added
coolify_update_current_team - Changed
coolify_update_database_backup4 fields changed- removed
Input schema / properties / databases_to_backup / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / databases_to_backup / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / s3_storage_uuid / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / s3_storage_uuid / typeAdded value: +[ + "string", + "null" +]
- Changed
coolify_update_database_storage4 fields changed- removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / host_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / host_path / typeAdded value: +[ + "string", + "null" +]
- Changed
coolify_update_instance_email_settings1 field changed- changed
Input schema / properties / smtp_from_address / anyOfPrevious value: -[ - { - "format": "email", - "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "email", + "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", + "type": "string" + }, + { + "type": "null" + } +]
- Changed
coolify_update_server3 fields changed- changed
Input schema / properties / is_build_server / descriptionPrevious value: -"Use as build server"New value: +"Use as build server (Coolify v4.4+: deprecated, use server_role=build)" - added
Input schema / properties / server_disk_usage_notification_interval_hoursAdded value: +{ + "description": "Hours between repeated high disk usage alerts (Coolify v4.4+)", + "maximum": 720, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / server_roleAdded value: +{ + "description": "Deployments only, builds only, or both (Coolify v4.4+; replaces is_build_server)", + "enum": [ + "deployment", + "build", + "both" + ], + "type": "string" +}
- Changed
coolify_update_service_scheduled_task2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +1
- Changed
coolify_update_service_storage4 fields changed- removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / host_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / host_path / typeAdded value: +[ + "string", + "null" +]
19 tool updates
v4.1.0- Changed
coolify_create_application_storage3 fields changed- changed
Input schema / properties / fs_path / descriptionPrevious value: -"Host directory path (required when is_directory is true)"New value: +"Host path (required with is_directory or is_host_file)" - changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only, optional)"New value: +"Unsupported by current Coolify; use type=file with fs_path instead" - added
Input schema / properties / is_host_fileAdded value: +{ + "description": "Mount an existing host file (type=file, requires fs_path)", + "type": "boolean" +}
- Changed
coolify_create_database_backup16 fields changed- added
Input schema / properties / backup_nowAdded value: +{ + "description": "Run the backup immediately as well as scheduling it", + "type": "boolean" +} - added
Input schema / properties / database_backup_retention_amount_locallyAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_amount_s3Added value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_days_locallyAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_days_s3Added value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_max_storage_locallyAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / database_backup_retention_max_storage_s3Added value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / databases_to_backupAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Input schema / properties / dump_allAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / enabledAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / frequencyAdded value: +{ + "description": "Cron expression, e.g. 0 2 * * *", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / missing_backup_notification_daysAdded value: +{ + "description": "Alert after this many days without an execution; 0 disables alerts (Coolify v4.3.23)", + "maximum": 365, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / s3_storage_uuidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "S3 storage UUID (required with save_s3)" +} - added
Input schema / properties / save_s3Added value: +{ + "type": "boolean" +} - added
Input schema / properties / timeoutAdded value: +{ + "maximum": 36000, + "minimum": 60, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "uuid" -]New value: +[ + "uuid", + "frequency" +]
- Changed
coolify_create_database_storage3 fields changed- changed
Input schema / properties / fs_path / descriptionPrevious value: -"Host directory path (required when is_directory is true)"New value: +"Host path (required with is_directory or is_host_file)" - changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only, optional)"New value: +"Unsupported by current Coolify; use type=file with fs_path instead" - added
Input schema / properties / is_host_fileAdded value: +{ + "description": "Mount an existing host file (type=file, requires fs_path)", + "type": "boolean" +}
- Changed
coolify_create_service_storage3 fields changed- changed
Input schema / properties / fs_path / descriptionPrevious value: -"Host directory path (required when is_directory is true)"New value: +"Host path (required with is_directory or is_host_file)" - changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only, optional)"New value: +"Unsupported by current Coolify; use type=file with fs_path instead" - added
Input schema / properties / is_host_fileAdded value: +{ + "description": "Mount an existing host file (type=file, requires fs_path)", + "type": "boolean" +}
- Added
coolify_delete_application_preview - Added
coolify_get_application_preview_logs - Changed
coolify_get_database_logs4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of log entries to fetch from the server"New value: +"Maximum number of filtered log entries to return" - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / linesAdded value: +{ + "anyOf": [ + { + "maximum": 10000, + "minimum": -1, + "type": "integer" + }, + { + "const": "all", + "type": "string" + } + ], + "description": "Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit." +} - added
Input schema / properties / show_timestampsAdded value: +{ + "default": true, + "description": "Include server timestamps for accurate time filtering", + "type": "boolean" +}
- Added
coolify_get_instance_email_settings - Changed
coolify_get_logs4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of log entries to fetch from the server"New value: +"Maximum number of filtered log entries to return" - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / linesAdded value: +{ + "anyOf": [ + { + "maximum": 10000, + "minimum": -1, + "type": "integer" + }, + { + "const": "all", + "type": "string" + } + ], + "description": "Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit." +} - added
Input schema / properties / show_timestampsAdded value: +{ + "default": true, + "description": "Include server timestamps for accurate time filtering", + "type": "boolean" +}
- Changed
coolify_get_service_logs4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of log entries to fetch from the server"New value: +"Maximum number of filtered log entries to return" - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / linesAdded value: +{ + "anyOf": [ + { + "maximum": 10000, + "minimum": -1, + "type": "integer" + }, + { + "const": "all", + "type": "string" + } + ], + "description": "Server log lines to fetch; all (or -1) fetches all. Defaults to limit. Filtering still caps the returned entries at limit." +} - added
Input schema / properties / show_timestampsAdded value: +{ + "default": true, + "description": "Include server timestamps for accurate time filtering", + "type": "boolean" +}
- Changed
coolify_set_application_storage_backup2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +60
- Changed
coolify_set_database_storage_backup2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +60
- Changed
coolify_set_service_storage_backup2 fields changed- changed
Input schema / properties / timeout / maximumPrevious value: -9007199254740991New value: +36000 - changed
Input schema / properties / timeout / minimumPrevious value: --9007199254740991New value: +60
- Added
coolify_update_application_preview - Changed
coolify_update_application_storage1 field changed- changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only)"New value: +"Unsupported by current Coolify; mount sources cannot be updated"
- Changed
coolify_update_database_backup17 fields changed- added
Input schema / properties / database_backup_retention_amount_locallyAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_amount_s3Added value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_days_locallyAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_days_s3Added value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / database_backup_retention_max_storage_locallyAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / database_backup_retention_max_storage_s3Added value: +{ + "minimum": 0, + "type": "number" +} - removed
Input schema / properties / database_name_prefixRemoved value: -{ - "description": "Prefix for backup database name", - "type": "string" -} - added
Input schema / properties / databases_to_backupAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Input schema / properties / dump_allAdded value: +{ + "type": "boolean" +} - removed
Input schema / properties / enabled / descriptionRemoved value: -"Enable or disable the backup schedule" - changed
Input schema / properties / frequency / descriptionPrevious value: -"Cron frequency for backups"New value: +"Cron expression for the backup schedule" - added
Input schema / properties / frequency / minLengthAdded value: +1 - added
Input schema / properties / missing_backup_notification_daysAdded value: +{ + "description": "Alert after this many days without an execution; 0 disables alerts (Coolify v4.3.23)", + "maximum": 365, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / s3_storage_idRemoved value: -{ - "description": "S3 storage ID for remote backups", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" -} - added
Input schema / properties / s3_storage_uuidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "S3 storage UUID (required with save_s3)" +} - added
Input schema / properties / save_s3Added value: +{ + "type": "boolean" +} - added
Input schema / properties / timeoutAdded value: +{ + "maximum": 36000, + "minimum": 60, + "type": "integer" +}
- Changed
coolify_update_database_storage1 field changed- changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only)"New value: +"Unsupported by current Coolify; mount sources cannot be updated"
- Added
coolify_update_instance_email_settings - Changed
coolify_update_service_storage1 field changed- changed
Input schema / properties / host_path / descriptionPrevious value: -"Host path (persistent only)"New value: +"Unsupported by current Coolify; mount sources cannot be updated"
116 tool updates
v4.0.0- First observed
coolify_cancel_deployment - First observed
coolify_create_application - First observed
coolify_create_application_scheduled_task - First observed
coolify_create_application_storage - First observed
coolify_create_database - First observed
coolify_create_database_backup - First observed
coolify_create_database_env - First observed
coolify_create_database_storage - First observed
coolify_create_env - First observed
coolify_create_environment - First observed
coolify_create_github_app - First observed
coolify_create_private_key - First observed
coolify_create_project - First observed
coolify_create_server - First observed
coolify_create_service - First observed
coolify_create_service_env - First observed
coolify_create_service_scheduled_task - First observed
coolify_create_service_storage - First observed
coolify_delete_application - First observed
coolify_delete_application_scheduled_task - First observed
coolify_delete_application_storage - First observed
coolify_delete_application_storage_backup - First observed
coolify_delete_backup_execution - First observed
coolify_delete_database - First observed
coolify_delete_database_backup - First observed
coolify_delete_database_env - First observed
coolify_delete_database_storage - First observed
coolify_delete_database_storage_backup - First observed
coolify_delete_env - First observed
coolify_delete_environment - First observed
coolify_delete_github_app - First observed
coolify_delete_private_key - First observed
coolify_delete_project - First observed
coolify_delete_server - First observed
coolify_delete_service - First observed
coolify_delete_service_env - First observed
coolify_delete_service_scheduled_task - First observed
coolify_delete_service_storage - First observed
coolify_delete_service_storage_backup - First observed
coolify_get_application - First observed
coolify_get_current_team - First observed
coolify_get_current_team_members - First observed
coolify_get_database - First observed
coolify_get_database_logs - First observed
coolify_get_deployment - First observed
coolify_get_environment - First observed
coolify_get_logs - First observed
coolify_get_private_key - First observed
coolify_get_project - First observed
coolify_get_server - First observed
coolify_get_server_domains - First observed
coolify_get_server_resources - First observed
coolify_get_service - First observed
coolify_get_service_logs - First observed
coolify_get_team_members - First observed
coolify_get_version - First observed
coolify_healthcheck - First observed
coolify_list_application_deployments - First observed
coolify_list_application_scheduled_task_executions - First observed
coolify_list_application_scheduled_tasks - First observed
coolify_list_application_storages - First observed
coolify_list_applications - First observed
coolify_list_backup_executions - First observed
coolify_list_database_backups - First observed
coolify_list_database_envs - First observed
coolify_list_database_storages - First observed
coolify_list_databases - First observed
coolify_list_deployments - First observed
coolify_list_environments - First observed
coolify_list_envs - First observed
coolify_list_github_app_branches - First observed
coolify_list_github_app_repositories - First observed
coolify_list_github_apps - First observed
coolify_list_private_keys - First observed
coolify_list_projects - First observed
coolify_list_resources - First observed
coolify_list_servers - First observed
coolify_list_service_envs - First observed
coolify_list_service_scheduled_task_executions - First observed
coolify_list_service_scheduled_tasks - First observed
coolify_list_service_storages - First observed
coolify_list_services - First observed
coolify_list_teams - First observed
coolify_restart_application - First observed
coolify_restart_database - First observed
coolify_restart_service - First observed
coolify_run_application_storage_backup - First observed
coolify_run_database_storage_backup - First observed
coolify_run_service_storage_backup - First observed
coolify_set_application_storage_backup - First observed
coolify_set_database_storage_backup - First observed
coolify_set_service_storage_backup - First observed
coolify_start_application - First observed
coolify_start_database - First observed
coolify_start_service - First observed
coolify_stop_application - First observed
coolify_stop_database - First observed
coolify_stop_service - First observed
coolify_trigger_deploy - First observed
coolify_update_application - First observed
coolify_update_application_scheduled_task - First observed
coolify_update_application_storage - First observed
coolify_update_database - First observed
coolify_update_database_backup - First observed
coolify_update_database_envs_bulk - First observed
coolify_update_database_storage - First observed
coolify_update_envs_bulk - First observed
coolify_update_github_app - First observed
coolify_update_private_key - First observed
coolify_update_project - First observed
coolify_update_server - First observed
coolify_update_service - First observed
coolify_update_service_envs_bulk - First observed
coolify_update_service_scheduled_task - First observed
coolify_update_service_storage - First observed
coolify_validate_server
TDQS
Scored across 136 tools
The resource-prefixed tool families (application/service/database/server) are mostly distinct, but several tools overlap or are inconsistently qualified. For example, coolify_get_logs and coolify_list_envs apply specifically to applications while database/service variants are explicitly named, and backup/storage/import tools across resources can be confused. An agent can usually infer intent, but the volume of parallel triplets creates real misselection risk.
The overwhelming majority of tools follow a predictable coolify_verb_noun pattern in snake_case, with clear resource qualifiers like coolify_list_application_scheduled_tasks. Minor deviations exist, such as coolify_healthcheck, coolify_get_logs, and coolify_trigger_deploy, which are less structurally consistent than the rest.
136 tools is far too many for practical agent selection, even for a broad platform like Coolify. Many operations are repeated across applications, services, and databases in parallel triplets, and consolidation into resource-scoped or parameterized tools would substantially reduce the surface.
The surface covers lifecycle operations across applications, databases, services, servers, projects, environments, storages, backups, deployments, previews, scheduled tasks, GitHub Apps, registries, teams, private keys, and instance settings. CRUD, start/stop/restart, logs, backup/import, and deployment control are all represented, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Devopness MCP server for DevOps happiness! Empower AI Agents to deploy apps and infra, to any cloud.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to manage infrastructure, applications, databases, and services through the Coolify PaaS platform.5 npm4MIT
- AlicenseBqualityDmaintenanceMCP server that integrates with Coolify to let AI assistants manage Coolify instances via a clean toolkit wrapping the official REST API.35130 npm7MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Coolify infrastructure management, providing 45 tools for servers, applications, databases, deployments, and diagnostics via natural language.32 npmMIT
- FlicenseBqualityDmaintenanceA unified MCP server for managing hosting fleets, enabling natural language control over SSH, WordPress, Cloudflare, MySQL, GitHub, Docker, Coolify, and more.381-