Spring Boot application demonstrating MCP stdio server usage for Amazon S3 operations
Server provides 8 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-200 chars, within baseline range) and input schemas with type definitions. However, parameter descriptions are sparse or missing context. Output schemas are undocumented, LLMs cannot predict response structure for chaining. Error handling is minimal; no recovery guidance. Tool names follow verb_noun convention (good), but descriptions lack WHEN/WHY context and dependency hints. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Naming is clear but generic (e.g., 'getBucketInfo' vs 'describeBucket'). Parameter constraints (e.g., maxKeys 1-100) are mentioned in descriptions but not formalized in schema. Overall: functional but below production baseline for agent-driven systems.
Creates a zero-byte S3 object ending in '/'; disabled in read-only mode.
Writes a file below the configured local root and does not modify S3.
Generate a time-limited presigned URL for accessing private objects
Retrieve bucket information including owner, region, and creation date.
List all S3 buckets with metadata including bucket name, creation timestamp, and owner.
Retrieve technical metadata for a specific object
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, pagination tokens) for downstream tool chaining. listObjects mentions 'NextMarker' in description but no formal schema.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY vs WRITE). Agents cannot distinguish safe from destructive operations without reading descriptions.
Parameter descriptions lack actionable constraints. 'maxKeys' described as '1-100, defaults to 100' in text but not formalized in schema. 'path' parameter for downloadObject/uploadObject lacks validation rules (absolute path requirement, directory traversal prevention).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
List objects with pagination (max 100 results per call). Use NextMarker for subsequent requests. Returns: object list (each with key, modifyTime, storageClass, size, eTag), folder list, NextMarker for continuation.
Uploads a local file to S3; disabled in read-only mode.
Error handling absent. No recovery guidance, error categorization, or actionable messages. S3ToolException exists but no evidence of structured error responses with 'what to do next' guidance for LLMs.
Descriptions lack WHEN/WHY context and dependency hints. 'generatePresignedUrl' does not explain when to use it vs direct access. 'createDirectory' mentions 'disabled in read-only mode' but no guidance on when read-only mode applies or how to check it.