Skills MCP AD
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.shCada 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.toml2. 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.jsonEl archivo de ejemplo es la única plantilla mantenida en git. Cualquier
ad-config.jsonreal 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-mcp4. 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 |
| Devuelve la información del inquilino para esta instancia (llamar primero) |
| Lista todos los clientes registrados en el registro de clientes |
| Comprueba si un slug de cliente determinado tiene un AD configurado |
Gestión de usuarios (9)
Herramienta | Escritura | Operación |
| — | Lista usuarios (opcionalmente filtrados por UO/criterios) |
| — | Obtiene atributos de usuario por sAMAccountName |
| — | Lista los grupos de los que un usuario es miembro |
| sí | Crea un nuevo usuario |
| sí | Modifica atributos de usuario |
| sí | Elimina un usuario |
| sí | Habilita la cuenta de usuario |
| sí | Deshabilita la cuenta de usuario |
| sí | Restablece la contraseña (cambio forzado en el próximo inicio de sesión) |
Gestión de grupos (8)
Herramienta | Escritura | Operación |
| — | Lista grupos |
| — | Obtiene atributos de grupo |
| — | Lista miembros, opcionalmente recursivo |
| sí | Crea grupo de seguridad o distribución |
| sí | Modifica atributos de grupo |
| sí | Elimina un grupo |
| sí | Añade miembro |
| sí | Elimina miembro |
Gestión de equipos (8)
Herramienta | Escritura | Operación |
| — | Lista equipos |
| — | Obtiene atributos de equipo |
| — | Lista equipos inactivos durante N+ días |
| sí | Crea objeto de equipo |
| sí | Modifica atributos de equipo |
| sí | Elimina objeto de equipo |
| sí | Habilita la cuenta de equipo |
| sí | Deshabilita la cuenta de equipo |
| sí | Restablece la contraseña del canal seguro del equipo |
Gestión de unidades organizativas (7)
Herramienta | Escritura | Operación |
| — | Lista UO (opción recursiva) |
| — | Obtiene atributos de UO |
| — | Lista objetos dentro de una UO |
| sí | Crea UO |
| sí | Modifica UO |
| sí | Elimina UO (force=true para eliminar no vacía) |
| sí | Mueve UO a un nuevo padre |
Seguridad y auditoría (6)
Herramienta | Operación |
| Información del dominio + política de contraseñas/bloqueo |
| Lista grupos privilegiados (Domain Admins, Enterprise Admins, etc.) |
| Muestra permisos efectivos para un usuario |
| Usuarios sin inicio de sesión durante N+ días |
| Cuentas que violan la política de contraseñas |
| Audita la higiene de cuentas privilegiadas |
Prompts MSP (2 herramientas + 15 prompts)
Herramienta | Operación |
| Lista los 15 playbooks profesionales de MSP (gestor y analista) |
| 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 |
| Sonda de conectividad LDAP |
| Comprobación de salud completa (servidor + prueba de búsqueda LDAP + estadísticas) |
| 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 |
| sí | URL LDAP principal, p. ej. |
| no | URLs LDAP adicionales para conmutación por error |
| sí | DN completo de la cuenta de servicio |
| sí | Contraseña de la cuenta de servicio (mantener archivo en |
| sí | DN base, p. ej. |
| sí | UO predeterminadas para usuarios/grupos/equipos/cuentas de servicio |
| no | Forzar StartTLS / LDAPS |
| no | Verificar el certificado del servidor contra |
| no | Rechazar enlace sobre texto plano |
| no | Token Bearer para operaciones de escritura desatendidas |
| no | Identificador de inquilino reportado por |
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:
automation_tokencoincide conautomation.tokenen la configuración — destinado a CI / trabajos programados.client_confirmationcoincide con el slug del inquilino — el asistente de IA debe llamar primero aad_get_client_tenant_info, leer el slug de vuelta al usuario y pasar esa cadena exacta.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.jsonreales están ignorados por git. Solo se rastrea*.example.json.Nunca pegue una configuración que contenga una
passwordoautomation.tokenreales en un chat que sea registrado o transcrito por un tercero.Rote
automation.tokencada 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 |
|
| Verifique con |
| la cuenta de servicio carece de derechos delegados | Re-delegue en la UO objetivo |
| certificado autofirmado sin confianza | Establezca |
| Falta confirmación/token | Llame primero a |
| socket abierto pero la búsqueda LDAP falló | Compruebe bloqueo de cuenta de servicio / replicación / ACL de red |
Contribuciones
Haga un fork del repositorio.
Cree una rama de características:
git checkout -b feat/your-feature.Ejecute las pruebas:
pytest.Abra un PR con una descripción clara y un enlace al problema relevante.
Los commits siguen Conventional Commits.
Licencia
MIT — consulte LICENSE.
Agradecimientos
Basado en el proyecto upstream
alpadalar/ActiveDirectoryMCPde Alperen Adalar.
Soporte
Informes de errores: GitHub Issues
Discusiones: GitHub Discussions
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.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA comprehensive production-ready MCP server with AI integration, plugin management, and web-based administration. Features multi-database support, RAG capabilities, SSH/SFTP access, and a built-in plugin hub for managing the MCP ecosystem.
- AlicenseAqualityDmaintenanceA 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.732MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI-powered assessment of Active Directory on-premises environments by exposing AD data as queryable tools for LLMs like Claude.MIT
- AlicenseNot gradedqualityDmaintenanceAn 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.328MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
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/DevSkillsIT/Skills-MCP-Active-Directory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server