delinea-mcp

公式

Delinea Secret ServerおよびPlatform API向けの公式Delinea MCPサーバー

Delinea MCPで何ができますか?

  • シークレットの検索と取得searchfetch を使用してシークレットを検索し、その詳細を取得します。オブジェクトタイプは search_objectsfetch_objects 設定によって制限されます。
  • 値を公開せずにシークレットを管理create_secret_with_generated_passwordupdate_secret_generated_password を使用してサーバー側でパスワードを生成・ローテーションし、シークレット値をモデルコンテキストから除外します。
  • SQLレポートの実行run_report でアドホッククエリを実行するか、ai_generate_and_run_report を使用して説明からSQLを生成します(Azure OpenAI が必要)。
  • アクセスリクエストと受信トレイの処理handle_access_request で保留中のリクエストを承認または拒否し、get_pending_access_requests でそれらを一覧表示し、get_inbox_messagesmark_inbox_messages_read で受信トレイメッセージを管理します。
  • ユーザー、グループ、ロールの管理user_managementgroup_managementrole_management、および関連するメンバーシップツール(user_role_managementgroup_role_management など)を使用して Secret Server エンティティを管理します。
  • サービスヘルスの確認health_check で Secret Server のステータスエンドポイントを照会し、サービスが稼働していることを確認します。

ドキュメント

DelineaMCP

Delinea Secret Server および Platform API 用の MCP サーバー

License


ニュース

  • 2026年8月11日 — MCP Protocol v2(仕様リビジョン 2026-07-28、ストリーミング可能な HTTP)と実験的な StrongDM API サポートが登場しました — リリースノート を参照してください。
  • 2026年8月11日 — 当社は「LLM にシークレットを一切見せない」ボールトのユースケースのオリジナル提供者です — 模倣品にご注意ください ;)

特徴

  • Secret Server に対する自動認証
  • フォルダー、シークレット、ユーザー、グループ、ロールを管理するための豊富な Secret Server ツールセット。受信トレイ、アクセスリクエストヘルパー、コーディングエージェントユーティリティを含みます。
  • 制御された AI インタラクションのための ChatGPT 互換ツール(searchfetch)。
  • オプションの Delinea Platform ユーザー管理ツール
  • オプションの 実験的 StrongDM (SDM) ツール — アクセス権限付与、エンタイトルメント監査、ユーザー/ロールのライフサイクル、ヘルスおよびアクティビティレポート(docs/strongdm.md を参照。pip install "delinea-mcp[strongdm]" でインストール)
  • ストリーミング可能な HTTP(/mcp)、レガシー Server-Sent Events(/mcp/sse)、STDIO トランスポート
  • MCP 仕様に基づく動的クライアント登録を伴う OAuth 2.0
  • セキュアな接続のための TLS サポート
  • すぐに使える Docker イメージと開発サーバーのエントリポイント
  • ChatGPT、Claude Desktop、リモート Claude コネクタ、VSCode Copilot、openwebui でテスト済み

インストール

[!NOTE]

このプロジェクトは uvhttps://github.com/astral-sh/uv)を使用しますが、これなしでコマンドを実行したい場合は、必要に応じて通常どおり pip および venv コマンドを使用できます。

  • Uv をインストール
  • プロジェクトを初期化: uv pip sync requirements.txt
  • uv run server.py --config config.json を使用

設定

パスワードなどのシークレットは引き続き環境変数から取得されます。シェル環境に DELINEA_PASSWORD を指定してください。オプション機能は AZURE_OPENAI_KEYPLATFORM_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 の場合は、/SecretServer なしでクラウド URL をそのまま使用してください。HTTPS を有効にするには ssl_keyfilessl_certfile を指定します。Let's Encrypt の場合は、privkey.pemfullchain.pem ファイルを使用します。

