An MCP server for AWS FinOps to analyze costs and audit for savings.
This server has two tools with clear READ_ONLY semantics and tool annotations present, which is good. However, there are critical gaps in schema completeness, parameter descriptions, and output documentation. The input schemas provided are detailed (parameters have types and descriptions), but the actual output schemas are not documented in the code provided. The descriptions are adequate (140-200 chars) but could be more actionable for LLM selection. Error handling exists but lacks recovery guidance. This is a fair but incomplete definition quality, typical of community servers landing in the 50-60 range.
Get cost data for a specified AWS profile for a single defined period. The period can be defined by 'time_range_days' (last N days including today) OR by explicit 'start_date_iso' and 'end_date_iso'. If 'start_date_iso' and 'end_date_iso' are provided, they take precedence. If no period is defined, defaults to the current month to date. Tags can be provided as a list of "Key=Value" strings to filter costs. Dimensions can be provided as a list of "Key=Value" strings to filter costs by specific dimensions. If no tags or dimensions are provided, all costs will be returned. Grouping can be done by a specific dimension, default is "SERVICE".
Get FinOps Audit Report findings for your AWS CLI Profiles. Each Audit Report includes: Stopped EC2 Instances, Un-attached EBS VOlumes, Un-associated EIPs, Budget Status for your one or more specified AWS profiles. Except the budget status, other resources are region specific.
Output schemas not documented. Neither tool documents what fields are returned, their types, or structure. LLMs cannot plan downstream calls or extract the right data without knowing the response shape.
Parameter descriptions lack constraints. 'profiles' is described as 'List of AWS CLI profile names' but doesn't specify format, valid names, or whether empty lists are allowed. 'group_by' mentions default 'SERVICE' but doesn't list valid grouping dimensions (REGION, AZ, USAGE_TYPE, etc.). Enums should be used for 'group_by'.
Error handling provides no recovery guidance. When 'No valid profiles found' is returned, the description doesn't guide the LLM on what to do next (check profile names, use all_profiles=true, etc.). Same for invalid date formats, no suggestion to call with valid YYYY-MM-DD.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Tool descriptions are generic and don't explain WHEN to use each tool or how they differ. For a cost/audit server, the distinction between 'get_cost' (detailed cost breakdown by service/dimension) and 'run_finops_audit' (resource inventory + budget status) is not explicit. LLMs may struggle to pick the right tool.
Pagination and result limits not mentioned. 'get_cost' could return thousands of service cost rows if all services are fetched. No limit parameter. No pagination. Risk of context explosion.
Parameter interdependencies not documented. 'start_date_iso' and 'end_date_iso' take precedence over 'time_range_days', but if all three are omitted, defaults to current month. This precedence rule is in the description but not formalized. Mutually exclusive parameters like 'all_profiles' vs 'profiles' are not explicitly marked.