FastAPI backend + React SPA for Azure resource discovery, performance profiling, and AI-driven support investigations using MCP tools
Four tools with complete input schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. Tool names follow verb_noun convention (azure_*). Descriptions range 80 - 250 chars, meeting minimum length. However, most parameters lack type constraints (enums, min/max), and output schemas are not documented. No error handling guidance visible. Parameters like 'category', 'impact', 'search' in azure_advisor_recommendations lack enum constraints despite accepting known values. azure_public_exposure_inventory has empty required array and no parameters documented. Composition is reasonable (each tool has one responsibility), but parameter relationships and dependencies are underdocumented.
Scope-safe, cross-subscription Azure Advisor recommendations for chat
Deterministic public-endpoint inventory for chat
Generate, validate, execute, and page an Azure Resource Graph query from a natural-language inventory request. Use this first for cross-resource, public endpoint, internet exposure, or broad Azure inventory questions. The query is never executed unless Azure validates it. Make one comprehensive call before requesting narrower follow-ups. Read-only.
Run the Performance Profiler for the in-scope Azure workload: it queries Azure Monitor metrics for every resource and evaluates them against the AMBA performance thresholds, returning a workload score, the ranked bottlenecks (breaching / approaching metrics), and the single worst bottleneck. Use this when investigating performance, latency, throughput, saturation, scaling, or reliability questions to get hard metric evidence. Read-only.
azure_public_exposure_inventory has no parameters documented and empty required array. Description is vague ('Deterministic public-endpoint inventory for chat'). No output schema visible. Violates pattern:tool-description and pattern:constrained-input.
Parameters 'category', 'impact', 'search' in azure_advisor_recommendations lack enum constraints. 'category' accepts 'cost', 'performance', 'security' but is defined as free-form string. 'impact' accepts 'high', 'medium', 'low' but no enum. Violates pattern:constrained-input.
No output schemas documented for any tool. LLMs cannot infer what fields to expect in responses, forcing them to guess downstream tool calls. Violates pattern:tool and pattern:response-shaper.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
run_performance_profile 'window' parameter lacks enum constraint. Accepts 'PT1H, PT6H, P1D, P7D, P30D' but defined as free-form string. LLMs may hallucinate invalid ISO-8601 durations.
No error handling guidance visible in tool descriptions. No recovery hints (e.g., 'If subscription not found, call list_subscriptions() first'). Violates pattern:recovery-guide.