delinea-mcp Server

आधिकारिक

Delinea Secret Server और Platform APIs के लिए आधिकारिक Delinea MCP सर्वर

दस्तावेज़

DelineaMCP

Delinea Secret Server और Platform API के लिए MCP सर्वर

License


विशेषताएँ

  • Secret Server के विरुद्ध स्वचालित प्रमाणीकरण
  • फ़ोल्डर, सीक्रेट, उपयोगकर्ता, समूह और भूमिकाओं के प्रबंधन के लिए व्यापक Secret Server टूल सेट। इसमें इनबॉक्स और एक्सेस अनुरोध सहायक और कोडिंग एजेंट उपयोगिताएँ शामिल हैं।
  • नियंत्रित AI इंटरैक्शन के लिए ChatGPT संगतता उपकरण (search और fetch)।
  • वैकल्पिक Delinea Platform उपयोगकर्ता प्रबंधन उपकरण
  • सर्वर सेंट इवेंट्स या 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 हो सकता है। प्राप्त करने/हटाने के लिए group_id और समूह बनाते समय data प्रदान करें।
  • folder_management(action, folder_id=None, data=None, params=None) - फ़ोल्डर प्रबंधित करें। action get, list, create, 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 प्रदान किया गया है।

  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.db और jwt.json को /app/data में संग्रहीत करता है। एक वॉल्यूम माउंट करें (ऊपर mcp-data के रूप में दिखाया गया है) ताकि ये फ़ाइलें और कोई भी HTTPS प्रमाणपत्र रन के बीच बने रहें।

कनेक्शन त्रुटियों से बचने के लिए <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> सेट करें। डिफ़ॉल्ट https://localhost/SecretServer को ओवरराइड करने के लिए वैकल्पिक रूप से DELINEA_BASE_URL सेट करें।

परीक्षण चलाना

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 देखें।

रोडमैप

  1. पासथ्रू प्रमाणीकरण
  2. स्ट्रीमिंग HTTP ट्रांसपोर्ट समर्थन
  3. Delinea Platform पर उपकरण कवरेज का विस्तार करें और अन्य Delinea उत्पाद जोड़ें

योगदान

योगदान का स्वागत है! किसी भी सुधार के लिए कृपया मुद्दे खोलें या पुल अनुरोध करें। सभी नए कोड में यूनिट परीक्षण शामिल होने चाहिए और मौजूदा परीक्षण सूट पास करना चाहिए।

लाइसेंस

यह प्रोजेक्ट MIT लाइसेंस के तहत लाइसेंस प्राप्त है।