Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
ContainMind has 19 tools with inconsistent quality. While naming follows verb_noun convention and most tools are READ_ONLY, definition gaps are severe: 11 tools have minimal or no descriptions (under 50 chars), parameter descriptions are missing or generic across multiple tools, and output schemas are not documented anywhere in the visible code. The server conflates Docker-specific and generic container operations (tools 1-10 vs 11-19), creating naming confusion (list_containers vs list_all_containers, get_container_stats appears twice with identical signatures). Critical parameter validation is missing, container_id accepts strings without validation, tail accepts any integer without bounds. Error handling returns generic dictionaries with an 'error' key rather than actionable recovery guidance. The codebase shows DockerInspector implementation but no visible schema definitions for tool outputs, violating the output documentation requirement.
Tools (19)
get_container_logsread onlysource verified72/100
Get logs from a specific container.
get_container_logsread onlysource verified72/100
Get logs from a specific container.
get_container_statsread onlysource verified68/100
Get resource usage stats for a specific container.
get_container_statsread onlysource verified68/100
Get resource usage stats for a specific container (CPU, memory, network I/O).
Duplicate tool definitions with identical or near-identical signatures (get_container_stats appears twice, list_containers/list_all_containers, inspect_container/inspect_container_details, get_container_logs appears twice, get_system_info/get_docker_system_info). LLMs cannot disambiguate between them and will waste reasoning cycles selecting the wrong variant.
Output schemas not documented. Code shows DockerInspector methods return Dict[str, Any] (e.g., list_containers returns [{"id", "name", "image", "status", "created"}]) but no visible schema definition, parameter types, or documentation for agents to plan downstream tool calls. HARD REQUIREMENT: every tool must document its return type.
CRITICAL: Eliminate duplicate tools. Keep one canonical version of each tool (e.g., initialize_container_connection, list_containers, inspect_container, get_container_logs, get_system_info) and remove the Docker-specific duplicates OR suffix Docker variants clearly (e.g., initialize_docker_connection → docker_initialize_connection, and add a backend parameter to the generic one).
CRITICAL: Document output schemas for every tool. Add JSON Schema definitions to tool registration showing which fields are returned (e.g., list_containers returns [{"id": string, "name": string, "image": string, "status": string, "created": string}]). This is required for agents to chain tools correctly.
HIGH: Add bounds and validation to parameters. container_id should have a description like 'Container ID or name (alphanumeric, 3-64 chars)'. tail should be 'tail: integer (1-10000 lines, default 100)'. Add enum constraints where values are fixed (e.g., backend: ["docker", "podman"]).
HIGH: Expand minimal descriptions. Replace 'List all Docker volumes.' with 'List all Docker volumes in the initialized daemon. Returns name, driver, mountpoint, and creation timestamp for each volume. Use this to discover available storage targets before mounting volumes to containers.' (190+ chars, explains WHAT, WHEN, and what's returned).
HIGH: Add pagination. Add limit (default 20, max 100) and offset/cursor parameters to list_* and get_running_containers_stats. Return total_count or next_cursor so agents can iterate over large result sets without blowing context.
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Score history
Overall score trend
First recorded score · v2 rubric
46/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
46
<=2025-11-25
v2
read only
50/100
Initialize connection to container daemon (Docker or Podman).
Parameter validation missing. container_id accepts any string without validation or constraints; tail accepts any integer without bounds (should be min=1, max=10000 or similar). Error handling returns generic {"error": str(e)} instead of actionable recovery guidance per pattern:recovery-guide.
Minimal or missing descriptions on many tools. list_all_images, list_all_volumes, list_all_networks, list_images, list_volumes, list_networks, get_system_info all have descriptions under 50 characters. Baseline: A+ tools average 194 chars. Descriptions must explain WHAT, WHEN, and WHY.
Confusing naming structure: Docker-specific tools (initialize_docker_connection, list_all_containers, get_docker_system_info) conflict with generic container tools (initialize_container_connection, list_containers, get_system_info). Agents cannot tell which to call for Docker vs Podman. Names must disambiguate when multiple implementations exist.
No pagination support. list_all_containers, list_all_images, list_all_volumes, list_all_networks, get_running_containers_stats have no limit, offset, or page parameters. Returning unbounded lists blows context windows and wastes tokens.
Error responses give no actionable recovery. Returns {"error": "Container xyz not found"} instead of 'Container xyz not found. Available containers: [list]. Try inspect_container with one of these IDs.' Pattern:recovery-guide requires error responses to tell agents what to do next.
MEDIUM: Improve error handling. When container not found, catch NotFound exception and return '{"error": "Container xyz not found", "suggestion": "Call list_containers to see available containers. Did you mean container abc123 (image nginx:latest)?"}'. Make errors actionable.
MEDIUM: Add tool descriptions explaining Docker vs generic container tools. document that initialize_container_connection is the canonical entry point for both Docker and Podman, and suggest users call it first rather than initialize_docker_connection directly.
MEDIUM: Add parameter descriptions for all optional params. all_containers should be 'If True, include stopped containers. If False, only running containers (default False)'. base_url should be 'Docker daemon socket URL (e.g., unix:///var/run/docker.sock for local, tcp://host:2375 for remote). Defaults to local socket on Linux or Docker Desktop socket on macOS/Windows.'
LOW: Reduce generic parameter names. 'type' in parameter descriptions is ambiguous, use backend_type, resource_type, field_type to clarify. This is especially important for initialize_container_connection where backend=['docker', 'podman'] is the only enum.
LOW: Add result limits to tool descriptions. State 'Returns up to 100 containers' so agents know not to expect infinite results and understand when pagination is needed.