פתק בריאות בוקר לאשכול
Every weekday at 8:30, list the pods in my production namespace that are not in Running state, add the restart count and the last few log lines for each, and write it all to cluster-morning.md.
שרת MCP מאומת: Kubernetes
רשימת הכלים למטה היא לכידה חיה מהשרת הרץ; קריאת כלי מאומתת עדיין ממתינה להרשאות.
התשובה הקצרה
אומת לאחרונה 2026-08-03
שרת ה-MCP ל-Kubernetes נותן לעוזר AI את משטח הפעולה של kubectl מול האשכול שלכם: להציג ולתאר משאבים, לקרוא לוגים של pod, לשנות מספר עותקים של deployment, להחיל מניפסט, לחסום node, להריץ Helm. אף אחת משתי החבילות המובילות לא מגיעה מפרויקט Kubernetes עצמו, וזו עם הכי הרבה הורדות היא mcp-server-kubernetes, שרצה על ה-Mac שלכם על גבי stdio ומפעילה את הפקודה kubectl שכבר מותקנת אצלכם. אין בה חשבון ואין מפתח API. מה שכן נדרש הוא kubeconfig שמצביע על אשכול שאתם כבר מצליחים להגיע אליו, וזה בדיוק הקו שבו העמוד הזה עוצר: הרצנו את השרת, דיברנו איתו בפרוטוקול וספרנו את כל 23 הכלים שהוא חושף, אבל ההקשר היחיד שהיה על ה-Mac שלנו הצביע על נקודת קצה של Docker Desktop עם Kubernetes כבוי, ולכן כל קריאה שנוגעת באשכול חזרה עם שגיאת חיבור. השגיאות האלה מודפסות למטה, מילה במילה, לצד טבלת הכלים. שני דברים ששווה לדעת לפני שמתחילים. kubectl חייבת להיות מותקנת בנפרד ולהימצא ב-PATH, כי השרת מפעיל אותה כתת-תהליך, וסט הכלים המשמש כברירת מחדל הוא קריאה וכתיבה מלאות, כולל מחיקות. [1][2][3][5][8]
אימות
השיטה
הרצנו את השרת עם npx על גבי stdio, השלמנו את לחיצת היד של MCP וקראנו ל-tools/list: 23 הכלים למטה הם התשובה הזו, מילה במילה. אחר כך ביצענו קריאות כלים אמיתיות. שתיים מהן ענו, כי אף אחת מהן לא נוגעת באשכול: ping, ו-kubectl_context עם הפעולה list, שקראה את ההקשר היחיד מתוך ה-kubeconfig שעל ה-Mac של הבדיקה. כל קריאה שדורשת אשכול ממשי נכשלה, כפי שהיה חייב לקרות. קריאת הדוגמה למטה היא kubectl_get על nodes, והציטוט הוא טקסט השגיאה שהיא החזירה. מה שממתין כאן אינו סיסמה אלא אשכול שאפשר להגיע אליו: השרת הזה מתייחס ל-kubeconfig שלכם כאל אישור הגישה, ול-Mac שלנו היה בדיוק הקשר אחד, נקודת קצה של Docker Desktop עם Kubernetes כבוי. לכן שום דבר בעמוד הזה לא טוען שקריאה מוצלחת מאשכול חי התרחשה. הרצנו את השרת עוד שלוש פעמים בכוונה כדי לאסוף כשלים: עם KUBECONFIG שמצביע על קובץ שאינו קיים, עם שם הקשר לא מוכר, ובמצב שאינו הרסני.
הודעת הפתיחה של השרת
Starting Kubernetes MCP server v4.1.2, handling commands... Telemetry: Disabled
קריאת כלי אמיתית אחת
tools/call kubectl_get {"resourceType": "nodes"}MCP error -32603: Failed to execute kubectl get command: MCP error -32603: Failed to get resource: Command failed: kubectl get nodes -o json Unable to connect to the server: EOF
שורות אמיתיות מהתוצאה שנלכדה: מספיק כדי להוכיח שהקריאה נענתה.
כלים
השרת ענה ל-tools/list עם 23 כלים בתאריך 2026-08-03. השמות, התיאורים והפרמטרים למטה הם המילים שלו עצמו, מועתקים מהתשובה הזו וללא עריכה.
| כלי | מה הוא עושה |
|---|---|
| cleanup | Cleanup all managed resources |
| kubectl_getresourceType*namenamespaceoutputallNamespaceslabelSelectorfieldSelectorsortBycontext | Get or list Kubernetes resources by resource type, name, and optionally namespace |
| kubectl_describeresourceType*name*namespacecontextallNamespaces | Describe Kubernetes resources by resource type, name, and optionally namespace |
| kubectl_applymanifestfilenamenamespacedryRunforcecontext | Apply a Kubernetes YAML manifest from a string or file |
| kubectl_deleteresourceTypenamenamespacelabelSelectormanifestfilenameallNamespacesforcegracePeriodSecondscontext | Delete Kubernetes resources by resource type, name, labels, or from a manifest file |
| kubectl_createdryRunoutputvalidatemanifestfilenameresourceTypenamenamespacefromLiteralfromFilefromFileContentsecretTypeserviceTypetcpPortimagereplicasportschedulesuspendcommandlabelsannotationscontext | Create Kubernetes resources using various methods (from file or using subcommands) |
| kubectl_logsresourceType*name*namespace*containertailsincesinceTimetimestampspreviousfollowlabelSelectorcontext | Get logs from Kubernetes resources like pods, deployments, or jobs |
| kubectl_scalename*namespacereplicas*resourceTypecontext | Scale a Kubernetes deployment |
| kubectl_patchresourceType*name*namespacepatchTypepatchDatapatchFiledryRuncontext | Update field(s) of a resource using strategic merge patch, JSON merge patch, or JSON patch |
| kubectl_rolloutsubCommand*resourceType*name*namespace*revisiontoRevisiontimeoutwatchcontext | Manage the rollout of a resource (e.g., deployment, daemonset, statefulset) |
| kubectl_contextoperation*nameshowCurrentdetailedoutput | Manage Kubernetes contexts - list, get, or set the current context |
| kubectl_reconnect | Reconnect to the Kubernetes API server by recreating all API clients. Use this after cluster upgrades (e.g., EKS control plane upgrades that rotate ENIs/IPs) to force fresh DNS resolution and new TCP connections. |
| explain_resourceresource*apiVersionrecursivecontextoutput | Get documentation for a Kubernetes resource or field |
| install_helm_chartname*chart*namespace*contextrepovaluesvaluesFileuseTemplatecreateNamespace | Install a Helm chart with support for both standard and template-based installation |
| upgrade_helm_chartname*chart*namespace*contextrepovaluesvaluesFile | Upgrade an existing Helm chart release |
| uninstall_helm_chartname*namespace*context | Uninstall a Helm chart release |
| node_managementoperation*nodeNameforcegracePerioddeleteLocalDataignoreDaemonsetstimeoutdryRunconfirmDrain | Manage Kubernetes nodes with cordon, drain, and uncordon operations |
| port_forwardresourceType*resourceName*localPort*targetPort*namespace | Forward a local port to a port on a Kubernetes resource |
| stop_port_forwardid* | Stop a port-forward process |
| exec_in_podname*namespacecommand*containertimeoutcontext | Execute a command in a Kubernetes pod or container and return the output. Command must be an array of strings where the first element is the executable and remaining elements are arguments. This executes directly without shell interpretation for security. |
| list_api_resourcesapiGroupnamespacedcontextverbsoutput | List the API resources available in the cluster |
| kubectl_genericcommand*subCommandresourceTypenamenamespaceallNamespacesoutputFormatflagsargscontext | Execute any kubectl command with the provided arguments and flags |
| ping | Verify that the counterpart is still responsive and the connection is alive. |
פרמטרים המסומנים ב-* הם חובה.
התקנה
העתיקו את הבלוק של האפליקציה שלכם. כל אחד מהם הוא ההגדרה המדויקת שאיתה אימתנו את השרת.
פתחו את הקובץ ~/Library/Application Support/Claude/claude_desktop_config.json (בתוך Claude Desktop: Settings, אחר כך Developer, אחר כך Edit Config) והוסיפו:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": [
"-y",
"mcp-server-kubernetes"
]
}
}
}אין כאן מפתח להדביק, וזה בכוונה: השרת קורא את ה-kubeconfig שלכם, כברירת מחדל ~/.kube/config, ומשתמש בהקשר הנוכחי. בדקו קודם שהפקודה kubectl get pods עובדת בטרמינל, ואז סגרו ופתחו מחדש את Claude Desktop. [10][5]
פקודה אחת בטרמינל:
claude mcp add kubernetes -- npx -y mcp-server-kubernetes
כל מה שאחרי המקף הכפול הוא הפקודה המדויקת ש-Claude Code יריץ. השרת יורש את ה-kubeconfig של המעטפת שממנה הפעלתם אותו, ולכן אם האשכול שלכם דורש KUBECONFIG או K8S_CONTEXT, הוסיפו אותם עם --env KEY=value לפני המקף הכפול. [11][6]
הוסיפו ל-~/.cursor/mcp.json עבור כל הפרויקטים, או ל-.cursor/mcp.json בתוך פרויקט אחד:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": [
"-y",
"mcp-server-kubernetes"
]
}
}
}Cursor קורא את הקובץ מחדש אחרי הפעלה מחדש. כדי לקבע הקשר מסוים במקום לעקוב אחרי מה ש-kubectl מכוונת אליו, הוסיפו אובייקט env לצד args ובתוכו K8S_CONTEXT. [12][6]
בלי קובץ JSON ובלי טרמינל. ב-Routines: Settings, אחר כך Assistant, אחר כך Connections, אחר כך Add MCP Server. העבירו את הטופס ל-Command (stdio) והזינו:
Name Kubernetes Command npx Arguments -y mcp-server-kubernetes
השאירו את Environment Variables ריק, אלא אם אתם צריכים הקשר מסוים או kubeconfig מחוץ ל-~/.kube/config, ואז הוסיפו שם K8S_CONTEXT או KUBECONFIG. לחצו קודם על Test Connection: שרת תקין עונה עם מספר הכלים שלו, עשרים ושלושה עבור השרת הזה. שימו לב שהמספר חוזר גם כשאי אפשר להגיע לאשכול, כי רשימת הכלים קבועה ואינה תלויה באשכול. [13][6]
בלי טרמינל
אם מעולם לא פתחתם את הטרמינל ואין לכם כוונה להתחיל, זה המסלול שלכם, עם הסתייגות אחת כנה: השרת הזה הוא מעטפת סביב kubectl, ולכן kubectl ואשכול עובד צריכים להתקיים קודם. Routines היא אפליקציית Mac שמריצה שרתי MCP בשבילכם: ממלאים שלושה שדות פעם אחת, והכלים של השרת זמינים ל-AI שלכם בצ׳אט ובשגרות מתוזמנות.
01
הורידו את האפליקציה מ-getroutines.ai/download, גררו אותה ל-Applications והתחברו.
02
זהו שלב אישור הגישה, והוא אינו סיסמה. התקינו את kubectl אם אין לכם, ואז הריצו פעם אחת בטרמינל kubectl get pods. אם התקבלה רשימת pods או רשימה ריקה, אתם מוכנים. אם התקבלה שגיאת חיבור, טפלו בה לפני שממשיכים: שרת ה-MCP יחזיר לכם בדיוק את אותה שגיאה, כי הוא מריץ את אותה פקודה.
03
לחצו על החשבון שלכם בתחתית סרגל הצד ובחרו Settings. פתחו את הקטע Assistant, אחר כך את הלשונית Connections, גללו אל MCP Servers ולחצו על Add MCP Server.
04
העבירו את הטופס ל-Command (stdio): השרת הזה הוא פקודה, לא כתובת אינטרנט. Name: Kubernetes. Command: npx. Arguments: -y mcp-server-kubernetes. השאירו את Environment Variables ריק, אלא אם תרצו לקבע הקשר, ואז הוסיפו K8S_CONTEXT עם שם ההקשר.
05
לחצו Test Connection: Routines מפעילה את השרת ומדווחת כמה כלים היא מצאה, עשרים ושלושה עבור השרת הזה. המספר הזה מגיע גם אם האשכול שלכם כבוי, ולכן התייחסו אליו כהוכחה שהשרת עלה, לא כהוכחה שהאשכול ענה. אחר כך לחצו Add Server.
06
הכלים עובדים בצ׳אט מיד. בקשו קודם משהו לקריאה בלבד, למשל את ה-pods במרחב שמות אחד. כדי לתת לשגרה מתוזמנת להשתמש בהם, פתחו את השגרה, מצאו את הכרטיס Tools & connections וסמנו את השרת תחת Apps.
רעיונות לשגרות
אחרי שהשרת מחובר, שגרה מתוזמנת יכולה להשתמש בכלים שלו גם כשאתם לא מול המסך. העתיקו פרומפט, הדביקו אותו ב-Routines ובחרו שעה. הפרומפטים כתובים באנגלית בכוונה, מדביקים אותם בדיוק כפי שהם.
Every weekday at 8:30, list the pods in my production namespace that are not in Running state, add the restart count and the last few log lines for each, and write it all to cluster-morning.md.
Every Friday at 16:00, list the nodes in my cluster with their allocatable CPU and memory, list the deployments with their replica counts, and save the two tables to cluster-capacity.md with a one-line note on anything that changed since last week.
Every day at 18:00, find every deployment in my cluster with fewer ready replicas than desired, describe each one, and write a short digest of the likely cause to cluster-issues.md.
פתרון תקלות
שגיאות אמיתיות שנלכדו בריצת האימות, מודפסות בדיוק כפי שהשרת החזיר אותן.
מה רואים
MCP error -32603: Failed to execute kubectl get command: MCP error -32603: Failed to get resource: Command failed: kubectl get pods -n default -o json Unable to connect to the server: EOF
הפתרון
זה המצב שבו היה ה-Mac של הבדיקה שלנו, וזה גם המצב הנפוץ ביותר: השרת עלה, רשימת הכלים חזרה, והאשכול שמאחורי ההקשר הנוכחי ב-kubeconfig אינו עונה. הריצו kubectl get pods בטרמינל; תקבלו את אותה הודעה בדיוק, וזה אומר לכם שהבעיה היא באשכול ולא בשרת ה-MCP. הפעילו את האשכול, או עברו להקשר שפועל. הניסוח המדויק משתנה לפי אופן הכשל של נקודת הקצה: פורט מת מחזיר connection refused, ואילו פורט שמקבל את החיבור אבל אין מאחוריו Kubernetes מחזיר EOF, וזה מה שקרה אצלנו.
מה רואים
Error: ENOENT: no such file or directory, open '/private/tmp/does-not-exist-mcp-verify-2026.yaml'
at Object.openSync (node:fs:561:18)
at Object.readFileSync (node:fs:445:35)הפתרון
המשתנה KUBECONFIG מצביע על קובץ שאינו קיים. גרמנו לזה בכוונה כשהצבענו על נתיב שידענו שאין בו קובץ: השרת קורס בזמן טעינת ה-kubeconfig, עוד לפני שהוא מסוגל לדבר MCP בכלל, ולכן הלקוח שלכם פשוט מדווח שהשרת מת. תקנו את הנתיב, או הסירו את KUBECONFIG לגמרי ותנו לו לחזור לברירת המחדל ~/.kube/config.
מה רואים
{
"error": "Resource nodes not found",
"status": "not_found"
}הפתרון
ביקשנו nodes עם הקשר בשם does-not-exist. הכלי ענה כאילו המשאב חסר, בעוד שהסיבה האמיתית הופיעה רק בפלט של השרת עצמו: Error in configuration: context was not found for specified context: does-not-exist. אם שאילתה חוזרת עם not_found ואתם מעבירים הקשר, בדקו קודם את האיות עם הכלי kubectl_context, שמציג את ההקשרים שקיימים בפועל ב-kubeconfig שלכם.
מה רואים
MCP error -32600: Tool 'kubectl_delete' is not allowed under the current server configuration
הפתרון
השרת הופעל במצב שאינו הרסני, עם ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS שמוגדר ל-true. הרצנו אותו כך בכוונה: רשימת הכלים יורדת מ-23 ל-18, הכלים kubectl_delete, kubectl_generic, node_management, uninstall_helm_chart ו-cleanup נעלמים, וקריאה לאחד מהם בכל זאת מחזירה את זה. זו תכונה ששווה להשתמש בה על אשכול אמיתי. הסירו את משתנה הסביבה כדי לקבל בחזרה את הסט המלא.
הפתרון
הפקודה npx שייכת ל-Node.js. אם Node לא מותקן על ה-Mac, כל לקוח בעמוד הזה ייכשל בשלב ההפעלה עוד לפני שהשרת מספיק לומר משהו. התקינו Node מ-nodejs.org, הפעילו מחדש את לקוח ה-MCP ונסו שוב. כשל מאותה משפחה קורה גם בלי kubectl: השרת עולה, אבל כל קריאת כלי נכשלת בנקודה שבה הוא מנסה להריץ את הפקודה.
שאלות נפוצות
זהו שרת מקומי שנותן לעוזר AI את משטח הפעולה של kubectl מול האשכול שלכם דרך ה-Model Context Protocol. החבילה עם הכי הרבה הורדות, mcp-server-kubernetes, רצה על ה-Mac שלכם על גבי stdio ומפעילה את הפקודה kubectl שכבר מותקנת שם, כך שכל מה שאתם יכולים לעשות עם kubectl בטרמינל, העוזר יכול לבקש בשפה פשוטה: להציג pods, לתאר deployment, לקרוא לוגים, לשנות מספר עותקים, להחיל מניפסט, להתקין chart של Helm. [5][1]
השרת הרץ חושף 23 כלים: קריאה (kubectl_get, kubectl_describe, kubectl_logs, explain_resource, list_api_resources), כתיבה (kubectl_apply, kubectl_create, kubectl_patch, kubectl_scale, kubectl_rollout, kubectl_delete), nodes וגישה (node_management, port_forward, stop_port_forward, exec_in_pod), Helm (install_helm_chart, upgrade_helm_chart, uninstall_helm_chart), הקשר ותשתית (kubectl_context, kubectl_reconnect, kubectl_generic, cleanup, ping). הטבלה למעלה היא פלט ה-tools/list החי, מילה במילה.
לא. אין למה להירשם ואין אישור גישה להדביק. מה שכן נדרש הוא תשתית: kubectl מותקנת ונמצאת ב-PATH, ו-kubeconfig עם הקשר שמצביע על אשכול שאתם כבר מצליחים להגיע אליו. אם kubectl get pods עובדת אצלכם בטרמינל, השרת יעבוד; אם לא, השרת יחזיר בדיוק את השגיאה ש-kubectl מחזירה. [5]
אימתנו שהשרת עולה, מדבר בפרוטוקול וחושף בדיוק 23 כלים, ושמרנו את הפלט הגולמי. לא אימתנו אפילו קריאה אחת מאשכול חי, כי ל-Mac של הבדיקה לא היה אשכול פעיל: ההקשר היחיד ב-kubeconfig שלו מצביע על נקודת קצה של Docker Desktop עם Kubernetes כבוי, ולכן הקריאות חזרו עם שגיאת חיבור שאפשר לקרוא למעלה, מילה במילה. שתי קריאות כן ענו, ping ו-kubectl_context, ואף אחת מהן אינה נוגעת באשכול. התייחסו לטבלת הכלים כאל מדידה, ולהתנהגות מול אשכול כאל דבר שלא נבדק כאן.
שני פרויקטים שונים עם שם כמעט זהה, והעמוד הזה עוסק בראשון, mcp-server-kubernetes של flux159: 23,344 הורדות ב-npm בשבוע שהסתיים ב-2026-08-01, רישיון MIT, כתוב ב-TypeScript, ומהווה מעטפת סביב kubectl ו-helm. השני, kubernetes-mcp-server מארגון containers, נמשך 13,437 פעמים באותו שבוע, רישיונו Apache-2.0, הוא כתוב ב-Go ומדבר ישירות עם ה-API של Kubernetes בלי צורך ב-kubectl, תומך ב-OpenShift, והוא זה שרשום במרשם ה-MCP הרשמי. פחות הורדות, יותר כוכבים, איזון אחר. [2][7][8][9][4]
כברירת מחדל מדובר בקריאה וכתיבה מלאות: kubectl_delete, ריקון nodes והסרת התקנות של helm כולם ברשימה. השרת מגיע עם שני מצבים מצומצמים יותר, ובדקנו אחד מהם: הפעלה עם ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS שמוגדר ל-true הורידה את רשימת הכלים מ-23 ל-18 וגרמה לקריאת מחיקה לחזור בסירוב, כפי שמודפס בקטע פתרון התקלות. יש גם מצב קריאה בלבד. השתמשו באחד מהם, וכוונו את השרת להקשר עם הרשאות מוגבלות ולא להקשר של מנהל אשכול. [6]
כל לקוח MCP שמסוגל להפעיל שרת stdio מקומי: Claude Desktop, Claude Code, Cursor ו-Routines כולם יכולים, וההגדרה המדויקת לכל אחד נמצאת למעלה. השרת עצמו זהה בכל לקוח; רק המקום שבו מדביקים את ההגדרה משתנה, וכל אחד מהם יורש את ה-kubeconfig שהתהליך שהוא מפעיל מסוגל לראות. [10][11][12][13]
מקורות
כל מה שבעמוד הזה שלא ראינו בעצמנו בריצה מקושר כאן, עם התאריך שבו קראנו אותו. לגבי השאר, הריצה עצמה היא הקבלה.
[1]
Latest version 4.1.2, published 2026-07-29, license MIT, maintainer flux159.
[2]
[3]
1,516 stars and a push dated 2026-07-29 at access time, per the GitHub API.
[4]
MIT License, Copyright (c) 2024 Suyog Sonwalkar.
[5]
Prerequisites: kubectl on your PATH, a valid kubeconfig, cluster access, Helm v3 optional. Also the per-client config blocks.
[6]
KUBECONFIG, KUBECONFIG_PATH, K8S_CONTEXT and K8S_NAMESPACE, plus the read-only and non-destructive modes.
[7]
13,437 downloads for the week ending 2026-08-01.
[8]
The other Kubernetes MCP server: 1,874 stars, Apache-2.0, written in Go, per the GitHub API.
[9]
Lists io.github.containers/kubernetes-mcp-server up to 0.0.66; a search for mcp-server-kubernetes returns zero results.
[10]
The official Claude Desktop quickstart and the config file location.
[11]
The claude mcp add syntax for local stdio servers, including --env KEY=value for environment variables.
[12]
[13]
How Routines runs one-click OAuth connectors and any MCP server.
העמוד הזה מתאר את Kubernetes כפי שהתנהג בריצה מתוארכת אחת על Mac אחד. גרסאות משתנות: אם משהו כאן כבר לא תואם למה שאתם רואים, תאריך הלכידה בראש העמוד אומר בן כמה הצילום.
מאחורי המדריך הזה
Routines, האפליקציה שמאחורי המדריך הזה, מריצה שרתי MCP כמו זה בלי טרמינל: כך עובדים המחברים. הפתקים שלכם נשארים קובצי markdown על ה-Mac שלכם, אין חשבון ענן לשלם, והיא עובדת גם בלי אינטרנט. להורדת Routines