Public leaderboard

Public assessment

ofershap/mcp-server-docker (mcp-docker-server)

mcp-docker-server · v1.0.0 · scanned

What changed in the harness

Selection accuracy 100→100, token cost up 12%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

23.5 / 30

23.5 out of 30
03Economics

20.0 / 20

20.0 out of 20
04Discoverability

11.6 / 20

11.6 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

10 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
list_containers
no_return_description
List Docker containers present on the host; stopped containers are included only when all=true. Returns the details of each container (ID, name, status, image, and similar).
container_logs
no_return_description
Retrieve the log output of the container identified by id, reading from the last tail lines (default 100). Returns the requested log lines as text.
start_container
name_restates_behavior no_return_description
Start the stopped container identified by id or name so its processes resume. Returns confirmation of the container's resulting state.
stop_container
name_restates_behavior no_return_description
Stop the running container identified by id or name, halting its processes. Returns confirmation once the container is no longer running.
restart_container
name_restates_behavior no_return_description
Stop and immediately start again the container identified by id or name, relaunching its processes under the current configuration. Returns confirmation of the restart.
remove_container
name_restates_behavior no_return_description
Delete the container identified by id or name, including its writable filesystem. Use force=true to remove it even while running. Returns confirmation of removal.
exec_command
no_return_description
Run command and its arguments inside the running container identified by id, executing within that container's environment. Returns the command's stdout, stderr, and exit status.
container_stats
no_return_description
Read the current CPU, memory, and network usage of the running container identified by id. Returns the collected usage statistics for that container.
list_images
name_restates_behavior no_return_description
List the images stored on the Docker host. Returns an array of images with their tags, IDs, and sizes.
remove_image
name_restates_behavior no_return_description
Delete the image identified by id or tag from the host to free disk space. Use force=true to remove the image even if it is in use. Returns confirmation of removal.

Selection evidence

Confusable tool pairs.

15 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
remove_container remove_image medium A user saying 'remove/delete the containerized app' or 'get rid of my old container' without explicitly saying 'image' could map to either tool; both take an 'id' and both delete objects, so the agent must infer whether the target is a container or an image.
start_container restart_container medium A task like 'start the container back up' or 'turn the container on again' is ambiguous between starting a stopped one and restarting a running one; the verbs 'start' and 'restart' overlap heavily in casual phrasing.
start_container stop_container medium Users often say 'restart the container' or 'turn it off and on' fluidly; a task phrased as 'restart' or 'toggle the status' could push an agent to pick either start or stop without determinism.
stop_container container_stats medium A task like 'check on the running container' or 'see what the container is doing' is ambiguous between reading stats and taking a control action on a running container; both are framed around running containers.
list_containers container_logs low A request like 'show me what's in my containers' could plausibly mean listing containers or fetching their logs, but logs require a specific id and list is inventory-oriented, so confusion is possible but not strong.
list_images remove_image medium A task like 'clean up my images' or 'find the images I can remove' could lead an agent to list images for inspection when removal was intended, or to delete when the user only asked to view them.
list_containers list_images low A task like 'what do I have running' clearly points to containers, while 'what images exist' points to images; only a vague 'show me everything' would be ambiguous, making confusion unlikely.
container_logs restart_container low Fetching logs and restarting are functionally opposite (read vs. control) and typical phrasing—'see errors' vs 'fix it by restarting'—resolves the intent clearly.
container_logs remove_container low Log retrieval and deletion are too semantically distant in intent for a natural-language task to plausibly confuse them.
list_containers remove_container low 'What containers are there' (list) and 'delete this container' (remove) are clearly differentiated by the action verb in typical tasks.
list_containers restart_container low Listing and restarting are distinct actions; a user wanting to restart names a specific container, which an agent would not confuse with listing all of them.
restart_container remove_container low Restarting and removing imply very different outcomes (bring back up vs. delete); phrasing like 'cycle it' versus 'delete it' is generally unambiguous.
container_logs container_stats low Both are read operations, but a task for logs ('show output/errors') versus stats ('show CPU/memory') names the requested data type explicitly, so confusion is unlikely.
start_container container_stats low Starting is a control action while stats is read-only; requests like 'boot the container' versus 'check its resource usage' are clearly separated in intent.
stop_container exec_command low Stopping a container and running a command inside it are distinct operations; casual phrasing rarely conflates 'halt it' with 'run this inside it'.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard