delinea-mcp

официальный

Официальный Del

Что можно делать с Delinea MCP?

  • Поиск и получение секретов — Используйте search и fetch для поиска секретов и получения их деталей, при этом типы объектов ограничиваются конфигурацией search_objects и fetch_objects.
  • Управление секретами без раскрытия значений — Создавайте или меняйте пароли на стороне сервера с помощью create_secret_with_generated_password и update_secret_generated_password, не передавая значения секретов в контекст модели.
  • Запуск SQL-отчетов — Выполняйте ad-hoc запросы с помощью run_report или генерируйте SQL из описания, используя ai_generate_and_run_report (требуется Azure OpenAI).
  • Обработка запросов доступа и входящих сообщений — Одобряйте или отклоняйте ожидающие запросы с помощью handle_access_request, просматривайте их через get_pending_access_requests и управляйте сообщениями входящих с помощью get_inbox_messages и mark_inbox_messages_read.
  • Администрирование пользователей, групп и ролей — Управляйте сущностями Secret Server через user_management, group_management, role_management и связанные инструменты членства, такие как user_role_management и group_role_management.
  • Проверка работоспособности сервиса — Запрашивайте конечную точку статуса Secret Server с помощью health_check, чтобы убедиться, что сервис работает.

Документация

DelineaMCP

MCP-сервер для Delinea Secret Server и Platform API

License


Новости

  • 11 августа 2026 — MCP Protocol v2 (спецификация от 2026-07-28, streamable HTTP) и экспериментальная поддержка StrongDM API уже здесь — см. примечания к выпуску.
  • 11 августа 2026 — Мы являемся первоначальными поставщиками сценария использования «без видимости секретов для LLM» — остерегайтесь подражателей ;)

Возможности

  • Автоматическая аутентификация в Secret Server
  • Обширный набор инструментов Secret Server для управления папками, секретами, пользователями, группами и ролями. Включает помощники для входящих сообщений и запросов на доступ, а также утилиты для агентов кодирования.
  • Инструменты совместимости с ChatGPT (search и fetch) для контролируемого взаимодействия с ИИ.
  • Необязательные инструменты управления пользователями Delinea Platform
  • Необязательные экспериментальные инструменты StrongDM (SDM) — гранты доступа, аудит прав, жизненный цикл пользователей/ролей, отчёты о состоянии и активности (см. docs/strongdm.md; установка с pip install "delinea-mcp[strongdm]")
  • Streamable HTTP (/mcp), устаревший Server-Sent Events (/mcp/sse) и транспорты STDIO
  • OAuth 2.0 с динамической регистрацией клиентов в соответствии со спецификацией MCP
  • Поддержка TLS для безопасных соединений
  • Готовый к запуску Docker-образ и точка входа для сервера разработки
  • Протестировано с ChatGPT, Claude Desktop, удалённым коннектором Claude, VSCode Copilot и openwebui

Установка

[!NOTE]

