Infrawise MCP server for Claude Code - provides Azure FinOps recommendations and cost optimization insights
The server defines 4 tools with consistent naming patterns (all start with 'get_'), proper input schemas with UUID type constraints, and reasonable descriptions. However, descriptions are generic/minimal (60-90 chars), lack actionable context for LLM selection, and provide no guidance on output structure or when to prefer one tool over another. All tools are READ_ONLY and follow similar patterns, which aids consistency but obscures subtle differences. Parameter descriptions exist but are sparse. Output schemas are not documented in tool definitions, the LLM has no visibility into what fields to expect (savings, resource counts, recommendations structure, etc.). Error handling is present via InfrawiseClientError but lacks recovery guidance or actionable messaging.
Retrieve strategic purchasing and licensing optimization recommendations.
Retrieve idle and zombie Azure resources that can be deleted or deallocated for cost savings.
Aggregate savings totals across idle resources, SKU rightsizing, and general recommendations.
Retrieve rightsizing recommendations for overprovisioned resources.
All tool descriptions are generic and lack LLM-optimized guidance. Descriptions (60-90 chars) do not explain WHEN to call each tool or what distinguishes get_sku_optimizations from get_idle_resources from get_general_recommendations. An LLM cannot reason about tool selection without these distinctions.
No output schemas are documented in tool definitions. The LLM cannot infer what fields (e.g., resource_count, estimated_savings, recommendation_type) are returned by each tool. This forces the LLM to guess the response structure, increasing hallucination risk.
Parameter descriptions are minimal ('Optional subscription ID to filter results'). No examples, range constraints, or format guidance beyond the UUID type constraint. Baseline is ~72 chars per param description; these are ~60 chars and lack actionable context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
All four tools accept the same optional subscription_filter parameter with identical descriptions. The tools' purposes are semantically different (idle resources vs. SKU optimization vs. general recommendations vs. aggregate summary), but the tool descriptions do not explain when to call which one. An LLM may pick the wrong tool.
Error handling returns structured InfrawiseClientError objects (code, message, status) but provides no guidance on recovery or next steps. Error messages like 'UPSTREAM_ERROR' or 'NOT_AUTHENTICATED' do not tell the LLM whether to retry, ask the user, or abort the plan.