設定ファイルは以下のキーをサポートしています:

  • delinea_username - Secret Server のユーザー名。実行したいタスクの権限を持つプログラムユーザーである必要があります。
  • delinea_base_url - Secret Server インスタンスのベース URL。
  • platform_hostname - Platform テナントのホスト名(Platform ツールを有効にします)。
  • platform_service_account - Platform API で使用するサービスアカウント。
  • platform_tenant_id - Platform API リクエスト用のテナント ID。
  • strongdm_api_host - StrongDM コントロールプレーン(デフォルトは app.strongdm.com:443。UK/EU バリアントあり)。認証情報は 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 または HTTP 用の ssesse モードでは、サーバーは /mcp のストリーミング可能な HTTP エンドポイント(現在の MCP トランスポート。プロトコルリビジョン 2024-11-05 から 2026-07-28 に対応)と、/mcp/sse + /messages/ のレガシー HTTP+SSE エンドポイントの両方を公開します。
  • streamable_http_stateless - デフォルトは true。サーバー側セッションなしで /mcp を実行します(リモートコネクタに推奨)。スタンドアロンの GET ストリームでセッションベースの操作を有効にするには false を設定します。
  • streamable_http_json_response - デフォルトは true/mcp で SSE フレーム化されたレスポンスの代わりにプレーン JSON で応答します。
  • chatgpt_disable_scope_checks - ChatGPT リクエストのスコープ検証をスキップします。ChatGPT への接続で問題が発生した場合のみ有効にしてください。
  • port - sse モードでの HTTP サーバーのポート。
  • debug - 詳細なロギングを有効にします。
  • external_hostname - OAuth トークンオーディエンスを構築する際に使用するホスト名。HTTP(S) プレフィックスやポートは追加しないでください。
  • ssl_keyfile - HTTPS 用の SSL キーのパス。(例: privkey.pem
  • ssl_certfile - HTTPS 用の SSL 証明書のパス。(例: fullchain.pem
  • registration_psk - OAuth クライアントを登録するために必要な事前共有キー。OAuth 接続を承認するには、ブラウザでこのシークレットを入力する必要があります。
  • jwt_key_path - OAuth トークンに使用する RSA 鍵ペアの場所。デフォルトは .cache/jwt.json。存在しない場合は自動生成されます。
  • oauth_db_path - OAuth データベースファイルのパス。デフォルトは .cache/oauth.db。存在しない場合は自動生成されます。
  • enabled_tools - 登録するツール名のリスト。空のリストはすべてのツールを有効にします。ユースケースやタスクに応じてツールを選択的に有効にすることを強く推奨します。例については docs/ フォルダーを参照してください。
  • search_objects - search ツールで許可されるオブジェクトタイプ。デフォルトは ["secret"] ですが、userfoldergrouprole を含めることができます。
  • fetch_objects - fetch ツールで許可されるオブジェクトタイプ。デフォルトは ["secret"] ですが、search_objects と同じ値を含めることができます。

サーバーの実行

開発モードでサーバーをローカルに起動します:

python server.py

起動時にサーバーはベアラートークンを要求し、以降の API リクエストのために保存します。このプロジェクトは Secret Server API とのさらなる統合に向けて拡張される予定です。

MCP ツール

サーバーは、Secret Server、Delinea Platform アイデンティティディレクトリ、および(オプションで)StrongDM 用の MCP ツールを公開します。すべてのツールは、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) - Azure OpenAI を使用して SQL を生成し、実行します。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) - 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) - 値をローカルで読み取り、シークレットフィールドにプッシュするシェルスクリプト(bash/powershell/cmd)を生成します。値はモデルを完全にバイパスします。
  • bulk_user_response(user_ids, scenario, comment, confirm=False) - バルクユーザー操作 API に対する意見に基づくインシデントコンビネーター。シナリオ: compromiseoffboardunlockreenableforce_logoutconfirm=True と空でない監査コメントが必要で、未確認の場合はプレビューを表示します。
  • role_management(action, role_id=None, data=None, params=None) - ロールを管理します。actionlistgetcreate、または update です。ロールを一覧表示するときにオプションのクエリパラメータを params で渡します。例: role_management("update", role_id=3, data={"name": "New Role"})
  • user_role_management(action, user_id, role_ids=None) - ユーザーにロールを割り当てたり削除したりします。actiongetadd、または remove で、role_ids は追加/削除操作用のロール識別子のリストです。
  • group_management(action, group_id=None, data=None, params=None) - グループを処理します。actiongetlistcreate、または delete です。get/delete には group_id を、グループ作成時には data を提供します。
  • folder_management(action, folder_id=None, data=None, params=None) - フォルダーを管理します。actiongetlistcreateupdate、または delete です。get、update、delete には folder_id を提供し、フォルダーの作成または更新時には data を提供します。
  • user_group_management(action, user_id, group_ids=None) - ユーザーのグループメンバーシップを管理します。actiongetadd、または remove です。メンバーシップを追加または削除するときは group_ids のリストを提供します。
  • group_role_management(action, group_id, role_ids=None) - グループのロールを制御します。listadd、または 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) - Platform ユーザー CRUD。actiongetcreateupdatedelete、または search を受け入れます。
  • search_users(query) - Platform ユーザーディレクトリを検索します。
  • platform_role_management(action, role_id=None, data=None, page_size=100, query="%") - Platform ロール CRUD(listgetcreateupdatedelete)。ロールの変更はディスカバリー駆動型で、API スコープが公開しないテナントにはガイダンスを返します。
  • platform_user_role_management(action, role_id, user_principals=None) - Platform ロールのユーザーを listadd、または remove します。
  • platform_user_management(...) - user_management の非推奨エイリアス。