Этот проект использует uv (https://github.com/astral-sh/uv), но если вы предпочитаете выполнять команды без него, вы можете использовать команды pip и venv как обычно, если хотите.

  • Установить Uv
  • Инициализировать проект: uv pip sync requirements.txt
  • Использовать uv run server.py --config config.json

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

Секреты, такие как пароли, по-прежнему поступают из переменных окружения. Укажите DELINEA_PASSWORD в вашем окружении оболочки. Дополнительные функции зависят от дополнительных переменных, таких как AZURE_OPENAI_KEY или PLATFORM_SERVICE_PASSWORD.

Несекретные параметры находятся в config.json:

{
  "delinea_username": "<username>",
  "delinea_base_url": "https://your-secret-server/SecretServer",
  "platform_hostname": "<tenant>.secureplatform.io",
  "platform_service_account": "<service_account>",
  "platform_tenant_id": "<tenant_id>",
  "azure_openai_endpoint": "https://example.openai.azure.com/",
  "azure_openai_deployment": "<deployment_name>",
  "auth_mode": "none",
  "transport_mode": "stdio",
  "chatgpt_disable_scope_checks": false,
  "port": 8000,
  "debug": false,
  "external_hostname": null,
  "ssl_keyfile": null,
  "ssl_certfile": null,
  "registration_psk": null,
  "jwt_key_path": ".cache/jwt.json",
  "oauth_db_path": ".cache/oauth.db",
  "enabled_tools": []
}

Для Secret Server Cloud просто используйте облачный URL без /SecretServer. Укажите ssl_keyfile и ssl_certfile для включения HTTPS. Для Let's Encrypt используйте файлы privkey.pem и fullchain.pem.

Файл конфигурации поддерживает следующие ключи:

  • delinea_username — имя пользователя Secret Server. Должен быть программным пользователем с разрешением на выполнение нужных задач.
  • delinea_base_url — базовый URL вашего экземпляра Secret Server.
  • platform_hostname — имя хоста тенанта Platform (включает инструменты Platform).
  • platform_service_account — сервисная учётная запись, используемая с Platform API.
  • platform_tenant_id — идентификатор тенанта для запросов Platform API.
  • strongdm_api_host — панель управления StrongDM (по умолчанию app.strongdm.com:443; доступны варианты для Великобритании/ЕС). Учётные данные берутся из переменных окружения SDM_API_ACCESS_KEY / SDM_API_SECRET_KEY; см. docs/strongdm.md.
  • azure_openai_endpoint — конечная точка Azure OpenAI. Только если вы хотите автоматическую генерацию отчётов (большинство агентов могут генерировать собственный SQL для отчётов, поэтому не включайте, если это не нужно).
  • azure_openai_deployment — имя развёртывания для Azure OpenAI.
  • auth_mode — режим аутентификации (none или oauth). OAuth, очевидно, не работает с транспортом stdio.
  • transport_modestdio для командной строки или sse для HTTP. В режиме sse сервер предоставляет как конечную точку streamable HTTP на /mcp (текущий транспорт MCP, обслуживает версии протокола с 2024-11-05 по 2026-07-28), так и устаревшие конечные точки HTTP+SSE на /mcp/sse + /messages/.
  • streamable_http_stateless — по умолчанию true; запуск /mcp без серверных сессий (рекомендуется для удалённых коннекторов). Установите false для включения работы на основе сессий с автономным потоком GET.
  • streamable_http_json_response — по умолчанию true; отвечать простым JSON вместо ответов в формате SSE на /mcp.
  • chatgpt_disable_scope_checks — пропустить проверку области действия для запросов ChatGPT. Включайте только при возникновении проблем с подключением к ChatGPT.
  • port — порт для HTTP-сервера в режиме sse.
  • debug — включить подробное журналирование.
  • external_hostname — имя хоста, используемое при формировании аудиторий токенов OAuth. Не добавляйте префикс HTTP(S) или порт.
  • ssl_keyfile — путь к ключу SSL для HTTPS. (например, privkey.pem)
  • ssl_certfile — путь к сертификату SSL для HTTPS. (например, fullchain.pem)
  • registration_psk — предварительный общий ключ, необходимый для регистрации клиентов OAuth. Вам потребуется ввести этот секрет в браузере для одобрения подключений OAuth.
  • jwt_key_path — расположение пары ключей RSA, используемых для токенов OAuth. По умолчанию .cache/jwt.json. автоматически генерируется, если не существует.
  • oauth_db_path — путь к файлу базы данных OAuth. По умолчанию .cache/oauth.db. автоматически генерируется, если не существует.
  • enabled_tools — список имён инструментов для регистрации. Пустой список включает все инструменты. Настоятельно рекомендуется включать инструменты выборочно для каждого сценария использования или задачи. См. папку docs/ для некоторых примеров.
  • search_objects — разрешённые типы объектов для инструмента search. По умолчанию ["secret"], но может включать user, folder, group и role.
  • fetch_objects — разрешённые типы объектов для инструмента fetch. По умолчанию ["secret"], но может включать те же значения, что и search_objects.

Запуск сервера

Запустите сервер локально в режиме разработки:

python server.py

При запуске сервер запрашивает bearer-токен и сохраняет его для последующих запросов API. Этот проект будет расширен для дальнейшей интеграции с Secret Server API.

Инструменты MCP

Сервер предоставляет инструменты MCP для Secret Server, каталога удостоверений Delinea Platform и (опционально) StrongDM. Каждый инструмент публикует аннотации поведения (подсказки только для чтения/деструктивные) через tools/list.

Совместимость с ChatGPT / deep-research

  • search(query) — унифицированный поиск, возвращающий {id, title, url} результатов; типы объектов ограничены ключом конфигурации search_objects (по умолчанию: только секреты).
  • fetch(id) — получение одного объекта, найденного с помощью search; ограничено fetch_objects.

Secret Server

  • run_report(sql_query, report_name=None) — создание и выполнение временного отчёта.
  • ai_generate_and_run_report(description) — генерация SQL с помощью Azure OpenAI и его выполнение. Требуются переменные Azure OpenAI.
  • list_example_reports() — список примеров запросов и информации о таблицах.
  • get_secret(id, summary=False) — получение секрета или сводных сведений.
  • get_folder(id) — получение метаданных папки и дочерних элементов.
  • search_secrets(query, lookup=False) — поиск или просмотр секретов.
  • search_folders(query, lookup=False) — поиск или просмотр папок.
  • get_secret_environment_variable(secret_id, environment) — вывод скрипта для получения учётных данных секрета в указанной оболочке.
  • check_secret_template(template_id) — получение сведений о шаблоне секрета.
  • check_secret_template_field(template_id, field_id) — проверка, содержит ли шаблон поле.
  • get_secret_template_field(field_id) — получение сведений о конкретном поле шаблона секрета по идентификатору.
  • handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None) — одобрение или отклонение запроса на доступ.
  • get_pending_access_requests() — список ожидающих запросов на доступ.
  • get_inbox_messages(read_status_filter=None, take=20, skip=0) — получение сообщений входящих.
  • mark_inbox_messages_read(message_ids, read=True) — пометка сообщений как прочитанных или непрочитанных.
  • create_secret_with_generated_password(name, secret_template_id, password_field_id, items, folder_id=None, site_id=None, comment=None) — создание секрета, пароль которого генерируется на стороне сервера; возвращаются только санитизированные метаданные, значение никогда не достигает модели.
  • update_secret_generated_password(secret_id, field_slug, password_field_id, comment=None) — ротация пароля секрета на стороне сервера без отображения значения.
  • update_secret_fields(secret_id, field_updates, comment=None, allow_password_fields=False) — поток чтение-шаблона → изменение непарольных полей → проверка; отказывается от полей, помеченных как пароль, если явно не разрешено.
  • set_secret_field_environment_variable(secret_id, field_slug, environment, source="stdin", comment=None) — создание shell-скрипта (bash/powershell/cmd), который считывает значение локально и помещает его в поле секрета, так что значение полностью обходит модель.
  • bulk_user_response(user_ids, scenario, comment, confirm=False) — авторитетный комбинатор инцидентов для API массовых операций с пользователями. Сценарии: compromise, offboard, unlock, reenable, force_logout; требует confirm=True плюс непустой комментарий аудита, и предварительный просмотр при отсутствии подтверждения.
  • role_management(action, role_id=None, data=None, params=None) — управление ролями. action может быть list, get, create или update. Передайте необязательные параметры запроса с помощью params при перечислении ролей. Пример: role_management("update", role_id=3, data={"name": "New Role"}).
  • user_role_management(action, user_id, role_ids=None) — назначение или удаление ролей у пользователя. action — это get, add или remove, а role_ids — список идентификаторов ролей для операций добавления/удаления.
  • group_management(action, group_id=None, data=None, params=None) — работа с группами. action может быть get, list, create или delete. Укажите group_id для get/delete и data при создании группы.
  • folder_management(action, folder_id=None, data=None, params=None) — управление папками. action может быть get, list, create, update или delete. Укажите folder_id для get, update или delete и предоставьте data при создании или обновлении папки.
  • user_group_management(action, user_id, group_ids=None) — управление членством в группах для пользователя. action — это get, add или remove. Укажите список group_ids при добавлении или удалении членства.
  • group_role_management(action, group_id, role_ids=None) — управление ролями в группе. Используйте действия list, add или remove. Укажите role_ids при добавлении или удалении.
  • health_check() — запрос к конечной точке проверки состояния Secret Server и возврат текущего статуса службы.

