Skills MCP AD
О проекте
Active Directory MCP — это сервер с открытым исходным кодом, реализующий Model Context Protocol, который позволяет ИИ-ассистентам (Claude, Gemini CLI, ChatGPT через API и др.) безопасно управлять средами Active Directory.
Ключевые возможности
47 инструментов, покрывающих пользователей, группы, компьютеры, OU, безопасность, аудит и 15 плейбуков для MSP-провайдеров.
Три транспорта: stdio (
server.py), Streamable HTTP через FastMCP (server_http.py) и Streamable HTTP через FastAPI (server_fastapi.py).Мультитенантность из коробки: каждый экземпляр привязан к своему AD через
AD_MCP_CONFIG; одна и та же кодовая база может обслуживать неограниченное число тенантов с одного хоста.Защита операций записи: каждый изменяющий инструмент требует либо строку подтверждения клиента для конкретного тенанта, либо Bearer-токен автоматизации перед обращением к AD.
Журнал аудита для каждой операции: каждый вызов фиксирует имя операции, цель, режим (CONFIRMED / AUTOMATION / NO_CONFIRMATION_REQUIRED) и результат.
Соглашение об именовании
Все имена инструментов MCP используют префикс ad_* с описательным суффиксом — например, ad_list_users_with_filters, ad_create_user_account, ad_disable_computer_account_trust. Это позволяет избежать конфликтов имён, когда этот MCP работает вместе с другими серверами (GLPI, Hudu и т. д.), подключёнными к одному ИИ-клиенту.
Related MCP server: Shell MCP
Мультитенантная архитектура
Этот MCP спроектирован так, чтобы работать как один процесс на тенанта, при этом все они используют одну и ту же кодовую базу:
.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Каждый start.sh экспортирует AD_MCP_CONFIG, указывающий на конфигурацию этого тенанта, и запускает python -m active_directory_mcp.server_http на выделенном порту. Обновите общий .base-code/ один раз, перезапустите все тенанты — тот же код, изолированное состояние.
Быстрый старт
Предварительные требования
Python 3.11+
LDAP/LDAPS, доступный с хоста
Сервисная учётная запись AD с правами, необходимыми для операций, которые вы планируете открыть
1. Установка
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. Настройка
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Файл примера — единственный шаблон, хранящийся в git. Любой реальный
ad-config.jsonблокируется.gitignore(ad-config/*.json+!ad-config/*.example.json).
3. Запуск
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. Подключение из Claude Code
claude mcp add --transport http ad http://localhost:8813/activedirectory-mcp \
--headers "Authorization: Bearer YOUR_AUTOMATION_TOKEN"5. Подключение из Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"ad": {
"httpUrl": "http://localhost:8813/activedirectory-mcp",
"headers": { "Authorization": "Bearer YOUR_AUTOMATION_TOKEN" },
"timeout": 30000
}
}
}Инструменты
Все инструменты используют префикс ad_*. Инструменты, помеченные как Write, требуют строку подтверждения ИЛИ Bearer-токен автоматизации.
Идентификация тенанта (3)
Инструмент | Операция |
| Возврат информации о тенанте для этого экземпляра (вызывать первым) |
| Список всех клиентов, зарегистрированных в реестре клиентов |
| Проверка, настроен ли AD для указанного slug клиента |
Управление пользователями (9)
Инструмент | Write | Операция |
| — | Список пользователей (опционально с фильтром по OU/критериям) |
| — | Получение атрибутов пользователя по sAMAccountName |
| — | Список групп, в которых состоит пользователь |
| да | Создание нового пользователя |
| да | Изменение атрибутов пользователя |
| да | Удаление пользователя |
| да | Включение учётной записи пользователя |
| да | Отключение учётной записи пользователя |
| да | Сброс пароля (принудительная смена при следующем входе) |
Управление группами (8)
Инструмент | Write | Операция |
| — | Список групп |
| — | Получение атрибутов группы |
| — | Список участников, опционально рекурсивно |
| да | Создание группы безопасности или рассылки |
| да | Изменение атрибутов группы |
| да | Удаление группы |
| да | Добавление участника |
| да | Удаление участника |
Управление компьютерами (8)
Инструмент | Write | Операция |
| — | Список компьютеров |
| — | Получение атрибутов компьютера |
| — | Список компьютеров, неактивных N+ дней |
| да | Создание объекта компьютера |
| да | Изменение атрибутов компьютера |
| да | Удаление объекта компьютера |
| да | Включение учётной записи компьютера |
| да | Отключение учётной записи компьютера |
| да | Сброс пароля защищённого канала компьютера |
Управление подразделениями (7)
Инструмент | Write | Операция |
| — | Список OU (опция рекурсии) |
| — | Получение атрибутов OU |
| — | Список объектов внутри OU |
| да | Создание OU |
| да | Изменение OU |
| да | Удаление OU (force=true для удаления непустых) |
| да | Перемещение OU к новому родителю |
Безопасность и аудит (6)
Инструмент | Операция |
| Информация о домене + политика паролей и блокировок |
| Список привилегированных групп (Domain Admins, Enterprise Admins и т. д.) |
| Отображение эффективных разрешений для пользователя |
| Пользователи без входа в систему N+ дней |
| Учётные записи, нарушающие политику паролей |
| Аудит гигиены привилегированных учётных записей |
Промпты для MSP (2 инструмента + 15 промптов)
Инструмент | Операция |
| Список 15 профессиональных плейбуков MSP (менеджер и аналитик) |
| Выполнение именованного плейбука с аргументами |
Полный каталог промптов см. в PROMPTS.md (аудит безопасности, онбординг, офбординг, плейбук сброса пароля и т. д.).
Системные (4)
Инструмент | Операция |
| Проверка подключения к LDAP |
| Полная проверка работоспособности (сервер + тест поиска LDAP + статистика) |
| Самодокументируемая схема всех зарегистрированных инструментов |
Конфигурация
Путь к файлу конфигурации времени выполнения задаётся через переменную окружения AD_MCP_CONFIG. Схема — в ad-config/ad-config.example.json.
Ключевые поля
Поле | Обязательно | Описание |
| да | Основной URL LDAP, например |
| нет | Дополнительные URL LDAP для отказоустойчивости |
| да | Полный DN сервисной учетной записи |
| да | Пароль сервисной учетной записи (храните файл с правами |
| да | Базовый DN, например |
| да | Подразделения по умолчанию для пользователей/групп/компьютеров/сервисных учетных записей |
| нет | Принудительно использовать StartTLS / LDAPS |
| нет | Проверять сертификат сервера с помощью |
| нет | Отказываться от подключения без шифрования |
| нет | Токен Bearer для автоматических операций записи |
| нет | Идентификатор тенанта, возвращаемый |
Разрешения сервисной учетной записи
Предоставьте учетной записи привязки минимальные делегированные права, необходимые для операций, которые вы планируете открыть:
Развертывания только для чтения: достаточно «Чтение всех свойств» + «Список содержимого» в корне домена.
Запись пользователей/групп: делегируйте «Создание/удаление объектов» + «Запись всех свойств» в целевых подразделениях.
Сброс пароля: делегируйте расширенное право «Сброс пароля» в целевых подразделениях.
Ввод/вывод компьютеров: делегируйте «Создание/удаление объектов компьютеров» в подразделении компьютеров.
Всегда используйте выделенную сервисную учетную запись, LDAPS в производственной среде и регулярно меняйте пароль.
Безопасность
Модель защиты записи
Каждый изменяющий инструмент (ad_create_*, ad_modify_*, ad_delete_*, ad_enable_*, ad_disable_*, ad_reset_*, ad_add_*, ad_remove_*, ad_move_*) вызывает check_write_permission() перед обращением к LDAP. Он разрешает запись, если выполняется одно из условий:
automation_tokenсовпадает сautomation.tokenв конфигурации — предназначен для CI / запланированных заданий.client_confirmationсовпадает с идентификатором тенанта — ИИ-ассистент должен сначала вызватьad_get_client_tenant_info, прочитать идентификатор пользователю и передать эту точную строку.У тенанта установлено
require_confirmation_for_writes: false(явный отказ, не рекомендуется).
Если ни одно из вышеперечисленных условий не выполнено, вызов завершается сообщением permitted: false, и запись в LDAP не выполняется.
Журналирование аудита
Все операции записывают структурированную строку журнала, включающую: временную метку, имя инструмента, цель, режим подтверждения (AUTOMATION / CONFIRMED / WRONG_CONFIRMATION / NO_CONFIRMATION_REQUIRED) и успех/неудачу. Журналы сохраняются туда, куда указывает logging.file.
Гигиена секретов
Реальные файлы
ad-config.jsonигнорируются git. Отслеживаются только*.example.json.Никогда не вставляйте конфигурацию с реальным
passwordилиautomation.tokenв чат, который логируется или транскрибируется третьей стороной.Меняйте
automation.tokenпри каждой его регенерации; относитесь к нему как к привилегированному удостоверению.
Тестирование
# Unit + integration tests
pytest tests/ -v
# Coverage
pytest --cov=src --cov-report=term-missing
# Lint
ruff check .Встроенный docker-compose-ad.yml поднимает контейнер Samba AD на 192.168.1.100 и контейнер MCP, чтобы интеграционные тесты могли выполняться с реальным LDAP-бэкендом, не затрагивая производственную среду.
Устранение неполадок
Симптом | Вероятная причина | Исправление |
| неверный | Проверьте с помощью |
| у сервисной учетной записи отсутствуют делегированные права | Повторно делегируйте права в целевом подразделении |
| самоподписанный сертификат без доверия | Укажите |
| Отсутствует подтверждение/токен | Сначала вызовите |
| сокет открыт, но поиск LDAP не удался | Проверьте блокировку сервисной учетной записи / репликацию / сетевые ACL |
Вклад в проект
Сделайте форк репозитория.
Создайте ветку функции:
git checkout -b feat/your-feature.Запустите тесты:
pytest.Откройте PR с понятным описанием и ссылкой на соответствующий issue.
Коммиты следуют Conventional Commits.
Лицензия
MIT — см. LICENSE.
Благодарности
Основано на вышестоящем проекте
alpadalar/ActiveDirectoryMCPот Alperen Adalar.
Поддержка
Сообщения об ошибках: GitHub Issues
Обсуждения: 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