Skip to main content
Glama
AkaciaNL

BasicDeploy MCP Server

BasicDeploy MCP Server

The persistent runtime your agent deploys to: a database, object storage, a Kafka broker, and a public URL, one MCP call.

An MCP (Model Context Protocol) server that lets AI coding agents (Claude Code, Cursor, and any MCP client) create and manage BasicDeploy containers directly. Every container comes with a PostgreSQL database, S3‑compatible object storage, a Kafka broker, environment variables, and a public HTTPS URL, all provisioned automatically. Your agent can create containers, deploy apps (Node, Python, Go, or Docker, auto‑detected), run commands, read logs, manage Kafka topics, check who it is authenticated as, set always‑on, and share or delete containers.

Quick start

Requires Node.js ≥ 18. No install needed. npx fetches it on demand.

Get an API key at https://basicdeploy.com/api-keys (it looks like bd_…, shown once), then add this to your MCP client:

{
  "mcpServers": {
    "basicdeploy": {
      "command": "npx",
      "args": ["-y", "basicdeploy-mcp@latest"],
      "env": {
        "BASICDEPLOY_API_KEY": "bd_your_api_key",
        "BASICDEPLOY_URL": "https://basicdeploy.com"
      }
    }
  }
}

Claude Code:

claude mcp add basicdeploy \
  --env BASICDEPLOY_API_KEY=bd_your_api_key \
  --env BASICDEPLOY_URL=https://basicdeploy.com \
  -- npx -y basicdeploy-mcp@latest

Claude Code plugin (this repo doubles as a plugin marketplace):

/plugin marketplace add AkaciaNL/basicdeploy-mcp
/plugin install basicdeploy-mcp@basicdeploy

Then set BASICDEPLOY_API_KEY in your environment (the plugin reads it via ${BASICDEPLOY_API_KEY}).

OpenAI Codex CLI:

codex mcp add basicdeploy \
  --env BASICDEPLOY_API_KEY=bd_your_api_key \
  --env BASICDEPLOY_URL=https://basicdeploy.com \
  -- npx -y basicdeploy-mcp@latest

or add it directly to ~/.codex/config.toml:

[mcp_servers.basicdeploy]
command = "npx"
args = ["-y", "basicdeploy-mcp@latest"]
env = { BASICDEPLOY_API_KEY = "bd_your_api_key", BASICDEPLOY_URL = "https://basicdeploy.com" }

Environment variables

Variable

Required

Description

BASICDEPLOY_API_KEY

Yes

Your API key (bd_…). Required to call any tool (the server still starts and lists its tools without it, so clients can introspect it).

BASICDEPLOY_URL

No

API base URL. Defaults to https://basicdeploy.com.

Related MCP server: Coolify MCP Server

Tools

Tool

Arguments

Description

list_containers

(none)

List your containers: subdomain, status, URL, id, createdAt.

create_container

memoryMb? (256/512/1024/2048), alwaysOn?

Create a container. Database + S3 bucket provisioned automatically. Larger sizes need Pro/Scale; always‑on on Free uses a paid add‑on slot.

get_container

containerId

Full details: URL, status, ports, DB name/user, S3 bucket, volume path.

deploy_app

tarballPath, containerId?

Deploy a .tar/.tar.gz/.tgz/.zip from disk. Unpacks to /workspace, auto‑detects the runtime, and starts the app on :8080. Omit containerId to create a new container; pass one to deploy into an existing container.

exec_command

containerId, command

Run a shell command inside the container; returns output + exit code.

get_logs

containerId, tail? (default 200)

Fetch recent container logs.

set_always_on

containerId, enabled

Turn a container's 24/7 always‑on flag on/off.

wake_container

containerId

Wake a slept container so it serves traffic again.

sleep_container

containerId

Sleep a running container to free memory (wakes on next request).

get_account

(none)

Your plan, container limit (plan + add‑ons), selectable memory sizes, storage limit, and add‑ons.

share_container

containerId, email, expiresInHours?

Share a container with another user by email (they get a sign‑in link). Omit expiresInHours for an unlimited share.

delete_container

containerId

Permanent: destroys the container, its database, and all files.

whoami

(none)

The account this connection is authenticated as (email + id).

get_kafka

(none)

Kafka connection details (SASL/SCRAM): internal + external bootstrap, username/password, consumer‑group prefix, topics, usage and limits. Provisions on first call.

create_topic

label?

Create a Kafka topic (auto‑namespaced under your prefix; optional readable label). Fails if the topic/storage budget is exceeded.

purge_topic

name

Empty a topic you own (deletes its messages, keeps the topic). Restart processing after a mistake.

delete_topic

name

Permanent: delete a topic you own and all its messages.

Runtime

Deployed apps must listen on 0.0.0.0:8080, the port the public URL serves. DATABASE_URL, S3_ENDPOINT / S3_ACCESS_KEY / S3_SECRET_KEY / S3_BUCKET, and KAFKA_BOOTSTRAP / KAFKA_USERNAME / KAFKA_PASSWORD / KAFKA_GROUP_PREFIX are preset in the container environment. Startup output goes to /workspace/deploy.log.

