An MCP server providing AI agents secure, read-only access to AWS Cost Explorer.
Strong tool definitions with clear naming, comprehensive descriptions, and well-structured schemas. All 7 tools follow verb_noun convention (get_*). Descriptions are detailed (150-250 chars) and include WHEN to use guidance. Input schemas are complete with types, enums, and defaults. However, output schemas are not formally documented, responses are inferred from code (markdown tables, structured objects). Error handling is present but generic. No tool annotations (readOnlyHint, etc.) despite all being read-only operations. Parameter descriptions are good but could specify AWS prerequisites more explicitly.
Retrieve raw AWS cost and usage data for a specific date range. Returns daily or monthly unblended cost time series. Best for seeing exact spend over time. For period-over-period comparison, use get_cost_comparison instead. For breakdown by service, use get_cost_by_service.
Retrieve cost anomalies detected by AWS Cost Anomaly Detection service. Shows unexpected spend spikes with root cause analysis including affected service, expected vs actual spend, and impact assessment. Use this when investigating unusual charges, unexpected bill increases, or when asked 'why did my costs spike?' Note: requires Cost Anomaly Detection monitors to be configured in the AWS console.
Break down AWS costs by service (EC2, S3, Lambda, RDS, etc.) for a date range. Returns services ranked by spend with percentage of total. Use this when you need to identify which AWS services are driving costs or answer questions like 'what am I spending the most on?'
Break down AWS costs by a specific cost allocation tag such as Environment, Team, Project, or any custom tag. Returns cost per tag value ranked by spend. Use this when asked about costs per team, per environment (prod vs dev), per project, or any tag-based cost allocation. The user must specify which tag key to group by. Note: cost allocation tags must be activated in the AWS Billing console for them to appear in Cost Explorer data.
Output schemas not formally documented. Responses are inferred from code (markdown tables, structured objects) but not declared in tool definitions. LLMs cannot reliably parse unstructured markdown or plan downstream operations without knowing exact field names and types.
No tool annotations despite all tools being read-only. Missing readOnlyHint in tool definitions. This prevents clients from optimizing caching, retry logic, and safety checks for idempotent operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Compare AWS costs between two time periods with automatic change analysis. Defaults to comparing current month-to-date vs the same number of days in the previous month. Identifies which services, regions, or linked accounts drove the biggest cost changes, sorted by impact. This is the best tool for answering 'why did my bill go up?', 'how does this month compare to last month?', or 'what changed in my AWS spending?' The group_by parameter lets you slice the comparison by service, region, or linked account.
Forecast future AWS spending for the next N days using AWS's built-in ML-based predictions. Returns predicted total spend with 80% confidence interval and period-by-period breakdown. Use this when asked about expected future costs, budget projections, or 'how much will I spend next month?'
Get EC2 rightsizing recommendations showing over-provisioned or idle instances with specific instance type change suggestions and estimated monthly savings. Use this when asked about cost optimization, reducing AWS spend, finding waste, or right-sizing infrastructure. Recommendations are based on CloudWatch utilization metrics over the specified lookback period.
Error handling is generic. Errors return 'AWS API Error: <message>' without categorization (retryable vs user-fixable vs fatal) or recovery guidance. LLMs cannot determine whether to retry, ask the user, or abort.
AWS prerequisites not explicitly documented in parameter descriptions. E.g., get_cost_by_tag notes 'cost allocation tags must be activated' but get_cost_anomalies requires 'Cost Anomaly Detection monitors configured', this should be in the inputSchema description or a separate prerequisites field.
No pagination or result limits documented. Tools like get_cost_by_service and get_cost_comparison may return many services/regions but no limit or pagination parameters are visible. Large result sets risk context window exhaustion.