Пользователи и роли Delinea Platform

Начиная с v1.0.0 канонические инструменты для пользователей нацелены на каталог удостоверений Delinea Platform (требуются учётные данные platform_hostname + PLATFORM_SERVICE_*; без них инструменты возвращают рекомендации вместо ошибок):

  • user_management(action, user_id=None, data=None, username=None) — CRUD пользователей Platform. action принимает get, create, update, delete или search.
  • search_users(query) — поиск в каталоге пользователей Platform.
  • platform_role_management(action, role_id=None, data=None, page_size=100, query="%") — CRUD ролей Platform (list, get, create, update, delete); изменения ролей управляются обнаружением и возвращают рекомендации для тенантов, чья область действия API не раскрывает их.
  • platform_user_role_management(action, role_id, user_principals=None)list, add или remove пользователей в роли Platform.
  • platform_user_management(...) — устаревший псевдоним user_management.

Локальные пользователи Secret Server (устаревшие)

Для развёртываний только с SS без Platform:

  • secretserver_local_user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False) — операции с пользователями Secret Server до v1.0.0: get, create, update, delete, list_sessions, reset_2fa, reset_password, lock_out. Пример: secretserver_local_user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"}).
  • search_secretserver_local_users(query) — поиск в локальном хранилище пользователей Secret Server.

