Skip to main content
Glama
Sultan-zd

Entra ID SecOps MCP Server

by Sultan-zd

Entra ID SecOps MCP Server

CI Python MCP Licence

Servidor MCP que expone los registros de seguridad de Microsoft Entra ID como herramientas ejecutables por un agente de IA (Claude Desktop, Cursor, o cualquier otro cliente MCP).

Objetivo: permitir a un analista plantear una pregunta en lenguaje natural — «¿por qué esta cuenta ya no puede conectarse?» — y obtener en pocos segundos una respuesta basada en los datos reales del tenant.

📖 Guía de instalación y prueba — las tres formas de lanzar el servidor, paso a paso. 🔍 Informe técnico — análisis del mercado y exposición segura.

Principio de diseño

Una respuesta bruta de Microsoft Graph contiene unos sesenta campos por evento. El servidor aplica un truncamiento agresivo: solo una docena de indicadores de seguridad llegan al modelo. Es a la vez una optimización de coste (factor ~35 en los tokens) y un control de seguridad, ya que los campos no listados —algunos de los cuales están controlados por un atacante— nunca entran en el contexto.

Los agregados (número de fallos, IP distintas, patrones sospechosos) se calculan en Python, no los deduce el modelo.

Herramientas

Herramienta

Objeto

Permiso Graph

Licencia

get_user_context

Ficha de la cuenta: puesto, grupos, roles asignados. Determina la gravedad de un incidente.

Directory.Read.All

get_user_signins

Conexiones recientes de un UPN, con resumen y patrones sospechosos

AuditLog.Read.All

P1

get_risky_users

Cuentas marcadas como en riesgo por Identity Protection

IdentityRiskyUser.Read.All

P2

get_risk_detections

Detecciones individuales: por qué una cuenta está en riesgo

IdentityRiskEvent.Read.All

P2

get_directory_audits

Modificaciones administrativas; señala las acciones de persistencia

AuditLog.Read.All

get_conditional_access_policies

Políticas activas y brechas de cobertura

Policy.Read.All

Todas las herramientas son de solo lectura: el servidor nunca modifica el tenant.

Orden de investigación recomendado

get_user_context     le compte est-il privilégié ? l'incident est-il grave ?
      ↓
get_user_signins     que s'est-il passé sur l'authentification ?
      ↓
get_risk_detections  qu'a détecté Identity Protection, et pourquoi ?
      ↓
get_directory_audits l'attaquant a-t-il modifié quelque chose une fois entré ?

Esta secuencia también se describe en las instructions del servidor, que el cliente MCP transmite al modelo.

Inicio rápido (sin tenant de Azure)

El modo fixture reproduce un incidente de demostración y no requiere ni tenant, ni licencia, ni secreto.

python -m venv venv
venv/Scripts/activate          # Windows ; sur Linux/macOS : source venv/bin/activate
pip install -e ".[dev]"

cp .env.example .env           # ENTRA_DATA_SOURCE=fixture est déjà la valeur par défaut
python -m entra_secops_mcp

Conexión a un tenant real

  1. Crear un App Registration en el portal de Entra.

  2. Agregar los permisos de aplicación de la tabla anterior y otorgar el consentimiento del administrador.

  3. Generar un secreto de cliente.

  4. Completar .env:

AZURE_TENANT_ID=...
AZURE_CLIENT_ID=...
AZURE_CLIENT_SECRET=...
ENTRA_DATA_SOURCE=graph

Licencia requerida. El acceso a los registros de inicio de sesión a través de la API requiere una licencia de Entra ID P1, y las herramientas de Identity Protection requieren P2. Sin ellas, Graph responde 403. Las demás herramientas funcionan sin licencia de pago. Verifique la licencia del tenant antes de comenzar: es el bloqueo clásico que hace perder varios días.

Seguridad

  • Ningún secreto está presente en el código ni en la imagen Docker. Se inyectan al inicio mediante --env-file.

  • .env está excluido de git por .gitignore. Un secreto subido a un repositorio debe ser revocado en Azure, no solo eliminado del archivo.

  • El registro se dirige a stderr: en el transporte stdio, stdout transporta el protocolo JSON-RPC y no tolera ningún byte parásito.

Configuración

Todas las variables están documentadas en .env.example.

Docker

docker build -t entra-secops-mcp .
docker run -i --rm --env-file .env entra-secops-mcp

Imagen final: 277 MB, construcción en varias etapas, ejecución como usuario no root (uid=1000), ningún secreto en las capas.

-i mantiene la entrada estándar abierta — por ahí pasa el protocolo MCP. Nada de -t: un pseudo-terminal inyecta códigos de color que corrompen las tramas JSON.

Desarrollo

pytest              # 81 tests
ruff check src tests
mypy src            # mode strict
pre-commit install  # contrôles avant chaque commit
python demo.py      # investigation de démonstration

Estado

Herramientas

6, todas de solo lectura

Pruebas

81, sin tenant de Azure requerido

Tipos

mypy --strict sin advertencias

Protocolo MCP

2026-07-28 (SDK mcp 2.0)

Contenedor

verificado con un cliente MCP real: inicio 2,4 s, llamada de herramienta ~110 ms

Licencia

MIT.

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/Sultan-zd/mcp-entra-secops'

If you have feedback or need assistance with the MCP directory API, please join our Discord server