Kubernetes Read Only MCP Server
A Model Context Protocol (MCP) server for safely interacting with Kubernetes clusters using read-only operations.
This MCP server was created to provide a secure way to interact with Kubernetes clusters without allowing any create, update, or delete operations. It only exposes read-only APIs to ensure your clusters remain safe while still enabling AI assistants to help you monitor and troubleshoot your Kubernetes resources.
Built with FastMCP 3.x (the standalone fastmcp framework) and the official Kubernetes Python client library. Secret values are never exposed: for any Secret, only its metadata and type are returned, never data or stringData.
Blog post and Demo
Watch the demo and read the write-up at https://vijay.eu/posts/building-my-first-mcp-server/
Features
This MCP server provides the following read-only tools. Every tool is annotated read-only (readOnlyHint=True, destructiveHint=False) and returns native structured data.
Curated tools
list_pods: List all pods in a namespace or across all namespaceslist_deployments: List all deployments in a specified namespacelist_services: List all services in a namespace or across all namespaceslist_namespaces: List all namespaces in the clusterget_events: Get Kubernetes events from the clusterget_pod_logs: Get logs from a specific podget_logs: Get logs from pods, deployments, jobs, or resources matching a label selectorlist_nodes: List all nodes in the cluster and their status
Generic tools (any kind, including CRDs)
These use the Kubernetes dynamic client, so they work for built-in kinds and Custom Resources alike. They are GET/LIST only and never mutate the cluster.
list_resource: List resources of anykind(e.g.Ingress,ConfigMap, a CRD), optionally scoped byapi_version,namespace,label_selector, andfield_selector.get_resource: Get a single resource of anykindbyname(with optionalapi_versionandnamespace).list_api_resources: Discover which resource kinds the cluster exposes and can be listed (returnsgroup_version,kind,namespaced, andverbs), so you know what to pass to the tools above.
Secret safety: even
list_resource/get_resourcewithkind="Secret"return only metadata andtype— thedataandstringDatafields are always stripped before output.
Prerequisites
- Python 3.10 or higher.
uvis installed (it providesuvx). If not, install it withpip install uv(orpipx install uv).- Kubernetes cluster up and running.
- Kubeconfig configured with a default context.
- For demo purposes, you can use kind and Docker to set up a local Kubernetes cluster quickly on your machine. Refer to this quickstart: https://kind.sigs.k8s.io/docs/user/quick-start/
General MCP Host Configuration
Different MCP Hosts (AI assistants or CLIs that support MCP) manage their MCP server configurations in different ways. Generally, you tell your MCP Host how to start the kubernetes-readonly-mcp server. This involves:
- The command to run the server. For
kubernetes-readonly-mcpthis isuvx kubernetes-readonly-mcp@latest, which usesuvxto download and run the package from PyPI. - Any necessary arguments.
- A working directory, if the host requires one.
uvx handles downloading and running kubernetes-readonly-mcp on first invocation; no separate install step is needed. The server communicates over STDIO.
Host-specific, copy-paste configuration follows below. You can find more information about the Model Context Protocol at:
- Model Context Protocol Documentation
- Example Host Documentation:
- Claude Code: MCP
- Codex CLI: MCP
- Kiro CLI: MCP Configuration
- Antigravity: Editor MCP and CLI MCP
- Claude Desktop: Connect to local MCP servers
Host Setup
1. Claude Code
Add the server with the CLI (the -- separates Claude Code's own flags from the command to run; STDIO is the default transport). Without an explicit scope, Claude Code stores this as a local, private server for the current project:
claude mcp add kubernetes-readonly-mcp -- uvx kubernetes-readonly-mcp@latest
To share the server with a project (committed to the repo), add it with project scope:
claude mcp add --scope project kubernetes-readonly-mcp -- uvx kubernetes-readonly-mcp@latest
Or create a .mcp.json at the project root:
{
"mcpServers": {
"kubernetes-readonly-mcp": {
"command": "uvx",
"args": ["kubernetes-readonly-mcp@latest"]
}
}
}
2. Codex CLI
Add the server with the CLI:
codex mcp add kubernetes-readonly-mcp -- uvx kubernetes-readonly-mcp@latest
Codex CLI and the Codex IDE extension share MCP configuration. You can also add the server directly to ~/.codex/config.toml:
[mcp_servers.kubernetes-readonly-mcp]
command = "uvx"
args = ["kubernetes-readonly-mcp@latest"]
Use codex mcp list to verify it is configured.
3. Kiro CLI
Kiro CLI is the rebranded next update of Amazon Q Developer CLI. Add the server with the CLI:
kiro-cli mcp add --name kubernetes-readonly-mcp --scope global --command uvx --args kubernetes-readonly-mcp@latest
Or configure servers in ~/.kiro/settings/mcp.json (user scope) or <project>/.kiro/settings/mcp.json (project scope):
{
"mcpServers": {
"kubernetes-readonly-mcp": {
"command": "uvx",
"args": ["kubernetes-readonly-mcp@latest"],
"disabled": false
}
}
}
If you previously used Amazon Q, migrate your old ~/.aws/amazonq/mcp.json entries to ~/.kiro/settings/mcp.json.
4. Antigravity (Google)
Antigravity Editor reads MCP servers from ~/.gemini/antigravity/mcp_config.json (on Windows, C:\Users\<USER>\.gemini\antigravity\mcp_config.json). You can open this file from the app: the "..." menu -> MCP Servers -> Manage MCP Servers -> View raw config.
Antigravity CLI v2.0+ also supports MCP. Open the CLI MCP manager with /mcp, or add the same server block to ~/.gemini/antigravity-cli/mcp_config.json for global CLI setup. For a workspace-local CLI setup, use .agents/mcp_config.json in the active project.
{
"mcpServers": {
"kubernetes-readonly-mcp": {
"command": "uvx",
"args": ["kubernetes-readonly-mcp@latest"]
}
}
}
5. Claude Desktop
Edit claude_desktop_config.json (on macOS, ~/Library/Application Support/Claude/claude_desktop_config.json; on Windows, %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"kubernetes-readonly-mcp": {
"command": "uvx",
"args": ["kubernetes-readonly-mcp@latest"]
}
}
}
Restart Claude Desktop after editing so it picks up the new server.
Verifying the setup
kubernetes-readonly-mcp is a STDIO MCP server: running it starts a process that speaks the MCP protocol over standard input/output and waits for an MCP host to connect. It does not take a tool name as a command-line argument.
To confirm uvx can fetch and launch the package, run:
uvx kubernetes-readonly-mcp@latest
The process will start and wait silently for an MCP client (press Ctrl+C to stop). It will not print a namespace list — tools are invoked by an MCP host, not from the shell. Beyond that, verification depends on your MCP host: after configuration, the server and its tools should appear in the host's interface, where you can invoke them.
Example Prompts
- "Get list of pods from my kubernetes cluster"
- "Are there any failing pods? Debug why they are failing"
- "Show me the logs from the nginx deployment"
- "List all services in the default namespace"
- "List all ingresses across every namespace" (uses the generic
list_resourcetool withkind="Ingress",api_version="networking.k8s.io/v1")
License
Apache License 2.0
Disclaimer
This is an experimental project and not production-ready. Use it at your own discretion.
Metadata
Release files for kubernetes-readonly-mcp 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| kubernetes_readonly_mcp-0.2.1.tar.gz | 25.8 kB | With provenance | Details for kubernetes_readonly_mcp-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| kubernetes_readonly_mcp-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for kubernetes_readonly_mcp-0.2.1-py3-none-any.whl |
Total release size: 45.8 kB
Release files / kubernetes_readonly_mcp-0.2.1.tar.gz
| Download URL | kubernetes_readonly_mcp-0.2.1.tar.gz |
|---|---|
| Size | 25.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
abe5a21eacbdb923ee1e63a15e8e6ac5148b18d50d9a444dcf0034bb0ae888d5
|
|
BLAKE2b-256 checksum How to use checksums |
91c5342d478f6e1e492f2a83a3624c4cd8105cb57c3d35c2494c7be575d8ccc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / kubernetes_readonly_mcp-0.2.1-py3-none-any.whl
| Download URL | kubernetes_readonly_mcp-0.2.1-py3-none-any.whl |
|---|---|
| Size | 19.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09c67a79a5db771257886801ccf1febd027388fd7676b1602f146a0acd4091e3
|
|
BLAKE2b-256 checksum How to use checksums |
3cc12eede17f22bb9759ac28f642c420cfe8fc326fb0a19bd5e79826adb4c8c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logSecurity for kubernetes-readonly-mcp 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for kubernetes_readonly_mcp-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.