An MCP server that provides AWS Cost Explorer tools integrated with AWS Bedrock Claude for natural language processing of cost and usage queries. Includes a FastAPI web dashboard for cost analysis and visualization.
This AWS Cost Explorer MCP server has well-structured tool definitions with clear names and comprehensive parameter descriptions. All 6 tools follow verb_noun naming conventions (get_*, all action-oriented). Input schemas are visible and properly typed with descriptions for parameters. However, there are significant gaps: output schemas are NOT documented anywhere in the visible code, error handling guidance is absent, and there is no explicit tool registration visible in the provided source. The server appears to be a wrapper around an official MCP server (`uvx awslabs.cost-explorer-mcp-server@latest`), and tool definitions are inferred from comments/docstrings rather than explicitly registered. Parameter descriptions are generally solid (60-80 chars average), but lack guidance on dependencies between parameters (e.g., metric format differs between get_cost_and_usage and get_cost_forecast, requiring underscore notation). No error recovery guidance is documented.
Get cost data for date ranges with support for granularity (DAILY/MONTHLY), metrics (NetAmortizedCost, UnblendedCost, etc.), grouping by SERVICE or TAG, and filter expressions for dimensions or tags
Compare costs between two time periods (baseline and comparison date ranges) with specified metric for comparison
Analyze what drove cost changes between two time periods to identify cost drivers
Predict future costs using AWS Cost Explorer forecasting. Start date must be today or earlier, end date must be in the future. Uses underscore-formatted metrics (NET_AMORTIZED_COST, UNBLENDED_COST, etc.)
Get available values for cost allocation dimensions (SERVICE, REGION, LINKED_ACCOUNT, TAG) within a date range
No output schemas documented. The code shows input schemas but provides NO information about what these tools return (fields, types, structure). LLMs cannot plan downstream tool chains without knowing what data is available.
No error handling or recovery guidance. Tools have no documented error cases, error codes, or recovery actions. An LLM receiving an error has no guidance on whether to retry, ask the user, or give up.
Parameter format inconsistency. get_cost_and_usage uses CamelCase metrics (NetAmortizedCost, UnblendedCost) while get_cost_forecast uses UPPERCASE_UNDERSCORE (NET_AMORTIZED_COST, UNBLENDED_COST). This inconsistency forces the LLM to reason about different formats for semantically identical metrics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
Get available tag values for a specific tag key within a date range
Tool definitions appear inferred from comments/docstrings rather than explicitly registered in the wrapper. The web_app.py loads tools via MCP protocol from an external server (`uvx awslabs.cost-explorer-mcp-server@latest`), but the actual tool registration code is not visible in the provided source.
Missing pagination guidance. get_dimension_values and get_tag_values may return large result sets (all service names, all region names, all tags) but have no mention of pagination, result limits, or how many items to expect.
Undocumented parameter dependencies. The filter_expression parameter in get_cost_and_usage is complex (Dimensions vs Tags with Key, Values, MatchOptions) but lacks clear examples or guidance on when to use each branch. Similarly, group_by accepts both string and object but the conditions for each are not explained.