Kubernetes Ephemeral Job
mcpotherRuns a command in a throwaway Kubernetes pod and returns exit code, output and artifacts.
run it
on your own machines, one way per deploy method#!/usr/bin/env bash
# k8s-ephemeral-job (io.github.inhuman/mcp-k8s-ephemeral-job), recipe docker (generated).
# Generated by Hub for toolset "my-agent"; started by mcp-my-agent-k8s-ephemeral-job.service.
set -euo pipefail
export HOST=127.0.0.1 PORT=8101
exec docker run --rm --name mcp-my-agent-k8s-ephemeral-job -p 127.0.0.1:${PORT}:8000 -e MCP_K8S_ALLOWED_IMAGES -e MCP_K8S_KUBECONFIG -e MCP_K8S_NAMESPACE -e MCP_K8S_TRANSPORT -e MCP_K8S_DEFAULT_TIMEOUT_S -e MCP_K8S_MAX_TIMEOUT_S -e MCP_K8S_MAX_OUTPUT_BYTES -e MCP_K8S_MAX_ARTIFACT_BYTES -e MCP_K8S_MAX_CONCURRENT -e MCP_K8S_DEFAULT_CPU -e MCP_K8S_DEFAULT_MEMORY -e MCP_K8S_SIDECAR_IMAGE -e MCP_K8S_CLONE_IMAGE -e MCP_K8S_CLONE_SECRET -e MCP_K8S_CACHE_PVC -e MCP_K8S_CACHE_MOUNT_PATH -e MCP_K8S_JOB_EXTRA_ENV -e MCP_K8S_AUTH_TOKEN docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
[Unit]
Description=MCP server k8s-ephemeral-job (toolset my-agent), generated by Hub
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=simple
User=mcp
Group=mcp
SupplementaryGroups=docker
EnvironmentFile=/etc/mcp/my-agent.env
Environment=HOME=/var/lib/mcp/k8s-ephemeral-job
WorkingDirectory=/var/lib/mcp/k8s-ephemeral-job
ExecStart=/opt/mcp/my-agent/bin/k8s-ephemeral-job.sh
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/mcp/k8s-ephemeral-job
[Install]
WantedBy=multi-user.target
docker run --rm -p 127.0.0.1:8101:8000 -e MCP_K8S_ALLOWED_IMAGES -e MCP_K8S_KUBECONFIG -e MCP_K8S_NAMESPACE -e MCP_K8S_TRANSPORT -e MCP_K8S_DEFAULT_TIMEOUT_S -e MCP_K8S_MAX_TIMEOUT_S -e MCP_K8S_MAX_OUTPUT_BYTES -e MCP_K8S_MAX_ARTIFACT_BYTES -e MCP_K8S_MAX_CONCURRENT -e MCP_K8S_DEFAULT_CPU -e MCP_K8S_DEFAULT_MEMORY -e MCP_K8S_SIDECAR_IMAGE -e MCP_K8S_CLONE_IMAGE -e MCP_K8S_CLONE_SECRET -e MCP_K8S_CACHE_PVC -e MCP_K8S_CACHE_MOUNT_PATH -e MCP_K8S_JOB_EXTRA_ENV -e MCP_K8S_AUTH_TOKEN docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
# Generated by Hub for toolset "my-agent" (2026-10-18T20:57:00+00:00).
# Each package server runs behind a stdio->HTTP bridge and listens on localhost only.
# cp .env.example .env # fill the ${VAR}s
# docker compose up -d && bash smoke.sh
# Remote servers are not here: clients reach them directly (see clients/).
name: mcp-my-agent
services:
k8s-ephemeral-job:
image: docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
ports:
- 127.0.0.1:8101:8000
restart: unless-stopped
x-note: 'CHANGE_ME: check the image''s README for its transport and port; this assumes streamable
HTTP at :8000/mcp. If it speaks stdio only, use it from clients/mcp.json as a `docker run -i` command
instead.'
environment:
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}
volumes:
npm-cache: {}
uv-cache: {}
# Generated by Hub for toolset "my-agent" (2026-10-18T20:57:00+00:00).
# kubectl create namespace mcp
# kubectl -n mcp create secret generic mcp-credentials --from-env-file=.env
# kubectl apply -f kubernetes.yaml
# Services are cluster-internal: <name>.mcp.svc.cluster.local:8000/mcp. Put an ingress
# with auth in front before exposing any of them.
apiVersion: v1
kind: Namespace
metadata:
name: mcp
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-ephemeral-job
namespace: mcp
labels: &id001
app: k8s-ephemeral-job
spec:
replicas: 1
selector:
matchLabels: *id001
template:
metadata:
labels: *id001
spec:
containers:
- name: k8s-ephemeral-job
image: docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
ports:
- containerPort: 8000
name: http
env:
- name: MCP_K8S_ALLOWED_IMAGES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_ALLOWED_IMAGES
- name: MCP_K8S_KUBECONFIG
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_KUBECONFIG
- name: MCP_K8S_NAMESPACE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_NAMESPACE
- name: MCP_K8S_TRANSPORT
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_TRANSPORT
- name: MCP_K8S_DEFAULT_TIMEOUT_S
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_TIMEOUT_S
- name: MCP_K8S_MAX_TIMEOUT_S
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_TIMEOUT_S
- name: MCP_K8S_MAX_OUTPUT_BYTES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_OUTPUT_BYTES
- name: MCP_K8S_MAX_ARTIFACT_BYTES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_ARTIFACT_BYTES
- name: MCP_K8S_MAX_CONCURRENT
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_CONCURRENT
- name: MCP_K8S_DEFAULT_CPU
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_CPU
- name: MCP_K8S_DEFAULT_MEMORY
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_MEMORY
- name: MCP_K8S_SIDECAR_IMAGE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_SIDECAR_IMAGE
- name: MCP_K8S_CLONE_IMAGE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CLONE_IMAGE
- name: MCP_K8S_CLONE_SECRET
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CLONE_SECRET
- name: MCP_K8S_CACHE_PVC
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CACHE_PVC
- name: MCP_K8S_CACHE_MOUNT_PATH
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CACHE_MOUNT_PATH
- name: MCP_K8S_JOB_EXTRA_ENV
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_JOB_EXTRA_ENV
- name: MCP_K8S_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_AUTH_TOKEN
---
apiVersion: v1
kind: Service
metadata:
name: k8s-ephemeral-job
namespace: mcp
spec:
selector:
app: k8s-ephemeral-job
ports:
- port: 8000
targetPort: http
name: http
# Generated by Hub for toolset "my-agent" (2026-10-18T20:57:00+00:00).
# Credentials come from the Secret 'mcp-credentials' (kubectl create secret generic ... --from-env-file=.env).
# Each server under `servers` is one Deployment + Service; the keys after it configure
# upstream charts a worker verified.
servers:
k8s-ephemeral-job:
enabled: true
replicas: 1
port: 8000
path: /mcp
container:
name: k8s-ephemeral-job
image: docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
ports:
- containerPort: 8000
name: http
env:
- name: MCP_K8S_ALLOWED_IMAGES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_ALLOWED_IMAGES
- name: MCP_K8S_KUBECONFIG
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_KUBECONFIG
- name: MCP_K8S_NAMESPACE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_NAMESPACE
- name: MCP_K8S_TRANSPORT
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_TRANSPORT
- name: MCP_K8S_DEFAULT_TIMEOUT_S
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_TIMEOUT_S
- name: MCP_K8S_MAX_TIMEOUT_S
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_TIMEOUT_S
- name: MCP_K8S_MAX_OUTPUT_BYTES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_OUTPUT_BYTES
- name: MCP_K8S_MAX_ARTIFACT_BYTES
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_ARTIFACT_BYTES
- name: MCP_K8S_MAX_CONCURRENT
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_MAX_CONCURRENT
- name: MCP_K8S_DEFAULT_CPU
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_CPU
- name: MCP_K8S_DEFAULT_MEMORY
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_DEFAULT_MEMORY
- name: MCP_K8S_SIDECAR_IMAGE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_SIDECAR_IMAGE
- name: MCP_K8S_CLONE_IMAGE
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CLONE_IMAGE
- name: MCP_K8S_CLONE_SECRET
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CLONE_SECRET
- name: MCP_K8S_CACHE_PVC
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CACHE_PVC
- name: MCP_K8S_CACHE_MOUNT_PATH
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_CACHE_MOUNT_PATH
- name: MCP_K8S_JOB_EXTRA_ENV
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_JOB_EXTRA_ENV
- name: MCP_K8S_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: mcp-credentials
key: MCP_K8S_AUTH_TOKEN
# helm install my-agent helm/my-agent -n mcp
in the cloud
one click: the provider's deploy form opens filled in, in your own account- koyeb
-
The form opens with CHANGE_ME for each value you supply: MCP_K8S_ALLOWED_IMAGES, MCP_K8S_KUBECONFIG, MCP_K8S_NAMESPACE, MCP_K8S_TRANSPORT, MCP_K8S_DEFAULT_TIMEOUT_S, MCP_K8S_MAX_TIMEOUT_S, MCP_K8S_MAX_OUTPUT_BYTES, MCP_K8S_MAX_ARTIFACT_BYTES, MCP_K8S_MAX_CONCURRENT, MCP_K8S_DEFAULT_CPU, MCP_K8S_DEFAULT_MEMORY, MCP_K8S_SIDECAR_IMAGE, MCP_K8S_CLONE_IMAGE, MCP_K8S_CLONE_SECRET, MCP_K8S_CACHE_PVC, MCP_K8S_CACHE_MOUNT_PATH, MCP_K8S_JOB_EXTRA_ENV, MCP_K8S_AUTH_TOKEN. Fill them in before you deploy.
Clients connect to the service's https://…koyeb.app address plus /mcp.
- azure
-
A Container Apps environment with one app per server, each with HTTPS ingress and one replica. The portal asks for each value you supply as a secure parameter; the deployment's outputs list the endpoints.
connect to it
copy what your client needsdocker run -i --rm -e MCP_K8S_ALLOWED_IMAGES -e MCP_K8S_KUBECONFIG -e MCP_K8S_NAMESPACE -e MCP_K8S_TRANSPORT -e MCP_K8S_DEFAULT_TIMEOUT_S -e MCP_K8S_MAX_TIMEOUT_S -e MCP_K8S_MAX_OUTPUT_BYTES -e MCP_K8S_MAX_ARTIFACT_BYTES -e MCP_K8S_MAX_CONCURRENT -e MCP_K8S_DEFAULT_CPU -e MCP_K8S_DEFAULT_MEMORY -e MCP_K8S_SIDECAR_IMAGE -e MCP_K8S_CLONE_IMAGE -e MCP_K8S_CLONE_SECRET -e MCP_K8S_CACHE_PVC -e MCP_K8S_CACHE_MOUNT_PATH -e MCP_K8S_JOB_EXTRA_ENV -e MCP_K8S_AUTH_TOKEN docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
{
"mcpServers": {
"k8s-ephemeral-job": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_K8S_ALLOWED_IMAGES",
"-e",
"MCP_K8S_KUBECONFIG",
"-e",
"MCP_K8S_NAMESPACE",
"-e",
"MCP_K8S_TRANSPORT",
"-e",
"MCP_K8S_DEFAULT_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_OUTPUT_BYTES",
"-e",
"MCP_K8S_MAX_ARTIFACT_BYTES",
"-e",
"MCP_K8S_MAX_CONCURRENT",
"-e",
"MCP_K8S_DEFAULT_CPU",
"-e",
"MCP_K8S_DEFAULT_MEMORY",
"-e",
"MCP_K8S_SIDECAR_IMAGE",
"-e",
"MCP_K8S_CLONE_IMAGE",
"-e",
"MCP_K8S_CLONE_SECRET",
"-e",
"MCP_K8S_CACHE_PVC",
"-e",
"MCP_K8S_CACHE_MOUNT_PATH",
"-e",
"MCP_K8S_JOB_EXTRA_ENV",
"-e",
"MCP_K8S_AUTH_TOKEN",
"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}"
}
}
}
}
#!/usr/bin/env bash
# Registers every server with Claude Code (run once; `claude mcp list` to check).
set -euo pipefail
set -a; [ -f .env ] && source .env; set +a
claude mcp add 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 -e MCP_K8S_ALLOWED_IMAGES -e MCP_K8S_KUBECONFIG -e MCP_K8S_NAMESPACE -e MCP_K8S_TRANSPORT -e MCP_K8S_DEFAULT_TIMEOUT_S -e MCP_K8S_MAX_TIMEOUT_S -e MCP_K8S_MAX_OUTPUT_BYTES -e MCP_K8S_MAX_ARTIFACT_BYTES -e MCP_K8S_MAX_CONCURRENT -e MCP_K8S_DEFAULT_CPU -e MCP_K8S_DEFAULT_MEMORY -e MCP_K8S_SIDECAR_IMAGE -e MCP_K8S_CLONE_IMAGE -e MCP_K8S_CLONE_SECRET -e MCP_K8S_CACHE_PVC -e MCP_K8S_CACHE_MOUNT_PATH -e MCP_K8S_JOB_EXTRA_ENV -e MCP_K8S_AUTH_TOKEN docker.io/idconstruct/mcp-k8s-ephemeral-job:v0.7.1
{
"mcpServers": {
"k8s-ephemeral-job": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_K8S_ALLOWED_IMAGES",
"-e",
"MCP_K8S_KUBECONFIG",
"-e",
"MCP_K8S_NAMESPACE",
"-e",
"MCP_K8S_TRANSPORT",
"-e",
"MCP_K8S_DEFAULT_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_OUTPUT_BYTES",
"-e",
"MCP_K8S_MAX_ARTIFACT_BYTES",
"-e",
"MCP_K8S_MAX_CONCURRENT",
"-e",
"MCP_K8S_DEFAULT_CPU",
"-e",
"MCP_K8S_DEFAULT_MEMORY",
"-e",
"MCP_K8S_SIDECAR_IMAGE",
"-e",
"MCP_K8S_CLONE_IMAGE",
"-e",
"MCP_K8S_CLONE_SECRET",
"-e",
"MCP_K8S_CACHE_PVC",
"-e",
"MCP_K8S_CACHE_MOUNT_PATH",
"-e",
"MCP_K8S_JOB_EXTRA_ENV",
"-e",
"MCP_K8S_AUTH_TOKEN",
"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": {
"k8s-ephemeral-job": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_K8S_ALLOWED_IMAGES",
"-e",
"MCP_K8S_KUBECONFIG",
"-e",
"MCP_K8S_NAMESPACE",
"-e",
"MCP_K8S_TRANSPORT",
"-e",
"MCP_K8S_DEFAULT_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_TIMEOUT_S",
"-e",
"MCP_K8S_MAX_OUTPUT_BYTES",
"-e",
"MCP_K8S_MAX_ARTIFACT_BYTES",
"-e",
"MCP_K8S_MAX_CONCURRENT",
"-e",
"MCP_K8S_DEFAULT_CPU",
"-e",
"MCP_K8S_DEFAULT_MEMORY",
"-e",
"MCP_K8S_SIDECAR_IMAGE",
"-e",
"MCP_K8S_CLONE_IMAGE",
"-e",
"MCP_K8S_CLONE_SECRET",
"-e",
"MCP_K8S_CACHE_PVC",
"-e",
"MCP_K8S_CACHE_MOUNT_PATH",
"-e",
"MCP_K8S_JOB_EXTRA_ENV",
"-e",
"MCP_K8S_AUTH_TOKEN",
"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}"
}
}
}
}
name: my-agent target: local servers: - hub: io.github.inhuman/mcp-k8s-ephemeral-job
- not probed yet: tools unpinned, ingest lists them