Инструменты StrongDM (опционально, экспериментально)

Экспериментально: бэкенд StrongDM ещё не проверен на живой организации SDM (протестирован только на поверхности SDK). Ожидайте шероховатостей и сообщайте о проблемах. Устанавливается через дополнительный пакет strongdm; см. docs/strongdm.md для полного руководства. sdm_search, sdm_audit_access, sdm_grant_access (ограниченные по времени just-in-time или постоянные гранты), sdm_revoke_access, sdm_user_management (процессы onboard/offboard), sdm_role_management, sdm_resource_health, sdm_access_requests, sdm_activity_report, sdm_network_status. Деструктивные действия подтверждаются с комментариями аудита; неоднозначные совпадения имён возвращают кандидатов без изменений.

Используйте переменные конфигурации сервера, описанные выше, для аутентификации. Инструмент ИИ автоматически отключается, если отсутствуют переменные Azure OpenAI. Будут зарегистрированы только имена инструментов, перечисленные в config.json. Пустой список включает все инструменты.

Варианты использования

Документация охватывает несколько рабочих процессов для подключения инструментов к серверу:

Быстрый старт с Docker

Для запуска MCP-сервера без локальной установки зависимостей Python предоставляется Dockerfile.

  1. Соберите образ:
docker build -t dev.local/delinea-mcp:latest .
  1. Запустите сервер (передайте свои учётные данные через переменные окружения):
docker run --rm -p 8000:8000 \
  -e DELINEA_PASSWORD=<password> \
  -e PLATFORM_SERVICE_PASSWORD=<password> \
  -e DELINEA_DEBUG=1 \
  -e AZURE_OPENAI_KEY=<your-key-or-appropriate-token> \
  -v $(pwd)/config.json:/app/config.json:ro \
  -v mcp-data:/app/data \
  dev.local/delinea-mcp:latest

Заполните config.json вашими именами пользователей и URL-адресами, как показано выше.

Контейнер хранит oauth.db и jwt.json в /app/data. Подключите том (показан как mcp-data выше), чтобы эти файлы и любые HTTPS-сертификаты сохранялись между запусками.

Замените <https://your-secret-server/SecretServer> на базовый URL вашего экземпляра Secret Server, чтобы избежать ошибок подключения.

Сервер запустится на порту 8000 по умолчанию, используя python server.py. Установите опцию port в config.json, чтобы переопределить значение по умолчанию. Включите debug: true, чтобы регистрировать все входящие HTTP-запросы.

Примеры скриптов

Скрипт manual_secret_request.py показывает, как получить OAuth-токен для конкретного идентификатора секрета:

python scripts/manual_secret_request.py <Secret_ID>

Установите переменные окружения SECRET_USERNAME_<id> и SECRET_PASSWORD_<id> для секрета перед запуском скрипта. При необходимости установите DELINEA_BASE_URL, чтобы переопределить значение по умолчанию https://localhost/SecretServer.

Запуск тестов

Запустите модульные тесты с покрытием (CI требует минимум 70%):

pip install -r requirements.txt
coverage run -m pytest -q
coverage report --omit "tests/*"

