MCP server for Docker daemon management with JWT authentication, providing tools to manage containers, images, and monitor system resources
This server has clear tool definitions with explicit schemas and descriptions visible in app/mcp/server.py. All 10 tools are registered with names following verb_noun patterns (docker_health, list_containers, get_container, start_container, stop_container, restart_container, list_images, get_container_logs, get_container_stats, docker_version). Descriptions are present and actionable (average ~80-120 chars, within baseline range). However, several critical gaps prevent a higher score: (1) Most parameters lack explicit type constraints and validation guidance in descriptions; (2) No output schemas are documented, LLMs cannot see what fields they receive; (3) Error handling is completely absent, no guidance on what to do if a container is not found, or if Docker daemon is unreachable; (4) No parameter descriptions for many fields (e.g., 'timeout' in restart_container says 'Timeout in seconds before killing the container (default: 10)' but lacks guidance on valid range or what happens if exceeded); (5) No idempotency hints for reversible operations (start/stop/restart can be safely retried, but this is not declared); (6) Schemas are minimal, many lack descriptions for required parameters (e.g., 'container_id' in get_container has description, but response structure is never defined). Tools operate on Docker resources (containers, images, stats) which are well-defined, but the interface obscures this. Average description length is good (~100 chars), but parameter annotations are sparse or missing entirely.
Get Docker daemon health status and system information including container counts, memory, and CPU info
Get Docker version information
Get detailed information about a specific container including config, state, mounts, and networks
Get logs from a specific container
Get resource usage statistics (CPU, memory, network, block I/O) for a container
List all Docker containers with their status, image, and port information
Output schemas are not documented. LLMs cannot see what fields are returned by tools like docker_health, get_container, list_containers, or get_container_stats. This forces LLMs to guess the response structure and prevents them from planning downstream tool chains effectively.
No error handling guidance. Tools like get_container, get_container_logs, get_container_stats do not document what happens if the container_id is invalid or does not exist. Error responses (if any) do not include recovery hints. LLMs have no guidance on retry vs. user correction vs. fatal failure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
List all Docker images with their tags and sizes
Restart a container
Start a stopped container
Stop a running container
Reversible operations (start_container, stop_container, restart_container) lack idempotency hints or confirmation semantics. No indication whether these tools are safe to retry if they fail mid-execution. No destructiveHint or confirmation pattern to prevent accidental double-execution.
Parameter 'tail' in get_container_logs lacks validation constraints. Description says 'Number of lines to return from the end (default: 100)' but does not specify minimum (1?), maximum (10000?), or what happens if value is negative or zero. LLMs may pass absurd values causing timeouts or memory errors.
Parameter 'timeout' in restart_container lacks clear validation. Description says 'Timeout in seconds before killing the container (default: 10)' but does not specify valid range (0-3600? must be > 0?). LLMs may pass invalid values.
Parameter descriptions are missing or minimal across multiple tools. 'container_id' appears in 6 tools but the description 'Container ID or name' is vague, does the tool accept short IDs, full IDs, container names, or all three? Example formats would clarify.