MCP Server that dynamically generates tools from OpenAPI specifications for Docker Hub APIs
Docker Hub MCP Server has clear, consistent tool naming across 15 tools with strong verb-noun patterns (list*, get*, create*, update*, delete*, search*). Descriptions are present and action-oriented, averaging 80-150 chars, well within the 10-1024 optimal range. Input schemas are explicitly defined for all tools with proper JSON Schema types and descriptions for all parameters. However, there are systematic gaps: (1) No output schemas are documented, forcing LLMs to infer result structure; (2) No error recovery guidance, all tools lack documentation of failure modes and remediation steps; (3) Missing bounds and constraints on numeric parameters (page, page_size) which could allow invalid requests; (4) Destructive operation (deleteRepository) lacks confirmation/dry-run capability; (5) Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are entirely absent despite the framework supporting them. The codebase shows strong engineering practices (TypeScript, Zod validation, logging) and proper access control patterns, but tool definitions stop short of production MCP standards for agent reliability.
Compare two images using Scout API
Create a repository
Delete a repository
Get image index from Scout API
Get the index status of an image from Scout API
Get vulnerabilities for an image from Scout API
Get the personal namespace name
No output schemas documented for any tool. LLMs cannot infer what fields to extract from responses or which IDs to use in downstream calls. This violates the pattern:tool and pattern:response-shaper requirements.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present despite framework support. Agents cannot identify which tools modify state, which are safe to retry, or which are read-only without parsing descriptions.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 20 | - | v1 |
Get a repository
Get a specific tag for a repository
List all namespaces the user is a member of
List paginated namespaces
List repositories by namespace
List tags for a repository
Search for repositories
Update a repository
deleteRepository lacks error handling guidance and confirmation/dry-run capability. Destructive operations should support confirmation workflow per pattern:confirmation-request.
Pagination parameters (page, page_size) lack bounds documentation. No minimum/maximum specified. LLMs could pass invalid values like page=-1, page_size=999999.
Descriptions for Scout API tools (getImageIndex, getImageIndexStatus) are brief (<70 chars) and lack context on when to use them vs. repository tools. 'Get image index from Scout API' does not explain the difference between Index Status and Vulnerabilities.
Parameter 'namespace' is required but descriptions don't explain resolution: can agents pass 'my_namespace' or must they call getPersonalNamespace first? No guidance on dependencies.
createRepository description does not warn that the operation is irreversible or how to verify required fields (e.g., 'namespace' and 'name' are marked required in schema but description doesn't highlight this).