Живое тестирование

Некоторые интеграционные тесты требуют действительные учётные данные. Установите следующие переменные окружения и необязательную LIVE_SECRET_ID перед запуском набора тестов:

export DELINEA_PASSWORD=<password>
# Optional secret used by tests/test_live.py
export LIVE_SECRET_ID=<id>
export SECRET_USERNAME_<id>=<secret_username>
export SECRET_PASSWORD_<id>=<secret_password>

Когда эти переменные присутствуют, «живые» тесты выполняют реальные API-запросы.

Развёртывание в производственной среде

Зависимости зафиксированы в requirements.txt, а выпуски помечаются с использованием семантического версионирования. Соберите Docker-образ из помеченного коммита и разверните его в вашей производственной среде, передав необходимые переменные окружения (DELINEA_USERNAME, DELINEA_PASSWORD, при необходимости DELINEA_BASE_URL). Дополнительные функции зависят от следующих переменных:

  • PLATFORM_SERVICE_PASSWORD вместе с PLATFORM_HOSTNAME, PLATFORM_SERVICE_ACCOUNT и PLATFORM_TENANT_ID включает инструменты управления пользователями.
  • AZURE_OPENAI_KEY вместе с AZURE_OPENAI_ENDPOINT и AZURE_OPENAI_DEPLOYMENT включает вспомогательный инструмент генерации ИИ-отчётов.
  • SDM_API_ACCESS_KEY и SDM_API_SECRET_KEY включают экспериментальные инструменты StrongDM (требуется дополнительный пакет strongdm; см. docs/strongdm.md).

При работе с транспортом OAuth или SSE вам может потребоваться предоставить registration_psk и настроить external_hostname или файлы HTTPS-сертификатов.

Структура репозитория

  • delinea_mcp/ — пакет, содержащий MCP-инструменты: tools.py (Secret Server), user_platform_tools.py (Delinea Platform), secretserver_users.py (локальные пользователи SS), strongdm_tools.py (StrongDM, опционально), а также transports/ (SSE + потоковый HTTP) и auth/ (встроенный сервер авторизации OAuth).
  • server.py — тонкая точка входа, которая регистрирует всё в MCP-сервере.
  • docs/ — документация проекта и сгенерированный delinea-secret-server-openapi-spec.json.
  • scripts/ — вспомогательные примеры, включая manual_secret_request.py.

Вопросы безопасности

Встроенный сервер авторизации OAuth удобен для разработки, тестирования и небольших развёртываний; для более крупных развёртываний сервер следует размещать за корпоративным поставщиком удостоверений. Текущие меры защиты:

  • Регистрация клиента (/oauth/register) и форма авторизации требуют общий секрет registration_psk (сравнение выполняется за постоянное время).
  • Значения redirect_uri проверяются на соответствие URI, зарегистрированным для клиента, как в форме авторизации, так и при редиректе с кодом.
  • Токены доступа — это RS256 JWT с привязкой к аудитории; обнаружение ресурсов соответствует RFC 9728 (заголовки /.well-known/oauth-protected-resource и WWW-Authenticate в ответах 401/403).
  • Всегда развёртывайте с TLS (ssl_keyfile/ssl_certfile или завершающий прокси) — токены и секреты передаются в каждом запросе.
  • Ограничивайте доступность инструментов в соответствии с вариантом использования с помощью enabled_tools; значения секретов по замыслу исключены из контекста модели (генерация паролей на стороне сервера, косвенная передача через переменные окружения, защита полей паролей).

Примечания к выпускам

Сводку последних функций и пунктов дорожной карты см. в CHANGELOG.md.

Дорожная карта

  1. Сквозная аутентификация
  2. Поддержка клиента OAuth Client ID Metadata Documents (CIMD) (Dynamic Client Registration устарел с ревизии протокола MCP 2026-07-28; поток /oauth/register с защитой через PSK продолжает работать для текущих коннекторов)
  3. Расширить покрытие инструментами на Delinea Platform и добавить другие продукты Delinea

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

Приветствуются любые вклады! Пожалуйста, открывайте issues или pull requests для любых улучшений. Весь новый код должен включать модульные тесты и проходить существующий набор тестов.

Лицензия

Этот проект лицензирован под лицензией MIT.