delinea-mcp
公式Delinea Secret ServerおよびPlatform API向けの公式Delinea MCPサーバー
ドキュメント
DelineaMCP
Delinea Secret Server および Platform API 向け MCP サーバー
機能
- Secret Server に対する自動認証
- フォルダ、シークレット、ユーザー、グループ、ロールを管理するための豊富な Secret Server ツールセット。 受信トレイやアクセスリクエストのヘルパー、コーディングエージェントユーティリティを含みます。
- 制御された AI インタラクションのための ChatGPT 互換ツール (
searchおよびfetch)。 - オプションの Delinea Platform ユーザー管理ツール
- Server Sent Events または 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。
- azure_openai_endpoint - Azure OpenAI エンドポイント。自動レポート生成が必要な場合のみ設定します (ほとんどのエージェントは独自のレポート SQL を生成できるため、必要でない限り有効にしないでください)。
- azure_openai_deployment - Azure OpenAI のデプロイ名。
- auth_mode - 認証モード (
noneまたはoauth)。OAuth は stdio トランスポートでは明らかに機能しません。 - transport_mode - コマンドライン用の
stdioまたは HTTP/SSE 用のsse。 - 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 と対話するためのいくつかの MCP ツールを公開します:
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_users(query)- アクティブユーザーを検索します。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)- メッセージを既読または未読としてマークします。user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False)- 統合ユーザー操作。actionはget、create、update、delete、list_sessions、reset_2fa、reset_password、またはlock_outを受け入れます。 必要に応じてuser_idを提供し、作成、更新、パスワードリセットアクションのリクエストボディをdata経由で提供します。 例:user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"})。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 のヘルスチェックエンドポイントをクエリし、現在のサービスステータスを返します。
認証には、上記のサーバー設定変数を使用します。
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 オプションを設定します。
debug: true を有効にすると、すべての受信 HTTP リクエストがログに記録されます。
サンプルスクリプト
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 を上書きします。
テストの実行
100% のコードカバレッジを確保するために、カバレッジ付きで単体テストを実行します:
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 レポート生成ヘルパーが有効になります。
OAuth または SSE トランスポートで実行する場合、registration_psk を提供し、external_hostname または HTTPS 証明書ファイルを設定する必要がある場合があります。
リポジトリレイアウト
delinea_mcp/- MCP ツールを含むパッケージ。server.py- すべてを MCP サーバーに登録する薄いエントリポイント。docs/- プロジェクトドキュメントと生成されたdelinea-secret-server-openapi-spec.json。scripts/-manual_secret_request.pyを含むヘルパー例。
セキュリティに関する考慮事項
含まれている OAuth エンドポイントは、開発とテストを目的としています。
/oauth/authorize ルートは任意の redirect_uri を受け入れ、検証なしでユーザーをリダイレクトします。
デプロイでは、この値を承認されたコールバック URL に制限する必要があります。そうしないと、攻撃者が悪意のある URL を提供し、認証コードを取得する可能性があります。
背景については オープンリダイレクション を参照してください。
リリースノート
最新の機能とロードマップ項目の概要については、docs/release_notes.md を参照してください。
ロードマップ
- パススルー認証
- ストリーミング HTTP トランスポートのサポート
- Delinea Platform でのツールカバレッジの拡大と、他の Delinea 製品の追加
貢献
貢献を歓迎します! 改善のための issue や pull request をお気軽に作成してください。 すべての新しいコードには単体テストを含め、既存のテストスイートに合格する必要があります。
ライセンス
このプロジェクトは MIT ライセンス の下でライセンスされています。