kubernetools MCP Server
आधिकारिकHelp AI agents write accurate, up-to-date Kubernetes manifests by giving them the official Kubernetes API reference, so they can look up kinds, fields, and nested types with current specs across the latest and three previous Kubernetes versions
दस्तावेज़
kubernetools/mcp-server
kubernetools MCP सर्वर के लिए कंटेनर इमेज।
रजिस्ट्री: ghcr.io/kubernetools/mcp-server
त्वरित शुरुआत
अनामित मोड (स्थानीय उपयोग)
किसी प्रमाणीकरण की आवश्यकता नहीं है; सभी कनेक्शन मुफ़्त-स्तरीय सीमा पर प्रति स्रोत IP दर-सीमित हैं।
podman run -d \
-p 3000:3000 \
-e K8S_VERSIONS=v1.33 \
ghcr.io/kubernetools/mcp-server:latest
API कुंजी प्रमाणीकरण के साथ
# 1. Create a key store file
echo '[{"key":"mykey","tier":"free"}]' > keys.json
# 2. Start the server
podman run -d \
-p 3000:3000 \
-v "$(pwd)/keys.json:/keys.json:ro" \
-e K8S_VERSIONS=v1.33,v1.34,v1.35,v1.36 \
-e KEY_STORE_PATH=/keys.json \
ghcr.io/kubernetools/mcp-server:latest
कॉन्फ़िगरेशन
| पैरामीटर | एन्व वर | विवरण |
|---|---|---|
| कुबेरनेट्स संस्करण | K8S_VERSIONS | पूर्व-लोड करने के लिए संस्करणों की अल्पविराम-पृथक सूची (जैसे v1.33,v1.34)। डिफ़ॉल्ट v1.33 है। |
| GitHub टोकन | GITHUB_TOKEN | व्यक्तिगत एक्सेस टोकन (कोई अतिरिक्त स्कोप आवश्यक नहीं)। वैकल्पिक; GitHub API दर सीमा को 60 से बढ़ाकर 5,000 अनुरोध/घंटा करता है — एकाधिक संस्करण लोड करते समय अनुशंसित। |
| कुंजी स्टोर | KEY_STORE_PATH | API कुंजी JSON फ़ाइल का पथ (इसे कंटेनर में माउंट करें)। छोड़े जाने पर, सर्वर अनामित मोड में चलता है: किसी प्रमाणीकरण की आवश्यकता नहीं होती और सभी कनेक्शन मुफ़्त-स्तरीय सीमा पर प्रति स्रोत IP दर-सीमित होते हैं। |
| अनुमत होस्ट | ALLOWED_HOSTS | स्वीकार करने के लिए Host हेडर मानों की अल्पविराम-पृथक सूची (जैसे mcp.example.com,mcp.example.com:443)। छोड़े जाने पर, होस्ट सत्यापन अक्षम होता है — केवल स्थानीय विकास के लिए उपयुक्त। DNS-रीबाइंडिंग हमलों को रोकने के लिए उत्पादन में हमेशा इसे सेट करें। |
| ब्राउज़र रीडायरेक्ट | BROWSER_REDIRECT_URL | सादे ब्राउज़र GET अनुरोधों को रीडायरेक्ट करने के लिए URL। MCP क्लाइंट Accept: text/event-stream द्वारा पहचाने जाते हैं; ब्राउज़र इसके बजाय इस URL पर 307 प्राप्त करते हैं। छोड़े जाने पर, ब्राउज़र GET 400 लौटाते हैं। |
| लॉग स्तर | RUST_LOG | लॉग स्तर फ़िल्टर (जैसे info, debug, mcp=debug)। |
| पोर्ट | --publish | सर्वर पोर्ट 3000 पर सुनता है। |
प्रमाणीकरण
API कुंजी स्टोर
कुंजी स्टोर एक सपाट JSON सरणी है जो स्टार्टअप पर एक बार लोड होती है:
[
{ "key": "free-key-abc", "tier": "free" },
{ "key": "paid-key-xyz", "tier": "paid" }
]
प्रत्येक अनुरोध में Authorization हेडर में कुंजी शामिल होनी चाहिए:
Authorization: Bearer free-key-abc
मान्य कुंजी के बिना अनुरोध 401 Unauthorized प्राप्त करते हैं।
अनामित मोड
जब KEY_STORE_PATH सेट नहीं होता है, तो सर्वर बिना प्रमाणीकरण के चलता है। सभी कनेक्शन स्वीकार किए जाते हैं और मुफ़्त-स्तरीय सीमा पर प्रति स्रोत IP दर-सीमित होते हैं। स्थानीय उपयोग के लिए सुविधाजनक; सार्वजनिक रूप से उजागर न करें।
स्तर और दर सीमाएँ
| स्तर | सीमा |
|---|---|
free | 10 अनुरोध/मिनट, बर्स्ट 10 |
paid | ~1,000 अनुरोध/सेकंड, बर्स्ट 1,000 (प्रभावी रूप से असीमित) |
सीमा से अधिक अनुरोध 429 Too Many Requests प्राप्त करते हैं। सीमाएँ प्रति API कुंजी ट्रैक की जाती हैं, प्रति IP नहीं।
MCP क्लाइंट कनेक्ट करना
सर्वर MCP स्ट्रीमेबल HTTP ट्रांसपोर्ट लागू करता है। एंडपॉइंट है:
http://<host>:<port>/[?version=<k8s-version>]
version क्वेरी पैरामीटर चुनता है कि सत्र के लिए कौन सा कुबेरनेट्स संस्करण उपयोग करना है। छोड़े जाने पर, पहला लोड किया गया संस्करण उपयोग किया जाता है। एक अज्ञात संस्करण 400 Bad Request लौटाता है।
Claude Desktop
claude_desktop_config.json में निम्नलिखित जोड़ें:
{
"mcpServers": {
"kubernetools": {
"url": "http://localhost:3000/?version=v1.36",
"headers": {
"Authorization": "Bearer mykey"
}
}
}
}
उपलब्ध उपकरण
list_resources
हल्की खोज — प्रति संसाधन एक प्रविष्टि लौटाता है, (group, kind, api_version) द्वारा क्रमबद्ध। प्रकार के नाम खोजने के लिए पहले इसका उपयोग करें।
वैकल्पिक फ़िल्टर: group (जैसे "apps", "core"), api_version (जैसे "v1")।
get_resource
पूर्ण संसाधन विवरण — फ़ील्ड, स्पेक, स्थिति, और सूची फ़ील्ड — एक कॉल में मैनिफ़ेस्ट लिखने के लिए पर्याप्त। आवश्यक: kind। वैकल्पिक: group, api_version (सबसे हालिया पर डिफ़ॉल्ट)।
गैर-शून्य type_ref और खाली sub_fields वाले फ़ील्ड को get_type के साथ ड्रिल किया जाना चाहिए।
get_type
get_resource आउटपुट में type_ref के माध्यम से संदर्भित एकल समग्र प्रकार में ड्रिल करें। आवश्यक: type_name (जैसे "Container", "PodFailurePolicy")।
विशिष्ट क्वेरी प्रवाह
list_resources → discover kind names and groups
└─ get_resource(kind="Deployment") → see all top-level fields + spec/status
└─ get_type(type_name="...") → drill into any complex type_ref
स्वास्थ्य जाँच
पोर्ट 3000 पर GET /healthz।
- जब कुबेरनेट्स API दस्तावेज़ लोड हो रहे हों तो
503 Service Unavailable(बॉडी:loading) लौटाता है। - सर्वर तैयार होने पर
200 OK(बॉडी:ok) लौटाता है।
यह एंडपॉइंट प्रमाणीकरण और दर सीमा को बायपास करता है।
स्टार्टअप, रेडीनेस और लाइवनेस प्रोब के लिए इसका उपयोग करें:
startupProbe:
httpGet:
path: /healthz
port: 3000
failureThreshold: 30 # allow up to 5 min for version loading
periodSeconds: 10
readinessProbe:
httpGet:
path: /healthz
port: 3000
livenessProbe:
httpGet:
path: /healthz
port: 3000
initialDelaySeconds: 10
त्रुटि प्रतिक्रियाएँ
| HTTP स्थिति | कारण |
|---|---|
307 Temporary Redirect | ब्राउज़र GET जब BROWSER_REDIRECT_URL सेट हो |
400 Bad Request | ब्राउज़र GET जब BROWSER_REDIRECT_URL सेट न हो, या version पैरामीटर स्टार्टअप पर लोड न किए गए संस्करण का नाम देता है |
401 Unauthorized | गुम या अमान्य Authorization: Bearer <key> हेडर |
429 Too Many Requests | कुंजी के स्तर के लिए दर सीमा पार |
MCP-स्तरीय त्रुटियाँ (अज्ञात उपकरण नाम, गुम आवश्यक तर्क, प्रकार नहीं मिला) सामान्य 200 प्रतिक्रिया के अंदर MCP त्रुटि सामग्री के रूप में लौटाई जाती हैं।
उदाहरण
एकाधिक कुबेरनेट्स संस्करण
podman run -d \
-p 3000:3000 \
-v "$(pwd)/keys.json:/keys.json:ro" \
-e K8S_VERSIONS=v1.33,v1.34,v1.35,v1.36 \
-e GITHUB_TOKEN=ghp_... \
-e KEY_STORE_PATH=/keys.json \
ghcr.io/kubernetools/mcp-server:latest
होस्ट सत्यापन के साथ उत्पादन सेटअप
podman run -d \
-p 3000:3000 \
-v "$(pwd)/keys.json:/keys.json:ro" \
-e K8S_VERSIONS=v1.36 \
-e KEY_STORE_PATH=/keys.json \
-e ALLOWED_HOSTS=mcp.example.com,mcp.example.com:443 \
-e BROWSER_REDIRECT_URL=https://example.com/docs \
ghcr.io/kubernetools/mcp-server:latest
डीबग लॉगिंग
podman run -d \
-p 3000:3000 \
-e K8S_VERSIONS=v1.33 \
-e RUST_LOG=debug \
ghcr.io/kubernetools/mcp-server:latest
एक विशिष्ट रिलीज़ पर पिन करें
podman run -d \
-p 3000:3000 \
-e K8S_VERSIONS=v1.33 \
ghcr.io/kubernetools/mcp-server:0.1.0
इमेज
registry.access.redhat.com/hi/core-runtime:2.42-openssl पर निर्मित — एक न्यूनतम, डिस्ट्रोलेस glibc + OpenSSL रनटाइम। कोई शेल या पैकेज मैनेजर नहीं।