Skip to main content
Glama

Acerca de

Active Directory MCP es un servidor de Model Context Protocol de código abierto que permite a los asistentes de IA (Claude, Gemini CLI, ChatGPT vía API, etc.) gestionar entornos de Active Directory de forma segura.

Características principales

  • 47 herramientas que cubren usuarios, grupos, equipos, UO, seguridad, auditoría y 15 playbooks de prompts para MSP.

  • Tres transportes: stdio (server.py), HTTP Streamable vía FastMCP (server_http.py) y HTTP Streamable vía FastAPI (server_fastapi.py).

  • Multiinquilino por diseño: cada instancia se vincula a su propio AD mediante AD_MCP_CONFIG; el mismo código base puede atender a un número ilimitado de inquilinos desde un único host.

  • Protecciones para operaciones de escritura: cada herramienta de mutación requiere una cadena de confirmación del cliente por inquilino o un token Bearer de automatización antes de tocar AD.

  • Registro de auditoría en cada operación: cada llamada registra el nombre de la operación, el objetivo, el modo (CONFIRMED / AUTOMATION / NO_CONFIRMATION_REQUIRED) y el resultado.

Convención de nombres

Todos los nombres de herramientas MCP usan el prefijo ad_* con un sufijo descriptivo — p. ej. ad_list_users_with_filters, ad_create_user_account, ad_disable_computer_account_trust. Esto evita colisiones cuando este MCP se ejecuta junto a otros servidores (GLPI, Hudu, etc.) conectados al mismo cliente de IA.


Related MCP server: Shell MCP

Arquitectura multiinquilino

Este MCP está diseñado para ejecutarse como un proceso por inquilino, compartiendo todos el mismo código:

.base-code/                    <- this repository (shared source of truth)
  src/active_directory_mcp/
  ad-config/
    ad-config.example.json     <- template only (real configs are .gitignored)

<deployment>/                  <- one directory per tenant, OUTSIDE this repo
  tenant-a/
    ad-config/ad-config.json   <- real credentials (NEVER committed)
    start.sh                   <- exports AD_MCP_CONFIG and launches the server
  tenant-b/
    ad-config/ad-config.json
    start.sh

Cada start.sh exporta AD_MCP_CONFIG apuntando a la configuración de ese inquilino y ejecuta python -m active_directory_mcp.server_http en un puerto dedicado. Actualiza el .base-code/ compartido una vez, reinicia todos los inquilinos — mismo código, estado aislado.


Inicio rápido

Requisitos previos

  • Python 3.11+

  • LDAP/LDAPS accesible desde el host

  • Una cuenta de servicio de AD con los permisos requeridos por las operaciones que planeas exponer

1. Instalación

git clone https://github.com/DevSkillsIT/Skills-MCP-Active-Directory.git
cd Skills-MCP-Active-Directory

python -m venv .venv
source .venv/bin/activate          # Linux/macOS
# .venv\Scripts\activate           # Windows

pip install -e .                   # installs from pyproject.toml

2. Configuración

mkdir -p /etc/ad-mcp
cp ad-config/ad-config.example.json /etc/ad-mcp/ad-config.json
$EDITOR /etc/ad-mcp/ad-config.json   # set server, bind_dn, password, base_dn, OUs
chmod 600 /etc/ad-mcp/ad-config.json

