A read-only Model Context Protocol (MCP) server for safely inspecting AWS accounts.
Server has 4 read-only AWS tools with basic descriptions and parameter schemas. Naming is clear and verb-based (list_*, get_*, describe_*). However, parameter descriptions are minimal or absent, output schemas are not documented, and error handling is generic. Tools return raw JSON strings rather than structured objects. No pagination support despite potential for large result sets (e.g., list_s3_buckets, list_ec2_instances). Security model is sound (read-only enforcement via _aws_call), but tool composition and output shaping need improvement.
Get details for a single IAM user (read-only).
Get total unblended AWS cost for the last 30 days, grouped by service.
List EC2 instances in a region with their state, type, and ID.
List all S3 bucket names in the account.
list_s3_buckets and get_cost_last_30_days have no input parameters documented in schema. list_s3_buckets accepts no parameters but schema is empty; get_cost_last_30_days computes dates internally but does not expose start/end date parameters for flexibility.
Output schemas are not documented. Tools return raw JSON strings (via json.dumps) rather than structured objects with typed fields. LLMs cannot plan downstream calls or extract specific fields without parsing unstructured text.
No pagination support. list_ec2_instances and list_s3_buckets could return hundreds of items, exhausting context window. No limit parameter, no next_cursor, no total count returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Error messages are generic strings ('AWS error: {exc}'). No recovery guidance, no error classification (retryable vs fatal), no actionable next steps for the LLM.
Parameter 'region' in list_ec2_instances has a default ('us-east-1') but no enum constraint or description of valid AWS region names. LLMs may pass invalid regions.