delinea-mcp Server
आधिकारिकDelinea Secret Server और Platform APIs के लिए आधिकारिक Delinea MCP सर्वर
दस्तावेज़
DelineaMCP
Delinea Secret Server और Platform API के लिए MCP सर्वर
विशेषताएँ
- 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)- एकीकृत उपयोगकर्ता संचालन।actionget,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)- भूमिकाएँ प्रबंधित करें।actionlist,get,createयाupdateहो सकता है। भूमिकाएँ सूचीबद्ध करते समयparamsके साथ वैकल्पिक क्वेरी पैरामीटर पास करें। उदाहरण:role_management("update", role_id=3, data={"name": "New Role"})।user_role_management(action, user_id, role_ids=None)- किसी उपयोगकर्ता को भूमिकाएँ असाइन करें या हटाएँ।actionget,addयाremoveहै औरrole_idsजोड़ने/हटाने के संचालन के लिए भूमिका पहचानकर्ताओं की एक सूची है।group_management(action, group_id=None, data=None, params=None)- समूहों को संभालें।actionget,list,createयाdeleteहो सकता है। प्राप्त करने/हटाने के लिएgroup_idऔर समूह बनाते समयdataप्रदान करें।folder_management(action, folder_id=None, data=None, params=None)- फ़ोल्डर प्रबंधित करें।actionget,list,create,updateयाdeleteहो सकता है। प्राप्त करने, अपडेट करने या हटाने के लिएfolder_idप्रदान करें और फ़ोल्डर बनाते या अपडेट करते समयdataकी आपूर्ति करें।user_group_management(action, user_id, group_ids=None)- किसी उपयोगकर्ता के लिए समूह सदस्यता प्रबंधित करें।actionget,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 में संग्रहीत करता है।
एक वॉल्यूम माउंट करें (ऊपर 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_DEPLOYMENTAI रिपोर्ट जनरेशन सहायक को सक्षम करते हैं।
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 उत्पाद जोड़ें
योगदान
योगदान का स्वागत है! किसी भी सुधार के लिए कृपया मुद्दे खोलें या पुल अनुरोध करें। सभी नए कोड में यूनिट परीक्षण शामिल होने चाहिए और मौजूदा परीक्षण सूट पास करना चाहिए।
लाइसेंस
यह प्रोजेक्ट MIT लाइसेंस के तहत लाइसेंस प्राप्त है।