Example prompts

  • "Create a 1GB always‑on container and deploy ./dist/app.tar.gz to it, give me the URL."

  • "Show the last 100 log lines of my blue-fox container."

  • "What plan am I on and how many containers can I run?"

  • "Share my container with teammate@example.com for 24 hours."

License

MIT. BasicDeploy is a product of Akacia (KVK 99629569, Netherlands).

Available Tools

18 tools
create_containerA

Create a new empty BasicDeploy container. A PostgreSQL database and an S3 bucket are provisioned automatically for it. Returns the container's id, subdomain, and public URL. Its public URL is proxied to PORT 8080 inside the container, so whatever you deploy MUST listen on 0.0.0.0:8080 (any other port/binding returns 503). Use deploy_app or exec_command afterwards to put an application in it. Optional memoryMb (256/512/1024/2048) and alwaysOn require the plan/add-ons to allow them (see get_account); larger sizes need Pro/Scale, and always-on on Free consumes a paid add-on slot.

ParametersJSON Schema
NameRequiredDescriptionDefault
alwaysOnNoKeep the container running 24/7 (never auto-sleep). On Free this uses a paid add-on slot.
memoryMbNoMemory for the container in MB: 256, 512, 1024, or 2048. Defaults to the plan's default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesContainer UUID.
urlYesPublic HTTPS URL.
statusYesLifecycle status, e.g. running or sleeping.
createdAtNoCreation time (ISO 8601).
subdomainYesContainer subdomain.
memoryBytesNoMemory limit in bytes.
storageBytesNoStorage used in bytes.

TDQS

A5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that PostgreSQL and S3 are provisioned automatically, that the tool returns id/subdomain/URL, and that the public URL proxies to port 8080 so the app must listen on 0.0.0.0:8080 or return 503. It also reveals billing implications for alwaysOn on Free. No contradiction with readOnlyHint=false or destructiveHint=false.

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

Conciseness5/5

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

The description is dense but well-organized: core action, provisioned resources, return values, the critical port constraint, and optional-parameter constraints. Each sentence earns its place and there is no filler or repetition of annotation data.

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

Completeness5/5

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

Covers the creation action, side effects, return values, the 8080 deployment requirement, next-step tools, and plan-sensitive parameter constraints. With an output schema and annotations also present, nothing essential is missing for correct selection and invocation.

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

Parameters5/5

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

While the schema already gives basic descriptions, the tool description adds substantial meaning: allowed memoryMb values, plan-tier restrictions, the default behavior, and alwaysOn's paid add-on cost on Free. This is exactly the kind of guidance an agent needs to choose parameter values correctly.

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

Purpose5/5

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

Clearly states the operation (create) and the object (a new empty BasicDeploy container), and immediately distinguishes itself by noting automatic PostgreSQL/S3 provisioning and the follow-up use of deploy_app or exec_command. This separates it from sibling tools like list_containers or get_container.

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

Usage Guidelines5/5

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

Provides an explicit usage flow: create the empty container first, then use deploy_app or exec_command to add an application. It also tells the agent when optional parameters are allowed, including plan requirements and the pointer to get_account for validation.

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

create_topicA

Create a Kafka topic for the user. The name is auto-namespaced under their prefix; an optional 'label' becomes a readable suffix (sanitized), otherwise it's randomized. Retention, partitions and the per-topic size are fixed by the plan. Fails if the topic count or storage budget is exceeded (see get_kafka / get_account). Returns the full topic name.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional readable suffix, [a-z0-9-], max 40 chars.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYesThe full topic name created.

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses that the operation fails under resource constraints and returns the full topic name. It does not explicitly state that it creates persistent state, but that is strongly implied by 'Create' and the annotations (readOnlyHint: false). No contradictions with annotations.

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

Conciseness5/5

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

The description is concise, covering all essential aspects in four sentences without redundant or irrelevant information. Every sentence adds value: action, naming, fixed settings, failure conditions, and return value.

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

Completeness5/5

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

It provides a complete picture: what the tool does, how naming works, fixed resource characteristics, failure scenarios, and what it returns. It also points to related tools for limits, making it self-sufficient for an agent to invoke correctly.

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

Parameters5/5

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

The only parameter, 'label', is fully described: it is optional, becomes a readable suffix, is sanitized, and if omitted, a random name is generated. This adds meaningful detail beyond the schema's basic constraint description.

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

Purpose5/5

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

The description clearly states the action: 'Create a Kafka topic for the user.' It also explains the naming behavior (namespace prefix, optional label, random fallback), leaving no ambiguity about what the tool accomplishes.

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

Usage Guidelines4/5

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

It provides practical guidance by noting failure conditions (exceeding topic count or storage budget) and directs users to get_kafka and get_account for limits. While it doesn't explicitly contrast with sibling tools, it gives enough context for when 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_containerA
Destructive

PERMANENTLY delete a container. This destroys the container, its database, and all its files (S3 bucket contents included) and cannot be undone. Only call this when the user has clearly asked for the container to be removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
containerIdYesUUID of the container to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
messageNo

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the destructiveHint annotation by specifying exactly what is destroyed — the container, its database, and all files including S3 bucket contents — and states the action cannot be undone. This gives an agent a complete consequence picture before invoking the tool.

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

