dockerbro
Provides tools for managing Docker containers, images, and Compose services, including listing, inspecting, starting, stopping, restarting, removing containers, pulling and removing images, and managing Docker Compose services.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dockerbrolist all running containers"
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.
DockerBro
DockerBro is a proper MCP-compliant Docker management server. Speaks JSON-RPC 2.0 over stdin/stdout and talks to your local Docker daemon.
Works with Zed, Claude, Cursor, VS Code, and any other MCP-compatible AI editor.
Runs on macOS, Linux, and Windows.
pip install dockerbroFeatures
Tool | What it does | Safety |
| List all containers with status, image, ports | Read-only |
| Detailed container info (network, mounts, env) | Read-only |
| Start a stopped container | Reversible |
| Stop a running container | Reversible |
| Restart a container | Reversible |
| Remove a container (with optional force) | ⚠️ Destructive |
| Get recent log output | Read-only |
| Run a command inside a running container | ⚠️ Destructive |
| List local Docker images | Read-only |
| Pull an image from a registry | Reversible |
| Run a new container with ports, env, etc. | Reversible |
| Remove a local image | ⚠️ Destructive |
| List Compose services | Read-only |
| Start Compose services | Reversible |
| Stop and remove Compose services | ⚠️ Destructive |
| Get Compose service logs | Read-only |
Related MCP server: Docker MCP Server
Pre-approving tools
Each tool is annotated with MCP spec annotations (readOnlyHint, destructiveHint, idempotentHint) so spec-aware clients (Claude Code, Cursor, etc.) can auto-approve read-only tools without prompting.
You can also restrict tools at the server level via environment variables, enforced before anything reaches the client:
Env var | Effect |
| Comma-separated allowlist — only these tools are exposed and callable |
| Comma-separated denylist — always blocked (deny wins over allow) |
Example: only safe read-only tools
Pass the env var in your Zed config (add to the env object):
"env": {
"DOCKER_MCP_ALLOW_TOOLS": "list_containers,inspect_container,logs_container,list_images,docker_compose_ps,docker_compose_logs"
}If a tool is not pre-approved, the server returns an error:
Tool 'remove_container' is not pre-approved (blocked by server allow/deny config).Note: Client-side approval (e.g. Zed's
agent.tool_permissions) and server-side pre-approval are independent. The server-side list controls which tools are visible and callable at all; the client controls which of those require a confirmation prompt.
Requirements
Python 3.9+
Docker installed and running
Install
Option A: From PyPI (recommended — all platforms)
Platform | Command |
macOS / Linux |
|
Windows |
|
Any (if |
|
command not found: pip? On macOS and many Linux distros, Python 3 installs it aspip3. On Windows it's usuallypiporpy -m pip. When in doubt,python3 -m pip install dockerbroworks everywhere.
This puts a dockerbro command on your PATH, so your editor config needs no file paths at all.
Verify it works:
dockerbro --version 2>/dev/null; echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | dockerbroOption B: Run from source
git clone https://github.com/ramanailearning-cpu/dockerbro.git
cd dockerbro
pip install -e .Option C: Run in a Docker container
Build it:
docker build -t dockerbro .Run it — the socket mount differs per platform:
macOS / Linux:
docker run --rm -i -v /var/run/docker.sock:/var/run/docker.sock dockerbroWindows (PowerShell):
docker run --rm -i -v //./pipe/docker_engine://./pipe/docker_engine dockerbroConnecting to the Docker daemon
DockerBro auto-detects your daemon, so this usually needs zero configuration:
Platform | Default endpoint |
Linux |
|
macOS (Docker Desktop) |
|
Windows | Named pipe |
To point at a different or remote daemon, set DOCKER_HOST in your config's env block:
"env": { "DOCKER_HOST": "tcp://192.168.1.50:2375" }macOS Docker Desktop note: if you get a connection error, enable Settings → Advanced → Allow the default Docker socket, or set
DOCKER_HOSTtounix:///Users/YOUR_NAME/.docker/run/docker.sock.
Zed Configuration
Add this to your Zed settings file (Cmd-Shift-P → Open Settings on macOS, Ctrl-Shift-P on Linux/Windows):
"context_servers": {
"dockerbro": {
"command": "dockerbro",
"env": {
"DOCKER_MCP_LOG": "/tmp/dockerbro.log"
}
}
}Restricting tools server-side
Optionally, add env vars to limit which tools are exposed:
"env": {
"DOCKER_MCP_LOG": "/tmp/dockerbro.log",
"DOCKER_MCP_DENY_TOOLS": "remove_container,remove_image,exec_container,docker_compose_down"
}Reload Zed (Cmd-Shift-P on macOS / Ctrl-Shift-P on Linux or Windows → Reload Window). The agent will have 16 Docker tools available.
Windows note: If the
dockerbrocommand isn't found by Zed, use the full path shown bywhere dockerbroin your terminal.
Claude Desktop Configuration
macOS
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"dockerbro": {
"command": "dockerbro",
"env": {
"DOCKER_MCP_LOG": "/tmp/dockerbro.log"
}
}
}
}Linux
Edit ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"dockerbro": {
"command": "dockerbro",
"env": {
"DOCKER_MCP_LOG": "/tmp/dockerbro.log"
}
}
}
}Windows
Edit %APPDATA%\Claude\claude_desktop_config.json (paste the path into Explorer's address bar):
{
"mcpServers": {
"dockerbro": {
"command": "dockerbro",
"env": {
"DOCKER_MCP_LOG": "C:\\Users\\YOU\\dockerbro.log"
}
}
}
}Testing
Via terminal (pipe JSON-RPC)
# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | dockerbro
# List tools
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | dockerbro
# Call a tool
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_containers","arguments":{"all":true}}}' | dockerbroVia MCP Inspector
npx @modelcontextprotocol/inspector dockerbroArchitecture
AI Editor (Zed / Claude / Cursor / VS Code)
| (stdin/stdout: JSON-RPC 2.0)
v
dockerbro (Python)
| (Docker SDK)
v
Docker DaemonLicense
MIT
Available Tools
16 toolsdocker_compose_downADestructiveIdempotent
Stop and remove Docker Compose services.
| Name | Required | Description | Default |
|---|---|---|---|
| volumes | No | Remove volumes too. Default: false | |
| project_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'remove services', which provides some detail beyond the destructiveHint annotation by specifying what is affected. However, it does not add context about the volumes parameter's default behavior, potential idempotency (which is hinted by the annotation but not explained), or additional effects like removing networks. It is consistent with the annotations, so 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly communicates the core action. There is no redundant or filler content; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with a barely documented parameter and no output schema, the description is insufficient. It does not explain the project_dir parameter, the default cleanup scope, or what 'services' entails in terms of containers/disks/networks. The agent would need to look at sibling tools or infer a lot.
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 50%: volumes has a description, but project_dir has none. The description does not mention project_dir at all, leaving its meaning ambiguous. It adds no value beyond the schema for volumes, and fails to compensate for the undocumented project_dir parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with specific verbs ('Stop and remove') and resource ('Docker Compose services'). This distinguishes it from sibling tools like docker_compose_up (which starts services) and individual container commands such as stop_container or remove_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?
Usage is implied by the name and the presence of docker_compose_up as a sibling: this is the inverse operation. However, the description does not explicitly state when to use it vs. alternatives, such as when to use stop_container for individual containers or the compose-specific scope. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_compose_logsCRead-only
Get Docker Compose service logs.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Lines. Default: 50 | |
| service | No | ||
| project_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation, but it adds no additional behavioral context. It does not mention default tail behavior, whether logs are returned for all services if no service is specified, or any dependencies like project_dir. Beyond the safe-read annotation, the description offers minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence containing only essential words, making it highly concise and front-loaded. There is no unnecessary verbosity, though the brevity also contributes to the lack of detail noted in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity with three parameters and a sibling 'logs_container' that overlaps in functionality. The description does not clarify the project directory requirement, the default scope of logs, or how this differs from 'logs_container'. Given the sparse schema and absence of an output schema, the description is too incomplete for reliable tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is only 33%, with just 'tail' having a description. The tool description does not explain the 'service' or 'project_dir' parameters, nor does it clarify defaults or behavior. Given the low schema coverage, the description fails to compensate and leaves parameter meanings ambiguous.
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 'Get Docker Compose service logs.' clearly states the verb (Get) and resource (Docker Compose service logs), making the tool's purpose obvious. However, it does not explicitly differentiate from the sibling 'logs_container' or other compose-related tools, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'logs_container' or 'docker_compose_ps'. There is no mention of scenarios, exclusions, or selection criteria, leaving the agent without context for choosing correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_compose_psBRead-only
List Docker Compose services.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | No | Directory with docker-compose.yml |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description 'List' aligns with that. However, the description adds no additional behavioral details such as whether project_dir is optional, default behavior, or what output is returned. With annotations covering the safety profile, the description adds no extra value, scoring low.
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 redundant words. It is front-loaded and efficiently states the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool and read-only annotation, the description is minimal but lacks information about return format and usage scenarios. Since no output schema exists, the description should provide more detail about what the output contains, such as service names and status, to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter project_dir with the description 'Directory with docker-compose.yml', giving 100% coverage. The tool description adds no additional parameter semantics beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List Docker Compose services' uses a specific verb and resource, clearly indicating the tool's function. It distinguishes from siblings like list_containers by specifying 'Compose services', though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like list_containers or docker_compose_logs. The description only states the action without context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docker_compose_upBIdempotent
Start Docker Compose services.
| Name | Required | Description | Default |
|---|---|---|---|
| build | No | Build first. Default: false | |
| detach | No | Default: true | |
| services | No | Space-separated service names | |
| project_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the idempotentHint annotation. It does not mention that 'detach' defaults to true, that 'build' triggers a build before starting, or any side effects like network/volume creation. With annotations present, the bar is lower, but the description still fails to disclose useful behavioral traits.
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 fluff. It is front-loaded and directly states the action, earning a perfect score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and sibling tools with overlapping functionality, the description is too terse. It lacks information about return values, behavior when services are already running, and the meaning of detach/build parameters. This leaves the agent under-informed for a reasonably complex operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (three of four parameters have descriptions), so the schema does most of the heavy lifting. The tool description adds no parameter-level information, leaving project_dir undocumented. Baseline 3 is appropriate as the description does not hinder but also does not enhance 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 'Start Docker Compose services' uses a specific verb and resource, clearly distinguishing it from siblings like docker_compose_down, docker_compose_logs, and start_container. The phrase 'Compose services' differentiates it from container-level 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?
No guidance is provided on when to use this tool versus alternatives such as start_container or docker_compose_down. The description lacks context about prerequisites, when to choose this over other tools, or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exec_containerB
Execute a command inside a running container.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | Command to run | |
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only states the prerequisite that the container is running, but does not mention stdout/stderr behavior, exit code handling, required permissions, or that it is equivalent to 'docker exec'. The description lacks side-effect or limitation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly states the tool's purpose without any filler. Every word contributes meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and no annotations, the description provides the core action and the running-container prerequisite, which is minimally adequate. However, it does not clarify how this differs from run_container or what happens if the container is not running, leaving some gaps for an agent selecting among many sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: 'command' has a vague description ('Command to run'), while 'container' has none. The tool description adds no extra meaning, such as whether container accepts names/IDs or whether command can include arguments. It does not compensate for the undocumented 'container' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Execute a command inside a running container' clearly identifies the action (execute), the resource (container), and the prerequisite condition (running). This distinguishes it from sibling tools like run_container, which creates a new container, or start_container, which changes container state.
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 is given about when to use this tool versus alternatives such as run_container or docker_compose_exec. The description implies it is for an already-running container, but it does not say 'use this when you need to run a one-off command in an existing container' or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_containerCRead-only
Get detailed info about a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes | Container name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds little beyond the readOnlyHint annotation. It doesn't disclose output format, error behavior, or the specific details returned, giving the agent no additional behavioral context beyond knowing it's a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action, making it easily scannable. However, it is very terse and could include additional useful context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a minimal description, the agent lacks insight into what 'detailed info' includes (e.g., JSON config, state). Given the presence of sibling tools with distinct purposes, a bit more context would be necessary for confident selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the 'container' parameter with type and description, and schema coverage is 100%. The tool description adds no parameter-specific meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get' and specifies the resource 'detailed info about a container,' clearly indicating a read-only inspection operation. It distinguishes from siblings like 'list_containers' and 'logs_container' by focusing on 'detailed info,' though it doesn't elaborate on what exactly that entails.
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 doesn't mention that 'list_containers' is for summaries or that 'logs_container' is for logs, leaving the agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersARead-only
List Docker containers with status, image, ports.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Show all including stopped. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation. The description adds the output fields (status, image, ports), which is useful context, but does not disclose any further behavioral details like pagination or formatting. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of seven words, front-loaded with the verb and resource, and every word adds value. No wasted words 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 simple list tool with one parameter fully described in the schema, the description captures the core functionality and even lists output fields, which is helpful given the lack of an output schema. It does not mention the 'all' parameter, but that is covered in the schema, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'all' fully documented. The tool description itself does not elaborate on parameters, but since the schema already covers them, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List) and the resource (Docker containers), and specifies the output fields (status, image, ports). This distinguishes it from sibling tools like list_images and inspect_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 provides no guidance on when to use this tool versus alternatives such as inspect_container or list_images. No exclusions or alternative tool mentions are present, leaving the agent to infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesARead-only
List Docker images on the local system.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds the 'local system' scope, which is helpful context beyond the annotation, but it does not disclose any additional behavioral traits such as output format, ordering, or filtering. This meets the baseline for annotation-covered tools but adds limited extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource. Every word contributes, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—no params, readOnlyHint annotation, and a clear purpose—the description is largely complete for an agent to select and invoke it. It explains what it lists and where. It doesn't detail the return format, but for a list operation this is often implied and not a critical 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 tool has zero parameters, so the schema provides complete coverage with 100% schema description coverage. The description correctly omits parameter details as there are none. Baseline for 0 params is 4, and the description doesn't need to add anything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and identifies the resource 'Docker images' and scope 'local system', clearly distinguishing it from siblings like list_containers. It's unambiguous and directly states the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (local system images) but does not explicitly mention when to use this tool over alternatives like list_containers or when to prefer pull_image/remove_image. No exclusions or alternative guidance is provided, leaving usage to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logs_containerBRead-only
Get recent log output from a container.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Lines to return. Default: 100 | |
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe read operation, and the description aligns with that. The description adds a minor scoping detail ('recent') but does not disclose any other behavioral aspects like whether logs are streamed, truncated, or in what format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler or redundancy. It is front-loaded with the action ('Get') and resource, making it immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with read-only annotations and a basic schema, but the description lacks usage context and parameter meaning. It adequately identifies the primary function but leaves gaps around when to use it and what the return output looks like.
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 50%: tail has a description in the schema, but container does not. The tool description does not compensate by explaining either parameter beyond the generic phrase 'from a container,' which merely repeats the parameter name. It fails to clarify the expected format or role of the container argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('recent log output from a container'), which directly states what the tool does. It distinguishes itself from sibling tools like docker_compose_logs by specifying 'container' rather than compose services, and it's distinct from inspection or management commands.
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 docker_compose_logs or inspect_container. It does not mention exclusions, prerequisites, or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_imageBIdempotent
Pull a Docker image from a registry.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Image name (e.g. nginx:latest) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond the obvious pull action. IdempotentHint is already provided by annotations, but the description does not mention side effects such as updating existing tags, requiring network access, or potential registry authentication issues.
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 wasted words. It is front-loaded with the verb and resource, making it immediately clear what the tool does.
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 tool, the description is minimally adequate. The idempotent annotation and schema provide some context, but the description lacks usage guidance and behavioral nuances such as tag handling and registry dependencies, which could be valuable 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 description coverage is 100% with a clear example for the 'image' parameter. The description does not add further parameter details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'pull' and clearly identifies the resource as 'a Docker image from a registry', which distinguishes it from sibling tools like list_images or remove_image. It states exactly what the tool does 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 provides no guidance on when to use this tool versus alternatives. It does not mention scenarios like pre-pulling images before running a container or checking existing images with list_images, leaving the agent without explicit context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_containerADestructive
Remove a stopped container. Pass force=true for running containers.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force remove. Default: false | |
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description complements the destructiveHint annotation by clarifying that the tool is designed for stopped containers, and force=true extends it to running containers. This adds behavioral context beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that efficiently communicates the core operation and the key edge case (force for running containers). 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 two-parameter tool with no output schema, the description covers the essential behavior and the conditional force usage. It could be slightly more explicit about error scenarios or removing volumes, but it's sufficient 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 description adds meaning to the force parameter by specifying it's for running containers, which goes beyond the schema's brief 'Force remove'. The container parameter is self-explanatory from the name, though the description doesn't detail expected format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Remove' and the resource 'container', with an important qualifier 'stopped'. It distinguishes from siblings like remove_image, and the force option clarifies scope for running 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?
Provides clear context: the tool removes stopped containers, and for running containers you must pass force=true. It implies when force is needed but doesn't explicitly mention alternatives or when to use other commands like stop_container first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_imageBDestructive
Remove a Docker image.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the destructiveHint annotation. It does not disclose side effects, failure conditions (e.g., image in use), or irreversibility. The annotation already indicates destructiveness, but no extra value is added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no unnecessary words. It is front-loaded and immediately states the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the description is too minimal. It omits critical operational details such as what happens on success, whether dangling images are removed, and potential errors. The lack of an output schema or any behavioral caveats leaves the agent under-equipped.
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 a single 'image' parameter with no description, and the tool description does not explain what format to use (e.g., name, tag, or ID). With 0% schema coverage, the description should 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 'Remove a Docker image' uses a specific verb and resource, clearly distinguishing it from sibling tools like remove_container and pull_image. It is immediately clear what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 or under what conditions. There is no mention of prerequisites, such as ensuring the image is not in use, or alternatives like force removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_containerCIdempotent
Restart a container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint annotation, the description adds no behavioral context. It doesn't disclose that restart typically stops then starts a container, or what happens if the container doesn't exist. The annotation covers idempotency, but other behavioral traits are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is appropriately minimal for a straightforward operation, and the structure is perfectly 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?
Given the tool's simplicity (1 parameter, no output schema) and the annotation, the description is minimally sufficient for a basic operation but lacks critical contextual info. It doesn't explain implications (e.g., stopping/starting), potential errors, or when to prefer this over stop/start. The presence of many sibling tools and no additional explanation makes it incomplete for an AI agent to choose correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate. The only parameter 'container' is a string with no explanation in either the schema or the description. The phrase 'Restart a container' implies the 'container' argument but gives no details about format, valid values, or meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Restart a container' clearly states the action (restart) and the resource (container). It distinguishes from sibling tools like start_container and stop_container because 'restart' implies a distinct operation. However, it lacks explicit detail such as 'stop and start' which could add clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like start_container or stop_container. There are no usage scenarios, exclusions, or mentions of related tools despite many siblings being available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_containerBIdempotent
Run a new container from an image.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | e.g. KEY=val,OTHER=val2 | |
| name | No | ||
| image | Yes | ||
| ports | No | e.g. 8080:80 | |
| detach | No | Background. Default: true | |
| command | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Run a new container', implying each invocation creates a new resource, which directly contradicts the idempotentHint annotation (true) that claims the operation is idempotent. This is a significant behavioral contradiction, making the description misleading about the tool's actual 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, concise sentence with no redundancy or filler. It is front-loaded and easy to parse. However, it is nearly a tautology of the tool name and lacks structured detail, so it is not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema, only a contradictory annotation), a one-line description is inadequate. It fails to describe return values, side effects like image pulling or port handling, or how parameters like detach and name affect behavior. The agent is left with an incomplete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is only 50%, but the description adds no guidance for the undocumented parameters (name, image, command). The phrase 'from an image' only echoes the required image parameter, offering no additional meaning. The description fails to compensate for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Run) and resource (a new container from an image), which distinguishes it from sibling tools like start_container (starts an existing container) and remove_container (removes a container). It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this tool is for creating and running a new container from an image. However, it does not explicitly state when to use this tool instead of alternatives (e.g., start_container for existing containers) or mention prerequisites such as the image being available. The guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_containerAIdempotent
Start a stopped container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The idempotentHint annotation already signals safe retries. The description adds the constraint that the container must be stopped, but it does not mention what happens if the container is already running, permissions required, or side effects. Given the annotation, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the essential operation without any fluff or redundancy. It is appropriately sized for the simplicity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple start operation with one parameter and an idempotency annotation, the description is mostly adequate. However, the missing parameter format and lack of guidance on edge cases (e.g., already running) leave some gaps, making it minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the 'container' parameter, and the description does not clarify whether it accepts a container ID, name, or both. Since the schema coverage is low, the description was expected to 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 'Start a stopped container.' uses a specific verb ('start') and resource ('container') and further specifies the state ('stopped'), clearly distinguishing it from sibling tools like stop_container, restart_container, and run_container. It unambiguously identifies the operation.
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 starting containers that are currently stopped, but it does not explicitly state when to use this tool versus alternatives (e.g., run_container for new containers) or provide exclusions. The context is minimal, so it earns a mid-range score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_containerCIdempotent
Stop a running container.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation idempotentHint=true is present, but the description adds no extra behavioral context. It does not disclose whether stopping is graceful, how it affects the container's state, or any side effects. The description is purely literal and relies entirely on the annotation for behavioral safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, well-structured and front-loaded with the key action. It wastes no words, though it offers minimal substance beyond the statement of purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and no output schema, the description is too sparse. It omits important context such as what happens to the container after stopping, how it relates to remove_container, and whether any arguments are needed for force stopping. The description alone provides barely enough information for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines only one parameter 'container' with type string, and description coverage is 0%. The description does not explain what the container parameter refers to (e.g., ID, name, or pattern), so the schema is insufficient and the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops a container, using the specific verb "stop" and resource "container". It distinguishes from sibling tools like start_container, restart_container, and remove_container, 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?
No guidance is provided on when to use this tool versus alternatives such as restart_container or remove_container. There is no mention of prerequisites, excluded scenarios, or preference over other lifecycle commands, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v1.0.1- First observed
docker_compose_down - First observed
docker_compose_logs - First observed
docker_compose_ps - First observed
docker_compose_up - First observed
exec_container - First observed
inspect_container - First observed
list_containers - First observed
list_images - First observed
logs_container - First observed
pull_image - First observed
remove_container - First observed
remove_image - First observed
restart_container - First observed
run_container - First observed
start_container - First observed
stop_container
TDQS
Each tool targets a distinct Docker resource and action. Container management tools (list, inspect, start, stop, restart, remove, logs, exec, run) are clearly separated from image tools (list, pull, remove) and compose tools (up, down, logs, ps). No two tools have overlapping purposes.
Most tools follow a verb_noun pattern (e.g., list_containers, start_container, remove_image). The Docker Compose tools consistently use a docker_compose_ prefix with a verb suffix, which is a slight deviation from the main pattern but remains predictable and internally consistent.
With 16 tools, the server is well-scoped for Docker management. Each tool covers a distinct operation, and the count is appropriate for handling containers, images, and Compose workflows without being overwhelming or sparse.
The tool set covers the core Docker lifecycle: container run/start/stop/restart/remove/logs/exec, image list/pull/remove, and Compose up/down/logs/ps. Missing operations like image build/push or container stats are notable but not critical for common workflows, allowing agents to work around the gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A MCP server built for developers enabling Git based project management with project and personal…
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that allows managing Docker containers through natural language, enabling users to compose, introspect, and debug containers without running commands themselves.742GPL 3.0
- 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.186MIT
- AlicenseNot gradedqualityDmaintenanceA Dockerized MCP server that enables Discord integration, offering tools for role management, messaging, moderation, and server administration via natural language.1MIT
- 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-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ramanailearning-cpu/dockerbro'
If you have feedback or need assistance with the MCP directory API, please join our Discord server