Server has 3 tools with consistent naming (verb-noun pattern) and reasonable descriptions. However, critical gaps exist: (1) list-buckets has NO input schema (empty object), violating the constrained-input pattern; (2) descriptions are generic and lack WHEN/WHY guidance; (3) no output schemas documented anywhere; (4) parameters lack format constraints and validation rules; (5) no error handling guidance in descriptions; (6) no idempotency guarantees stated. The tools are read-only and well-scoped (one concern each), which is positive. Descriptions average ~45 chars, below the 194 baseline for A-tier tools. Tool registration is explicit and proper via createTools().
Retrieve an object from an S3 bucket
List available S3 buckets
List objects in an S3 bucket
list-buckets has NO input schema (empty object {}). This violates constrained-input pattern, buckets could be filtered by name, region, or tags, but the tool accepts no parameters.
No output schemas documented anywhere in source. Tools return results but LLMs cannot see expected response structure (fields, types, pagination). Violates response-shaper and tool patterns.
Descriptions lack actionable context. 'List available S3 buckets' and 'List objects in an S3 bucket' are too generic. Missing: WHEN to use (discovery vs filtering), WHAT happens (side effects), PREREQUISITES (region/credentials).
Parameters lack format/constraint descriptions. E.g. 'prefix' in list-objects has no mention of path syntax rules (leading slash?). 'maxKeys' is a number with no min/max bounds, unbounded numbers let LLMs pass absurd values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No error handling guidance in descriptions. If a bucket doesn't exist or permission denied, descriptions don't tell LLMs what to do next. Violates recovery-guide pattern.
list-objects lacks pagination parameters (offset/limit return contract). Per enforced-result-limits pattern, should document max result count and offer next_cursor or pagination token.
No statement of idempotency. READ-ONLY tools are implicitly idempotent, but this should be explicit in tool annotations (missing per protocol readiness assessment).