mcp-azure-landing-zone
Allows detection of infrastructure drift by executing terraform plan against the Azure Landing Zone Terraform configuration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-azure-landing-zoneList all untagged resources in the subscription."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-azure-landing-zone
Servidor MCP (Model Context Protocol) que permite a un asistente de IA (Claude Desktop, Claude Code, o cualquier cliente MCP) inspeccionar y auditar una Azure Landing Zone:
Inventariar los recursos desplegados en una subscripción.
Auditar el gobierno de etiquetado (recursos sin tags).
Evaluar el cumplimiento de Azure Policy vía Policy Insights.
Detectar drift de infraestructura ejecutando
terraform planen local.
Todas las operaciones son de solo lectura: el servidor nunca crea, modifica ni elimina
recursos, y nunca ejecuta terraform apply.
Índice de documentación
Documento | Contenido |
Requisitos, instalación paso a paso, verificación | |
Llenado de | |
Referencia de cada herramienta: parámetros, salida, ejemplos | |
Registro en Claude Desktop / Claude Code y prompts de ejemplo | |
Errores frecuentes y su solución |
Related MCP server: azure-compliance-mcp
Arquitectura
┌──────────────────┐ stdio (JSON-RPC) ┌─────────────────────────────┐
│ Claude Desktop │ ───────────────────► │ server.py (FastMCP) │
│ / Claude Code │ ◄─────────────────── │ "Azure Landing Zone Asst." │
└──────────────────┘ └──────────┬──────────────────┘
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
┌───────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ tools/resources.py│ │ tools/policy.py │ │ tools/terraform.py │
│ ResourceMgmtClient│ │ PolicyInsightsClient│ │ subprocess: plan │
└─────────┬─────────┘ └──────────┬─────────┘ └─────────┬──────────┘
│ DefaultAzureCredential │ │
▼ ▼ ▼
┌──────────────────────────────────────┐ ┌──────────────────────┐
│ Azure Resource Manager (ARM) │ │ Terraform + state │
└──────────────────────────────────────┘ └──────────────────────┘Estructura de ficheros
mcp-azure-landing-zone/
├── server.py # Punto de entrada MCP (FastMCP, transporte stdio)
├── config.yaml # Configuración activa (NO subir a git si lleva datos reales)
├── config.example.yaml # Plantilla de configuración
├── requirements.txt # Dependencias
├── .env.example # Plantilla de variables de entorno
├── terraform/ # Configuración Terraform de la Landing Zone
│ ├── versions.tf # Versiones y backend
│ ├── providers.tf # Provider azurerm
│ ├── variables.tf # Variables de entrada
│ ├── main.tf # Data sources y ejemplo de importación
│ └── outputs.tf # Outputs de la configuración
├── tools/
│ ├── __init__.py
│ ├── resources.py # get_full_subscription_topology / get_untagged_resources / list_resources
│ ├── policy.py # get_policy_states
│ └── terraform.py # run_terraform_plan
└── docs/ # Documentación detalladaInicio rápido (5 minutos)
cd /Users/juancarlosmartinez/PycharmProjects/mcp-azure-landing-zone
# 1. Dependencias
.venv/bin/pip install -r requirements.txt
# 2. Autenticación en Azure
az login
az account show --query id -o tsv # copia este id
# 3. Configuración: pega el id en config.yaml -> azure.default_subscription_id
# y ajusta terraform.working_dir
# 4. Verificación
.venv/bin/python -c "import server; print(server.get_server_configuration())"
# 5. Arranque manual (se queda esperando JSON-RPC por stdin: es lo correcto)
.venv/bin/python server.pyRegistro en Claude Desktop
(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"azure-landing-zone": {
"command": "/Users/juancarlosmartinez/PycharmProjects/mcp-azure-landing-zone/.venv/bin/python",
"args": ["/Users/juancarlosmartinez/PycharmProjects/mcp-azure-landing-zone/server.py"]
}
}
}Detalles y alternativas en docs/04-uso.md.
Herramientas expuestas
Herramienta | Qué hace | Requiere |
| Mapa jerárquico por resource group + resumen agregado, optimizado en tokens | Rol Reader en Azure |
| Inventario plano con id ARM completo (filtrable por resource group) | Rol Reader en Azure |
| Recursos sin ninguna etiqueta, ordenados por grupo | Rol Reader en Azure |
| Estado Compliant/NonCompliant por política y recurso | Lectura en Policy Insights |
|
| Terraform en el PATH + backend accesible |
| Configuración activa del servidor (diagnóstico) | — |
Eficiencia en tokens
get_subscription_topology está diseñada para que Claude pueda analizar toda la
infraestructura sin saturar el contexto. Medido sobre una subscripción real de
42 resource groups y 1 634 recursos:
Modo | Tokens aprox. |
| ~54 700 |
| ~8 000 |
| ~3 076 |
Los contadores agregados son idénticos en los tres modos. La estrategia
recomendada es empezar por el resumen y bajar al detalle solo del grupo que
interese con list_azure_resources.
Referencia completa con formatos de entrada/salida en docs/03-herramientas.md.
Estado actual del entorno
Comprobado el 2026-07-28 en esta máquina:
Elemento | Estado |
Dependencias Python | Instaladas en |
Azure CLI ( | Instalado y con sesión iniciada |
| v1.15.8 instalado desde el tap |
| Inicializado ( |
| Apuntando a la subscripción real y al directorio |
Las cinco herramientas se han ejecutado con éxito contra la subscripción real.
Seguridad
El servidor no almacena credenciales. Usa
DefaultAzureCredential, que resuelve la identidad en cadena (variables de entorno → identidad administrada → Azure CLI → …).El navegador interactivo está deshabilitado (
exclude_interactive_browser_credential=True) para que el proceso nunca se quede colgado esperando un login en un servidor sin interfaz.terraform planse ejecuta conshell=Falsey lista de argumentos explícita: ninguna entrada del modelo puede inyectar comandos adicionales.Los logs van a stderr; stdout está reservado al protocolo MCP.
config.yamlpuede contener identificadores de subscripción: añádelo a.gitignoresi el repositorio es público (verconfig.example.yamlcomo plantilla versionable).
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only finance and operations controls for AI agents with evidence and safe next actions.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Discover Frontier inference capabilities and read sanitized usage through read-only tools.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Mender IoT platform for device management, deployment monitoring, and fleet analysis through natural language commands. Provides read-only access to device status, deployment logs, releases, and system monitoring capabilities.2MIT
- AlicenseAqualityBmaintenanceEnables natural-language queries about Azure resource compliance, including VM compliance, patch status, orphaned RBAC, and infrastructure health, through read-only MCP tools.3MIT
- AlicenseAqualityCmaintenanceEnables read-only querying of Azure Log Analytics and Azure Resource Graph through MCP, supporting KQL queries, workspace discovery, and resource inventory exploration with Azure RBAC authentication.52MIT
- AlicenseAqualityBmaintenanceEnables security analysts to investigate Microsoft Entra ID security logs through natural language, exposing read-only tools for user context, sign-ins, risky users, risk detections, directory audits, and conditional access policies.6MIT