dockhand
This server provides natural language control over a local Docker daemon, enabling LLMs to manage containers, images, volumes, networks, and Docker Compose stacks.
Containers: Run, stop, start, restart, force-delete, list, view logs, inspect details (env vars, mounts, network IPs, health), get live CPU/memory stats, and execute commands inside containers.
Images: List, build from a Dockerfile, push to a registry (Docker Hub, ECR, etc.), and force-delete.
Volumes & Networks: List volumes, remove volumes (permanently), and list networks.
Compose Stacks: Deploy from a
docker-compose.yml, stop, remove (including containers, networks, and volumes), list all projects, check status, and collect logs.
Provides tools for managing Docker containers, images, volumes, networks, and Compose stacks through natural language.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dockhandrun an nginx container mapping port 8080 to 80"
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.
mcpdockery
An MCP server that gives an LLM (Claude, etc.) direct, natural-language control over your local Docker daemon — containers, images, volumes, networks, and Compose stacks.
Built with FastMCP and the Docker SDK for Python.
Table of contents
Related MCP server: Docker MCP Server
Requirements
Requirement | Notes |
Python >= 3.14 | Interpreter version pinned in |
Docker Desktop or Docker Engine, running locally | |
Docker Compose v2 CLI |
|
| |
| |
Used for dependency management and running the server |
For pulling from or pushing to a private registry (Docker Hub, AWS ECR, GCR, etc.), authenticate with that registry beforehand using your normal docker login flow — this server never accepts or stores credentials itself.
Installation
Clone the repository:
git clone <this-repo> cd mcpdockeryInstall dependencies:
uv syncThis creates a
.venvand installs the exact dependency versions pinned inuv.lock.Confirm Docker is running:
docker infoIf this command fails, start Docker Desktop (or your Docker Engine) before continuing.
Running the server
uv run src/main.pyThe server communicates over stdio, so it's meant to be launched by an MCP client rather than run standalone in a terminal.
Connecting to an MCP client
Add an entry to your MCP client's configuration (e.g. claude_desktop_config.json for Claude Desktop, or your project's .mcp.json for Claude Code):
{
"mcpServers": {
"mcpdockery": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/mcpdockery", "run", "src/main.py"]
}
}
}Replace /absolute/path/to/mcpdockery with the actual path where you cloned the repository, then restart the client. The tools listed below will become available to the model.
Available tools
Containers (containers.py)
Tool | Description |
| Runs a container from an image, mapping a container port to a host port |
| Stops a running container |
| Starts a stopped container |
| Restarts a container |
| Force-removes a container (stops it first if needed). Destructive — requires |
| Lists all containers and their status |
| Fetches the last N log lines from a container. Secret-shaped values (passwords, tokens, API keys) are redacted |
| Reports live CPU % and memory usage |
| Shows env vars, mounts, network IPs, and health status. Secret-shaped env values are redacted |
| Executes a shell command inside a running container. Secret-shaped values in the output are redacted |
Images (images.py)
Tool | Description |
| Lists all local images, including untagged/intermediate ones, with size |
| Pulls an image from a registry without running it; defaults to the |
| Builds an image from a Dockerfile already on disk |
| Tags and pushes a local image to a registry (requires prior |
| Force-removes a local image. Destructive — requires |
Volumes (volumes.py)
Tool | Description |
| Lists volumes with driver and mountpoint |
| Creates a new volume |
| Deletes a volume (fails if still in use). Destructive — requires |
Networks (networks.py)
Tool | Description |
| Lists networks with driver and scope |
| Creates a new network |
Optimization (optimization.py)
Tool | Description |
| Detects whether a Dockerfile would benefit from a multi-stage build (build-tool commands in a single-stage image); returns reasoning + raw content for the model to draft the rewrite |
Diagnostics (diagnostics.py)
Tool | Description |
| Scans all containers and reports only the ones needing attention: OOM kills, restart loops, unhealthy checks, crashes, high CPU/memory |
| Flags running containers with sensitive ports (databases, admin panels, Docker daemon API) or any port bound to all network interfaces |
Security (security.py)
Tool | Description |
| Scans an image for known vulnerabilities using Trivy; defaults to CRITICAL/HIGH severity only |
| Generates a Software Bill of Materials (SBOM) for an image using Trivy, in CycloneDX or SPDX-JSON format |
| Scans a Dockerfile for misconfigurations (root user, |
| Lints a Dockerfile with Hadolint for best-practice/style issues (unpinned versions, |
| Combined report: |
Compose stacks (stacks.py)
Tool | Description |
| Deploys a stack from an inline |
| Stops a stack's containers without removing them |
| Stops and removes a stack, including its volumes ( |
| Lists all compose projects, including stopped ones |
| Shows the status of a stack's containers ( |
| Collects logs from every container in a stack |
Usage examples
Once connected, you can drive the server with natural-language requests. A few examples of what to expect:
You ask | Tool(s) the model will likely use |
"Pull the alpine version of redis" |
|
"Run an nginx container on port 8080" |
|
"Show me the logs for my-app from the last hour" |
|
"What's using all the CPU right now?" |
|
"Is anything broken right now?" |
|
"Is anything exposed to the network that shouldn't be?" |
|
"Deploy this docker-compose file as 'staging'" |
|
"Push my-app:latest to my ECR repo" |
|
"Clean up the my-app container and its image" |
|
"Scan my-app:latest for vulnerabilities" |
|
"Generate an SBOM for my-app:latest" |
|
"Check my Dockerfile for security issues before I build it" |
|
"Lint my Dockerfile for best practices" |
|
"Check/review my Dockerfile" |
|
"Should this Dockerfile use multi-stage builds?" |
|
The model chooses which tool(s) to call based on your request — you don't need to name the tool yourself.
Project structure
src/
main.py # Entrypoint: registers tool modules and starts the MCP server
server.py # Shared FastMCP server instance
docker_client.py # Lazy singleton Docker SDK client
compose_client.py # Thin wrapper around the `docker compose` CLI
helper.py # Shared helpers (path normalization, image tag parsing, Trivy wrapper)
containers.py # Container lifecycle & inspection tools
images.py # Image pull/build/push/list/delete tools
volumes.py # Volume tools
networks.py # Network tools
stacks.py # Compose stack tools
security.py # Image/Dockerfile vulnerability & misconfiguration scanning tools
diagnostics.py # Cross-container health triage tools
optimization.py # Dockerfile efficiency analysis toolsSafety notes
This server gives the model real, unsandboxed control over your Docker daemon:
delete_container,delete_image,remove_volume, andremove_stackare destructive and require an explicitconfirm=Trueargument. The first call (confirm defaults toFalse) performs no action and only returns a preview of what would be deleted — the model is instructed to only passconfirm=Trueafter you've explicitly agreed in the conversation. This is a safety net against a misread request, not a hard permission system: any client with tool access can still passconfirm=Truedirectly.remove_stackdeletes volumes (-v), which is destructive and irreversible for stateful data.container_execruns arbitrary shell commands inside a container.container_logs,container_exec, andcontainer_inspectredact values that look like secrets (keys matching PASSWORD/TOKEN/API_KEY/etc., inKEY=value,KEY: value, or"key": "value"form) before returning them. This is a best-effort heuristic, not a guarantee — anything that doesn't match the pattern (or that a container prints in an unusual format) is returned as-is, and remember that tool output is sent to the model provider as part of the conversation regardless of how "local" the Docker daemon is.push_imageandpull_imageuse your existing local Docker credentials — the model can push to or pull from any registry you're currently authenticated with. Note that AWS ECR tokens expire after 12 hours; if a push/pull suddenly fails with an auth error, re-run yourdocker login/aws ecr get-login-passwordflow rather than assuming the tool is broken.The Docker socket grants root-equivalent access to the host. Giving a model tool access to this server is equivalent to giving it that level of access to your machine, whether or not the daemon is reachable over the network.
Only connect this server to clients/agents you trust, and be deliberate about which containers and stacks you let it touch.
License
No license specified.
Available Tools
23 toolsbuild_imageA
Builds a Docker image from a Dockerfile already saved on disk. The build context is the folder containing the Dockerfile, so COPY/ADD of other files in that same folder works normally. Accepts either a Windows path ("C:\path\Dockerfile") or a Git Bash style path ("/c/path/Dockerfile"). Args: image_tag: tag to give the built image, e.g. "my-app:latest" dockerfile_path: full path to an existing Dockerfile on this machine
| Name | Required | Description | Default |
|---|---|---|---|
| image_tag | Yes | ||
| dockerfile_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the full burden of behavioral disclosure. It states the action (builds) but does not explicitly mention side effects like creating a local image, potential network access, or that it does not affect running containers. This is not misleading, but it lacks explicit transparency about the operation's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The first sentence states the core purpose, followed by clarifying context about build context and path formats, then a clean listing of the two arguments. It maintains a logical flow without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the essential context for a build operation: what it does, build context behavior, and path format requirements. The output schema exists, so return values do not need to be described. While it omits details like error conditions or prerequisites (e.g., Docker daemon must be running), these are likely assumed for a Docker tool and do not severely impact 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 description enriches parameter understanding beyond the schema. It explicitly describes image_tag as 'tag to give the built image' with an example, and dockerfile_path as 'full path to an existing Dockerfile' with details on accepted path formats. This adds significant semantic clarity beyond the basic type/title information in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Builds a Docker image from a Dockerfile already saved on disk.' It specifies the verb (builds), resource (Docker image from Dockerfile), and scope (from a saved file). This unambiguously distinguishes it from other Docker-related tools like running containers or pulling images.
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 practical usage guidance by clarifying that the build context is the folder containing the Dockerfile and by specifying accepted path formats (Windows and Git Bash). It does not explicitly compare against alternative tools, but the purpose is clear enough that an agent can infer 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.
container_execB
Executes a shell command inside a running container and returns its output. Args: container_name: Docker Container name command: shell command to run inside the container, e.g. "ls -la /app"
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses basic behavior: executes a command and returns output. However, it lacks detail on shell used (likely /bin/sh), handling of stderr, or non-zero exit codes. Since no annotations are provided, more transparency would be beneficial but the description is minimally adequate.
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 plus a brief bullet list. No extraneous content. Front-loaded with purpose statement. The structure is clean, though the Args section could be integrated more formally.
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 simplicity of the tool (two string params, output schema exists), the description is mostly sufficient. However, it omits details like what shell executes the command, whether it returns both stdout and stderr, or exit code behavior. 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?
Schema descriptions are missing (0% coverage), but the description's Args section adds clear meaning: 'Docker Container name' and 'shell command to run inside the container, e.g. "ls -la /app"'. This adds value beyond the schema and aids 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 it executes a shell command inside a running container and returns output. It specifies 'inside a running container', which differentiates it from sibling tools like run_container that create new containers. However, it could explicitly state that the container must already be running.
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 run_container, container_logs, or other sibling tools. The description implies execution of arbitrary commands but does not mention prerequisites, limitations (e.g., no interactive execution), 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.
container_inspectA
Returns detailed information about a container: environment variables, mounts, network IP, and health status. Args: container_name: Docker Container name
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses what information is returned (environment, mounts, network, health), but does not explicitly state it is read-only with no side effects. However, inspection impliedly is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with two sentences plus an Args line. Front-loaded with the main purpose, 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 has an output schema, the description does not need to detail return values. It lists key fields returned. The tool is simple with one parameter, so description is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only repeats the parameter name ('container_name') with a minimal phrase 'Docker Container name' that adds no meaningful detail beyond the schema's title.
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 'Returns detailed information about a container' and lists specific details (environment variables, mounts, network IP, health status). This distinguishes it from sibling tools like container_logs or container_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., container_logs for logs, container_stats for stats). The purpose is clear but lacks context on 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.
container_logsB
Collect and display the logs for a container Args: container_name: Container name to collect logs tail: Number of log lines to return (default 200)
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | ||
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior but only says 'collect and display'. Missing details: whether logs are streamed or one-shot, behavior for stopped containers, log format, or error handling (e.g., container not found).
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 brief and to the point, with no wasted words. The structure lists parameters separately. However, key behavioral info is missing, which dampens conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and minimal description, the tool may need more context (e.g., log format, output schema nature). The description does not cover what the output looks like or edge cases, making it incomplete for an 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?
Schema coverage is 0%, so description must add meaning. It explains that container_name identifies the container and tail sets the number of lines (default 200). This is basic but sufficient for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('collect and display') and the resource ('logs for a container'). It differentiates from sibling tools like stack_logs (stack-level logs) and container_stats (performance stats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks guidance on when to use this tool over alternatives (e.g., stack_logs for stack logs, container_inspect for config). No prerequisites or conditions for use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_restartD
Restarting a container Args: container_name: name to restart the container
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations and the description gives no insight into side effects, such as whether the container's state is preserved, whether it performs a graceful shutdown, or whether it forces a restart. The user is left completely in the dark 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?
The description is extremely concise, which is positive, but it is so brief that it omits critical information. It is a single sentence with no structure or additional context, making it efficient yet insufficient.
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 rich set of sibling tools (start, stop, inspect, logs, etc.), this description fails to place restart in context. It does not explain what happens to running processes, how it interacts with container state, or what output might be expected. Despite having an output schema, it is not described.
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 only parameter, container_name, is listed in the schema but the description adds no additional meaning—no format, no examples, no constraints, and no indication of whether it must be an ID or a name. Schema coverage is 0%, so the description must compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Restarting') and resource ('a container'), but does not clarify what restarting entails (stop then start) or how it differs from sibling tools like container_start or stop_container. It is understandable but lacks sufficient differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as container_start, stop_container, or container_exec. The description does not mention scenarios where restart is preferred or any prerequisites (e.g., container must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_startC
Starting a container Args: container_name: name to start the container
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description does not disclose side effects, state changes, idempotency, error behavior, or permissions. Starting a container is a state-changing operation, but the description only states the action without explaining consequences.
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 and contains no unnecessary words or redundant content. The structure is clear 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?
The description is too sparse to be considered complete for an agent. It omits behavioral details, error conditions, return expectations, and any relationship to sibling tools, leaving the agent to infer important 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?
The schema has one parameter with no description coverage, but the tool description includes an Args line: 'container_name: name to start the container.' This minimally compensates for the schema gap, though it lacks detail about format, constraints, or validation.
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 and resource: 'Starting a container.' It distinguishes this tool from sibling tools like container_stop and container_restart, though it does not explicitly mention Docker or 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?
The description provides no guidance on when to use this tool versus alternatives such as run_container or deploy_stack. It does not explain prerequisites, when starting is appropriate, or how it differs from related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
container_statsA
Shows live CPU and memory usage for a running container. Args: container_name: Docker Container name
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of signaling behavior. The word 'Shows' implies a read-only operation, but the description does not explicitly state that no state is modified, nor does it mention potential failure modes (e.g., container not running) or permission requirements. It is accurate 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 extremely concise, consisting of two short sentences. It states the purpose and the argument with no extraneous words. The structure is clean 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?
For a simple read-only tool with a single parameter, the description is adequately complete. It tells the user what the tool does and what input it needs. It does not describe the output format (e.g., JSON metrics), but this is not strictly required for a tool of this simplicity, and the sibling context suggests a standard metrics output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, container_name, is described as 'Docker Container name,' which matches the schema title. This is clear for a simple identifier, but the description adds no additional context (e.g., format, name vs. ID, or that the container must exist). It does not go beyond the schema's minimal information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Shows live CPU and memory usage for a running container.' It uses the specific verb 'Shows' and identifies the resource (CPU/memory usage) and target (running container), distinguishing it from sibling tools that handle logs, inspection, or execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention, for example, that it is preferable to container_inspect for live metrics, or that it requires a running container. Users are left to infer usage context from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_containerA
Delete a container by its name. Stops it first if it's still running. Args: container_name: Container name that should be deleted
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 key behavior of stopping the container if running. However, it omits other important details such as what happens if the container does not exist, whether data is permanently lost, or any required permissions. The description adds useful context but is not fully transparent for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences plus an args line) and front-loaded with the purpose. Every sentence serves a purpose, but the args section is redundant with the schema and could be omitted. Overall, it is concise and well-structured, losing a point for the unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required parameter, output schema present), the description covers the core purpose and main behavioral nuance (auto-stopping). It does not explain return values or error handling, but the output schema likely covers the return structure. It is reasonably complete for a straightforward delete operation, though mentioning permanence would help.
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 0%, and the description only repeats the parameter name ('Container name that should be deleted') without adding semantic details like format, validation rules, or examples. While the parameter is simple (single string), the description adds minimal value beyond the schema's title and type.
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: 'Delete a container by its name.' It specifies a unique action (delete) and resource (container), and distinguishes from siblings like 'stop_container' (only stops) and 'container_start' (starts). The added behavior 'Stops it first if it's still running' further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: when you want to delete a container. It implies that prior stopping is unnecessary, but does not explicitly state when not to use it (e.g., if you only want to stop) or mention alternative tools. Given the context signals listing many sibling tools, some exclusion guidance would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_imageA
Delete a Docker image by tag or ID. Removed even if still referenced by a stopped container (force). Args: image_name: image name to be deleted
| Name | Required | Description | Default |
|---|---|---|---|
| image_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 force removal behavior for stopped containers but omits details like permissions, irreversibility, or behavior with running containers. The output schema exists but is not referenced.
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 with two clear sentences and an inline argument list. It is front-loaded with the main action and wastes no 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 an output schema, the description covers the core behavior and force removal. It could mention error cases or required permissions, but it is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds minimal value by restating the parameter as 'image name to be deleted', which is nearly a tautology of the schema's title 'Image Name'. No additional format or constraints are provided.
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 'Delete a Docker image by tag or ID' with a specific verb and resource. It also mentions the force behavior, distinguishing it from sibling tools like delete_container or remove_volume.
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 deleting images but provides no explicit guidance on when to use this tool versus alternatives like list_images or other deletion tools. The force behavior hint is useful but not a full usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_stackA
Deploys a multi-container application from a docker-compose YAML definition. Args: project_name: unique name for this stack, used to group/manage its containers compose_yaml: full contents of a docker-compose.yml describing the services
| Name | Required | Description | Default |
|---|---|---|---|
| compose_yaml | Yes | ||
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full responsibility for disclosing side effects. It only says 'deploys' but does not explain what happens to an existing stack with the same project name, whether resources are created or modified, or what state changes occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear one-sentence purpose followed by succinct parameter explanations. No redundant or irrelevant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool, the description covers the core invocation details and the purpose of each parameter. It could mention expected output or side effects, but the provided information is mostly sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides type and required status, while the description adds meaningful semantics for both parameters: project_name is a unique grouping identifier, and compose_yaml must contain the full docker-compose.yml contents. This fully covers the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: deploying a multi-container application from a docker-compose YAML definition. It identifies the specific resource and scope without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when deploying a Compose-based stack, but it does not explicitly explain when to prefer this tool over sibling tools such as run_container, stack_status, or remove_stack. No direct alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersB
Returns all containers with their status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. It implies a read-only listing operation but does not explicitly state whether it has side effects, requires permissions, or how it handles errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list operation, the description is sufficient to understand the basic invocation. However, it does not describe the return structure or potential limitations, relying on the separately noted output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100%, so there are no parameter semantics missing.
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 and result: 'Returns all containers with their status.' The tool name aligns with the purpose, though it could add detail about the scope of 'all containers'.
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 sibling tools like list_volumes or list_images. The description does not mention use cases, prerequisites, or conditions for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesA
List all Docker images
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'List all Docker images' and does not mention that it is a read-only operation, potential pagination, or performance implications. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words. Every word adds value, fitting the tool's simplicity perfectly.
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 parameters and an output schema, the description 'List all Docker images' is fully complete. It tells the agent exactly what the tool does without ambiguity. No additional context is 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?
There are zero parameters and schema description coverage is 100%, so the baseline score of 3 applies. The description adds no parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all Docker images' uses a specific verb and resource, clearly defining the tool's function. It distinguishes itself from sibling tools like build_image, delete_image, and push_image, which perform different image 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 provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or boundaries. For example, it does not specify that this tool lists all images globally (no filters) or that it complements other image tools like inspect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_networksA
Lists all Docker networks with their driver and scope
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As a listing operation, it implies read-only behavior with no side effects. However, the description does not explicitly state that it does not modify any resources or mention any permissions or rate limits. The lack of annotations places the full burden on the description, which is mostly adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no superfluous words. It directly conveys the tool's purpose and output content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool, the description is complete. It states what is listed (all Docker networks) and what information is provided (driver and scope). No additional context is necessary 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the empty input schema fully covers all possible inputs. The description does not need to elaborate on parameter details because there are none.
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 action ('Lists') and the resource ('all Docker networks') along with the relevant attributes ('driver and scope'). This distinguishes it from sibling tools like 'create_network' or 'list_containers'.
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 explicitly mention when to use this tool versus alternatives. While the purpose is obvious, it lacks direct guidance such as 'Use this to view network details, not to create or modify them.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stacksA
Lists all compose projects, including stopped ones
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It states the operation is a list, which strongly implies a read-only action without side effects. However, it does not explicitly say 'does not modify state' or mention any permission requirements. The lack of explicit disclosure is acceptable given the simplicity, but not exemplary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the essential information without unnecessary words. It is directly to the point and 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?
Given the simplicity of the tool (no parameters, no output schema, no annotations), the description is fully complete. It tells the user exactly what the tool does and the scope of results. No additional context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the schema coverage is 100% (vacuously). Since there are no parameters to describe, the baseline score of 3 applies. The description adds no parameter-specific information because none exist.
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 (lists), the resource (compose projects), and the scope (including stopped ones). This removes ambiguity about whether running or stopped projects are included. It is a precise, unambiguous statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives such as list_containers or list_networks. However, the tool name and description make its specific purpose clear; it is the only tool that lists compose projects. There is no direct guidance, but the context is sufficient for basic use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_volumesA
Lists all Docker volumes with their driver and mountpoint
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only listing operation but does not explicitly confirm the absence of side effects or provide details about output format (e.g., JSON array). It does not mention any sorting, filtering, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the essential function without redundancy. It is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation, the description gives sufficient context, including the resource and the returned fields. However, it does not specify the return format or any potential error conditions, which could be useful for an 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?
There are no parameters, so the description's lack of parameter-specific details is fully appropriate. The empty input schema is trivially covered.
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 (Lists), the resource (Docker volumes), and the output details (driver and mountpoint). It distinguishes itself from sibling tools like create_volume and remove_volume by focusing solely 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?
The description does not explicitly state when to use this tool instead of alternatives. It implies usage for inspecting volumes, but lacks explicit guidance about when not to use it, such as when needing to create or remove volumes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_imageA
Tags a local Docker image with a registry repository name and pushes it
(e.g. Docker Hub, AWS ECR). Requires that you have already run docker login
locally — this tool does not accept credentials.
Args:
local_image: the image currently on your machine, e.g. "my-app:latest"
repository: full destination repository name, e.g. "myusername/my-app"
or "123456789012.dkr.ecr.eu-west-1.amazonaws.com/my-app"
image_tag: tag to push, e.g. "latest" or "v1.0"
| Name | Required | Description | Default |
|---|---|---|---|
| image_tag | No | latest | |
| repository | Yes | ||
| local_image | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool tags a local image and pushes it, and that it requires prior docker login. It does not mention potential side effects such as overwriting an existing remote tag or modifying the local image tag list, nor does it describe failure modes. Since there are no annotations, the description carries the burden but only partially covers behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The first sentence states the purpose, the second provides a prerequisite and a constraint, and the argument list gives examples in a clear bullet-like format. No extraneous information is included.
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 straightforward push operation, the description covers the essential preconditions and parameters. It does not explain the output or return value, but an output schema is present, so that information is available elsewhere. It also does not address edge cases like tag overwriting, but these are arguably beyond the scope for a basic tool description.
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 three parameters are clearly explained in the description text with examples: local_image is the current machine's image, repository is the full destination name, and image_tag is the tag to push. Although the schema itself lacks descriptions (coverage 0%), the description provides full semantic coverage, so the added meaning is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it tags a local Docker image with a registry repository name and pushes it. It also provides concrete examples (Docker Hub, AWS ECR) that situate it within the container management context. While it does not explicitly name a sibling tool, the action (push) is distinct from pull, build, and list operations, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite (docker login) and explicitly states that credentials are not accepted, but it does not provide guidance on when to choose this tool over alternatives (e.g., when to use push_image versus pull_image or build_image). It lacks a 'use this when...' or 'use that instead when...' recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_stackA
Stops and permanently removes a compose stack: containers, networks, and volumes (data is deleted). Args: project_name: unique name for this stack, used to group/manage its containers
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that the operation permanently removes containers, networks, and volumes with data deletion. This is strong disclosure of destructive behavior, compensating for the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no unnecessary words. It front-loads the main action and then clarifies the parameter. Every sentence 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?
Given the low complexity (1 parameter, output schema exists), the description covers the core functionality well. It could be improved by mentioning prerequisites (e.g., stack must exist) but is already adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'project_name' is described as 'unique name for this stack, used to group/manage its containers', adding meaningful context beyond the schema's title. This compensates for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Stops and permanently removes' and the resource 'compose stack', listing affected components (containers, networks, volumes). It is distinct from sibling tools like 'stop_stack' which only stops without removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'stop_stack' or 'deploy_stack'. There is no mention of prerequisites or situations where removal is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_volumeA
Deletes a Docker volume by name. Data stored in it is permanently lost. Fails if the volume is currently in use by a container. Args: volume_name: name of the volume to remove
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description correctly discloses destructive behavior ('permanently lost') and a specific error condition (fails if in use). It does not address what happens if the volume doesn't exist, but the core behavioral traits are well communicated.
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: three short sentences plus an Args line. Every sentence adds essential information (purpose, consequence, failure condition, parameter). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool, the description covers the key aspects: what it does, what it destroys, and when it fails. It does not describe the return value or confirmation, but given the output schema exists and the tool's low complexity, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. However, it only restates the parameter name ('volume_name: name of the volume to remove'), adding minimal meaning beyond the schema. It does not provide format constraints, examples, or additional context to fully clarify the parameter's usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Deletes'), the resource ('a Docker volume by name'), and includes a critical consequence ('Data stored in it is permanently lost'). This makes the tool's purpose unambiguous and distinctly different from sibling tools like delete_container.
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 states the tool's primary use (deleting a volume) and a key precondition ('Fails if the volume is currently in use by a container'). This provides clear context for when the tool can be used, though it doesn't mention alternatives or when not to use it beyond the failure case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_containerA
Runs a Docker container locally for testing Args: image: Docker image to run, e.g. "nginx:latest" If no tag is specified, then usel alpine for default.It is smaller and faster to pull container_name: container name container_port: port the app listens on INSIDE the container, e.g. "80" for nginx host_port: port on your machine to access it, e.g. "8080" → http://localhost:8080
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | ||
| host_port | Yes | ||
| container_name | Yes | ||
| container_port | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for revealing side effects. It mentions running a container locally but does not disclose that it creates a new container, maps ports, pulls images if missing, or whether the container runs detached. The default alpine tag behavior is mentioned, but other significant side effects are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise and structured with an 'Args:' section and clear parameter lines. However, it contains a typo ('usel' instead of 'use') and a slightly run-on sentence, which slightly detracts from clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has four required parameters and an output schema exists, the description adequately covers all necessary inputs and the overall purpose. It does not explain the return value, but that is expected to be covered by the output schema, so the description is complete enough 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions, but the description explains all four parameters (image, container_name, container_port, host_port) with concrete examples and the image default behavior. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Runs a Docker container locally for testing', providing a specific verb and resource. It is distinct from sibling tools like container_start (which starts an existing container) but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives examples for each argument and explains the default alpine tag behavior, but it does not explicitly state when to prefer this tool over sibling tools like container_start or deploy_stack. The intended use case is implied but not explicitly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stack_logsA
Collects logs from all containers in a compose stack. Args: project_name: unique name for this stack, used to group/manage its containers tail: number of log lines to return per container (default 200)
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | ||
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Collects logs' without disclosing side effects, permissions, or whether it is read-only. There is no mention of potential large output or formatting details.
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 brief and to the point, with a clear one-line summary followed by a compact Args list. No redundant language or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema covers the return structure, and the description provides enough to understand the tool's purpose for a simple log retrieval. It does not mention output formatting or combined log order, but this is not critical for a logs tool and sibling tools likely follow similar patterns.
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?
Despite 0% schema coverage, the description explicitly explains both parameters (project_name and tail) and notes the default for tail. This fully compensates for the missing schema 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 clearly states the action ('Collects logs') and the target ('all containers in a compose stack'), which distinguishes it from container_logs (likely single-container). The verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when logs are needed from an entire stack, but it does not explicitly state when to use this tool over alternatives like container_logs, nor does it provide any contextual prerequisites or exceptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stack_statusA
Shows the status of all containers in a compose stack (like docker compose ps). Args: project_name: unique name for this stack, used to group/manage its containers
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of disclosing side effects. It states the action (shows status) which implies a read-only operation, but it does not explicitly confirm that no modifications occur, nor does it mention any permissions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and to the point, with the primary action stated first. The parameter explanation is concise and directly relevant, with no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with a single parameter, the description provides sufficient context to call it correctly. It does not detail the return format, but the presence of an output schema likely covers that, and the tool's purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the parameter, but the tool description adds a meaningful explanation: 'unique name for this stack, used to group/manage its containers'. This clarifies the parameter's role and compensates for the schema's lack of description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: showing the status of all containers in a compose stack. The analogy to 'docker compose ps' is immediately recognizable and distinguishes it from sibling tools like stack_logs or list_stacks.
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 via the 'docker compose ps' analogy, but it does not explicitly state when to use this tool over alternatives. No direct comparison to sibling tools is provided, leaving the agent to infer the appropriate context from the action alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_containerC
User will pass the container name that we need to stop Args: container_name: Docker Container name
| Name | Required | Description | Default |
|---|---|---|---|
| container_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states 'stop' without disclosing side effects, whether the container is removed or merely halted, failure conditions, or whether the operation blocks until stopped.
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 brief and to the point, with no redundant wording. It is slightly awkward with 'User will pass' but still structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool this is very sparse. It does not mention expected output, error behavior, whether the container must already exist, or whether it can be restarted later. Even with a simple operation, an agent needs more context to use it reliably.
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 parameter schema is minimal and the description adds little beyond repeating that it is a container name. No format, validation, examples, or constraints are provided, so the description does not meaningfully enrich the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action as stopping a Docker container by name, and the tool name reinforces this. It is unambiguous and distinct from sibling actions like starting, restarting, or deleting containers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many sibling tools. It does not explain scenarios where stopping is appropriate, nor does it contrast with start, restart, or delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_stackA
Stops all containers in a compose stack without removing them, so it can be started again later. Args: project_name: unique name for this stack, used to group/manage its containers
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the non-destructive nature ('without removing them') and the resumability, which are key behavioral traits. It omits edge cases like handling non-existent stacks, but core behavior is 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?
The description is concise and well-structured, with the purpose stated in the first sentence and parameter documentation in a clean list. No redundant or extraneous information is present.
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 operation, the description provides sufficient context: what it does, what it preserves, and the parameter's meaning. It does not mention return values or error behavior, but given the tool's simplicity and the absence of an output schema in the example, this is acceptable.
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 includes an Args section defining project_name as 'unique name for this stack, used to group/manage its containers,' which adds meaningful context beyond the schema's minimal type/title. This adequately explains the parameter's role, though it could mention how to discover it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops all containers in a compose stack without removing them, and explicitly notes it can be started again later. This distinguishes it from stop_container and remove_stack, providing a precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without removing them, so it can be started again later' implicitly guides when to use this tool versus a removal tool. However, it does not explicitly compare to sibling tools like stop_container or remove_stack, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
v0.1.0- First observed
build_image - First observed
container_exec - First observed
container_inspect - First observed
container_logs - First observed
container_restart - First observed
container_start - First observed
container_stats - First observed
delete_container - First observed
delete_image - First observed
deploy_stack - First observed
list_containers - First observed
list_images - First observed
list_networks - First observed
list_stacks - First observed
list_volumes - First observed
push_image - First observed
remove_stack - First observed
remove_volume - First observed
run_container - First observed
stack_logs - First observed
stack_status - First observed
stop_container - First observed
stop_stack
TDQS
Scored across 23 tools
Each tool targets a distinct Docker operation (image build, container exec, stats, logs, stack management, etc.), with clear descriptions that prevent confusion. The only potential overlap is between container_start and run_container, but descriptions clarify that one starts an existing container and the other creates and starts a new one.
Naming conventions are mixed: some tools use verb_noun (build_image, delete_container), others use noun_verb (container_exec, container_inspect), and list tools use list_noun. While individually readable, the lack of a unified pattern (e.g., all verb_noun or all noun_verb) makes it harder to predict tool names.
With 23 tools covering images, containers, volumes, networks, and stacks, the number is appropriate for a Docker management server. It's comprehensive but not overwhelming, though a few tools (like list_networks and list_volumes) could be merged without loss of clarity.
Core Docker workflows are well-covered: building/pushing images, running/executing/inspecting containers, managing stacks. However, missing network creation/removal and volume creation mean agents may hit dead ends when trying to set up isolated test environments.
Maintenance
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Synap (pool.linkrra.com/v1), Linkrra's OpenAI-compatible LLM API, as an MCP server.
Related MCP Servers
- FlicenseAqualityFmaintenanceA Model Context Protocol server that enables Docker container management through natural language interactions using a custom GPT interface.715-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables managing Docker containers through natural language commands, allowing users to create, list, and delete containers. It facilitates automated container orchestration and integrates with VS Code via the Cline extension.75 npmMIT
- AlicenseAqualityAmaintenanceUniversal Docker MCP server for AI assistants (Cursor, Claude Desktop). Manage Docker containers, execute commands, query databases, and handle environment configurations — all through natural language.10140 npmMIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that gives any LLM client the ability to list, inspect, start, stop, and monitor Docker containers on the host machine.1-