Conciseness5/5

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

Two tightly written sentences: the first states the action and its full destructive scope, the second states the only permitted invocation condition. Every word earns its place with no redundancy.

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

Completeness5/5

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

The tool is simple (one required parameter), the schema fully documents that parameter, an output schema exists, and the annotations agree with a description that covers irreversibility and collateral damage. There is nothing an agent needs to know about invocation that is missing.

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

Parameters3/5

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

The input schema already fully documents containerId as 'UUID of the container to delete' with 100% coverage. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description opens with 'PERMANENTLY delete a container', stating a specific verb and resource. It further distinguishes itself from sibling tools by enumerating the full destructive scope (database, files, S3 contents), making clear it is the removal operation, not list, create, wake, or get.

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

Usage Guidelines4/5

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

The description explicitly conditions use on 'Only call this when the user has clearly asked for the container to be removed', giving an agent a clear go/no-go signal. It does not name alternatives, but no sibling tool overlaps with this deletion function, so the absence of an explicit exclusion is acceptable.

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

delete_topicA
Destructive

PERMANENTLY delete one of the user's Kafka topics (the topic and all its messages). Cannot be undone. Only call when the user clearly asked to remove the topic. The name must be one they own.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFull topic name to delete (e.g. u-<hex>.orders).

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description adds crucial beyond-annotation context: the deletion is permanent, cannot be undone, removes all messages, and requires user ownership. This fully discloses the consequences and authorization boundaries of invoking the tool.

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

Conciseness5/5

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

Every sentence earns its place: permanent deletion, irreversibility, invocation condition, and ownership constraint. The most critical behavioral warning is front-loaded, and there is no filler or redundancy.

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

Completeness5/5

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

With a single parameter, an output schema, and annotations covering destructiveness, the description provides everything an agent needs to decide when and how to invoke the tool safely. It clearly states the action, the prerequisite, and the consequence without requiring further inference.

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

Parameters4/5

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

The input schema already covers the parameter fully with a type and example format. The description adds the ownership constraint on the topic name ('must be one they own'), which is meaningful semantic guidance beyond the schema, so it earns above the baseline of 3.

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

Purpose5/5

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

The description states a specific action ('PERMANENTLY delete'), a specific resource ('Kafka topic'), and clarifies scope ('the topic and all its messages'). It clearly differentiates this from container-level or non-destructive operations like purge_topic by emphasizing permanent removal of the topic itself.

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

Usage Guidelines4/5

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

The description gives explicit invocation conditions: only call when the user clearly asked to remove the topic, and only for a topic the user owns. It does not explicitly compare against alternatives like purge_topic, so it loses one point, but the stated usage constraint is strong and actionable.

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

deploy_appA

Deploy an application from a local tarball (.tar, .tar.gz, .tgz, or .zip) to BasicDeploy. The runtime (Node.js, Python, or Go) is auto-detected from the archive contents; the app must listen on 0.0.0.0:8080. If containerId is omitted, a new container (with DB + S3) is created for the app; if provided, the archive is deployed into that existing container. Returns the resulting container and its public URL. IMPORTANT: tarballPath is a path on the machine running THIS MCP client (i.e. the local/stdio install). When BasicDeploy is added as a REMOTE connector (Claude/ChatGPT/Gemini chat) there is no shared filesystem, so this tool cannot read your tarball — deploy with exec_command instead (write the files into the container and start the server on 0.0.0.0:8080).

ParametersJSON Schema
NameRequiredDescriptionDefault
containerIdNoOptional UUID of an existing container to deploy into. Omit to create a new one.
tarballPathYesAbsolute path on local disk to the app archive (.tar, .tar.gz, .tgz, .zip)

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
containerIdYesTarget container UUID.

TDQS

A5/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=false, but the description adds substantial behavioral context: runtime auto-detection, the requirement to listen on 0.0.0.0:8080, automatic creation of a container with DB and S3 when containerId is omitted, and the critical local-path constraint. There is no contradiction with the annotations.

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

Conciseness5/5

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

The description is detailed but every sentence adds necessary information: format, runtime behavior, port requirement, container behavior, return value, and the filesystem caveat. It is front-loaded with the core action and efficiently places the important limitation at the end.

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

Completeness5/5

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

Given the tool's complexity, the output schema, and the annotations, the description covers all essential operational details: what inputs are needed, what happens during deployment, what is returned, and the critical limitation when used through a remote connector. Nothing critical is missing for an agent to use this tool correctly.

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

Parameters5/5

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

Schema coverage is 100%, so the schema already defines both parameters. The description adds meaningful semantics beyond the schema, especially that tarballPath refers to the local MCP client machine, and that omitting containerId provisions a new container with DB + S3 while providing it targets an existing container.

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

Purpose5/5

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

The description clearly states the action: deploy an application from a local tarball to BasicDeploy. It specifies the accepted archive formats, runtime auto-detection, the required listening address, and the difference between creating a new container versus deploying into an existing one. This strongly distinguishes it from siblings like exec_command.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool (local/stdio MCP client with a shared filesystem) and when not to use it (remote connector without shared filesystem), and names the alternative: deploy with exec_command instead. It also clarifies when to omit vs. provide containerId, leaving no ambiguity.

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

