Kairon — Claude Code MCP server: inspect VMs, network policy
An MCP server that lets an agent read Kairon virtual machines, network policies and VM-edge traffic. Read-only by default.
claude mcp add --env KAIRON_KUBE_URL=<KAIRON_KUBE_URL> --env KAIRON_KUBE_TOKEN=<KAIRON_KUBE_TOKEN> --env KAIRON_KUBE_CA=<KAIRON_KUBE_CA> --env KAIRON_KUBE_INSECURE=<KAIRON_KUBE_INSECURE> --env KAIRON_UI_URL=<KAIRON_UI_URL> --transport stdio kairon -- docker run -i --rm -e KAIRON_KUBE_URL -e KAIRON_KUBE_TOKEN -e KAIRON_KUBE_CA -e KAIRON_KUBE_INSECURE -e KAIRON_UI_URL ghcr.io/zyvorai/kairon-mcp:v0.10.2What Kairon does
The server exposes a Kairon cluster to your agent through the Kubernetes API. The agent can ask about machine state, network policies and the flows crossing each VM's edge. Writes stay off unless you grant them.
It runs as the container ghcr.io/zyvorai/kairon-mcp:v0.10.2 over stdio. Point it at the cluster with KAIRON_KUBE_URL, KAIRON_KUBE_TOKEN and KAIRON_KUBE_CA; KAIRON_KUBE_INSECURE covers a self-signed certificate, and KAIRON_UI_URL ties it to the dashboard. No docker on the host or a token without cluster access and the server simply won't start, so check both first.
Your token and API address end up in the MCP client config. Create a dedicated read-only account rather than reusing an admin kubeconfig. Setup differs between clients only in the wrapper: a claude mcp add call in one, a JSON block in the settings of another.
What it helps with
- see what runs on Kairon machines without opening the dashboard
- check cluster network policies before changing anything
- trace which flows cross a single VM's edge
- compare actual machine state against what the agent assumes
- give an agent cluster access with no write rights
Example prompts for the agent
- List every machine in the
prodnamespace and its current state - Which network policies apply to the
web-01machine right now? - Describe the flows at the edge of VM
db-02over the last hour
How to install Kairon
Platform CLI
claude mcp add --env KAIRON_KUBE_URL=<KAIRON_KUBE_URL> --env KAIRON_KUBE_TOKEN=<KAIRON_KUBE_TOKEN> --env KAIRON_KUBE_CA=<KAIRON_KUBE_CA> --env KAIRON_KUBE_INSECURE=<KAIRON_KUBE_INSECURE> --env KAIRON_UI_URL=<KAIRON_UI_URL> --transport stdio kairon -- docker run -i --rm -e KAIRON_KUBE_URL -e KAIRON_KUBE_TOKEN -e KAIRON_KUBE_CA -e KAIRON_KUBE_INSECURE -e KAIRON_UI_URL ghcr.io/zyvorai/kairon-mcp:v0.10.2Replace <…> with your own values. 7 more environment variables are in the server README
Platform CLI
codex mcp add kairon --env KAIRON_KUBE_URL=<KAIRON_KUBE_URL> --env KAIRON_KUBE_TOKEN=<KAIRON_KUBE_TOKEN> --env KAIRON_KUBE_CA=<KAIRON_KUBE_CA> --env KAIRON_KUBE_INSECURE=<KAIRON_KUBE_INSECURE> --env KAIRON_UI_URL=<KAIRON_UI_URL> -- docker run -i --rm -e KAIRON_KUBE_URL -e KAIRON_KUBE_TOKEN -e KAIRON_KUBE_CA -e KAIRON_KUBE_INSECURE -e KAIRON_UI_URL ghcr.io/zyvorai/kairon-mcp:v0.10.2Replace <…> with your own values. 7 more environment variables are in the server README
Config file
{
"mcpServers": {
"kairon": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"KAIRON_KUBE_URL",
"-e",
"KAIRON_KUBE_TOKEN",
"-e",
"KAIRON_KUBE_CA",
"-e",
"KAIRON_KUBE_INSECURE",
"-e",
"KAIRON_UI_URL",
"ghcr.io/zyvorai/kairon-mcp:v0.10.2"
],
"env": {
"KAIRON_KUBE_URL": "<KAIRON_KUBE_URL>",
"KAIRON_KUBE_TOKEN": "<KAIRON_KUBE_TOKEN>",
"KAIRON_KUBE_CA": "<KAIRON_KUBE_CA>",
"KAIRON_KUBE_INSECURE": "<KAIRON_KUBE_INSECURE>",
"KAIRON_UI_URL": "<KAIRON_UI_URL>"
}
}
}
}Replace <…> with your own values. 7 more environment variables are in the server README
Config file
{
"servers": {
"kairon": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"KAIRON_KUBE_URL",
"-e",
"KAIRON_KUBE_TOKEN",
"-e",
"KAIRON_KUBE_CA",
"-e",
"KAIRON_KUBE_INSECURE",
"-e",
"KAIRON_UI_URL",
"ghcr.io/zyvorai/kairon-mcp:v0.10.2"
],
"env": {
"KAIRON_KUBE_URL": "<KAIRON_KUBE_URL>",
"KAIRON_KUBE_TOKEN": "<KAIRON_KUBE_TOKEN>",
"KAIRON_KUBE_CA": "<KAIRON_KUBE_CA>",
"KAIRON_KUBE_INSECURE": "<KAIRON_KUBE_INSECURE>",
"KAIRON_UI_URL": "<KAIRON_UI_URL>"
}
}
}
}Replace <…> with your own values. 7 more environment variables are in the server README
Platform CLI
gemini mcp add -e KAIRON_KUBE_URL=<KAIRON_KUBE_URL> -e KAIRON_KUBE_TOKEN=<KAIRON_KUBE_TOKEN> -e KAIRON_KUBE_CA=<KAIRON_KUBE_CA> -e KAIRON_KUBE_INSECURE=<KAIRON_KUBE_INSECURE> -e KAIRON_UI_URL=<KAIRON_UI_URL> kairon docker run -i --rm -e KAIRON_KUBE_URL -e KAIRON_KUBE_TOKEN -e KAIRON_KUBE_CA -e KAIRON_KUBE_INSECURE -e KAIRON_UI_URL ghcr.io/zyvorai/kairon-mcp:v0.10.2Replace <…> with your own values. 7 more environment variables are in the server README
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Kairon
How do I install Kairon in Claude Code?
Run `claude mcp add --env KAIRON_KUBE_URL=<KAIRON_KUBE_URL> --env KAIRON_KUBE_TOKEN=<KAIRON_KUBE_TOKEN> --env KAIRON_KUBE_CA=<KAIRON_KUBE_CA> --env KAIRON_KUBE_INSECURE=<KAIRON_KUBE_INSECURE> --env KAIRON_UI_URL=<KAIRON_UI_URL> --transport stdio kairon -- docker run -i --rm -e KAIRON_KUBE_URL -e KAIRON_KUBE_TOKEN -e KAIRON_KUBE_CA -e KAIRON_KUBE_INSECURE -e KAIRON_UI_URL ghcr.io/zyvorai/kairon-mcp:v0.10.2`, replacing the placeholders with your own values.
What does Kairon do?
It gives an agent read access to Kairon virtual machines, their network policies and VM-edge flows via the Kubernetes API.
Does Kairon let an agent change the cluster?
Read-only is the default mode. Handing over more than that is a deliberate choice: start the MCP server with a token that can only read.