Skip to main content
Glama

О проекте

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.toml

2. Настройка

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-mcp

4. Подключение из 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_get_client_tenant_info

Возврат информации о тенанте для этого экземпляра (вызывать первым)

ad_list_configured_clients

Список всех клиентов, зарегистрированных в реестре клиентов

ad_check_client_configuration

Проверка, настроен ли AD для указанного slug клиента

Управление пользователями (9)

Инструмент

Write

Операция

ad_list_users_with_filters

—

Список пользователей (опционально с фильтром по OU/критериям)

ad_get_user_details_by_username

—

Получение атрибутов пользователя по sAMAccountName

ad_get_user_group_memberships

—

Список групп, в которых состоит пользователь

ad_create_user_account

да

Создание нового пользователя

ad_modify_user_attributes

да

Изменение атрибутов пользователя

ad_delete_user_account_permanently

да

Удаление пользователя

ad_enable_user_account_access

да

Включение учётной записи пользователя

ad_disable_user_account_access

да

Отключение учётной записи пользователя

ad_reset_user_password_forced

да

Сброс пароля (принудительная смена при следующем входе)

Управление группами (8)

Инструмент

Write

Операция

ad_list_groups_with_filters

—

Список групп

ad_get_group_details_by_name

—

Получение атрибутов группы

ad_get_group_members_recursive

—

Список участников, опционально рекурсивно

ad_create_group_security_or_distribution

да

Создание группы безопасности или рассылки

ad_modify_group_attributes

да

Изменение атрибутов группы

ad_delete_group_permanently

да

Удаление группы

ad_add_member_to_group

да

Добавление участника

ad_remove_member_from_group

да

Удаление участника

Управление компьютерами (8)

Инструмент

Write

Операция

ad_list_computers_with_filters

—

Список компьютеров

ad_get_computer_details_by_name

—

Получение атрибутов компьютера

ad_get_inactive_computers_by_days

—

Список компьютеров, неактивных N+ дней

ad_create_computer_account

да

Создание объекта компьютера

ad_modify_computer_attributes

да

Изменение атрибутов компьютера

ad_delete_computer_account_permanently

да

Удаление объекта компьютера

ad_enable_computer_account_trust

да

Включение учётной записи компьютера

ad_disable_computer_account_trust

да

Отключение учётной записи компьютера

ad_reset_computer_password_trust

да

Сброс пароля защищённого канала компьютера

Управление подразделениями (7)

Инструмент

Write

Операция

ad_list_organizational_units_hierarchy

—

Список OU (опция рекурсии)

ad_get_organizational_unit_details

—

Получение атрибутов OU

ad_get_organizational_unit_objects

—

Список объектов внутри OU

ad_create_organizational_unit

да

Создание OU

ad_modify_organizational_unit_attributes

да

Изменение OU

ad_delete_organizational_unit_forced

да

Удаление OU (force=true для удаления непустых)

ad_move_organizational_unit_parent

да

Перемещение OU к новому родителю

Безопасность и аудит (6)

Инструмент

Операция

ad_get_domain_security_policy_info

Информация о домене + политика паролей и блокировок

ad_get_privileged_security_groups

Список привилегированных групп (Domain Admins, Enterprise Admins и т. д.)

ad_get_user_effective_permissions

Отображение эффективных разрешений для пользователя

ad_get_inactive_users_by_days

Пользователи без входа в систему N+ дней

ad_get_password_policy_violations

Учётные записи, нарушающие политику паролей

ad_audit_administrative_accounts

Аудит гигиены привилегированных учётных записей

Промпты для MSP (2 инструмента + 15 промптов)

Инструмент

Операция

ad_list_msp_prompts

Список 15 профессиональных плейбуков MSP (менеджер и аналитик)

ad_execute_msp_prompt

Выполнение именованного плейбука с аргументами

Полный каталог промптов см. в PROMPTS.md (аудит безопасности, онбординг, офбординг, плейбук сброса пароля и т. д.).

Системные (4)

Инструмент

