MCP server for interacting with MinIO object storage
Server has 7 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly under the 194-char baseline), and input schemas are present with type definitions. However, descriptions lack depth, they state WHAT but not WHEN or WHY to use each tool. No output schemas documented. Error handling is absent: no recovery guidance, no categorization of errors as retryable/user-fixable/fatal. No parameter validation or constraints (e.g., bucket name format, object name length). Naming is clear and verb-based (list_, get_, put_, remove_, make_, presigned_), but descriptions do not explain dependencies or prerequisites. The server lacks idempotency guarantees, confirmation steps for destructive operations (remove_object), and audit logging. Parameter descriptions are minimal, e.g., 'The bucket name' without format or length constraints.
Read a text object's content.
List all buckets.
List objects in a bucket, optionally filtered by prefix.
Create a bucket if it doesn't exist.
Generate a presigned GET URL.
Write text content to an object.
Delete an object.
No output schemas documented. LLMs cannot predict return structure or plan downstream calls. list_buckets returns list[str], list_objects returns list[dict], but field names and types are not formally declared.
Descriptions are too brief (10-50 chars vs. 194-char baseline). They state WHAT but not WHEN to use or any prerequisites. E.g., 'List all buckets' lacks context for tool selection. No dependency hints (e.g., 'Call this first to discover available buckets').
No error handling or recovery guidance. Calls to MinIO may fail (bucket not found, permission denied, network timeout), but no error responses guide the LLM on retry strategy or next steps. E.g., remove_object silently fails if object doesn't exist.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Destructive operation (remove_object) lacks confirmation step or dry-run. Agents can delete objects without warning. No idempotency guarantee, repeated calls with same params will fail on second attempt (object already deleted).
Parameter descriptions lack constraints. 'The bucket name' does not specify format (alphanumeric, hyphens allowed?), length (3-63 chars per S3 spec), or validation rules. LLMs will pass invalid bucket names without guidance.