El archivo de ejemplo es la única plantilla mantenida en git. Cualquier ad-config.json real está bloqueado por .gitignore (ad-config/*.json + !ad-config/*.example.json).

3. Ejecución

export AD_MCP_CONFIG=/etc/ad-mcp/ad-config.json

# stdio transport (for direct Claude Desktop / mcp-cli use):
python -m active_directory_mcp.server

# HTTP transport (for Claude Code, Gemini CLI, n8n, etc.):
python -m active_directory_mcp.server_http --host 0.0.0.0 --port 8813 --path /activedirectory-mcp

4. Conexión desde Claude Code

claude mcp add --transport http ad http://localhost:8813/activedirectory-mcp \
  --headers "Authorization: Bearer YOUR_AUTOMATION_TOKEN"

5. Conexión desde Gemini CLI

~/.gemini/settings.json:

{
  "mcpServers": {
    "ad": {
      "httpUrl": "http://localhost:8813/activedirectory-mcp",
      "headers": { "Authorization": "Bearer YOUR_AUTOMATION_TOKEN" },
      "timeout": 30000
    }
  }
}

Herramientas

Todas las herramientas usan el prefijo ad_*. Las herramientas marcadas como Escritura requieren una cadena de confirmación O un token Bearer de automatización.

Identificación de inquilino (3)

Herramienta

Operación

ad_get_client_tenant_info

Devuelve la información del inquilino para esta instancia (llamar primero)

ad_list_configured_clients

Lista todos los clientes registrados en el registro de clientes

ad_check_client_configuration

Comprueba si un slug de cliente determinado tiene un AD configurado

Gestión de usuarios (9)

Herramienta

Escritura

Operación

ad_list_users_with_filters

—

Lista usuarios (opcionalmente filtrados por UO/criterios)

ad_get_user_details_by_username

—

Obtiene atributos de usuario por sAMAccountName

ad_get_user_group_memberships

—

Lista los grupos de los que un usuario es miembro

ad_create_user_account

sí

Crea un nuevo usuario

ad_modify_user_attributes

sí

Modifica atributos de usuario

ad_delete_user_account_permanently

sí

Elimina un usuario

ad_enable_user_account_access

sí

Habilita la cuenta de usuario

ad_disable_user_account_access

sí

Deshabilita la cuenta de usuario

ad_reset_user_password_forced

sí

Restablece la contraseña (cambio forzado en el próximo inicio de sesión)

Gestión de grupos (8)

Herramienta

Escritura

Operación

ad_list_groups_with_filters

—

Lista grupos

ad_get_group_details_by_name

—

Obtiene atributos de grupo

ad_get_group_members_recursive

—

Lista miembros, opcionalmente recursivo

ad_create_group_security_or_distribution

sí

Crea grupo de seguridad o distribución

ad_modify_group_attributes

sí

Modifica atributos de grupo

ad_delete_group_permanently

sí

Elimina un grupo

ad_add_member_to_group

sí

Añade miembro

ad_remove_member_from_group

sí

Elimina miembro

Gestión de equipos (8)

Herramienta

Escritura

Operación

ad_list_computers_with_filters

—

Lista equipos

ad_get_computer_details_by_name

—

Obtiene atributos de equipo

ad_get_inactive_computers_by_days

—

Lista equipos inactivos durante N+ días

ad_create_computer_account

sí

Crea objeto de equipo

ad_modify_computer_attributes

sí

Modifica atributos de equipo

ad_delete_computer_account_permanently

sí

Elimina objeto de equipo

ad_enable_computer_account_trust

sí

Habilita la cuenta de equipo

ad_disable_computer_account_trust

sí

Deshabilita la cuenta de equipo

ad_reset_computer_password_trust

sí

Restablece la contraseña del canal seguro del equipo

Gestión de unidades organizativas (7)

Herramienta

Escritura

Operación

ad_list_organizational_units_hierarchy

—

Lista UO (opción recursiva)

ad_get_organizational_unit_details

—

Obtiene atributos de UO

ad_get_organizational_unit_objects

—

Lista objetos dentro de una UO

ad_create_organizational_unit

sí

Crea UO

ad_modify_organizational_unit_attributes

sí

Modifica UO

ad_delete_organizational_unit_forced

sí

Elimina UO (force=true para eliminar no vacía)

ad_move_organizational_unit_parent

sí

Mueve UO a un nuevo padre

Seguridad y auditoría (6)

Herramienta

Operación

ad_get_domain_security_policy_info

Información del dominio + política de contraseñas/bloqueo

ad_get_privileged_security_groups

Lista grupos privilegiados (Domain Admins, Enterprise Admins, etc.)

ad_get_user_effective_permissions

Muestra permisos efectivos para un usuario

ad_get_inactive_users_by_days

Usuarios sin inicio de sesión durante N+ días

ad_get_password_policy_violations

Cuentas que violan la política de contraseñas

ad_audit_administrative_accounts

Audita la higiene de cuentas privilegiadas

Prompts MSP (2 herramientas + 15 prompts)

Herramienta

Operación

ad_list_msp_prompts

Lista los 15 playbooks profesionales de MSP (gestor y analista)

ad_execute_msp_prompt

Ejecuta un playbook nombrado con argumentos

Consulta PROMPTS.md para el catálogo completo de prompts (auditoría de seguridad, incorporación, baja, playbook de restablecimiento de contraseña, etc.).

Sistema (4)

Herramienta

Operación

ad_test_ldap_connection_status

Sonda de conectividad LDAP

ad_health_check_mcp_server

Comprobación de salud completa (servidor + prueba de búsqueda LDAP + estadísticas)

ad_get_mcp_schema_tools_info

Esquema autodescriptivo de todas las herramientas registradas


Configuración

La ruta del archivo de configuración en tiempo de ejecución se proporciona mediante la variable de entorno AD_MCP_CONFIG. Esquema en ad-config/ad-config.example.json.

Campos clave

Campo

Requerido

Descripción

active_directory.server

sí

URL LDAP principal, p. ej. ldaps://dc.example.com:636

active_directory.server_pool

no

URLs LDAP adicionales para conmutación por error

active_directory.bind_dn

sí

DN completo de la cuenta de servicio

active_directory.password

sí

Contraseña de la cuenta de servicio (mantener archivo en chmod 600)

active_directory.base_dn

sí

DN base, p. ej. DC=example,DC=com

organizational_units.*

sí

UO predeterminadas para usuarios/grupos/equipos/cuentas de servicio

security.enable_tls

no

Forzar StartTLS / LDAPS

security.validate_certificate

no

Verificar el certificado del servidor contra ca_cert_file

security.require_secure_connection

no

Rechazar enlace sobre texto plano

automation.token

no

Token Bearer para operaciones de escritura desatendidas

client.slug

no

Identificador de inquilino reportado por ad_get_client_tenant_info

Permisos de la cuenta de servicio

Conceda a la cuenta de enlace los derechos delegados mínimos requeridos por las operaciones que desee exponer:

  • Implementaciones de solo lectura: "Leer todas las propiedades" + "Listar contenido" en la raíz del dominio es suficiente.

  • Escritura de usuarios/grupos: delegue "Crear/Eliminar objetos" + "Escribir todas las propiedades" en las UO objetivo.

  • Restablecimiento de contraseña: delegue el derecho extendido "Restablecer contraseña" en las UO objetivo.

  • Unión/salida de equipos: delegue "Crear/Eliminar objetos de equipo" en la UO de equipos.

Utilice siempre una cuenta de servicio dedicada, LDAPS en producción y rote la contraseña regularmente.


Seguridad

Modelo de protección de escritura

Cada herramienta de mutación (ad_create_*, ad_modify_*, ad_delete_*, ad_enable_*, ad_disable_*, ad_reset_*, ad_add_*, ad_remove_*, ad_move_*) llama a check_write_permission() antes de llegar a LDAP. Acepta la escritura si una de:

  1. automation_token coincide con automation.token en la configuración — destinado a CI / trabajos programados.

  2. client_confirmation coincide con el slug del inquilino — el asistente de IA debe llamar primero a ad_get_client_tenant_info, leer el slug de vuelta al usuario y pasar esa cadena exacta.

  3. El inquilino tiene require_confirmation_for_writes: false (opt-out explícito, no recomendado).

Si ninguna de las anteriores se cumple, la llamada se cortocircuita con un mensaje permitted: false y la escritura LDAP nunca se intenta.

Registro de auditoría

Todas las operaciones escriben una línea de registro estructurada que incluye: marca de tiempo, nombre de la herramienta, objetivo, modo de confirmación (AUTOMATION / CONFIRMED / WRONG_CONFIRMATION / NO_CONFIRMATION_REQUIRED) y éxito/fracaso. Los registros van donde apunte logging.file.

Higiene de secretos

  • Los archivos ad-config.json reales están ignorados por git. Solo se rastrea *.example.json.

  • Nunca pegue una configuración que contenga una password o automation.token reales en un chat que sea registrado o transcrito por un tercero.

  • Rote automation.token cada vez que lo regenere; trátelo como una credencial privilegiada.


Pruebas

# Unit + integration tests
pytest tests/ -v

# Coverage
pytest --cov=src --cov-report=term-missing

# Lint
ruff check .

Un docker-compose-ad.yml incluido levanta un contenedor Samba AD en 192.168.1.100 más un contenedor MCP para que las pruebas de integración puedan ejecutarse contra un backend LDAP real sin tocar producción.


Solución de problemas

Síntoma

Causa probable

Solución

LDAP bind failed

bind_dn / password incorrectos

Verifique con ldapsearch -H <servidor> -D '<bind_dn>' -W

Insufficient permissions

la cuenta de servicio carece de derechos delegados

Re-delegue en la UO objetivo

Certificate verification failed

certificado autofirmado sin confianza

Establezca ca_cert_file o validate_certificate: false (solo prueba)

permitted: false en cada escritura

Falta confirmación/token

Llame primero a ad_get_client_tenant_info, o pase automation_token

Health degraded

socket abierto pero la búsqueda LDAP falló

Compruebe bloqueo de cuenta de servicio / replicación / ACL de red


Contribuciones

  1. Haga un fork del repositorio.

  2. Cree una rama de características: git checkout -b feat/your-feature.

  3. Ejecute las pruebas: pytest.

  4. Abra un PR con una descripción clara y un enlace al problema relevante.

Los commits siguen Conventional Commits.


Licencia

MIT — consulte LICENSE.

Agradecimientos

Soporte

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A comprehensive MCP server for managing Active Directory environments through LDAP, enabling user, group, computer, and OU management, as well as security auditing and policy compliance checks.
    45
    51
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A production-ready MCP server that enables AI assistants to execute shell commands, manage files, monitor system resources, and automate complex workflows with advanced features like stock tracking and web automation.
    7
    12 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that enables AI-powered assessment of Active Directory on-premises environments by exposing AD data as queryable tools for LLMs like Claude.
    27 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to manage, monitor, and diagnose Windows systems through 42 tools across 8 modules, including services, event viewer, task scheduler, processes, network, diagnostics, observability, and safety features.
    19 npm
    9
    MIT