Операция

ad_test_ldap_connection_status

Проверка подключения к LDAP

ad_health_check_mcp_server

Полная проверка работоспособности (сервер + тест поиска LDAP + статистика)

ad_get_mcp_schema_tools_info

Самодокументируемая схема всех зарегистрированных инструментов


Конфигурация

Путь к файлу конфигурации времени выполнения задаётся через переменную окружения AD_MCP_CONFIG. Схема — в ad-config/ad-config.example.json.

Ключевые поля

Поле

Обязательно

Описание

active_directory.server

да

Основной URL LDAP, например ldaps://dc.example.com:636

active_directory.server_pool

нет

Дополнительные URL LDAP для отказоустойчивости

active_directory.bind_dn

да

Полный DN сервисной учетной записи

active_directory.password

да

Пароль сервисной учетной записи (храните файл с правами chmod 600)

active_directory.base_dn

да

Базовый DN, например DC=example,DC=com

organizational_units.*

да

Подразделения по умолчанию для пользователей/групп/компьютеров/сервисных учетных записей

security.enable_tls

нет

Принудительно использовать StartTLS / LDAPS

security.validate_certificate

нет

Проверять сертификат сервера с помощью ca_cert_file

security.require_secure_connection

нет

Отказываться от подключения без шифрования

automation.token

нет

Токен Bearer для автоматических операций записи

client.slug

нет

Идентификатор тенанта, возвращаемый ad_get_client_tenant_info

Разрешения сервисной учетной записи

Предоставьте учетной записи привязки минимальные делегированные права, необходимые для операций, которые вы планируете открыть:

  • Развертывания только для чтения: достаточно «Чтение всех свойств» + «Список содержимого» в корне домена.

  • Запись пользователей/групп: делегируйте «Создание/удаление объектов» + «Запись всех свойств» в целевых подразделениях.

  • Сброс пароля: делегируйте расширенное право «Сброс пароля» в целевых подразделениях.

  • Ввод/вывод компьютеров: делегируйте «Создание/удаление объектов компьютеров» в подразделении компьютеров.

Всегда используйте выделенную сервисную учетную запись, LDAPS в производственной среде и регулярно меняйте пароль.


Безопасность

Модель защиты записи

Каждый изменяющий инструмент (ad_create_*, ad_modify_*, ad_delete_*, ad_enable_*, ad_disable_*, ad_reset_*, ad_add_*, ad_remove_*, ad_move_*) вызывает check_write_permission() перед обращением к LDAP. Он разрешает запись, если выполняется одно из условий:

  1. automation_token совпадает с automation.token в конфигурации — предназначен для CI / запланированных заданий.

  2. client_confirmation совпадает с идентификатором тенанта — ИИ-ассистент должен сначала вызвать ad_get_client_tenant_info, прочитать идентификатор пользователю и передать эту точную строку.

  3. У тенанта установлено 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 bind failed

неверный bind_dn / password

Проверьте с помощью ldapsearch -H <server> -D '<bind_dn>' -W

Insufficient permissions

у сервисной учетной записи отсутствуют делегированные права

Повторно делегируйте права в целевом подразделении

Certificate verification failed

самоподписанный сертификат без доверия

Укажите ca_cert_file или validate_certificate: false (только для тестирования)

permitted: false при каждой записи

Отсутствует подтверждение/токен

Сначала вызовите ad_get_client_tenant_info или передайте automation_token

Health degraded

сокет открыт, но поиск LDAP не удался

Проверьте блокировку сервисной учетной записи / репликацию / сетевые ACL


Вклад в проект

  1. Сделайте форк репозитория.

  2. Создайте ветку функции: git checkout -b feat/your-feature.

  3. Запустите тесты: pytest.

  4. Откройте PR с понятным описанием и ссылкой на соответствующий issue.

Коммиты следуют Conventional Commits.


Лицензия

MIT — см. LICENSE.

Благодарности

Поддержка

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    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.
    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
    7 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.
    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.
    8 npm
    9
    MIT