Kubernetes Provider¶
The K8s provider automatically manages kubectl port-forward connections to your Unblu deployment. This is the recommended configuration for internal/development deployments.
Prerequisites¶
kubectlinstalled and in PATH- Authenticated to your K8s cluster (
kubectl auth loginor valid kubeconfig) - Permissions to access services in the target namespace
The provider will check authentication before starting port-forward and provide helpful error messages if something is misconfigured.
Configuration¶
K8s environments are configured in ~/.unblu-mcp/k8s_environments.yaml:
environments:
dev:
local_port: 8084
namespace: unblu-dev
service: haproxy
service_port: 8080
api_path: /app/rest/v4
staging:
local_port: 8085
namespace: unblu-staging
service: haproxy
service_port: 8080
api_path: /app/rest/v4
prod:
local_port: 8086
namespace: unblu-prod
service: haproxy
service_port: 8080
api_path: /app/rest/v4
Configuration Options¶
| Field | Required | Description |
|---|---|---|
local_port |
Yes | Local port for the port-forward |
namespace |
Yes | Kubernetes namespace |
service |
Yes | Service name to forward to |
service_port |
No | Service port (default: 8080) |
api_path |
No | API path prefix (default: /app/rest/v4) |
Usage¶
Command Line¶
# Use the dev environment
unblu-mcp --provider k8s --environment dev
# Use a custom config file
unblu-mcp --provider k8s --environment my-env --k8s-config /path/to/config.yaml
Programmatic¶
from unblu_mcp import create_server, K8sConnectionProvider
# Connect to a K8s environment (starts kubectl port-forward automatically)
provider = K8sConnectionProvider(environment="dev")
server = create_server(provider=provider)
With custom environments:
from unblu_mcp import K8sConnectionProvider, K8sEnvironmentConfig
environments = {
"custom": K8sEnvironmentConfig(
name="custom",
local_port=9000,
namespace="my-namespace",
service="my-service",
)
}
provider = K8sConnectionProvider(
environment="custom",
environments=environments,
)
How It Works¶
- On startup: The provider checks if the configured local port is already in use
- If port is free: Starts a new
kubectl port-forwardprocess - If port is in use: Reuses the existing connection (from another MCP instance or manual port-forward)
- Before each API call: Checks if the connection is still alive, restarts if needed
- On shutdown: Terminates the port-forward process (only if this instance started it)
Auto-Restart¶
If the port-forward dies while the server is running, it will automatically restart on the next API call. This handles:
- Network interruptions
- Kubernetes pod restarts
- kubectl process crashes
Multiple Instances¶
Multiple MCP server instances can safely share the same port-forward:
- First instance starts the port-forward
- Subsequent instances detect the port is in use and reuse it
- When the owning instance shuts down, others continue working until they need to restart
Troubleshooting¶
kubectl not found¶
ConfigurationError: kubectl not found in PATH
Solution: Ensure kubectl is installed and add its directory to the PATH in your MCP client config:
{
"env": {
"PATH": "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin"
}
}
Authentication failure¶
ConfigurationError: kubectl is not authenticated or lacks permissions
Solution: Authenticate to your cluster:
kubectl auth login # or your cluster's auth method
kubectl get pods -n your-namespace # verify access
Port-forward timeout¶
ConfigurationError: Port-forward timed out for dev - port did not become available
Possible causes:
- Service doesn't exist in the namespace
- Network connectivity issues
- Firewall blocking the connection
Debug steps:
# Verify the service exists
kubectl get svc -n unblu-dev
# Try manual port-forward
kubectl port-forward -n unblu-dev svc/haproxy 8084:8080
# Check for errors in kubectl output