exec_commandA
Destructive

Run a shell command inside a container (like docker exec). Returns the combined stdout/stderr output and the exit code. Useful for inspecting files, installing packages, or restarting processes inside the container. DEPLOYING WITHOUT A TARBALL (the way to deploy over a remote/chat connector, where there is no shared filesystem for deploy_app): write your app's files into the container with exec_command (e.g. heredoc/echo or install from git), install deps, then start the server. CRITICAL: the container's public URL (https://.basicdeploy.com) is ALWAYS proxied to PORT 8080 inside the container, so your app MUST listen on 0.0.0.0:8080 — NOT localhost/127.0.0.1, and NOT 3000/5000/etc. Any other port or binding returns HTTP 503 at the public URL even though the process is running. The routing is wired when the container is created; you do NOT need deploy_app to 'register' it. There is no init/supervisor: a process you start runs only until the container sleeps or restarts and is NOT relaunched — for a long-running web server enable always-on (set_always_on) and start it detached.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesShell command to execute inside the container
containerIdYesUUID of the container

Output Schema

ParametersJSON Schema
NameRequiredDescription
outputNoCombined stdout/stderr.
exitCodeNoProcess exit code.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds rich behavioral context beyond the annotations: no init/supervisor, processes are not relaunched, the public URL is always proxied to 0.0.0.0:8080, and incorrect bindings yield HTTP 503. This is exactly the kind of hidden runtime behavior an agent cannot infer from schema or annotations.

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

Conciseness5/5

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

The prose is long but front-loaded and every section earns its place. The first sentence states purpose and return values, then the deployment and port constraints are separated into clearly flagged blocks; there is no filler.

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

Completeness5/5

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

Combined with the schema, output schema, and annotations, the description covers command execution, output, exit codes, deployment workflow, port/proxy constraints, and process lifecycle. Nothing needed to call this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both containerId and command. The description does not add parameter-specific detail beyond usage examples, which keeps it at the baseline for high schema coverage.

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

Purpose5/5

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

The description opens with a specific verb+resource ('Run a shell command inside a container') and the docker exec analogy, then clarifies the output (combined stdout/stderr and exit code). It also gives concrete use cases (inspecting files, installing packages, restarting processes) that separate it from container lifecycle or deployment tools.

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

Usage Guidelines5/5

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

It explicitly calls out when exec_command is the right tool: for actionable container work and for deploying without a tarball over remote/chat connectors where deploy_app's shared filesystem is unavailable. It also names set_always_on for long-running servers and clarifies that deploy_app is not needed for URL registration.

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

get_accountA
Read-only

Show the account's plan and capabilities: plan tier, container limit (plan base + add-ons), the memory sizes you may select, storage limit, how many always-on add-ons you hold, and whether containers auto-sleep. Use this to see what you're allowed to set.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context by explaining the read yields account plan and capability constraints, and frames the result as the allowance boundary ('what you're allowed to set'). No contradiction exists.

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

Conciseness5/5

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

The description is compact and front-loaded, stating the main purpose first and then listing the concrete return fields in a structured sequence. Both sentences earn their place, and there is no filler or repetition.

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

Completeness5/5

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

For a parameterless read-only account-information tool, the description fully covers what data will be returned and why the agent would call it. With an output schema present, return-value details are already structurally defined, and the description adds the needed semantic context.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description correctly omits parameter-specific guidance because none is needed, and the schema's empty object confirms no inputs are required.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Show the account's plan and capabilities') and enumerates the exact fields returned (plan tier, container limit, memory sizes, storage limit, always-on count, auto-sleep). This clearly distinguishes it from identity-focused siblings like whoami or container-focused tools like get_container.

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

Usage Guidelines4/5

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

The closing sentence 'Use this to see what you're allowed to set' gives clear context for when to invoke this tool. It does not explicitly exclude alternatives or mention when-not-to-use, but the tool's narrow account-capabilities scope makes that less critical.

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

get_containerA
Read-only

Get full details of one container: id, subdomain, public URL, status, ports, database name and username, S3 bucket, volume path, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
containerIdYesUUID of the container

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesContainer UUID.
urlYesPublic HTTPS URL.
statusYesLifecycle status, e.g. running or sleeping.
createdAtNoCreation time (ISO 8601).
subdomainYesContainer subdomain.
memoryBytesNoMemory limit in bytes.
storageBytesNoStorage used in bytes.

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds the full list of returned fields, which is useful, but it doesn't disclose other behavioral traits like error behavior or whether the container must be running. This is acceptable given the annotations and output schema.

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

Conciseness5/5

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

A single, well-structured sentence that front-loads the core purpose ('Get full details of one container') followed by a concise, comma-separated list of the details returned. Every word earns its place; there is no fluff or repetition.

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

Completeness5/5

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

For a simple get-by-ID tool with one required parameter, a clear output schema, and read-only annotations, the description is complete. It tells the agent exactly what information will be returned and leaves no critical gap for invoking the tool correctly.

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

Parameters3/5

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

The input schema provides a 100%-covered parameter description ('UUID of the container'), so the description doesn't need to add much. It reinforces that this is about a single container, but doesn't add meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific verb ('Get'), a specific resource ('one container'), and enumerates the returned details (id, subdomain, URL, status, ports, database info, S3 bucket, volume, timestamps). The singular 'one container' implicitly differentiates it from list_containers, so an agent can select it correctly.

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

Usage Guidelines4/5

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

The description gives clear context: use this when you need full details of one container by ID. It doesn't explicitly mention the alternative list_containers or when not to use this tool, but the singular scope and available sibling names imply the intended selection.

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

get_docsA
Read-only

Fetch the BasicDeploy documentation as Markdown so you can answer the user's questions and deploy correctly without leaving the chat. Covers: what BasicDeploy is, deploying an app (the 0.0.0.0:8080 rule), the runtime and preset env vars, the PostgreSQL database and S3 object storage, the REST API, the MCP tools, custom domains, SSH, plans/pricing, and hosted auth-as-a-service (OpenID Connect) for your app's own end-users. Optional 'topic' returns only the matching section(s).

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoOptional keyword to return only matching doc section(s): e.g. overview, deploy, database, storage, env, auth, api, mcp, domains, ssh, plans.

Output Schema

ParametersJSON Schema
NameRequiredDescription
markdownYesDocumentation in Markdown.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds value beyond that by disclosing the return format (Markdown), the extensive coverage scope (deploy, env vars, PostgreSQL, S3, REST API, MCP, domains, SSH, plans, OIDC), and the topic-filtering behavior — richer context than the annotations alone provide.

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

Conciseness4/5

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

Front-loaded with the purpose in the opening sentence, followed by a dense but genuinely useful enumeration of covered topics, then the parameter behavior. The topic list earns its length because it lets the agent quickly judge whether the docs will cover a given user question; it is slightly long but nothing is wasted.

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

Completeness5/5

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

For a read-only, single-optional-parameter documentation tool with an output schema, nothing essential is missing. Return format, coverage scope, and filtering behavior are all disclosed, annotations carry the safety profile, and the output schema answers return-value questions.

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

Parameters3/5

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

Schema description coverage is 100% — the schema already documents the optional 'topic' parameter with concrete example keywords (overview, deploy, database, storage, env, auth, api, mcp, domains, ssh, plans). The description's mention of 'Optional topic returns only the matching section(s)' restates the schema rather than adding new semantic meaning, so the high-coverage baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Fetch'), resource ('BasicDeploy documentation'), and output format ('as Markdown'). The stated purpose — answering user questions and deploying correctly — clearly distinguishes it from all 17 sibling tools, none of which fetch documentation.

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

Usage Guidelines4/5

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

The description frames when to use it: whenever the agent needs documentation to answer user questions or deploy correctly 'without leaving the chat.' Context is clear and the tool's knowledge-base role is distinct from sibling container/deploy tools, but it doesn't explicitly name alternatives or state when-not-to-use conditions, which would earn a 5.

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

get_kafkaA
Read-only

Get the user's Kafka connection details and topics. BasicDeploy gives every account a Kafka broker (SASL/SCRAM, SCRAM-SHA-256) shared by all their containers. Returns the internal bootstrap (preset as KAFKA_BOOTSTRAP inside containers), the external bootstrap (for outside clients), the SASL username/password, the mandatory consumer-group id prefix (group ids MUST start with it), the current topics, usage and the plan limits. Provisions the tenancy on first call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitsNo
topicsNo
enabledYesWhether Kafka is available on this deployment.
passwordNoSASL/SCRAM password.
usernameNoSASL/SCRAM username.
bootstrapNoIn-container bootstrap (preset as KAFKA_BOOTSTRAP).
usedBytesNoReserved storage used across topics.
groupPrefixNoRequired prefix for topic and consumer-group ids.
saslMechanismNo
securityProtocolNo
externalBootstrapNoPublic bootstrap for outside clients.

TDQS

A4.3/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond the readOnlyHint and destructiveHint annotations: it discloses the first-call provisioning side effect, the shared-broker model, SASL/SCRAM authentication, and the mandatory consumer-group prefix. This is strong transparency, and while the provisioning note creates mild tension with readOnlyHint, it is framed as a one-time setup rather than a mutation of user data.

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

Conciseness5/5

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

The description is compact and front-loaded: the purpose appears in the opening phrase, followed by the critical return fields and the provisioning caveat. Every clause adds information an agent needs, with no filler or repetition.

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

Completeness5/5

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

For a parameterless, read-oriented getter with an output schema present, the description covers what is returned, the authentication model, the consumer-group constraint, usage limits, and the only side effect. Nothing an agent needs to understand before invoking is missing.

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

Parameters4/5

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

The input schema has zero parameters, so there is nothing for the description to explain. The baseline for a parameterless tool is 4; the description appropriately focuses on what the call returns and the constraints on using the returned values.

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

Purpose5/5

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

Clearly states a specific verb and resource: retrieves the user's Kafka connection details and topics. It enumerates the exact return contents and is immediately distinguishable from sibling tools such as get_account or the topic-management tools.

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

Usage Guidelines3/5

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

It is clear from context that this tool is for fetching Kafka broker/auth/topic information, so an agent can infer when to use it. However, it does not explicitly state when not to use it or name a sibling alternative for different Kafka needs, leaving usage guidance implicit.

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

get_logsA
Read-only

Fetch recent logs from a container. Use this to debug crashes or check application output.

ParametersJSON Schema
NameRequiredDescriptionDefault
tailNoNumber of log lines to return from the end (default 200)
containerIdYesUUID of the container

Output Schema

ParametersJSON Schema
NameRequiredDescription
logsYesRecent log output.

TDQS

A4/5.0
Behavior3/5

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

Annotations already cover readOnlyHint=true and destructiveHint=false. Description adds purpose context but no additional behavioral details (e.g., side effects, limitations). No contradiction.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, and no unnecessary words. Efficient and well-structured.

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

Completeness4/5

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

For a simple read-only log fetch, the description provides enough context about purpose and usage. Output schema and annotations cover the rest, making it adequate without being verbose.

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

Parameters3/5

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

Schema fully describes both parameters (containerId as UUID, tail with default 200). Description adds no extra parameter information, so baseline of 3 applies due to high schema coverage.

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

Purpose5/5

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

Description states a specific verb ('Fetch') and resource ('logs from a container'), clearly distinguishing it from sibling tools like list_containers or exec_command. The purpose is unambiguous.

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

Usage Guidelines4/5

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

Explicitly provides a when-to-use context: 'Use this to debug crashes or check application output.' Does not name alternatives, but the guidance is clear and actionable.

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

list_containersA
Read-only

List all BasicDeploy containers owned by (or shared with) the authenticated user. Returns each container's id, subdomain, public URL, status, and creation time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of containers.
containersYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by specifying the ownership/sharing scope and enumerating the exact fields returned (id, subdomain, public URL, status, creation time), which goes beyond what annotations provide.

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

Conciseness5/5

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

A single, tightly worded sentence front-loads the action and resource, then lists the useful return fields. No filler, no repetition of schema or annotation information, and every clause earns its place.

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

Completeness5/5

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

For a simple, parameterless list operation with an output schema present and read-only annotations provided, the description is fully complete. It tells the agent what the tool lists and what data each result will contain; nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing for the description to explain. The schema already fully covers this with an empty properties object and 100% schema description coverage. The description instead adds value by describing the output fields, which is appropriate for a parameterless listing tool.

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

Purpose5/5

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

The description states a specific verb ('List'), a specific resource ('all BasicDeploy containers'), and a clear scope ('owned by (or shared with) the authenticated user'). This distinguishes it from sibling tools like get_container, which presumably fetches a single container, and create_container, which creates one.

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

Usage Guidelines4/5

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

The description clearly implies when to use it: when you need to enumerate containers visible to the authenticated user. It does not explicitly name alternatives or say 'use get_container for a single container', but the context of returning all containers provides clear usage intent without needing exclusions.

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

purge_topicA
Destructive

Purge (empty) one of the user's Kafka topics — deletes all its messages but KEEPS the topic. Use this to restart processing after a mistake: purge, then have consumers read from the start again. The topic name must be one the user owns (starts with their prefix).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFull topic name to purge (e.g. u-<hex>.orders).

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
purgedYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar for additional disclosure is lower. The description adds value by specifying the precise scope of destruction — messages are deleted while the topic itself survives — and by disclosing the ownership/prefix requirement. There is no contradiction with the annotations. An explicit 'irreversible' warning is absent, but 'deletes all its messages' combined with the destructive hint conveys the risk adequately.

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

Conciseness5/5

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

Three sentences, each with a distinct job: the first states the action and its key nuance (messages gone, topic kept), the second gives the usage workflow, the third states the required precondition. The most important information is front-loaded, and there is no filler or repetition of schema content.

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

Completeness4/5

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

For a single-parameter destructive tool with an output schema and safety annotations, the essential information is present: what it does, when to use it, and the prerequisite topic ownership. The only notable gap is an explicit 'cannot be undone' warning, though that is largely implied by 'deletes all its messages' and destructiveHint=true. Overall, an agent has enough to select and invoke this tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by making explicit the non-obvious ownership eligibility rule: 'The topic name must be one the user owns (starts with their prefix).' This tells the agent to verify ownership before invoking, which the schema's example (u-<hex>.orders) only hints at.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Purge (empty) one of the user's Kafka topics.' It goes further by explicitly stating the scope — 'deletes all its messages but KEEPS the topic' — which differentiates it from the sibling delete_topic without needing to name it. An agent can instantly understand what this tool does and how it differs from the destructive sibling.

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

Usage Guidelines4/5

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

The description gives a concrete when-to-use scenario: 'Use this to restart processing after a mistake: purge, then have consumers read from the start again.' It also adds a precondition — the topic must be one the user owns (starts with their prefix). It does not explicitly name alternatives or state when not to use it, but the 'KEEPS the topic' contrast with delete_topic provides sufficient routing context.

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

set_always_onA

Turn a container's always-on (24/7, never sleeps) flag on or off. On Free this consumes a paid always-on add-on slot (fails if none is free); on Pro/Scale every container is always-on already. Returns the updated container.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYestrue to enable always-on, false to disable.
containerIdYesThe container's UUID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesContainer UUID.
urlYesPublic HTTPS URL.
statusYesLifecycle status, e.g. running or sleeping.
createdAtNoCreation time (ISO 8601).
subdomainYesContainer subdomain.
memoryBytesNoMemory limit in bytes.
storageBytesNoStorage used in bytes.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the mutation indicated by readOnlyHint=false, the description discloses a significant side effect: consuming a paid always-on add-on slot on Free and failing when none is free. It also explains plan-specific behavior and states that the updated container is returned, adding real behavioral context the annotations do not provide.

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

Conciseness5/5

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

The description is two sentences with no filler: the operation is front-loaded, then the Free/Pro caveat and return value follow. Every sentence earns its place.

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

Completeness5/5

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

For a simple two-parameter boolean mutation with an output schema, the description covers the operation, plan-specific behavior, failure condition, and the return value. An agent has enough context to call it correctly without further documentation.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters, containerId and enabled, are already well documented in the input schema. The description adds no new parameter-level detail, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb and resource: 'Turn a container's always-on (24/7, never sleeps) flag on or off.' The parenthetical 'never sleeps' and the flag semantics distinguish it clearly from one-shot wake/sleep operations among the sibling tools.

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

Usage Guidelines4/5

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

The description gives clear plan-dependent context: on Free it consumes a paid add-on slot and can fail, while on Pro/Scale every container is already always-on. This effectively tells an agent when the tool is needed or unnecessary, though it does not explicitly name alternative sibling tools like wake_container.

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

share_containerA

Share a container with another BasicDeploy user by email, giving them access to it. The recipient is emailed a link that signs them in and opens the container. Optionally pass expiresInHours to make the share expire after that many hours (omit for a share that never expires).

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address of the user to share with
containerIdYesUUID of the container
expiresInHoursNoOptional. Hours until the share expires. Omit for an unlimited (never-expiring) share.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo

TDQS

A4.2/5.0
Behavior4/5

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

The description goes beyond the annotations by explaining the recipient experience (emailed a link that signs them in and opens the container) and the expiration semantics. It does not repeat the annotation values and adds genuinely useful behavioral context.

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

Conciseness5/5

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

Two focused sentences with no wasted words. The main purpose is front-loaded, and the optional parameter behavior is described compactly in the second sentence.

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

Completeness4/5

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

The description covers the tool's purpose, recipient behavior, and optional expiration. Since an output schema is present, return-value documentation is not needed here. It is complete for an agent to invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters. The description adds some context about the expiration behavior, but this closely mirrors the existing schema description. No parameter is left unclear.

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

Purpose5/5

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

The description states a specific verb ('Share'), a resource ('a container'), a recipient type ('another BasicDeploy user'), and a method ('by email'). This clearly distinguishes it from sibling tools like create_container, get_container, and delete_container.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when a user needs to grant another BasicDeploy user access to a container by email. It does not explicitly name alternatives or exclusions, but the purpose is specific enough that an agent can select it confidently.

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

sleep_containerA

Sleep a running container: stop it to free memory while keeping its volume, database, and public URL, so it wakes again on the next request. Returns the updated container.

ParametersJSON Schema
NameRequiredDescriptionDefault
containerIdYesThe container's UUID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesContainer UUID.
urlYesPublic HTTPS URL.
statusYesLifecycle status, e.g. running or sleeping.
createdAtNoCreation time (ISO 8601).
subdomainYesContainer subdomain.
memoryBytesNoMemory limit in bytes.
storageBytesNoStorage used in bytes.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description does not need to restate that this is a non-read-only, non-destructive mutation. It adds valuable behavioral detail: the container is stopped, memory is freed, volume/database/URL are preserved, it wakes automatically on the next request, and the updated container is returned. This goes beyond what annotations or schema express.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and outcome, then provides the key preservation details and return value. Every clause adds information; there is no redundant or filler content.

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

Completeness5/5

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

For a one-parameter tool with a full input schema and an output schema available, the description covers what the tool does, why an agent would use it, what state is preserved, how it resumes, and what it returns. Nothing essential is missing for selecting and invoking the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100% for the only parameter, containerId, which is described as 'The container's UUID.' The tool description does not add any parameter-specific semantics, such as clarifying that the container must be running or that the ID refers to the target container for sleeping. With full schema coverage, the description is not required to expand on parameters, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Sleep a running container'), the resource affected (container), and the specific outcome: stopping it to free memory while preserving its volume, database, and public URL. This directly distinguishes it from sibling operations like wake_container, delete_container, or set_always_on.

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

