mcp-azure-landing-zone
Allows detection of infrastructure drift by executing terraform plan against the Azure Landing Zone Terraform configuration.
Click on "Install 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 Assistant 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jmartinezHNL/mcp-azure-landing-zone'
If you have feedback or need assistance with the MCP directory API, please join our Discord server