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
Новости
- 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_mode —
stdioдля командной строки или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.
Пустой список включает все инструменты.
Варианты использования
Документация охватывает несколько рабочих процессов для подключения инструментов к серверу:
- Пользовательский коннектор ChatGPT
- Claude Desktop
- Удалённый коннектор Claude
- openwebui для администрирования
- VSCode Copilot
Быстрый старт с Docker
Для запуска MCP-сервера без локальной установки зависимостей Python предоставляется Dockerfile.
- Соберите образ:
docker build -t dev.local/delinea-mcp:latest .
- Запустите сервер (передайте свои учётные данные через переменные окружения):
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.
Дорожная карта
- Сквозная аутентификация
- Поддержка клиента OAuth Client ID Metadata Documents (CIMD) (Dynamic Client Registration устарел с ревизии протокола MCP 2026-07-28; поток
/oauth/registerс защитой через PSK продолжает работать для текущих коннекторов) - Расширить покрытие инструментами на Delinea Platform и добавить другие продукты Delinea
Вклад в проект
Приветствуются любые вклады! Пожалуйста, открывайте issues или pull requests для любых улучшений. Весь новый код должен включать модульные тесты и проходить существующий набор тестов.
Лицензия
Этот проект лицензирован под лицензией MIT.