Usage Guidelines4/5

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

The description communicates when to use the tool: when you want to free memory but retain state and have the container resume on the next request. It does not explicitly name alternatives (e.g., wake_container to resume, delete_container to permanently remove), but the implied contrast ('keeping its volume, database, and public URL') is clear enough for an agent to route correctly.

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

wake_containerA

Wake a slept container so it serves traffic again (start it). A no-op if it is already running. Note: any web request to the container's public URL also wakes it automatically. Returns the updated container.

ParametersJSON Schema
NameRequiredDescriptionDefault
containerIdYesThe container's UUID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesContainer UUID.
urlYesPublic HTTPS URL.
statusYesLifecycle status, e.g. running or sleeping.
createdAtNoCreation time (ISO 8601).
subdomainYesContainer subdomain.
memoryBytesNoMemory limit in bytes.
storageBytesNoStorage used in bytes.

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that the operation is idempotent ('a no-op if it is already running'), that it can be triggered indirectly by web traffic, and that it returns the updated container. These are useful behavioral details that annotations alone do not convey.

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

Conciseness5/5

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

The description is compact and well-structured: it opens with the core action, then adds the no-op caveat, the automatic-wake note, and the return value. Every sentence contributes useful information with no redundancy.

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

Completeness5/5

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

For a simple one-parameter tool with an output schema and clear annotations, the description covers the essential behavior, the no-op condition, a relevant side-channel trigger, and the return value. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters3/5

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

