delinea-mcp Server
resmiDelinea Secret Server ve Platform API'leri için resmi Delinea MCP sunucusu
Dokümantasyon
DelineaMCP
Delinea Secret Server ve Platform API'leri için MCP sunucusu
Özellikler
- Secret Server'a karşı otomatik kimlik doğrulama
- Klasörleri, gizli bilgileri, kullanıcıları, grupları ve rolleri yönetmek için kapsamlı Secret Server araç seti. Gelen kutusu ve erişim isteği yardımcıları ile kodlama aracısı yardımcı programlarını içerir.
- Kontrollü AI etkileşimleri için ChatGPT uyumluluk araçları (
searchvefetch). - İsteğe bağlı Delinea Platform kullanıcı yönetim araçları
- Sunucu Tarafından Gönderilen Olaylar veya STDIO aktarım modlarını destekler
- MCP spesifikasyonuna uygun dinamik istemci kaydı ile OAuth 2.0
- Güvenli bağlantılar için TLS desteği
- Çalıştırmaya hazır Docker imajı ve geliştirme sunucusu giriş noktası
- ChatGPT, Claude Desktop, uzak Claude bağlayıcısı, VSCode Copilot ve openwebui ile test edilmiştir
Kurulum
[!NOTE]
Bu proje
uv(https://github.com/astral-sh/uv) kullanır, ancak komutları bu olmadan çalıştırmayı tercih ederseniz, istenirsepipvevenvkomutlarını her zamanki gibi kullanabilirsiniz.
- Uv'yi Kurun
- Projeyi başlatın:
uv pip sync requirements.txt uv run server.py --config config.jsonkullanın
Yapılandırma
Parolalar gibi gizli bilgiler ortam değişkenlerinden gelmeye devam eder.
Kabuk ortamınızda DELINEA_PASSWORD sağlayın.
İsteğe bağlı özellikler AZURE_OPENAI_KEY veya PLATFORM_SERVICE_PASSWORD gibi ek değişkenlere dayanır.
Gizli olmayan parametreler config.json dosyasına aittir:
{
"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 için /SecretServer olmadan bulut URL'sini kullanmanız yeterlidir.
HTTPS'i etkinleştirmek için ssl_keyfile ve ssl_certfile belirtin.
Let's Encrypt için privkey.pem ve fullchain.pem dosyalarını kullanın.
Yapılandırma dosyası aşağıdaki anahtarları destekler:
- delinea_username - Secret Server kullanıcı adı. Yapmak istediğiniz görevleri gerçekleştirme iznine sahip programatik bir kullanıcı olmalıdır.
- delinea_base_url - Secret Server örneğinizin temel URL'si.
- platform_hostname - Platform kiracı ana bilgisayar adı (Platform araçlarını etkinleştirir).
- platform_service_account - Platform API'si ile kullanılan hizmet hesabı.
- platform_tenant_id - Platform API istekleri için kiracı kimliği.
- azure_openai_endpoint - Azure OpenAI uç noktası. Yalnızca otomatik rapor oluşturmayı istiyorsanız (çoğu aracı kendi rapor SQL'ini oluşturabilir, bu nedenle ihtiyacınız yoksa etkinleştirmeyin).
- azure_openai_deployment - Azure OpenAI için dağıtım adı.
- auth_mode - Kimlik doğrulama modu (
noneveyaoauth). OAuth, stdio aktarımı ile çalışmaz. - transport_mode - Komut satırı için
stdioveya HTTP/SSE içinsse. - chatgpt_disable_scope_checks - ChatGPT isteklerinde kapsam doğrulamasını atla. Yalnızca ChatGPT'ye bağlanırken sorun yaşarsanız etkinleştirin.
- port -
ssemodunda HTTP sunucusu için bağlantı noktası. - debug - Ayrıntılı günlük kaydını etkinleştir.
- external_hostname - OAuth belirteci hedef kitleleri oluşturulurken kullanılan ana bilgisayar adı. HTTP(S) öneki veya bağlantı noktası eklemeyin.
- ssl_keyfile - HTTPS için SSL anahtarının yolu. (örn.
privkey.pem) - ssl_certfile - HTTPS için SSL sertifikasının yolu. (örn.
fullchain.pem) - registration_psk - OAuth istemcilerini kaydetmek için gereken ön paylaşımlı anahtar. OAuth bağlantılarını onaylamak için bu sırrı tarayıcınıza yazmanız gerekecektir.
- jwt_key_path - OAuth belirteçleri için kullanılan RSA anahtar çiftinin konumu. Varsayılan
.cache/jwt.json'dir. Mevcut değilse otomatik oluşturulur. - oauth_db_path - OAuth veritabanı dosyasının yolu. Varsayılan
.cache/oauth.db'dir. Mevcut değilse otomatik oluşturulur. - enabled_tools - Kaydedilecek araç adlarının listesi. Boş bir liste tüm araçları etkinleştirir. Araçları kullanım durumuna veya göreve göre seçici olarak etkinleştirmeniz şiddetle önerilir. Bazı örnekler için
docs/klasörüne bakın. - search_objects -
searcharacı için izin verilen nesne türleri. Varsayılan["secret"]'dır ancakuser,folder,groupveroleiçerebilir. - fetch_objects -
fetcharacı için izin verilen nesne türleri. Varsayılan["secret"]'dir ancaksearch_objectsile aynı değerleri içerebilir.
Sunucuyu Çalıştırma
Sunucuyu geliştirme modunda yerel olarak başlatın:
python server.py
Başlangıçta sunucu bir taşıyıcı belirteç ister ve sonraki API istekleri için saklar. Bu proje, Secret Server API'si ile daha fazla entegre olacak şekilde genişletilecektir.
MCP Araçları
Sunucu, Secret Server ile etkileşim için çeşitli MCP araçları sunar:
run_report(sql_query, report_name=None)- geçici bir rapor oluştur ve çalıştır.ai_generate_and_run_report(description)- Azure OpenAI kullanarak SQL oluştur ve çalıştır. Azure OpenAI değişkenlerini gerektirir.list_example_reports()- örnek sorguları ve tablo bilgilerini listele.get_secret(id, summary=False)- bir gizli bilgiyi veya özet ayrıntılarını al.get_folder(id)- klasör meta verilerini ve alt öğelerini getir.search_users(query)- aktif kullanıcıları ara.search_secrets(query, lookup=False)- gizli bilgileri ara veya sorgula.search_folders(query, lookup=False)- klasörleri ara veya sorgula.get_secret_environment_variable(secret_id, environment)- belirtilen kabukta gizli bilgi kimlik bilgilerini almak için bir betik çıktısı ver.check_secret_template(template_id)- gizli bilgi şablonu ayrıntılarını getir.check_secret_template_field(template_id, field_id)- bir şablonun bir alan içerip içermediğini kontrol et.get_secret_template_field(field_id)- belirli bir gizli bilgi şablonu alanı hakkında kimliğe göre ayrıntıları al.handle_access_request(request_id, status, response_comment, start_date=None, expiration_date=None)- bir erişim isteğini onayla veya reddet.get_pending_access_requests()- bekleyen erişim isteklerini listele.get_inbox_messages(read_status_filter=None, take=20, skip=0)- gelen kutusu mesajlarını al.mark_inbox_messages_read(message_ids, read=True)- mesajları okundu veya okunmadı olarak işaretle.user_management(action, user_id=None, data=None, skip=0, take=20, is_exporting=False)- birleşik kullanıcı işlemleri.actionget,create,update,delete,list_sessions,reset_2fa,reset_passwordveyalock_outkabul eder. Gerektiğindeuser_idsağlayın ve oluşturma, güncelleme ve parola sıfırlama eylemleri için istek gövdesinidataaracılığıyla iletin. Örnek:user_management("reset_password", user_id=42, data={"newPassword": "Pa$$w0rd"}).role_management(action, role_id=None, data=None, params=None)- rolleri yönet.actionlist,get,createveyaupdateolabilir. Rolleri listelerken isteğe bağlı sorgu parametreleriniparamsile iletin. Örnek:role_management("update", role_id=3, data={"name": "New Role"}).user_role_management(action, user_id, role_ids=None)- bir kullanıcıya rol ata veya kaldır.actionget,addveyaremoveverole_idsekleme/kaldırma işlemleri için bir rol tanımlayıcıları listesidir.group_management(action, group_id=None, data=None, params=None)- grupları yönet.actionget,list,createveyadeleteolabilir. Getirme/silme içingroup_idve bir grup oluştururkendatasağlayın.folder_management(action, folder_id=None, data=None, params=None)- klasörleri yönet.actionget,list,create,updateveyadeleteolabilir. Getirme, güncelleme veya silme içinfolder_idsağlayın ve bir klasör oluştururken veya güncellerkendatailetin.user_group_management(action, user_id, group_ids=None)- bir kullanıcı için grup üyeliğini yönet.actionget,addveyaremove'dir. Üyelik eklerken veya kaldırırken birgroup_idslistesi sağlayın.group_role_management(action, group_id, role_ids=None)- bir gruptaki rolleri kontrol et.list,addveyaremoveeylemlerini kullanın. Eklerken veya kaldırırkenrole_idssağlayın.health_check()- Secret Server sağlık kontrolü uç noktasını sorgulayın ve mevcut hizmet durumunu döndürün.
Kimlik doğrulaması için yukarıda açıklanan sunucu yapılandırma değişkenlerini kullanın.
Azure OpenAI değişkenleri eksikse AI aracı otomatik olarak devre dışı bırakılır.
Yalnızca config.json içinde listelenen araç adları kaydedilecektir.
Boş bir liste tüm araçları etkinleştirir.
Kullanım Durumları
Dokümantasyon, araçları sunucuya bağlamak için çeşitli iş akışlarını kapsar:
- ChatGPT Özel Bağlayıcısı
- Claude Desktop
- Uzak Claude Bağlayıcısı
- Yönetim için openwebui
- VSCode Copilot
Docker Hızlı Başlangıç
MCP sunucusunu yerel olarak Python bağımlılıklarını kurmadan çalıştırmak için bir Dockerfile sağlanmıştır.
- İmajı oluşturun:
docker build -t dev.local/delinea-mcp:latest .
- Sunucuyu çalıştırın (kimlik bilgilerinizi ortam değişkenleri aracılığıyla iletin):
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'i yukarıda gösterildiği gibi kullanıcı adlarınız ve URL'lerinizle doldurun.
Konteyner oauth.db ve jwt.json'i /app/data içinde saklar.
Bu dosyaların ve HTTPS sertifikalarının çalıştırmalar arasında kalıcı olması için bir birim bağlayın (yukarıda mcp-data olarak gösterilmiştir).
Bağlantı hatalarını önlemek için <https://your-secret-server/SecretServer>'i Secret Server örneğinizin temel URL'si ile değiştirin.
Sunucu varsayılan olarak python server.py kullanarak 8000 bağlantı noktasında başlayacaktır.
Varsayılanı geçersiz kılmak için config.json içindeki port seçeneğini ayarlayın.
Tüm gelen HTTP isteklerini günlüğe kaydetmek için debug: true'i etkinleştirin.
Örnek Betikler
manual_secret_request.py betiği, belirli bir gizli bilgi kimliği için OAuth belirtecinin nasıl alınacağını gösterir:
python scripts/manual_secret_request.py <Secret_ID>
Betiği çalıştırmadan önce gizli bilgi için SECRET_USERNAME_<id> ve SECRET_PASSWORD_<id> ortam değişkenlerini ayarlayın.
Varsayılan https://localhost/SecretServer'i geçersiz kılmak için isteğe bağlı olarak DELINEA_BASE_URL ayarlayın.
Testleri Çalıştırma
%100 kod kapsamı sağlamak için birim testlerini kapsam ile çalıştırın:
pip install -r requirements.txt
coverage run -m pytest -q
coverage report --omit "tests/*"
Canlı Test
Bazı entegrasyon testleri geçerli kimlik bilgileri gerektirir.
Paketi çalıştırmadan önce aşağıdaki ortam değişkenlerini ve isteğe bağlı LIVE_SECRET_ID'i ayarlayın:
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>
Bu değişkenler mevcut olduğunda canlı testler gerçek API istekleri gerçekleştirecektir.
Üretim Dağıtımı
Bağımlılıklar requirements.txt içinde sabitlenmiştir ve sürümler Semantik Sürümleme kullanılarak etiketlenmiştir.
Etiketlenmiş bir commit'ten Docker imajını oluşturun ve gerekli ortam değişkenlerini (DELINEA_USERNAME, DELINEA_PASSWORD, isteğe bağlı olarak DELINEA_BASE_URL) ileterek üretim ortamınıza dağıtın.
İsteğe bağlı özellikler ek değişkenlere dayanır:
PLATFORM_SERVICE_PASSWORD,PLATFORM_HOSTNAME,PLATFORM_SERVICE_ACCOUNTvePLATFORM_TENANT_IDile birlikte kullanıcı yönetim araçlarını etkinleştirir.AZURE_OPENAI_KEY,AZURE_OPENAI_ENDPOINTveAZURE_OPENAI_DEPLOYMENTile birlikte AI rapor oluşturma yardımcısını etkinleştirir.
OAuth veya SSE aktarımı ile çalışırken registration_psk sağlamanız ve bir external_hostname veya HTTPS sertifika dosyaları yapılandırmanız gerekebilir.
Depo Düzeni
delinea_mcp/- MCP araçlarını içeren paket.server.py- her şeyi MCP sunucusuna kaydeden ince giriş noktası.docs/- proje dokümantasyonu ve oluşturulandelinea-secret-server-openapi-spec.json.scripts/-manual_secret_request.pydahil yardımcı örnekler.
Güvenlik Hususları
Dahil edilen OAuth uç noktaları geliştirme ve test amaçlıdır.
/oauth/authorize rotası herhangi bir redirect_uri kabul eder ve kullanıcıyı doğrulama olmadan yönlendirir.
Dağıtımlar bu değeri onaylanmış geri çağırma URL'leriyle sınırlandırmalıdır; aksi takdirde saldırganlar kötü amaçlı bir URL sağlayabilir ve yetkilendirme kodlarını ele geçirebilir.
Arka plan için Açık Yönlendirme konusuna bakın.
Sürüm Notları
En son özelliklerin ve yol haritası öğelerinin bir özeti için docs/release_notes.md dosyasına bakın.
Yol Haritası
- Geçişli kimlik doğrulama
- Akışlı HTTP aktarım desteği
- Delinea Platform'da araç kapsamını genişletme ve diğer Delinea ürünlerini ekleme
Katkıda Bulunma
Katkılar memnuniyetle karşılanır! Herhangi bir iyileştirme için lütfen sorunlar veya çekme istekleri açın. Tüm yeni kodlar birim testleri içermeli ve mevcut test paketini geçmelidir.
Lisans
Bu proje MIT Lisansı altında lisanslanmıştır.