Runs a command in a throwaway Kubernetes pod and returns exit code, output and artifacts.
Connect Runs on your machine
claude mcp add mcp-k8s-ephemeral-job -e MCP_K8S_ALLOWED_IMAGES=<MCP_K8S_ALLOWED_IMAGES> -e MCP_K8S_KUBECONFIG=<MCP_K8S_KUBECONFIG> -e MCP_K8S_NAMESPACE=<MCP_K8S_NAMESPACE> -e MCP_K8S_TRANSPORT=<MCP_K8S_TRANSPORT> -e MCP_K8S_DEFAULT_TIMEOUT_S=<MCP_K8S_DEFAULT_TIMEOUT_S> -e MCP_K8S_MAX_TIMEOUT_S=<MCP_K8S_MAX_TIMEOUT_S> -e MCP_K8S_MAX_OUTPUT_BYTES=<MCP_K8S_MAX_OUTPUT_BYTES> -e MCP_K8S_MAX_ARTIFACT_BYTES=<MCP_K8S_MAX_ARTIFACT_BYTES> -e MCP_K8S_MAX_CONCURRENT=<MCP_K8S_MAX_CONCURRENT> -e MCP_K8S_DEFAULT_CPU=<MCP_K8S_DEFAULT_CPU> -e MCP_K8S_DEFAULT_MEMORY=<MCP_K8S_DEFAULT_MEMORY> -e MCP_K8S_SIDECAR_IMAGE=<MCP_K8S_SIDECAR_IMAGE> -e MCP_K8S_CLONE_IMAGE=<MCP_K8S_CLONE_IMAGE> -e MCP_K8S_CLONE_SECRET=<MCP_K8S_CLONE_SECRET> -e MCP_K8S_CACHE_PVC=<MCP_K8S_CACHE_PVC> -e MCP_K8S_CACHE_MOUNT_PATH=<MCP_K8S_CACHE_MOUNT_PATH> -e MCP_K8S_JOB_EXTRA_ENV=<MCP_K8S_JOB_EXTRA_ENV> -e MCP_K8S_AUTH_TOKEN=<MCP_K8S_AUTH_TOKEN> -- docker run -i --rm docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
{
"mcpServers": {
"mcp-k8s-ephemeral-job": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1"
],
"env": {
"MCP_K8S_ALLOWED_IMAGES": "<MCP_K8S_ALLOWED_IMAGES>",
"MCP_K8S_KUBECONFIG": "<MCP_K8S_KUBECONFIG>",
"MCP_K8S_NAMESPACE": "<MCP_K8S_NAMESPACE>",
"MCP_K8S_TRANSPORT": "<MCP_K8S_TRANSPORT>",
"MCP_K8S_DEFAULT_TIMEOUT_S": "<MCP_K8S_DEFAULT_TIMEOUT_S>",
"MCP_K8S_MAX_TIMEOUT_S": "<MCP_K8S_MAX_TIMEOUT_S>",
"MCP_K8S_MAX_OUTPUT_BYTES": "<MCP_K8S_MAX_OUTPUT_BYTES>",
"MCP_K8S_MAX_ARTIFACT_BYTES": "<MCP_K8S_MAX_ARTIFACT_BYTES>",
"MCP_K8S_MAX_CONCURRENT": "<MCP_K8S_MAX_CONCURRENT>",
"MCP_K8S_DEFAULT_CPU": "<MCP_K8S_DEFAULT_CPU>",
"MCP_K8S_DEFAULT_MEMORY": "<MCP_K8S_DEFAULT_MEMORY>",
"MCP_K8S_SIDECAR_IMAGE": "<MCP_K8S_SIDECAR_IMAGE>",
"MCP_K8S_CLONE_IMAGE": "<MCP_K8S_CLONE_IMAGE>",
"MCP_K8S_CLONE_SECRET": "<MCP_K8S_CLONE_SECRET>",
"MCP_K8S_CACHE_PVC": "<MCP_K8S_CACHE_PVC>",
"MCP_K8S_CACHE_MOUNT_PATH": "<MCP_K8S_CACHE_MOUNT_PATH>",
"MCP_K8S_JOB_EXTRA_ENV": "<MCP_K8S_JOB_EXTRA_ENV>",
"MCP_K8S_AUTH_TOKEN": "<MCP_K8S_AUTH_TOKEN>"
}
}
}
}
{
"mcpServers": {
"mcp-k8s-ephemeral-job": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1"
],
"env": {
"MCP_K8S_ALLOWED_IMAGES": "<MCP_K8S_ALLOWED_IMAGES>",
"MCP_K8S_KUBECONFIG": "<MCP_K8S_KUBECONFIG>",
"MCP_K8S_NAMESPACE": "<MCP_K8S_NAMESPACE>",
"MCP_K8S_TRANSPORT": "<MCP_K8S_TRANSPORT>",
"MCP_K8S_DEFAULT_TIMEOUT_S": "<MCP_K8S_DEFAULT_TIMEOUT_S>",
"MCP_K8S_MAX_TIMEOUT_S": "<MCP_K8S_MAX_TIMEOUT_S>",
"MCP_K8S_MAX_OUTPUT_BYTES": "<MCP_K8S_MAX_OUTPUT_BYTES>",
"MCP_K8S_MAX_ARTIFACT_BYTES": "<MCP_K8S_MAX_ARTIFACT_BYTES>",
"MCP_K8S_MAX_CONCURRENT": "<MCP_K8S_MAX_CONCURRENT>",
"MCP_K8S_DEFAULT_CPU": "<MCP_K8S_DEFAULT_CPU>",
"MCP_K8S_DEFAULT_MEMORY": "<MCP_K8S_DEFAULT_MEMORY>",
"MCP_K8S_SIDECAR_IMAGE": "<MCP_K8S_SIDECAR_IMAGE>",
"MCP_K8S_CLONE_IMAGE": "<MCP_K8S_CLONE_IMAGE>",
"MCP_K8S_CLONE_SECRET": "<MCP_K8S_CLONE_SECRET>",
"MCP_K8S_CACHE_PVC": "<MCP_K8S_CACHE_PVC>",
"MCP_K8S_CACHE_MOUNT_PATH": "<MCP_K8S_CACHE_MOUNT_PATH>",
"MCP_K8S_JOB_EXTRA_ENV": "<MCP_K8S_JOB_EXTRA_ENV>",
"MCP_K8S_AUTH_TOKEN": "<MCP_K8S_AUTH_TOKEN>"
}
}
}
}
{
"servers": {
"mcp-k8s-ephemeral-job": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1"
],
"env": {
"MCP_K8S_ALLOWED_IMAGES": "<MCP_K8S_ALLOWED_IMAGES>",
"MCP_K8S_KUBECONFIG": "<MCP_K8S_KUBECONFIG>",
"MCP_K8S_NAMESPACE": "<MCP_K8S_NAMESPACE>",
"MCP_K8S_TRANSPORT": "<MCP_K8S_TRANSPORT>",
"MCP_K8S_DEFAULT_TIMEOUT_S": "<MCP_K8S_DEFAULT_TIMEOUT_S>",
"MCP_K8S_MAX_TIMEOUT_S": "<MCP_K8S_MAX_TIMEOUT_S>",
"MCP_K8S_MAX_OUTPUT_BYTES": "<MCP_K8S_MAX_OUTPUT_BYTES>",
"MCP_K8S_MAX_ARTIFACT_BYTES": "<MCP_K8S_MAX_ARTIFACT_BYTES>",
"MCP_K8S_MAX_CONCURRENT": "<MCP_K8S_MAX_CONCURRENT>",
"MCP_K8S_DEFAULT_CPU": "<MCP_K8S_DEFAULT_CPU>",
"MCP_K8S_DEFAULT_MEMORY": "<MCP_K8S_DEFAULT_MEMORY>",
"MCP_K8S_SIDECAR_IMAGE": "<MCP_K8S_SIDECAR_IMAGE>",
"MCP_K8S_CLONE_IMAGE": "<MCP_K8S_CLONE_IMAGE>",
"MCP_K8S_CLONE_SECRET": "<MCP_K8S_CLONE_SECRET>",
"MCP_K8S_CACHE_PVC": "<MCP_K8S_CACHE_PVC>",
"MCP_K8S_CACHE_MOUNT_PATH": "<MCP_K8S_CACHE_MOUNT_PATH>",
"MCP_K8S_JOB_EXTRA_ENV": "<MCP_K8S_JOB_EXTRA_ENV>",
"MCP_K8S_AUTH_TOKEN": "<MCP_K8S_AUTH_TOKEN>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
MCP_K8S_ALLOWED_IMAGESRequired | Strict image allowlist (CSV). Empty means every call is rejected, so this must be set. |
MCP_K8S_KUBECONFIGOptional | Path to the kubeconfig inside the container. Empty = use in-cluster credentials. |
MCP_K8S_NAMESPACEOptional | Namespace the ephemeral pods are created in. Needs a Role/RoleBinding for jobs and pods. |
MCP_K8S_TRANSPORTOptional | MCP transport: stdio | http | sse. Must be 'stdio' for direct docker/stdio use. |
MCP_K8S_DEFAULT_TIMEOUT_SOptional | Default wall-clock timeout per job, seconds. |
MCP_K8S_MAX_TIMEOUT_SOptional | Maximum wall-clock timeout a caller may request, seconds. |
MCP_K8S_MAX_OUTPUT_BYTESOptional | Cap on combined stdout/stderr before truncation. |
MCP_K8S_MAX_ARTIFACT_BYTESOptional | Cap on the total size of returned artifacts. |
MCP_K8S_MAX_CONCURRENTOptional | Maximum ephemeral pods running at the same time. |
MCP_K8S_DEFAULT_CPUOptional | Pod CPU request; limits come from the caller or the namespace LimitRange. |
MCP_K8S_DEFAULT_MEMORYOptional | Pod memory request; limits come from the caller or the namespace LimitRange. |
MCP_K8S_SIDECAR_IMAGEOptional | Helper image used to inject input files and collect artifacts. |
MCP_K8S_CLONE_IMAGEOptional | Image carrying git for the clone init container. Empty disables the clone field. |
MCP_K8S_CLONE_SECRETOptional, secret | Secret with git tokens, mounted only on the cloner. Empty disables the clone field. |
MCP_K8S_CACHE_PVCOptional | Existing PVC mounted into every job pod as a shared cache. Empty = no cache. |
MCP_K8S_CACHE_MOUNT_PATHOptional | Where the cache PVC is mounted, e.g. /go/pkg/mod. Empty = no cache. |
MCP_K8S_JOB_EXTRA_ENVOptional | JSON object of env vars added to every job pod; caller keys win on collision. |
MCP_K8S_AUTH_TOKENOptional, secret | Optional X-MCP-AUTH token required on every request (http/sse transports only). |
Details
| Package | docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1 (OCI, stdio) |
| First published | 20 Jul 2026 |
| Last updated | 20 Jul 2026 |
| Registry name | io.github.inhuman/mcp-k8s-ephemeral-job |
More cloud and devops servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