The input schema already fully documents containerId as 'The container's UUID' with 100% coverage. The description adds no extra parameter-level meaning, but none is needed given the schema is complete and the single parameter is self-explanatory.

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

Purpose5/5

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

The description states a specific verb ('Wake'), a resource ('a slept container'), and the desired outcome ('so it serves traffic again'). It also clarifies the no-op case for already-running containers, which makes the tool's exact purpose unmistakable and distinguishable from sleep_container.

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

Usage Guidelines4/5

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

The description clearly indicates when the tool applies: wake a slept container. It also gives an important contextual signal that a public web request wakes the container automatically, which helps an agent decide whether this explicit call is necessary. It does not explicitly name the sibling sleep_container as the inverse alternative, but the semantics are clear enough.

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

whoamiA
Read-only

Return the identity of the BasicDeploy account this connection is authenticated as — the user's email and account id. Use it to confirm WHICH user is logged in before acting on their behalf.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe account's UUID.
planNoThe account's plan name.
emailYesThe account's email.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark the tool as read-only and non-destructive. The description adds useful context by specifying the exact return contents (email and account id) and the purpose of confirming identity, which goes beyond the structured annotations.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action and return value, and then gives a practical usage note. Every word earns its place with no redundancy.

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

Completeness5/5

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

This is a simple zero-parameter, read-only identity-check tool. The description covers what it returns, what account context it refers to, and when to use it, while annotations cover safety and an output schema is present.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description correctly focuses on the behavior and return value rather than parameters, and the schema coverage is effectively complete.

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

