delinea-mcp
resmiServer MCP Delinea resmi untuk Secret Server Delinea dan API Platform
Apa yang bisa Anda lakukan dengan Delinea MCP?
- Mencari dan mengambil secret — Gunakan
searchdanfetchuntuk menemukan secret dan mengambil detailnya, dengan tipe objek dibatasi oleh konfigurasisearch_objectsdanfetch_objects. - Mengelola secret tanpa mengekspos nilai — Buat atau rotasi kata sandi di sisi server melalui
create_secret_with_generated_passworddanupdate_secret_generated_password, menjaga nilai secret tetap di luar konteks model. - Menjalankan laporan SQL — Jalankan kueri ad-hoc dengan
run_reportatau buat SQL dari deskripsi menggunakanai_generate_and_run_report(memerlukan Azure OpenAI). - Menangani permintaan akses dan kotak masuk — Setujui atau tolak permintaan yang tertunda dengan
handle_access_request, daftarkan melaluiget_pending_access_requests, dan kelola pesan kotak masuk denganget_inbox_messagesdanmark_inbox_messages_read. - Mengelola pengguna, grup, dan peran — Kelola entitas Secret Server melalui
user_management,group_management,role_management, dan alat keanggotaan terkait sepertiuser_role_managementdangroup_role_management. - Memeriksa kesehatan layanan — Kueri endpoint status Secret Server dengan
health_checkuntuk memverifikasi bahwa layanan beroperasi.
Dokumentasi
DelineaMCP
Server MCP untuk Delinea Secret Server dan API Platform
Berita
- 11 Agu 2026 — Protokol MCP v2 (revisi spesifikasi 2026-07-28, HTTP streamable) dan dukungan eksperimental API StrongDM telah hadir — lihat catatan rilis.
- 11 Agu 2026 — Kami adalah penyedia asli dari kasus penggunaan vault "tanpa visibilitas rahasia ke LLM" — waspadalah terhadap peniru ;)
Fitur
- Autentikasi otomatis terhadap Secret Server
- Perangkat alat Secret Server yang ekstensif untuk mengelola folder, rahasia, pengguna, grup, dan peran. Termasuk bantuan kotak masuk dan permintaan akses serta utilitas agen pengkodean.
- Alat kompatibilitas ChatGPT (
searchdanfetch) untuk interaksi AI yang terkontrol. - Alat manajemen pengguna Platform Delinea opsional
- Alat StrongDM (SDM) opsional eksperimental — pemberian akses, audit
hak akses, siklus hidup pengguna/peran, laporan kesehatan dan aktivitas (lihat
docs/strongdm.md; instal dengan
pip install "delinea-mcp[strongdm]") - Transport HTTP Streamable (
/mcp), Server-Sent Events lama (/mcp/sse), dan STDIO - OAuth 2.0 dengan registrasi klien dinamis sesuai spesifikasi MCP
- Dukungan TLS untuk koneksi aman
- Image Docker siap-jalan dan titik masuk server pengembangan
- Diuji dengan ChatGPT, Claude Desktop, konektor Claude jarak jauh, VSCode Copilot, dan openwebui
Instalasi
[!NOTE]
Proyek ini menggunakan
uv(https://github.com/astral-sh/uv), tetapi jika Anda lebih suka menjalankan perintah tanpa ini, Anda dapat melakukan perintahpipdanvenvseperti biasa jika diinginkan.
- Instal Uv
- Inisialisasi proyek:
uv pip sync requirements.txt - Gunakan
uv run server.py --config config.json
Konfigurasi
Rahasia seperti kata sandi tetap berasal dari variabel lingkungan.
Sediakan DELINEA_PASSWORD di lingkungan shell Anda.
Fitur opsional bergantung pada variabel tambahan seperti AZURE_OPENAI_KEY atau PLATFORM_SERVICE_PASSWORD.
Parameter non-rahasia berada di 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": []
}
Untuk Secret Server Cloud cukup gunakan URL cloud tanpa /SecretServer.
Tentukan ssl_keyfile dan ssl_certfile untuk mengaktifkan HTTPS.
Untuk Let's Encrypt, gunakan file privkey.pem dan fullchain.pem.
File konfigurasi mendukung kunci-kunci berikut:
- delinea_username - Nama pengguna Secret Server. Harus berupa pengguna programatik dengan izin untuk melakukan tugas yang Anda inginkan.
- delinea_base_url - URL dasar instance Secret Server Anda.
- platform_hostname - Nama host tenant Platform (mengaktifkan alat Platform).
- platform_service_account - Akun layanan yang digunakan dengan API Platform.
- platform_tenant_id - ID Tenant untuk permintaan API Platform.
- strongdm_api_host - Bidang kendali StrongDM (default
app.strongdm.com:443; varian UK/EU tersedia). Kredensial berasal dari variabel envSDM_API_ACCESS_KEY/SDM_API_SECRET_KEY; lihat docs/strongdm.md. - azure_openai_endpoint - Titik akhir Azure OpenAI. Hanya jika Anda menginginkan pembuatan laporan otomatis (sebagian besar agen dapat membuat SQL laporan mereka sendiri jadi jangan aktifkan kecuali Anda membutuhkannya).
- azure_openai_deployment - Nama deployment untuk Azure OpenAI.
- auth_mode - Mode autentikasi (
noneatauoauth). OAuth jelas tidak berfungsi dengan transport stdio. - transport_mode -
stdiountuk baris perintah atausseuntuk HTTP. Dalam modesseserver mengekspos titik akhir HTTP streamable di/mcp(transport MCP saat ini, melayani revisi protokol 2024-11-05 hingga 2026-07-28) dan titik akhir HTTP+SSE lama di/mcp/sse+/messages/. - streamable_http_stateless - default
true; jalankan/mcptanpa sesi sisi-server (disarankan untuk konektor jarak jauh). Setelfalseuntuk mengaktifkan operasi berbasis sesi dengan stream GET mandiri. - streamable_http_json_response - default
true; tanggapi dengan JSON polos alih-alih respons berbingkai SSE pada/mcp. - chatgpt_disable_scope_checks - Lewati validasi cakupan pada permintaan ChatGPT. Aktifkan hanya jika Anda mengalami masalah saat menghubungkan ke ChatGPT.
- port - Port untuk server HTTP dalam mode
sse. - debug - Aktifkan pencatatan verbose.
- external_hostname - Nama host yang digunakan saat menyusun audiens token OAuth. Jangan tambahkan awalan HTTP(S) atau port.
- ssl_keyfile - Jalur ke kunci SSL untuk HTTPS. (mis.
privkey.pem) - ssl_certfile - Jalur ke sertifikat SSL untuk HTTPS. (mis.
fullchain.pem) - registration_psk - Kunci pra-berbagi yang diperlukan untuk mendaftarkan klien OAuth. Anda perlu mengetikkan rahasia ini di browser Anda untuk menyetujui koneksi OAuth.
- jwt_key_path - Lokasi pasangan kunci RSA yang digunakan untuk token OAuth. Default ke
.cache/jwt.json. dibuat otomatis jika tidak ada. - oauth_db_path - Jalur ke file database OAuth. Default ke
.cache/oauth.db. dibuat otomatis jika tidak ada. - enabled_tools - Daftar nama alat yang akan didaftarkan. Daftar kosong mengaktifkan semua alat. Sangat disarankan untuk mengaktifkan alat secara selektif per kasus penggunaan atau tugas. Lihat folder
docs/untuk beberapa contoh. - search_objects - Jenis objek yang diizinkan untuk alat
search. Default ke["secret"]tetapi dapat mencakupuser,folder,group, danrole. - fetch_objects - Jenis objek yang diizinkan untuk alat
fetch. Default ke["secret"]tetapi dapat mencakup nilai yang sama dengansearch_objects.
Menjalankan Server
Mulai server secara lokal dalam mode pengembangan:
python server.py
Saat startup, server meminta token bearer dan menyimpannya untuk permintaan API berikutnya. Proyek ini akan diperluas untuk berintegrasi lebih lanjut dengan API Secret Server.
Alat MCP
Server mengekspos alat MCP untuk Secret Server, direktori identitas Platform
Delinea, dan (opsional) StrongDM. Setiap alat memublikasikan
anotasi perilaku (petunjuk hanya-baca/merusak) melalui tools/list.
Kompatibilitas ChatGPT / deep-research
search(query)- pencarian terpadu yang mengembalikan hasil{id, title, url}; jenis objek dibatasi oleh kunci konfigurasisearch_objects(default: hanya rahasia).fetch(id)- ambil satu objek yang dimunculkan olehsearch; dibatasi olehfetch_objects.
Secret Server
run_report(sql_query, report_name=None)- buat dan jalankan laporan sementara.ai_generate_and_run_report(description)- buat SQL menggunakan Azure OpenAI dan jalankan. Memerlukan variabel Azure OpenAI.list_example_reports()- daftar contoh kueri dan informasi tabel.get_secret(id, summary=False)- ambil rahasia atau detail ringkasan.get_folder(id)- ambil metadata folder dan anak-anaknya.search_secrets(query, lookup=False)- cari atau telusuri rahasia.search_folders(query, lookup=False)- cari atau telusuri folder.get_secret_environment_variable(secret_id, environment)- keluarkan skrip untuk mengambil kredensial rahasia di shell yang ditentukan.check_secret_template(template_id)- ambil detail template rahasia.check_secret_template_field(template_id, field_id)- periksa apakah template berisi sebuah bidang.get_secret_template_field(field_id)- ambil detail tentang bidang template rahasia tertentu berdasarkan ID.handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None)- setujui atau tolak permintaan akses.get_pending_access_requests()- daftar permintaan akses yang tertunda.get_inbox_messages(read_status_filter=None, take=20, skip=0)- ambil pesan kotak masuk.mark_inbox_messages_read(message_ids, read=True)- tandai pesan sebagai dibaca atau belum dibaca.create_secret_with_generated_password(name, secret_template_id, password_field_id, items, folder_id=None, site_id=None, comment=None)- buat rahasia yang kata sandinya dibuat di sisi server; hanya metadata yang telah dibersihkan yang dikembalikan, nilainya tidak pernah mencapai model.update_secret_generated_password(secret_id, field_slug, password_field_id, comment=None)- rotasi kata sandi rahasia di sisi server tanpa menampilkan nilainya.update_secret_fields(secret_id, field_updates, comment=None, allow_password_fields=False)- alur baca-template → ubah bidang non-kata sandi → verifikasi; menolak bidang yang ditandai kata sandi kecuali diizinkan secara eksplisit.set_secret_field_environment_variable(secret_id, field_slug, environment, source="stdin", comment=None)- keluarkan skrip shell (bash/powershell/cmd) yang membaca nilai secara lokal dan mendorongnya ke bidang rahasia, sehingga nilainya melewati model sepenuhnya.bulk_user_response(user_ids, scenario, comment, confirm=False)- kombinator insiden beropini di atas API operasi pengguna massal. Skenario:compromise,offboard,unlock,reenable,force_logout; memerlukanconfirm=Trueplus komentar audit yang tidak kosong, dan memberikan pratinjau saat belum dikonfirmasi.role_management(action, role_id=None, data=None, params=None)- kelola peran.actiondapat berupalist,get,create, atauupdate. Berikan parameter kueri opsional denganparamssaat mendaftar peran. Contoh:role_management("update", role_id=3, data={"name": "New Role"}).user_role_management(action, user_id, role_ids=None)- tetapkan atau hapus peran dari pengguna.actionadalahget,add, atauremovedanrole_idsadalah daftar pengidentifikasi peran untuk operasi tambah/hapus.group_management(action, group_id=None, data=None, params=None)- tangani grup.actiondapat berupaget,list,create, ataudelete. Berikangroup_iduntuk get/delete dandatasaat membuat grup.folder_management(action, folder_id=None, data=None, params=None)- kelola folder.actiondapat berupaget,list,create,update, ataudelete. Berikanfolder_iduntuk get, update, atau delete dan sediakandatasaat membuat atau memperbarui folder.user_group_management(action, user_id, group_ids=None)- kelola keanggotaan grup untuk pengguna.actionadalahget,add, atauremove. Sediakan daftargroup_idssaat menambah atau menghapus keanggotaan.group_role_management(action, group_id, role_ids=None)- kontrol peran pada grup. Gunakan aksilist,add, atauremove. Berikanrole_idssaat menambah atau menghapus.health_check()- kueri titik akhir pemeriksaan kesehatan Secret Server dan kembalikan status layanan saat ini.
Pengguna dan peran Platform Delinea
Sejak v1.0.0 alat pengguna kanonik menargetkan direktori identitas Platform
Delinea (memerlukan kredensial platform_hostname + PLATFORM_SERVICE_*;
tanpa keduanya, alat mengembalikan panduan alih-alih gagal):
user_management(action, user_id=None, data=None, username=None)- CRUD pengguna Platform.actionmenerimaget,create,update,delete, atausearch.search_users(query)- cari direktori pengguna Platform.platform_role_management(action, role_id=None, data=None, page_size=100, query="%")- CRUD peran Platform (list,get,create,update,delete); mutasi peran digerakkan oleh penemuan dan mengembalikan panduan pada tenant yang cakupan API-nya tidak mengeksposnya.platform_user_role_management(action, role_id, user_principals=None)-list,add, atauremovepengguna pada peran Platform.platform_user_management(...)- alias usang dariuser_management.
Pengguna lokal Secret Server (lama)
Untuk deployment khusus SS tanpa Platform yang dikonfigurasi:
secretserver_local_user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False)- operasi pengguna Secret Server pra-v1.0.0:get,create,update,delete,list_sessions,reset_2fa,reset_password,lock_out. Contoh:secretserver_local_user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"}).search_secretserver_local_users(query)- cari penyimpanan pengguna lokal Secret Server.
Alat StrongDM (opsional, eksperimental)
Eksperimental: backend StrongDM belum diverifikasi terhadap
organisasi SDM langsung (hanya diuji unit terhadap permukaan SDK). Harapkan
kekasaran dan laporkan masalah. Diinstal melalui ekstra strongdm; lihat
docs/strongdm.md untuk panduan lengkap. sdm_search, sdm_audit_access, sdm_grant_access
(pemberian just-in-time terbatas waktu atau berdiri), sdm_revoke_access,
sdm_user_management (alur onboard/offboard), sdm_role_management,
sdm_resource_health, sdm_access_requests, sdm_activity_report,
sdm_network_status. Aksi merusak dikonfirmasi-gate dengan komentar
audit; kecocokan nama yang ambigu mengembalikan kandidat tanpa mutasi.
Gunakan variabel konfigurasi server yang dijelaskan di atas untuk mengautentikasi.
Alat AI secara otomatis dinonaktifkan jika variabel Azure OpenAI tidak ada.
Hanya nama alat yang tercantum di config.json yang akan didaftarkan.
Daftar kosong mengaktifkan setiap alat.
Kasus Penggunaan
Dokumentasi mencakup beberapa alur kerja untuk menghubungkan alat ke server:
- ChatGPT Custom Connector
- Claude Desktop
- Remote Claude Connector
- openwebui for Administration
- VSCode Copilot
Mulai Cepat Docker
Sebuah Dockerfile disediakan untuk menjalankan server MCP tanpa menginstal dependensi Python secara lokal.
- Bangun image:
docker build -t dev.local/delinea-mcp:latest .
- Jalankan server (teruskan kredensial Anda melalui variabel lingkungan):
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
Isi config.json dengan nama pengguna dan URL Anda seperti yang ditunjukkan di atas.
Kontainer menyimpan oauth.db dan jwt.json di /app/data.
Pasang volume (ditampilkan sebagai mcp-data di atas) agar file-file ini dan sertifikat HTTPS apa pun tetap tersimpan di antara sesi eksekusi.
Ganti <https://your-secret-server/SecretServer> dengan URL dasar instance Secret Server Anda untuk menghindari kesalahan koneksi.
Server akan dimulai pada port 8000 secara default menggunakan python server.py.
Atur opsi port di config.json untuk mengganti nilai default.
Aktifkan debug: true untuk mencatat semua permintaan HTTP yang masuk.
Contoh Skrip
Skrip manual_secret_request.py menunjukkan cara mengambil token OAuth untuk ID rahasia tertentu:
python scripts/manual_secret_request.py <Secret_ID>
Atur variabel lingkungan SECRET_USERNAME_<id> dan SECRET_PASSWORD_<id> untuk rahasia tersebut sebelum menjalankan skrip.
Secara opsional, atur DELINEA_BASE_URL untuk mengganti https://localhost/SecretServer default.
Menjalankan Pengujian
Jalankan pengujian unit dengan cakupan (CI menerapkan minimum 70%):
pip install -r requirements.txt
coverage run -m pytest -q
coverage report --omit "tests/*"
Pengujian Langsung
Beberapa pengujian integrasi memerlukan kredensial yang valid.
Atur variabel lingkungan berikut dan LIVE_SECRET_ID opsional sebelum menjalankan rangkaian pengujian:
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>
Ketika variabel-variabel ini tersedia, pengujian langsung akan melakukan permintaan API nyata.
Penerapan Produksi
Dependensi dikunci di requirements.txt dan rilis diberi tag menggunakan Versioning Semantik.
Bangun image Docker dari commit yang diberi tag dan terapkan ke lingkungan produksi Anda, dengan meneruskan variabel lingkungan yang diperlukan (DELINEA_USERNAME, DELINEA_PASSWORD, secara opsional DELINEA_BASE_URL).
Fitur opsional bergantung pada variabel tambahan:
PLATFORM_SERVICE_PASSWORDbersama denganPLATFORM_HOSTNAME,PLATFORM_SERVICE_ACCOUNT, danPLATFORM_TENANT_IDmengaktifkan alat manajemen pengguna.AZURE_OPENAI_KEYbersama denganAZURE_OPENAI_ENDPOINTdanAZURE_OPENAI_DEPLOYMENTmengaktifkan pembantu pembuatan laporan AI.SDM_API_ACCESS_KEYdanSDM_API_SECRET_KEYmengaktifkan alat StrongDM eksperimental (memerlukan ekstrastrongdm; lihat docs/strongdm.md).
Saat berjalan dengan transport OAuth atau SSE, Anda mungkin perlu menyediakan registration_psk dan mengonfigurasi external_hostname atau file sertifikat HTTPS.
Struktur Repositori
delinea_mcp/- paket yang berisi alat MCP:tools.py(Secret Server),user_platform_tools.py(Platform Delinea),secretserver_users.py(pengguna SS-lokal),strongdm_tools.py(StrongDM, opsional), plustransports/(SSE + HTTP yang dapat dialirkan) danauth/(server otorisasi OAuth tertanam).server.py- titik masuk tipis yang mendaftarkan semuanya ke server MCP.docs/- dokumentasi proyek dandelinea-secret-server-openapi-spec.jsonyang dihasilkan.scripts/- contoh pembantu termasukmanual_secret_request.py.
Pertimbangan Keamanan
Server otorisasi OAuth tertanam adalah kemudahan untuk pengembangan, pengujian, dan penerapan skala kecil; penerapan yang lebih besar sebaiknya menempatkan server di belakang penyedia identitas organisasi mereka. Pengamanan saat ini:
- Pendaftaran klien (
/oauth/register) dan formulir otorisasi sama-sama memerlukan rahasia bersamaregistration_psk(dibandingkan dengan waktu konstan). - Nilai
redirect_uridivalidasi terhadap URI yang terdaftar untuk klien pada formulir otorisasi dan pengalihan kode. - Token akses adalah JWT RS256 yang terikat audiens; penemuan sumber daya mengikuti
RFC 9728 (header
/.well-known/oauth-protected-resourceplusWWW-Authenticatepada respons 401/403). - Selalu terapkan dengan TLS (
ssl_keyfile/ssl_certfileatau proxy pemutus) — token pembawa dan rahasia transit di setiap permintaan. - Batasi paparan alat per kasus penggunaan dengan
enabled_tools; nilai rahasia dijauhkan dari konteks model secara desain (generasi kata sandi sisi server, pengalihan skrip variabel lingkungan, penjaga bidang kata sandi).
Catatan Rilis
Lihat CHANGELOG.md untuk ringkasan fitur terbaru dan item peta jalan.
Peta Jalan
- Autentikasi penerusan
- Dukungan klien Dokumen Metadata ID Klien OAuth (CIMD) (Pendaftaran
Klien Dinamis tidak digunakan lagi sejak revisi protokol MCP 2026-07-28;
alur
/oauth/registeryang dibatasi PSK tetap berfungsi untuk konektor saat ini) - Perluas cakupan alat di Platform Delinea dan tambahkan produk Delinea lainnya
Berkontribusi
Kontribusi sangat diterima! Silakan buka issue atau pull request untuk perbaikan apa pun. Semua kode baru harus menyertakan pengujian unit dan lulus rangkaian pengujian yang ada.
Lisensi
Proyek ini dilisensikan di bawah Lisensi MIT.