Coolify MCP Server
Click on "Install 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 MCP Serverlist my 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 Server
A Model Context Protocol (MCP) server that integrates with Coolify to let AI assistants manage your Coolify instance via a clean toolkit that wraps the official REST API.
Table of Contents
Related MCP server: coolify-mcp
Features
Core Capabilities
Coverage of key Coolify API endpoints (applications, services, deployments, teams, private keys, domains, health/version)
Team Management – List teams, get team details, and view members
Server & Domain Insights – Query domains configured per server
Application Lifecycle – Start/stop/restart and create applications
Service Management – List/create/start/stop/restart services
Deployments – List running deployments; fetch deployment by UUID
Private Keys – List and create SSH private keys for server auth
Env Vars – CRUD for application/service environment variables
Note: Some aggregated operations (e.g., "resources by server") are implemented by client-side filtering over the supported endpoints rather than a dedicated API path.
Prerequisites
Node.js v18 or newer
npm or yarn
A running Coolify instance (self‑hosted or cloud)
A Coolify API token with appropriate permissions
Installation
1) Clone & install
git clone https://github.com/forsonny/Coolify-MCP-Server-for-Claude-Code.git
cd Coolify-MCP-Server-for-Claude-Code
npm install2) Build
npm run build(Compiles TypeScript into dist/)
Configuration
Environment Setup
Create a .env file at the project root:
# Required
COOLIFY_BASE_URL=https://your-coolify-instance.com
COOLIFY_API_TOKEN=your-api-token-here
# Optional
COOLIFY_TIMEOUT=30000Notes
Use a full base URL (no trailing slash). Example:
https://coolify.example.comDo not use inline comments in
.envvalues.Never commit
.envto version control.
Claude Code Setup
You can connect the server to Claude Code using the automated setup script or manually.
Option A — Automated Setup (Recommended)
The easiest way is to use the setup script:
# Run the setup script
npm run setupThis will:
Validate your
.envfile configurationBuild the TypeScript project if needed
Generate the correct
claude mcp add-jsoncommand with environment variablesProvide troubleshooting tips
Option B — Manual Setup
If you prefer to set it up manually, you have two approaches:
Method 1: With explicit environment variables (most reliable)
claude mcp add-json coolify '{
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/Coolify-MCP-Server-for-Claude-Code/dist/index.js"],
"env": {
"COOLIFY_BASE_URL": "https://your-coolify-instance.com",
"COOLIFY_API_TOKEN": "your-api-token-here",
"COOLIFY_TIMEOUT": "30000"
}
}' -s localMethod 2: Simple command (relies on .env file)
claude mcp add coolify "node /absolute/path/to/Coolify-MCP-Server-for-Claude-Code/dist/index.js" -s localVerify the connection
claude mcp listOption C — Import from Claude Desktop If you already have the server configured in Claude Desktop:
claude mcp add-from-claude-desktop
claude mcp listImportant: Method 1 (explicit environment variables) is more reliable because it ensures environment variables are available to the MCP server process, regardless of the working directory from which Claude Code launches the server.
Tip: Some setups store Claude Code MCP config in
~/.claude.json. The Desktop app usesclaude_desktop_config.jsonunder your OS application data directory.
Cursor Setup
Cursor supports MCP. The easiest route is through Settings → Extensions → MCP Servers → Add Server, then point to your built script (node …/dist/index.js) and add the three environment variables. Restart Cursor after saving.
For advanced/enterprise setups, see Cursor's MCP docs on programmatic registration.
API Token Generation
Open your Coolify dashboard.
Navigate to Keys & Tokens → API tokens.
Create a new token (name it e.g. "MCP Server"), select the permissions you need, and optionally set an expiration.
Copy the token once when shown and paste it into your
.env.
Available Tools
System
Tool | What it does |
| Get Coolify version |
| Healthcheck probe |
Teams
Tool | What it does |
| List all teams |
| Get team by ID |
| Get current team |
| List members of current team |
Servers & Domains
Tool | What it does |
| Get domains for a server UUID |
Applications
Tool | What it does |
| List applications |
| Create application |
| Start application |
| Stop application |
| Restart application |
Services
Tool | What it does |
| List services |
| Create service |
| Start service |
| Stop service |
| Restart service |
Deployments & Keys
Tool | What it does |
| List running deployments |
| Get deployment by UUID |
| List SSH private keys |
| Create a new SSH private key |
Environment Variables
Application and service env vars support: list, create, update (single/bulk), and delete.
Usage Examples
Natural language you can try once connected:
Basics
"List my applications"
"Who's in the current team?"
"What version is my Coolify instance?"Servers & Apps
"Show domains for server 123e4567-e89b-12d3-a456-426614174000"
"Create a new app from https://github.com/user/repo"
"Restart the backend app"Services & Env Vars
"List running services"
"Create a PostgreSQL service on the main server"
"Add DATABASE_URL to the frontend app"Development
Dev mode (watch):
npm run devBuild:
npm run buildSetup:
npm run setupClean:
npm run cleanProject Structure
Coolify-MCP-Server-for-Claude-Code/
├── src/
│ ├── index.ts # MCP server entrypoint
│ ├── coolify-client.ts # Coolify API client
│ └── types.ts # Type definitions
├── dist/ # Compiled JS (generated)
├── .env # Environment variables (create this)
├── setup-mcp.js # Setup script for easy configuration
├── package.json
├── tsconfig.json
└── README.md # This fileAPI Reference
Selected endpoint mapping used by this server
MCP Tool | Method | Path |
| GET |
|
| GET |
|
| GET |
|
| GET |
|
| GET |
|
| GET |
|
| GET |
|
| POST |
|
| POST |
|
| POST |
|
| POST |
|
| GET |
|
| POST |
|
| GET |
|
| GET |
|
| GET |
|
| POST |
|
| GET |
|
Endpoint paths follow the official Coolify API and do not use a
/api/v1prefix.
Environment variable flags
Flag | Meaning | Apps | Services |
| Present at build time | ✅ | — |
| Applies to preview deployments only | ✅ | ✅ |
| Disable variable substitution | ✅ | ✅ |
Services are prebuilt images (no build phase), so
is_build_timehas no effect for services.
Troubleshooting
Server won't start
Confirm Node ≥ 18:
node --versionReinstall deps:
rm -rf node_modules && npm installRebuild:
npm run clean && npm run buildConfirm absolute paths in MCP config
Auth errors (401 Unauthorized)
Verify token is valid and scoped to the correct team
Recreate token if expired; paste into
.env
Connection issues (ECONNREFUSED/timeouts)
Check
COOLIFY_BASE_URL(no trailing slash)Ensure the Coolify instance is reachable and healthy
Increase
COOLIFY_TIMEOUTfor slow links
Tools not appearing
Restart your client (Claude Code / Cursor)
Verify with
claude mcp listCheck server logs in your terminal
Ensure environment variables are set for the MCP process
Environment variable issues
If you see COOLIFY_BASE_URL and COOLIFY_API_TOKEN environment variables are required errors:
Use the automated setup script:
npm run setupOr use explicit environment variables: Remove the existing MCP server and re-add with explicit env vars:
claude mcp remove coolify -s local claude mcp add-json coolify '{ "type": "stdio", "command": "node", "args": ["/absolute/path/to/your/dist/index.js"], "env": { "COOLIFY_BASE_URL": "https://your-coolify-instance.com", "COOLIFY_API_TOKEN": "your-api-token-here" } }' -s localVerify your .env file exists and has proper values:
cat .env
Why this happens: When MCP servers are launched by Claude Code, they may run from a different working directory, causing the
.envfile to not be found. Explicit environment variables in the MCP configuration solve this issue.
Debug mode
DEBUG=coolify-mcp npm run devSecurity
Keep API tokens out of VCS; rotate regularly
Use HTTPS; consider IP allowlists / VPN for private instances
Add
.envto.gitignore; restrict file permissionsUse least-privilege tokens per environment; audit and revoke regularly
Contributing
We welcome contributions!
Fork the repo and clone your fork
git clone https://github.com/<your-username>/Coolify-MCP-Server-for-Claude-Code.gitCreate a branch
git checkout -b feat/your-featureCode & test – follow existing style; add tests where useful
Commit
git commit -m "feat: add <thing>"Push & open PR
git push origin feat/your-feature
Guidelines
TypeScript best practices; backward compat where feasible
Clear commit messages and error handling
Update README when adding features
License
MIT — see LICENSE.
Support
Issues – open on GitHub
Docs
Version: 1.0.0 Maintainer: @forsonny
Available Tools
35 toolsbulk_update_application_envsA
Update multiple environment variables for an application in a single operation. Efficient for updating many variables at once.
| Name | Required | Description | Default |
|---|---|---|---|
| envs | Yes | Array of environment variables to update or create. | |
| uuid | Yes | UUID of the application to update environment variables for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavioral traits. It only says 'Update' and 'Efficient', omitting critical details like whether the operation is atomic, overwrites or merges, authentication needs, rate limits, or behavior on partial failure.
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. The first states the purpose, the second adds a benefit. No unnecessary 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 bulk write operation with no output schema and no annotations, the description is too minimal. It does not explain that the 'envs' array can also create new variables (uuid optional), atomicity, error handling, or return 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 description coverage is 100%, so the input schema already documents all parameters. The description adds no additional meaning beyond the schema's field descriptions.
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 ('environment variables for an application'), clearly distinguishing it from sibling tools like 'update_application_env' (single update) and 'bulk_update_service_envs' (service variant).
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 it is 'Efficient for updating many variables at once', implying it should be used over the single-update alternative when multiple variables need changes. However, it does not explicitly state when not to use it or mention the single-update sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_update_service_envsA
Update multiple environment variables for a service in a single operation. Efficient for updating many variables at once. Note: Setting is_build_time=true has no functional effect on services (they use pre-built images).
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Array of environment variables to update or create. | |
| uuid | Yes | UUID of the service to update environment variables for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It includes a behavioral note about is_build_time having no effect on services, which adds value. However, it lacks details on whether the update is additive or replaces all, auth requirements, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a note. Front-loaded with purpose. Every element earns its place; 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 output schema and simple parameters, the description covers main purpose and a key behavioral note. However, it does not specify whether the operation is additive or replaces all env vars, or what the response contains, leaving some ambiguity for a bulk update 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 parameters well. The description adds no extra parameter meaning beyond what's in the schema (the note about is_build_time is duplicated). 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 updates multiple environment variables for a service in a single operation. It distinguishes from singular update tools (update_service_env) and application variants (bulk_update_application_envs). The specific verb 'Update' and resource 'environment variables for a service' are clearly identified.
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 efficiency for updating many variables at once, implying use cases with multiple env vars. However, it does not explicitly state when not to use or directly contrast with alternatives like update_service_env, though the sibling context provides implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_applicationC
Create a new application in Coolify. Applications are deployable units that can be sourced from Git repositories.
| Name | Required | Description | Default |
|---|---|---|---|
| project_uuid | Yes | UUID of the project this application belongs to. Projects help organize related applications. | |
| ports_exposes | No | Comma-separated list of ports to expose (e.g., "3000,8080"). These ports will be accessible from outside the container. | |
| git_repository | No | URL of the Git repository containing the application code | |
| destination_uuid | Yes | UUID of the destination server where this application will be deployed. Get this from list_servers. | |
| environment_name | Yes | Name of the deployment environment (e.g., production, staging, development) | |
| environment_uuid | No | Optional UUID of an existing environment to use |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only says 'Create a new application'. It does not disclose side effects (e.g., does it trigger deployment?), idempotency, required permissions, or error cases. This is insufficient for a creation 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?
Two sentences, no wasted words. The first sentence states the action, the second adds context. Could be improved with a more structured format (e.g., listing inputs/outputs).
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 lacks information about return values, post-creation steps, or integration with other tools. Given the complexity (6 params, no output schema) and many sibling tools, the description is incomplete for an AI agent to chain tasks effectively.
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 descriptions for all parameters. The description adds no additional meaning beyond the schema, so baseline 3 applies. For example, it doesn't explain how 'destination_uuid' relates to 'project_uuid' or provide examples.
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 creates an application and defines applications as deployable units from Git repos. This distinguishes it from sibling tools like 'create_server' or 'create_service', but could be more explicit about the difference between applications and 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?
No guidance is provided about when to use this tool versus alternatives. For example, it does not explain when to use 'create_application' vs 'create_service' or if any prerequisites (like existing project/environment) are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_application_envC
Create a new environment variable for an application. This adds a new key-value pair to the application's environment.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Environment variable name (e.g., "DATABASE_URL", "API_KEY"). | |
| uuid | Yes | UUID of the application to add the environment variable to. | |
| value | Yes | Environment variable value. | |
| is_literal | No | Whether the value should be treated as a literal string without variable substitution. | |
| is_preview | No | Whether this variable applies to preview deployments. | |
| is_build_time | No | Whether this variable should be available during build time. |
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 only states that a new key-value pair is added, but does not mention idempotency, overwrite behavior, error conditions, or required permissions. This is insufficient for safe invocation.
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, consisting of two short sentences with no fluff. It is front-loaded with the core action. However, 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?
For a tool with 6 parameters (3 required) and no output schema, the description is minimal. It does not cover return values, duplicate key handling, or scope (e.g., overwrites vs. ignores). The tool's complexity demands more context for complete 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?
The schema has 100% coverage for parameter descriptions, so the baseline is 3. The description does not add meaning beyond what the schema provides; it simply mentions 'key-value pair' without elaborating on optional boolean parameters like 'is_literal', 'is_preview', or 'is_build_time'.
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 the resource 'environment variable for an application'. It is specific, though it does not explicitly differentiate from the sibling tool 'create_service_env' for services, but the naming and context make the distinction clear enough for an agent.
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 'create_service_env', nor does it mention prerequisites or scenarios where this tool should be avoided. It 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.
create_private_keyB
Create a new SSH private key in Coolify for server authentication or Git repository access.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique, human-readable name for the private key | |
| description | No | Optional description of the key's purpose or usage | |
| private_key | Yes | The SSH private key content in PEM format. Must be a valid SSH private key. |
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 states the creation action without mentioning side effects (e.g., overwriting existing keys), authentication requirements, or any destructive potential. This is insufficient for a tool handling sensitive SSH keys.
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 core action and context. Every word is meaningful without unnecessary verbosity.
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 sensitive SSH keys, the description lacks important context such as idempotency (what happens if key name exists), permission requirements, storage behavior, or any validation steps. No output schema, so return value has no documentation. This leaves gaps for an agent to misuse.
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 descriptions for all three parameters. The description adds little beyond the schema, providing only context about usage (server or Git). Baseline 3 is appropriate as the schema already clarifies 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 specifies the verb 'Create', the resource 'SSH private key', and the context 'in Coolify for server authentication or Git repository access'. It distinguishes this tool from sibling tools which create other 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?
The description implies the tool should be used to generate SSH keys for server or Git access, but does not explicitly state when to use it versus alternatives, or conditions like required permissions. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_serverB
Create a new server in Coolify. Requires SSH access details and a private key for authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address of the server. Can be IPv4 or IPv6. | |
| name | Yes | A unique, human-readable name for the server | |
| port | Yes | SSH port number | |
| user | Yes | SSH username for authentication | |
| proxy_type | No | Type of proxy to use for this server | nginx |
| description | No | Optional description of the server's purpose or configuration | |
| is_build_server | No | Whether this server should be used for building applications | |
| instant_validate | No | Whether to validate the server configuration immediately after creation | |
| private_key_uuid | Yes | UUID of the private key to use for SSH authentication. Obtain this from list_private_keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It mentions creation and authentication requirements but lacks details on validation behavior, response format, potential side effects, or error conditions. Minimal disclosure beyond the basic action.
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 with no wasted words. However, it could be slightly expanded to include more helpful context 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 9 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, confirmation of creation, or error handling. The agent lacks complete context for a create 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 baseline 3. The description adds no extra semantic value beyond what the schema already provides for parameters like 'private_key_uuid' or 'proxy_type'. No additional context to aid agent 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 clearly states the action 'Create a new server in Coolify', identifies the resource (server), and mentions required prerequisites (SSH details, private key). It distinguishes from sibling tools like 'validate_server' or 'list_servers'.
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 adding a server, but provides no explicit when-to-use, when-not-to-use, or alternative tool guidance. With 34 sibling tools, explicit guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_serviceA
Create a new service on a specified server. Services are containerized applications that run on your Coolify servers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique, human-readable name for the service | |
| description | No | Optional description of the service's purpose or configuration | |
| server_uuid | Yes | UUID of the server where this service will run. Obtain this from list_servers. | |
| project_uuid | Yes | UUID of the project this service belongs to. Projects help organize related services. | |
| environment_name | No | Name of the environment (e.g., production, staging, development) | |
| environment_uuid | No | Optional UUID of an existing environment to use |
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 describes creation without mentioning side effects, prerequisites (e.g., server must exist), idempotency, or any constraints. This leaves agents uncertain about 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?
Two sentences, front-loaded with the action, no unnecessary words. Every sentence adds value: the first states the action, the second defines the resource.
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 the purpose but lacks information about return values (no output schema), error conditions, or how the service is created. For a creation tool with 6 parameters, it is slightly under-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%, and the schema descriptions are already quite explanatory (e.g., how to get server_uuid). The description adds minimal extra meaning beyond the schema, just a high-level purpose. 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 (create) and the resource (a service), and defines what a service is (containerized application). It distinguishes from siblings like create_application by specifying 'on a specified server'.
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 guidance on when to use this tool versus alternatives like create_application. It implies the context (creating a service on a server) but no exclusions or sibling differentiation are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_service_envA
Create a new environment variable for a service. This adds a new key-value pair to the service's environment. Note: Setting is_build_time=true has no functional effect on services (they use pre-built images).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Environment variable name (e.g., "DATABASE_URL", "REDIS_HOST"). | |
| uuid | Yes | UUID of the service to add the environment variable to. | |
| value | Yes | Environment variable value. | |
| is_literal | No | Whether the value should be treated as a literal string without variable substitution. | |
| is_preview | No | Whether this variable applies to preview deployments. | |
| is_build_time | No | Whether this variable should be available during build time. Note: Has no functional effect on services (they use pre-built images). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. It discloses the is_build_time limitation. Lacks details on whether it overwrites existing keys, idempotency, or auth requirements. Reasonable for a simple create, but not fully 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?
Two sentences with no waste. First sentence gives purpose, second provides critical caveat. 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?
No output schema, so return value is not described. Does not mention that the service must exist or potential error scenarios. Slightly incomplete for a creation tool, but adequate given 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 schema already documents parameters. Description adds valuable context for is_build_time: 'Has no functional effect on services'. This supplements the schema description. Other parameters are adequately described by 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?
Description clearly states the verb ('Create'), resource ('environment variable'), and context ('for a service'). It distinguishes from siblings like create_application_env by specifying 'service's environment'. The note about is_build_time adds specificity.
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?
Describes when to use: to add a key-value pair to a service's environment. Provides important caveat about is_build_time having no effect. However, does not explicitly contrast with bulk_update_service_envs or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_application_envA
Delete an environment variable from an application. This permanently removes the environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| env_uuid | Yes | UUID of the environment variable to delete. Get this from list_application_envs. | |
| application_uuid | Yes | UUID of the application containing the environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions permanence, which is good for a destructive action, but lacks details on side effects, permissions, or error conditions. No annotations exist to supplement.
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 sentences, concise, and front-loaded with the key verb and resource. Every word is 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?
For a simple delete operation with no output schema, the description is fairly complete, though it could mention that the operation removes the variable permanently and that it assumes the variable 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 coverage is 100% and already describes parameters adequately. The tool description adds no further parameter meaning beyond stating the permanent removal effect.
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 'environment variable from an application', and emphasizes 'permanently removes', distinguishing it from related create/update/list 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 does not provide guidance on when to use this tool vs. alternatives, lacks prerequisites, and does not mention potential failure scenarios 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.
delete_service_envB
Delete an environment variable from a service. This permanently removes the environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| env_uuid | Yes | UUID of the environment variable to delete. Get this from list_service_envs. | |
| service_uuid | Yes | UUID of the service containing the environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that deletion is permanent ('permanently removes'), which is critical behavioral information beyond the tool name. However, with no annotations provided, it omits other important traits like required permissions or impact on running services, leaving gaps.
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, consisting of two short sentences that immediately convey the action. There is no fluff or unnecessary information, making it easy to parse quickly.
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, the description adequately explains the outcome (permanent removal). However, it could be more complete by referencing list_service_envs to obtain the env_uuid, which is mentioned only in the schema. The lack of output schema reduces the need for return value explanation.
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 with descriptions for both parameters (env_uuid, service_uuid). The description itself adds no additional parameter meaning beyond what the schema already provides, 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 clearly states the action: 'Delete an environment variable from a service.' It uses a specific verb and resource, making the purpose obvious. However, it does not explicitly differentiate from sibling tools like delete_application_env, but the context of service vs application is 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?
The description provides no guidance on when to use this tool versus alternatives (e.g., update_service_env, delete_application_env). It does not mention prerequisites, such as needing to list env vars first, 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.
get_current_teamA
Get details of the currently authenticated team. This is the team associated with your API token.
| 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 burden. It indicates the tool is a read-only operation returning team details based on authentication, but it does not disclose potential fields returned, permissions required, or any side effects. The description is 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 only two sentences, front-loaded with the key action. Every word adds value, with no redundancy or filler. It is highly concise and efficiently communicates the tool's 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, parameterless tool with no output schema, the description provides the core purpose. However, it lacks details about the returned data structure, leaving the agent to infer 'details' without specifics. Additional context about the response format 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 tool has no parameters, so schema coverage is trivially 100%. According to guidelines, 0 parameters warrants a baseline of 4. The description does not need to add parameter meaning, and it correctly states the tool requires no 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 retrieves details of the currently authenticated team. It distinguishes from siblings like 'get_team' (likely by ID) and 'list_teams' (returns all teams), making its specific 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?
The description implies when to use: when you need information about your own team associated with the API token. It implicitly differentiates from 'get_team' and 'list_teams', but does not explicitly state when not to use or mention alternatives. Clear context is provided, but exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_team_membersB
Get a list of all members in the currently authenticated team. Shows who has access to team resources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lacks disclosure of side effects, auth requirements, rate limits, error scenarios, or return format. 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?
Two concise sentences, no wasted words. Front-loaded with action and resource.
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, yet description doesn't clarify the return structure (e.g., fields, pagination). Simple tool but incomplete for an agent to process 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?
No parameters exist, schema coverage is 100% trivially, so baseline is 4. Description adds nothing beyond the schema, which is acceptable for zero-parameter tool.
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 retrieves members of the current team, distinct from sibling tools like get_current_team (team info) and list_teams (all teams). The verb 'get' and resource 'members' are 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 explicit guidance on when to use this tool vs alternatives, no when-not-to-use conditions, and no mention of prerequisites. The purpose 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.
get_deploymentA
Get detailed information about a specific deployment. Use this to monitor deployment status and troubleshoot issues.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the deployment to retrieve. Obtain this from list_deployments or from deployment event responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions monitoring and troubleshooting but does not detail what information is returned (e.g., status, logs, timestamps) or confirm no side effects. Adequate but could be more explicit.
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 concise sentences with front-loaded purpose. 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?
Simple tool with one parameter and no output schema. Description covers purpose and usage but lacks details on output structure. Adequate for most use cases but could list key fields returned.
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 uuid parameter well-described. Description adds no extra meaning beyond schema, so 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?
Description clearly states 'Get detailed information about a specific deployment' which specifies verb (get) and resource (deployment details). Distinguishes from siblings like list_deployments which lists all 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?
Explicitly says 'Use this to monitor deployment status and troubleshoot issues', providing clear context on when to use. Does not explicitly list alternatives but context is sufficient given sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_domainsA
Get a list of domains configured for a server. These domains are used for routing traffic to applications and services.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ID of the server to get domains for. Get this from list_servers. |
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 not disclose any behavioral traits such as auth requirements, rate limits, or side effects. While the operation is implied to be read-only, no explicit confirmation is given.
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 sentences: the first states the core purpose, and the second adds useful context. No unnecessary words, perfectly 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 simple retrieval tool with one parameter and no output schema, the description covers the essential information. It mentions the purpose and the usage of the parameter, but could optionally describe the return format slightly more.
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% as the single parameter 'uuid' already includes a clear description. The tool description adds no new meaning beyond the schema, maintaining 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 the verb 'Get' and resource 'domains configured for a server', with additional context on their usage for routing traffic. It uniquely identifies the tool's function among siblings which are mostly CRUD operations for applications and 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 clear context that this tool retrieves domains for a server and notes that the server ID comes from list_servers, implying a dependency. However, it does not explicitly state when not to use it or exclude alternatives, but the guidance is sufficient for a simple retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_resourcesA
Get a list of applications and services running on a server. This provides an overview of all resources deployed on the specified server.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ID of the server to check. Get this from list_servers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It mentions 'overview' but does not specify whether the tool is read-only, requires special permissions, or any side effects. For a listing tool, minimal transparency is acceptable, but could be improved.
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 concise, front-loaded sentences. Every word 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?
The description is adequate for a simple tool with one parameter, but it lacks details about the output format (e.g., what fields are returned). Given no output schema, users might benefit from more specifics.
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 and the parameter description explains where to get the UUID (from list_servers), adding useful guidance beyond the schema alone.
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 gets a list of applications and services on a specific server, using a clear verb and resource. It distinguishes from sibling tools like list_applications and list_services by specifying scoping to a single server and combining both 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 implies usage for getting an overview of resources on a server, but does not explicitly state when not to use it or provide comparisons to alternatives. The context is clear enough for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamA
Get details of a specific team. Requires a team ID obtained from list_teams.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes | ID of the team to retrieve. This is typically a numeric ID obtained from the list_teams response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It says 'get details' but does not specify what details are included, nor mentions permissions or side effects. For a read-like operation, this 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?
Two sentences, direct and without any extraneous information. 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?
Given simple tool with one parameter and no output schema, the description is fairly complete. Mentions dependency on list_teams. Could state that it returns team details, but not required.
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 covers 100% with description for the only parameter. Description adds the contextual clue that the ID comes from list_teams, which is helpful beyond 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?
Description clearly states the action (get details) and resource (specific team). Distinguished from siblings like 'get_current_team' and 'list_teams' by specifying it requires a team ID from 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?
Explicitly states prerequisite that team ID comes from list_teams, providing good context. Does not mention alternatives or when not to use, but the dependency is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionA
Get Coolify version information. Returns the current version of the Coolify instance.
| 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 states it returns version info but does not elaborate on side effects, read-only nature, or response structure. For a simple read operation, this 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?
Two concise sentences with no fluff. Every word adds value, 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?
Given zero parameters and no output schema, the description provides sufficient context for a version check. It could optionally mention the output format, but the current level is adequate for a simple info 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?
No parameters exist, and schema coverage is 100%. The description adds no extra meaning beyond the schema, but the absence of parameters makes this baseline 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 retrieves version information from Coolify, with a specific verb ('get') and resource ('version'), distinct from all sibling tools which manage applications, servers, 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 provides clear context for using the tool to check the current version, though it does not explicitly exclude any scenarios or mention alternatives. Given its straightforward nature, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check Coolify API health status. Note: This endpoint may not be available in all Coolify versions, including the current version (4.0.0-beta.397).
| 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 burden. It discloses the endpoint may not be available, but does not describe response format, error behavior, or authentication needs. 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 two sentences: the first states the purpose clearly, the second adds an important caveat. No filler or redundancy, well 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 simple health-check tool with no parameters, annotations, or output schema, the description is reasonably complete. It could mention typical response or status codes, but the caveat adds valuable 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?
There are zero parameters, and schema coverage is 100% (trivially). The description does not need to add parameter information. Baseline for 0 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 clearly states the tool checks Coolify API health status, using a specific verb and resource. It distinguishes itself from sibling tools which focus on applications, services, and configuration.
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 useful caveat about availability across versions, which helps the agent decide when to use it. However, it does not explicitly state when to use versus alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_envsA
List all environment variables for a specific application. Use this to view current environment configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application to list environment variables for. Get this from list_applications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation (list), which is non-destructive. However, no annotations are provided, so the description carries the full burden. It does not disclose potential side effects, authentication requirements, or output format. For a simple list tool, this is adequate but not exceptional.
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 sentences long, no wasted words, and front-loads the key action. It is 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?
For a simple one-parameter list tool with no output schema, the description covers the basics. However, it does not describe the return format or any edge cases (e.g., empty list, pagination). Minor gaps in 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 covers 100% of parameters, providing descriptions in the schema. The description adds value by specifying how to obtain the uuid parameter ('Get this from list_applications'), which helps the agent use the tool correctly.
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 'list all environment variables for a specific application', which clearly identifies the verb (list) and resource (environment variables for an application). It distinguishes from sibling tools like create/delete/update operations and bulk operations.
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 'Use this to view current environment configuration', which provides clear guidance on when to use this tool. While it doesn't explicitly mention when not to use it, the sibling tool set implies different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applicationsA
List all applications across your Coolify instance. Applications are deployable units sourced from Git repositories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description implies a read-only operation by using 'List.' However, it does not disclose potential side effects, rate limits, or authentication requirements. The behavior is straightforward but lacks explicit 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 concise (two sentences) and front-loads the primary purpose. Every sentence earns its place: the first states the action, the second clarifies the resource 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?
Given no output schema, the description does not specify the return format or structure of listed applications. For a simple list tool, this is a minor gap. It adequately conveys the tool's function but leaves output details implicit.
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 (100% coverage). The description adds no parameter details, which is acceptable since there are none. 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 clearly states the tool's purpose: 'List all applications across your Coolify instance.' It uses a specific verb-resource combination and distinguishes from siblings like create_application or restart_application by focusing on listing.
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 like list_services or list_teams. There is no mention of prerequisites 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.
list_deploymentsA
List all deployments across your Coolify instance. Deployments represent the history of application and service deployments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only list operation, which is non-destructive. However, with no annotations, the description lacks details on pagination, rate limits, or any other behavioral traits 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 extremely concise, with two sentences that directly state the purpose. It is front-loaded with the verb and resource, with no unnecessary 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's low complexity (no parameters, simple list operation), the description is nearly complete. It could mention if there is any default ordering or limit, but overall it suffices for an agent to understand the tool's purpose.
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 and 100% schema description coverage. The description does not add any parameter-specific meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists all deployments across the Coolify instance, with a specific verb and resource. It distinguishes itself from sibling tools like get_deployment, which is singular.
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 like get_deployment. The usage context is implied by the name and description, but no when-not or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_private_keysA
List all SSH private keys stored in Coolify. These keys are used for server authentication and Git repository access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavioral traits. It does not mention that this is a read-only safe operation, or provide any information about performance, rate limits, or side effects. The description is minimal and fails to disclose important behavioral aspects.
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 sentences that efficiently convey the action and additional context. Every word adds value, and it is front-loaded with 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 no output schema or annotations, the description is minimal but adequate for a parameterless list tool. However, it could be more complete by mentioning the type of data returned (e.g., key names, IDs).
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%. According to guidelines, baseline is 4 when no parameters exist. The description does not need to add 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 uses the specific verb 'List' and identifies the exact resource 'SSH private keys stored in Coolify', also explaining their use for server authentication and Git repository access. This clearly distinguishes it from sibling tools like create_private_key or 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 explicit guidance on when to use this tool versus alternatives is provided. The description simply states what it does, leaving the agent to infer usage. For a simple list-all tool, this is adequate but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serversA
List all servers registered in your Coolify instance. Use this to get server UUIDs needed for other operations.
| 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 disclose behavioral traits. It mentions listing but does not explicitly state it is read-only or non-destructive. The value added is the mention of UUID retrieval, but more detail on side effects or permissions would improve 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?
Two sentences, no wasted words, front-loaded with the primary action. Every sentence serves a clear 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 the tool has no parameters and no output schema, the description is adequate. It explains what the tool does and why it's useful. It could optionally mention that the output is a list of server objects, but the current description is sufficiently complete for its low complexity.
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 and 100% coverage. The description adds no parameter info because none exist, which is appropriate. Baseline for 0 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 clearly states the tool lists all servers and specifies the purpose: to get server UUIDs for other operations, distinguishing it from sibling tools like create_server or validate_server.
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 explicit usage context: 'Use this to get server UUIDs needed for other operations.' It implies when to use but does not specify when not to use, though for a list tool this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_envsA
List all environment variables for a specific service. Use this to view current environment configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service to list environment variables for. Get this from list_services. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. The description says 'list,' which implies a read-only operation with no destructive effects. However, it does not disclose any behavioral traits such as whether the action is reversible, any required permissions, or rate limits. For a simple list operation, a score of 3 is appropriate as it provides minimal 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 two sentences long, concise, and front-loaded with the primary action. Every word serves a purpose, with no extraneous information. It efficiently communicates the tool's function.
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 sufficiently complete. It states what the tool does, what parameter is needed, and how to obtain it. The absence of an output schema means there is no need to describe return values. It covers the essentials for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a description for the UUID parameter: 'UUID of the service to list environment variables for.' The description adds value by stating 'Get this from list_services,' which provides practical guidance on obtaining the parameter. This goes beyond the schema alone, thus earning a score of 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 all environment variables for a specific service.' The verb 'list' and resource 'environment variables for a service' are specific. However, it does not explicitly differentiate from the sibling 'list_application_envs', which serves a similar purpose for applications. The distinction is implied by the service context but not made explicit.
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 'Use this to view current environment configuration,' which gives a basic usage context. However, it does not provide guidance on when to use this tool versus alternatives like 'list_application_envs' for applications, or 'create_service_env' for modifications. There is no mention of when not to use it or prerequisites beyond the UUID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesA
List all services across your Coolify instance. Services are containerized applications running on your servers.
| 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 bears full responsibility for behavioral disclosure. It only states the tool lists all services, but does not mention if the list is complete, whether pagination exists, what fields are returned, or any side effects (like read-only nature). The description 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?
Two sentences, no fluff, front-loaded with the key action. Every word adds value.
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 explain what is returned. It does not mention output structure (e.g., list of service names, IDs). However, given the simplicity and zero parameters, the description is marginally adequate 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?
There are zero parameters, and the input schema is empty (100% coverage). According to the rubric, 0 parameters yields a baseline score of 4. The description does not need to elaborate on 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 clearly states the verb 'List' and the resource 'services'. It also defines what a service is ('containerized applications running on your servers'), which adds clarity beyond the name 'list_services'. This distinguishes it from sibling tools like '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. For instance, there is no mention of filtering, pagination, or comparison with 'list_applications' or 'list_servers'. The agent must 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.
list_teamsA
List all teams the authenticated user has access to. Use this to get team UUIDs needed for other operations.
| 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 cover behavioral traits. It states 'list all teams', implying a read-only, non-destructive operation. However, it does not disclose potential pagination, sorting, or response format details. This is adequate for a simple list tool 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 two short sentences with no wasted words. The first sentence states the primary purpose, and the second sentence provides a usage hint. It is efficient and easy to parse.
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 (no parameters, no output schema), the description covers the essential aspects: what it lists and why to use it. It could be considered complete for an agent to understand its function, though minor details like ordering are omitted.
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, so the description is not required to explain parameter semantics. It adds value by explaining that the output contains team UUIDs for use in other operations.
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 resource 'teams' with scope 'the authenticated user has access to'. It also specifies the purpose of getting team UUIDs, which distinguishes it from sibling tools like get_current_team.
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 says 'Use this to get team UUIDs needed for other operations', providing clear guidance on when to use this tool. However, it does not mention when not to use it, but given the lack of alternatives for listing teams, this is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_applicationA
Restart an application by stopping and starting it again. Useful for applying configuration changes or recovering from issues.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application to restart. Get this from list_applications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the tool stops and starts the application, implying a write operation and potential downtime, but lacks details on required permissions, side effects (e.g., temporary unavailability), 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 consists of two succinct sentences, immediately stating the verb and resource. Every word is functional with no redundancy or 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?
For a simple tool with one parameter and no output schema, the description is minimally adequate. However, it omits details about the return value, success/failure indications, and whether the operation is synchronous or asynchronous, leaving uncertainty for the agent.
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 sole parameter uuid is fully described in the schema ('UUID of the application to restart. Get this from list_applications.'), providing adequate guidance. 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 the action 'restart' applied to 'application', with a precise definition of what restarting entails ('stopping and starting it again'). This directly distinguishes from sibling tools like restart_service, start_application, and stop_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 clear use cases: 'applying configuration changes or recovering from issues'. While it does not explicitly exclude scenarios or name alternatives, the context is sufficient for appropriate tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_serviceA
Restart a service by stopping and starting it again. Useful for applying configuration changes or recovering from issues.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service to restart. Get this from list_services. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the basic behavior (stop then start) but lacks details on potential downtime, dependencies, or error handling. With no annotations, the description should carry the full burden, and it omits important 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?
Two concise sentences, front-loaded with the action and followed by usage context. No unnecessary 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 one parameter and no output schema, the description covers the core action and typical use cases. However, it could mention return values or side effects like service downtime.
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 to the uuid parameter 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?
Clearly states the action (restart), resource (service), and explains it stops then starts again. Distinguishes from sibling tools like start_service, stop_service, and restart_application by name and 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?
Provides context for when to use (applying config changes, recovering from issues) but does not explicitly mention when not to use or compare to alternatives like restart_application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_applicationA
Start a previously created application. This will initialize the application container and make it accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application to start. Obtain this from list_applications or from the create_application response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It mentions initialization and accessibility but omits details like idempotency, side effects if already started, required permissions, or output. The description adds some value beyond the tool name but lacks thoroughness.
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 sentences, concise and front-loaded. Every word serves a purpose, 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?
For a simple lifecycle tool with one parameter and no output schema, the description provides essential context. It explains the action (start) and result (initialize container, make accessible). It could mention what 'accessible' means (e.g., URL) or return value, but overall it is complete enough for the tool's complexity.
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 with description on how to obtain UUID). The tool description does not add additional parameter meaning beyond the schema. Baseline 3 is appropriate as the schema handles 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?
The description clearly states the tool starts a previously created application, initializes the container, and makes it accessible. The verb 'start' and resource 'application' are specific, and the description distinguishes from siblings like create_application (creation) and restart_application (restart).
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 application must already exist ('previously created application'), and the parameter description instructs how to obtain the UUID via list or create tools. However, it does not explicitly exclude scenarios (e.g., if already running, use restart_application) or compare with start_service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_serviceC
Start a previously created service. This will initialize the service container and make it accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service to start. Obtain this from list_services or from the create_service response. |
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 fails to disclose behavioral traits like whether the operation is destructive, requires permissions, or is asynchronous. Only basic 'initialize and make accessible' is given.
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 two sentences with no fluff. While it could be more informative, 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?
For a tool with no output schema and no annotations, the description is incomplete. It does not hint at return values, side effects, or the service lifecycle, which is needed given the complexity of starting a service.
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% for the single uuid parameter. The description adds no additional meaning beyond what the schema provides, earning 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 uses a clear verb 'start' and specifies 'previously created service', distinguishing from create_service. However, it does not explicitly distinguish from start_application or other start tools, and 'make it accessible' is somewhat vague.
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 (e.g., restart_service). It mentions 'previously created' but does not specify prerequisites, such as that the service must be in a stopped state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_applicationA
Stop a running application. This will gracefully shut down the application container.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the application to stop. Get this from list_applications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides some behavioral context ('gracefully shut down'), indicating non-destructive shutdown. However, it does not disclose post-stop behavior (e.g., restartability) or any side effects, which leaves some gaps.
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 concise sentences that front-load the action and efficiently convey the purpose and parameter guidance. 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 description sufficiently covers the tool's purpose, parameter, and behavior for a simple action. It could mention that the application must be running, but that is implied. Given no output schema or annotations, it is adequately 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 description adds value beyond the schema by specifying the source for the 'uuid' parameter ('Get this from list_applications'), which helps the agent locate the correct value. Schema coverage is 100%, so the description provides useful extra guidance.
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 'stop' as the verb and 'application' as the resource, and distinguishes from sibling tools like start_application and restart_application by specifying 'stop a running application' with graceful shutdown.
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 to use the tool (to stop a running application) and mentions graceful shutdown, but does not explicitly state when not to use it or exclude alternatives. However, the purpose is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_serviceA
Stop a running service. This will gracefully shut down the service container.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the service to stop. Get this from list_services. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds value by stating 'gracefully shut down', hinting at clean termination. However, it does not detail side effects like log flushing or pending request handling.
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 unnecessary words. Essential information is front-loaded, and every sentence contributes to understanding.
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 required param, no output schema), the description plus schema provide sufficient context. Minor gap: no mention of return value or confirmation, but acceptable for a void action.
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 already describes the uuid parameter (100% coverage), but the description adds context by telling the agent to get the UUID from 'list_services', which aids in correct invocation.
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 ('stop') and the resource ('running service'), and distinguishes from siblings like 'start_service' and 'restart_service' by specifying that it shuts down the container gracefully.
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 to use (when a service is running and needs to be stopped) but does not explicitly mention when not to use or compare with alternatives like 'stop_application'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_application_envC
Update an existing environment variable for an application. This modifies the value or settings of an existing environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | New environment variable name (optional if only updating value). | |
| value | No | New environment variable value (optional if only updating other properties). | |
| env_uuid | Yes | UUID of the environment variable to update. Get this from list_application_envs. | |
| is_literal | No | Whether the value should be treated as a literal string without variable substitution. | |
| is_preview | No | Whether this variable applies to preview deployments. | |
| is_build_time | No | Whether this variable should be available during build time. | |
| application_uuid | Yes | UUID of the application containing the environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral traits. It states that the tool modifies an existing variable but does not disclose whether it overwrites all fields or merges, nor any permissions, rate limits, or consequences. The behavior when optional parameters are omitted is unclear.
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 sentences, efficiently stating the action. It is front-loaded with the main purpose. There is no fluff, though the second sentence slightly repeats the first.
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 seven parameters, no output schema, and no annotations, the description is minimal. It does not cover return values, error scenarios, or partial update behavior. The description lacks completeness for a parameter-rich mutation 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 coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema's parameter descriptions. It simply restates the tool purpose without elaborating on 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 tool updates an existing environment variable for an application. It specifies the resource (environment variable) and the action (update). However, it does not explicitly differentiate from sibling tools like create_application_env or bulk_update_application_envs, though the name and context imply single-entity update.
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., bulk_update_application_envs). The description only implicitly suggests using list_application_envs to get the env_uuid, but does not provide 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.
update_service_envB
Update an existing environment variable for a service. This modifies the value or settings of an existing environment variable. Note: Setting is_build_time=true has no functional effect on services (they use pre-built images).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Environment variable name to update. | |
| value | Yes | New environment variable value. | |
| is_literal | No | Whether the value should be treated as a literal string without variable substitution. | |
| is_preview | No | Whether this variable applies to preview deployments. | |
| service_uuid | Yes | UUID of the service containing the environment variable. | |
| is_build_time | No | Whether this variable should be available during build time. Note: Has no functional effect on services (they use pre-built images). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It mentions one key behavior: 'Setting is_build_time=true has no functional effect on services.' However, it does not explain other behaviors such as idempotency, error handling for missing variables, or whether updating triggers a redeployment.
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 two sentences, front-loading the core purpose. The note about is_build_time is relevant but slightly misplaced. Overall, every sentence contributes without 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 absence of an output schema, the description should explain the result of updating (e.g., returns updated variable, triggers redeployment). It does not touch on side effects or preconditions (e.g., variable must exist). It is adequate but incomplete for a full 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?
The input schema has 100% coverage with descriptions for all 6 parameters. The description adds minimal new information beyond the schema—only noting that is_build_time has no effect, which is already in the schema's description. It does not clarify relationships between parameters like is_literal and is_preview.
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 an existing environment variable for a service.' It specifies the verb 'Update' and resource 'existing environment variable for a service,' which differentiates it from create or delete operations and sibling tools like bulk_update_service_envs or update_application_env.
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 bulk_update_service_envs for multiple updates or create_service_env for new variables. It lacks explicit conditions or exclusions, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_serverA
Validate a server's configuration and connectivity. Use this to verify server setup and troubleshoot connection issues.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | ID of the server to validate. Get this from list_servers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states 'validate' and 'troubleshoot' but does not disclose whether the operation is read-only, what connectivity check is performed, or any potential side effects or permissions needed.
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 only two sentences, with the purpose front-loaded and no extraneous information. Every sentence 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 param, no output schema), the description covers the use case but omits details about the return value or result format, which would be helpful for an agent determining success/failure.
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?
All parameters (one: uuid) are described in the schema with 100% coverage. The description adds value by specifying that the ID comes from list_servers, which is helpful for the agent.
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 ('Validate') and the resource ('a server's configuration and connectivity'), and distinguishes from sibling tools like list_servers or create_server by focusing on verification and troubleshooting.
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 says to use it for verification and troubleshooting, providing clear context. However, it does not mention when not to use it or alternative tools, though the parameter description implies obtaining the UUID from list_servers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
35 tool updates
v1.0.0- First observed
bulk_update_application_envs - First observed
bulk_update_service_envs - First observed
create_application - First observed
create_application_env - First observed
create_private_key - First observed
create_server - First observed
create_service - First observed
create_service_env - First observed
delete_application_env - First observed
delete_service_env - First observed
get_current_team - First observed
get_current_team_members - First observed
get_deployment - First observed
get_server_domains - First observed
get_server_resources - First observed
get_team - First observed
get_version - First observed
health_check - First observed
list_application_envs - First observed
list_applications - First observed
list_deployments - First observed
list_private_keys - First observed
list_servers - First observed
list_service_envs - First observed
list_services - First observed
list_teams - First observed
restart_application - First observed
restart_service - First observed
start_application - First observed
start_service - First observed
stop_application - First observed
stop_service - First observed
update_application_env - First observed
update_service_env - First observed
validate_server
TDQS
Each tool targets a distinct resource and action, with clear separation between application and service operations. No ambiguity between tool purposes.
Most tools follow a consistent verb_noun pattern, but there is a mix of 'get_' and 'list_' for retrieval operations (e.g., get_server_domains vs list_applications), which is a minor inconsistency.
35 tools is on the high side, but the server covers multiple domains (applications, services, environments, servers, etc.). It could be streamlined slightly but is not excessive.
Notable gaps: missing delete operations for applications and services, no update for application/service properties (only envs), and no explicit deploy or redeploy tools for deployments. This will likely cause agent failures for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for Coolify infrastructure management, providing 45 tools for servers, applications, databases, deployments, and diagnostics via natural language.22MIT
- AlicenseBqualityBmaintenanceMCP server for managing Coolify instances, enabling control of applications, databases, services, servers, and more via natural language.11638MIT
- AlicenseBqualityAmaintenanceMCP server for Coolify API that enables full deployment workflows from zero to production, including project, server, and application management.654613MIT
- AlicenseAqualityAmaintenanceOne MCP server to manage self-hosted Coolify instances: verify connectivity, discover servers, deploy applications, tail logs, diagnose incidents, and run emergency ops from any MCP client.1995MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/forsonny/Coolify-MCP-Server-for-Claude-Code'
If you have feedback or need assistance with the MCP directory API, please join our Discord server