Purpose4/5

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

The description clearly states the tool returns the authenticated BasicDeploy account identity, including the user's email and account id. It is specific about verb and resource, but it does not explicitly differentiate itself from the sibling get_account, so it falls short of a 5.

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

Usage Guidelines4/5

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

The description gives clear usage context: use it to confirm which user is logged in before acting on their behalf. It does not mention alternatives or when not to use it, but the intended scenario is explicit.

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.

  1. 18 tool updatesv2.0.3
    • First observedcreate_container
    • First observedcreate_topic
    • First observeddelete_container
    • First observeddelete_topic
    • First observeddeploy_app
    • First observedexec_command
    • First observedget_account
    • First observedget_container
    • First observedget_docs
    • First observedget_kafka
    • First observedget_logs
    • First observedlist_containers
    • First observedpurge_topic
    • First observedset_always_on
    • First observedshare_container
    • First observedsleep_container
    • First observedwake_container
    • First observedwhoami

TDQS

A4.1/5.0

Scored across 18 tools

Disambiguation4/5

Container tools and Kafka tools are cleanly separated, and lifecycle actions (create/get/list/delete/wake/sleep) each target a distinct operation. The only mild overlap is deploy_app vs exec_command, but their descriptions clearly differentiate local-tarball vs remote deployment.

Naming Consistency4/5

Most tools follow verb_noun snake_case (list_containers, create_topic, delete_container), making the set predictable. Exceptions like whoami and set_always_on are minor and still readable.

Tool Count4/5

18 tools is on the higher end but justified by two resource domains (containers and Kafka) plus account/meta helpers. Each tool addresses a real operation, though a few (get_docs, whoami) are auxiliary.

Completeness4/5

Container lifecycle is well covered: create, list, get, deploy, exec, logs, sleep/wake, share, delete, plus always-on. Kafka has get/create/purge/delete; missing container resize/custom-domain tools are workaroundable via exec_command but notable gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Dokploy deployments, including creating and deploying applications, managing databases, configuring domains with SSL, and monitoring application status through a standardized interface.
    27
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to deploy and manage applications on Coolify through structured tools, supporting project management, app lifecycle control, pre-configured templates, and deployment monitoring with built-in safety guardrails.
    139
    3
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to manage cloud infrastructure through natural language by providing a unified interface to the Dokploy platform. Supports Docker containers, applications, databases, domains, monitoring, and deployment operations through conversational commands.
    27
    1
    -