delinea-mcp
公式Delinea Secret ServerおよびPlatform API向けの公式Delinea MCPサーバー
Delinea MCPで何ができますか?
- シークレットの検索と取得 —
searchとfetchを使用してシークレットを検索し、その詳細を取得します。オブジェクトタイプはsearch_objectsとfetch_objects設定によって制限されます。 - 値を公開せずにシークレットを管理 —
create_secret_with_generated_passwordとupdate_secret_generated_passwordを使用してサーバー側でパスワードを生成・ローテーションし、シークレット値をモデルコンテキストから除外します。 - SQLレポートの実行 —
run_reportでアドホッククエリを実行するか、ai_generate_and_run_reportを使用して説明からSQLを生成します(Azure OpenAI が必要)。 - アクセスリクエストと受信トレイの処理 —
handle_access_requestで保留中のリクエストを承認または拒否し、get_pending_access_requestsでそれらを一覧表示し、get_inbox_messagesとmark_inbox_messages_readで受信トレイメッセージを管理します。 - ユーザー、グループ、ロールの管理 —
user_management、group_management、role_management、および関連するメンバーシップツール(user_role_managementやgroup_role_managementなど)を使用して Secret Server エンティティを管理します。 - サービスヘルスの確認 —
health_checkで Secret Server のステータスエンドポイントを照会し、サービスが稼働していることを確認します。
ドキュメント
DelineaMCP
Delinea Secret Server および Platform API 用の MCP サーバー
ニュース
- 2026年8月11日 — MCP Protocol v2(仕様リビジョン 2026-07-28、ストリーミング可能な HTTP)と実験的な StrongDM API サポートが登場しました — リリースノート を参照してください。
- 2026年8月11日 — 当社は「LLM にシークレットを一切見せない」ボールトのユースケースのオリジナル提供者です — 模倣品にご注意ください ;)
特徴
- Secret Server に対する自動認証
- フォルダー、シークレット、ユーザー、グループ、ロールを管理するための豊富な Secret Server ツールセット。受信トレイ、アクセスリクエストヘルパー、コーディングエージェントユーティリティを含みます。
- 制御された AI インタラクションのための ChatGPT 互換ツール(
searchとfetch)。 - オプションの 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]
このプロジェクトは
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 の場合は、/SecretServer なしでクラウド URL をそのまま使用してください。HTTPS を有効にするには ssl_keyfile と ssl_certfile を指定します。Let's Encrypt の場合は、privkey.pem と fullchain.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 用のsse。sseモードでは、サーバーは/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"]ですが、user、folder、group、roleを含めることができます。 - 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 に対する意見に基づくインシデントコンビネーター。シナリオ: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です。get/delete にはgroup_idを、グループ作成時にはdataを提供します。folder_management(action, folder_id=None, data=None, params=None)- フォルダーを管理します。actionはget、list、create、update、またはdeleteです。get、update、delete にはfolder_idを提供し、フォルダーの作成または更新時には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)- Platform ユーザー CRUD。actionはget、create、update、delete、またはsearchを受け入れます。search_users(query)- Platform ユーザーディレクトリを検索します。platform_role_management(action, role_id=None, data=None, page_size=100, query="%")- Platform ロール CRUD(list、get、create、update、delete)。ロールの変更はディスカバリー駆動型で、API スコープが公開しないテナントにはガイダンスを返します。platform_user_role_management(action, role_id, user_principals=None)- Platform ロールのユーザーをlist、add、または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 ユーザー操作: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(時間制限付きジャストインタイムまたは常設グラント)、sdm_revoke_access、sdm_user_management(オンボード/オフボードフロー)、sdm_role_management、sdm_resource_health、sdm_access_requests、sdm_activity_report、sdm_network_status。破壊的なアクションは監査コメント付きで確認ゲートされます。あいまいな名前の一致は変更せずに候補を返します。
上記のサーバー設定変数を使用して認証します。Azure OpenAI 変数がない場合、AI ツールは自動的に無効になります。config.json にリストされているツール名のみが登録されます。空のリストはすべてのツールを有効にします。
ユースケース
ドキュメントでは、ツールをサーバーに接続するためのいくつかのワークフローをカバーしています:
Docker クイックスタート
ローカルに Python 依存関係をインストールせずに MCP サーバーを実行するための 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 に保存します。
これらのファイルと HTTPS 証明書が実行間で保持されるように、ボリューム(上記の mcp-data として表示)をマウントしてください。
接続エラーを避けるため、<https://your-secret-server/SecretServer> を Secret Server インスタンスのベース URL に置き換えてください。
サーバーはデフォルトで python server.py を使用してポート 8000 で起動します。
デフォルトを上書きするには、config.json で port オプションを設定してください。
すべての受信 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_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とともに AI レポート生成ヘルパーを有効にします。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-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 を参照してください。
ロードマップ
- パススルー認証
- OAuth クライアント ID メタデータドキュメント(CIMD)クライアントサポート(ダイナミッククライアント登録は MCP プロトコルリビジョン 2026-07-28 で非推奨となりました。PSK ゲート付きの
/oauth/registerフローは現在のコネクタで引き続き動作します) - Delinea Platform のツールカバレッジを拡大し、他の Delinea 製品を追加する
コントリビューション
コントリビューションを歓迎します! 改善点があれば、issue またはプルリクエストを開いてください。 すべての新しいコードには単体テストを含め、既存のテストスイートを通過する必要があります。
ライセンス
このプロジェクトは MIT ライセンス の下でライセンスされています。