AWS Cost Explorer MCP Server with OAuth 2.0 integration deployed on AWS Lambda
serverless-mcp demonstrates solid definition quality with well-structured tool schemas and clear descriptions. All 7 tools have descriptions (10-150 chars baseline = 194 chars avg in production; these average ~95 chars, within good range). Input schemas are present and typed for all tools. However, there are gaps in parameter-level documentation, output schema documentation, and error handling guidance. The server follows tool naming conventions (verb_noun pattern: get_*, all action verbs). Parameter descriptions exist but some lack constraint details (e.g., dimensionKey enum is well-documented, but filter objects lack structure). No tool annotations are present (readOnlyHint, destructiveHint, idempotentHint). Tools are well-composed with clear single responsibilities.
Retrieve AWS cost and usage data with filtering and grouping options. This is the main tool for cost analysis.
Compare costs between two time periods to identify changes and trends. Both periods must be exactly 1 month and start on day 1.
Analyze what drove cost changes between periods (returns top 10 most significant drivers). Good for root cause analysis.
Generate cost forecasts based on historical usage patterns. Useful for budget planning.
Get available values for a specific dimension (e.g., SERVICE, REGION, INSTANCE_TYPE). Use this to discover what values are available for filtering.
Get available values for a specific tag key. Use this to discover what tag values are available for filtering.
Output schema documentation missing. Tools return JSON strings with no documented structure. LLMs cannot plan downstream operations or extract required fields without documented output schemas.
Filter parameters are objects without internal schema definition. Input validation and LLM guidance are unclear. 'filter' in get_cost_and_usage, get_cost_forecast, and get_cost_and_usage_comparisons lack type constraints.
No tool annotations present. Tools lack readOnlyHint flags to signal safety to clients. All tools are read-only (safe to retry), but this is not declared in tool metadata.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 78 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Get the current date and month to determine relevant data when answering queries about "last month", etc.
Error handling lacks recovery guidance. Error messages in tools (e.g., 'Failed to get dimension values') do not indicate whether the error is retryable, what the LLM should do next, or how to fix it.
Pagination not documented. get_dimension_values and get_tag_values both return MaxResults and NextPageToken, but these are not described in the tool definition or returned in the output schema. LLMs cannot iterate through large result sets.
Tool names contain 'and' (e.g., 'get_cost_and_usage_comparisons'). While descriptive, this signals multiple operations bundled together. Consider 'compare_cost_usage' or 'compare_cost_by_period' for clearer intent.