Model Context Protocol server for Azure Cloud and Azure DevOps
The server defines 12 tools, all read-only Azure resource discovery operations. Tool naming follows verb_noun conventions (list_*, get_*) which is correct. However, descriptions are generic and lack depth. Input schemas are present with basic type definitions, but parameter descriptions are minimal. No output schemas are documented. Error handling is not evident. The server appears to be a straightforward wrapper around Azure SDKs with limited agent optimization.
Get detailed information about an AKS cluster including node pools and autoscaler settings
Get detailed information about a Key Vault
Get detailed information about a storage account
Get detailed information about a specific subscription
List AKS clusters in a resource group
List blob containers in a storage account
No output schemas documented. Tools return results but the agent cannot anticipate field names, types, or structure. This violates pattern:tool and causes LLMs to parse responses blindly, increasing hallucination risk.
Tool descriptions are generic and under 100 characters. 'List all resource groups in the Azure subscription' does not explain WHEN to use this tool, what problem it solves, or what structure is returned. LLM cannot distinguish between similar tools (e.g., list_resource_groups vs list_subscriptions).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
List Key Vaults in a resource group or entire subscription
List all resource groups in the Azure subscription
List storage accounts in a resource group or entire subscription
List all Azure subscriptions accessible to the authenticated account
List secret names and metadata in a Key Vault (does NOT return secret values - read-only)
Search for a secret by name across all Key Vaults in subscription or resource group (returns metadata only, no secret values)
Optional parameters lack clarity on default behavior. 'resource_group' in list_storage_accounts is marked optional with description 'Optional resource group name. If omitted, lists all in subscription.' But the schema does not enforce this, LLM may pass null, empty string, or omit it. Behavior must be explicit in the schema (oneOf patterns or clear validation).
No pagination support visible in schemas. Tools like list_resource_groups, list_aks_clusters, list_subscriptions will fail silently or truncate if results exceed API limits. No limit, offset, or next_cursor parameters documented.
No error handling guidance. If a tool fails (e.g., 'resource group not found'), there is no documented recovery path. Error messages are not shaped to guide the LLM on retry or alternative actions.
Parameter descriptions are minimal or missing context. 'Name of the resource group' does not explain format constraints, whether partial matches work, case sensitivity, or if it can be a path.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). While all tools are read-only, annotating them as such helps agents optimize retry logic and understand safety. Current spec encourages these annotations.
Response structure is unknown. If list_aks_clusters returns an array of cluster objects, the agent does not know field names (e.g., is it 'cluster_name' or 'name'? 'location' or 'region'?). This forces LLMs to guess or request re-formatting.