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_PATHAPI कुंजी 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 दर-सीमित होते हैं। स्थानीय उपयोग के लिए सुविधाजनक; सार्वजनिक रूप से उजागर न करें।

स्तर और दर सीमाएँ

स्तरसीमा
free10 अनुरोध/मिनट, बर्स्ट 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 रनटाइम। कोई शेल या पैकेज मैनेजर नहीं।