Secret Server ローカルユーザー(レガシー)

Platform が設定されていない SS のみのデプロイメント向け:

  • secretserver_local_user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False) - v1.0.0 以前の Secret Server ユーザー操作: getcreateupdatedeletelist_sessionsreset_2fareset_passwordlock_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_searchsdm_audit_accesssdm_grant_access(時間制限付きジャストインタイムまたは常設グラント)、sdm_revoke_accesssdm_user_management(オンボード/オフボードフロー)、sdm_role_managementsdm_resource_healthsdm_access_requestssdm_activity_reportsdm_network_status。破壊的なアクションは監査コメント付きで確認ゲートされます。あいまいな名前の一致は変更せずに候補を返します。

上記のサーバー設定変数を使用して認証します。Azure OpenAI 変数がない場合、AI ツールは自動的に無効になります。config.json にリストされているツール名のみが登録されます。空のリストはすべてのツールを有効にします。

ユースケース

ドキュメントでは、ツールをサーバーに接続するためのいくつかのワークフローをカバーしています:

Docker クイックスタート

ローカルに Python 依存関係をインストールせずに MCP サーバーを実行するための 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.dbjwt.json/app/data に保存します。 これらのファイルと HTTPS 証明書が実行間で保持されるように、ボリューム(上記の mcp-data として表示)をマウントしてください。

接続エラーを避けるため、<https://your-secret-server/SecretServer> を Secret Server インスタンスのベース URL に置き換えてください。

サーバーはデフォルトで python server.py を使用してポート 8000 で起動します。 デフォルトを上書きするには、config.jsonport オプションを設定してください。 すべての受信 HTTP リクエストをログに記録するには、debug: true を有効にしてください。

サンプルスクリプト

manual_secret_request.py スクリプトは、特定のシークレット ID の 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_USERNAMEDELINEA_PASSWORD、オプションで DELINEA_BASE_URL)を渡して本番環境にデプロイしてください。 オプション機能は追加の変数に依存します:

  • PLATFORM_SERVICE_PASSWORDPLATFORM_HOSTNAMEPLATFORM_SERVICE_ACCOUNTPLATFORM_TENANT_ID とともにユーザー管理ツールを有効にします。
  • AZURE_OPENAI_KEYAZURE_OPENAI_ENDPOINTAZURE_OPENAI_DEPLOYMENT とともに AI レポート生成ヘルパーを有効にします。
  • SDM_API_ACCESS_KEYSDM_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-local ユーザー)、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(401/403 レスポンスの /.well-known/oauth-protected-resource プラス WWW-Authenticate ヘッダー)に従います。
  • 常に TLS(ssl_keyfile/ssl_certfile または終端プロキシ)を使用してデプロイしてください。ベアラートークンとシークレットはすべてのリクエストで転送されます。
  • enabled_tools を使用して、ユースケースごとにツールの露出を制限してください。シークレットの は設計上モデルコンテキストに含まれません(サーバー側パスワード生成、環境変数スクリプトの間接参照、パスワードフィールドガード)。

リリースノート

最新の機能とロードマップ項目の概要については、CHANGELOG.md を参照してください。

ロードマップ

  1. パススルー認証
  2. OAuth クライアント ID メタデータドキュメント(CIMD)クライアントサポート(ダイナミッククライアント登録は MCP プロトコルリビジョン 2026-07-28 で非推奨となりました。PSK ゲート付きの /oauth/register フローは現在のコネクタで引き続き動作します)
  3. Delinea Platform のツールカバレッジを拡大し、他の Delinea 製品を追加する

コントリビューション

コントリビューションを歓迎します! 改善点があれば、issue またはプルリクエストを開いてください。 すべての新しいコードには単体テストを含め、既存のテストスイートを通過する必要があります。

ライセンス

このプロジェクトは MIT ライセンス の下でライセンスされています。