Azure Pricing MCP has well-structured tool definitions with complete input schemas and reasonable descriptions. All 5 tools are explicitly registered with proper JSON Schema. However, descriptions lack LLM-optimization guidance (e.g., no 'when to use' context), parameter descriptions are generic, and output schemas are entirely undocumented. Error handling is absent, no guidance on retryability, user-fixable errors, or recovery paths. Tool composition is sound (each does one thing), but missing pagination guidance for large result sets and no documentation of what fields are returned.
Compare prices for Virtual Machine SKUs across regions or between different SKU sizes. Useful for cost optimization.
Get reservation (reserved instance) prices for a specific service or SKU. Shows 1-year and 3-year reservation pricing.
Get the list of available Azure service families that can be used for filtering prices.
Get the list of available services and product types within a specific Azure service family. Useful for discovering what resources are available before querying prices.
Query Azure retail prices with optional filters. Supports filtering by service name, region, SKU, price type, and more. Returns pricing information including retail price, unit of measure, and meter details.
No output schema documentation. LLMs cannot plan downstream calls or extract required fields without knowing what each tool returns. All 5 tools lack documented return types.
No error handling guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next. E.g., API failures return raw HTTP status codes with no recovery path.
Descriptions lack 'when to use' context. E.g., 'Query Azure retail prices' does not explain when to call this vs compare_vm_prices or get_reservation_prices. LLMs cannot disambiguate similar tools without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
query_azure_prices accepts customFilter (OData) but does not document OData syntax, valid operators, or examples. LLMs will hallucinate invalid filter expressions.
maxResults parameter lacks bounds documentation. query_azure_prices states 'max: 1000' but does not explain performance implications or pagination strategy for large datasets.