ocp-mcp
Provides tools for managing Kubernetes clusters, including pods, deployments, statefulsets, services, ingresses, jobs, configmaps, secrets, nodes, and more, with support for multi-cluster management and OAuth authentication.
Allows management of Prometheus monitoring resources such as PrometheusRules, ServiceMonitors, PodMonitors, and AlertmanagerConfigs for observability and alerting configuration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ocp-mcp list pods in namespace my-app"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ocp-mcp
An MCP (Model Context Protocol) server for managing multiple OpenShift Container Platform (OCP) clusters through AI assistants like GitHub Copilot, Windsurf, or any MCP-compatible client.
Features
Multi-cluster management — register and switch between dev, UAT, and production clusters
Built-in org cluster map — pre-configured aliases for standard environments
Dedicated OAuth support — works with separate
oauth-openshift.*hostnames60+ tools covering the full range of OpenShift/Kubernetes operations
Real-time metrics — CPU/memory usage for pods and nodes (
top_pods,top_nodes)Observability — PrometheusRules, ServiceMonitors, PodMonitors, AlertmanagerConfigs
OCP-native — Routes, DeploymentConfigs, Builds, BuildConfigs, ImageStreams
Operational — force-delete stuck pods, find failing pods, rollback deployments
Secure — secrets are never returned in plain text; tokens are in-memory only
Related MCP server: OpenShift SRE Copilot
Prerequisites
Python 3.11+
uv package manager
Access to one or more OpenShift 4.x clusters
Installation
# Clone the repository
git clone <repo-url>
cd ocp-mcp
# Install dependencies
uv syncCorporate Artifactory Setup
If your organization requires downloading packages through Artifactory:
Option 1: Environment variables
export UV_INDEX_URL="https://<artifactory-host>/artifactory/api/pypi/<pypi-repo>/simple"
export UV_INDEX_USERNAME="<your-username>"
export UV_INDEX_PASSWORD="<your-password-or-token>"
uv syncOption 2: Project-level config (add to pyproject.toml)
[[tool.uv.index]]
name = "artifactory"
url = "https://<artifactory-host>/artifactory/api/pypi/<pypi-repo>/simple"
default = trueThen run uv sync as normal.
Running the MCP Server
uv run ocp-mcpThe server runs over stdio transport, which is what VS Code, Windsurf, and other MCP clients expect.
Client Configuration
VS Code (GitHub Copilot)
Add to your VS Code MCP settings (.vscode/mcp.json or user settings):
{
"mcpServers": {
"ocp-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ocp-mcp", "ocp-mcp"]
}
}
}Windsurf
Add to your Windsurf MCP configuration:
{
"mcpServers": {
"ocp-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ocp-mcp", "ocp-mcp"]
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ocp-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ocp-mcp", "ocp-mcp"]
}
}
}Replace
/path/to/ocp-mcpwith the absolute path to this repository.
Built-in Cluster Map
The server ships with pre-configured aliases for standard org environments:
Alias | API URL | OAuth URL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Quick Start
Once the MCP server is connected to your AI client, use these commands in chat:
Register all standard clusters at once
register_standard_clusters(username="your-user", password="your-pass", set_default_alias="dev")Register with per-environment credentials
register_standard_clusters(
username="shared-user",
password="shared-pass",
credentials_by_alias={
"prod-g1": {"username": "prod-admin", "password": "prod-pass"},
"prod-g2": {"username": "prod-admin", "password": "prod-pass"}
},
set_default_alias="dev"
)Register a single custom cluster
register_cluster(
alias="custom",
api_url="https://api.my-cluster.com:6443",
oauth_url="https://oauth-openshift.my-cluster.com:6443",
username="admin",
password="secret"
)Switch default cluster
set_default_cluster(alias="uat-g1")Target a specific cluster (any tool)
list_pods(namespace="my-app", cluster_alias="prod-g1")Available Tools
Cluster Management
Tool | Description |
| Register an OpenShift cluster with credentials and optional OAuth URL |
| Register all built-in org clusters in one call |
| List all registered clusters |
| List built-in cluster aliases and URLs |
| Set the default cluster for subsequent commands |
| Remove a registered cluster |
| Re-authenticate and refresh an expired OAuth token |
Namespaces / Projects
Tool | Description |
| List all namespaces (projects) in a cluster |
Pods
Tool | Description |
| List all Pods in a namespace |
| Get detailed Pod info (status, containers, IPs, resource requests/limits) |
| Get logs from a Pod (container, tail lines, since_seconds, timestamps, previous) |
| Get logs from ALL containers in a multi-container Pod |
| Get logs from the previous crashed/terminated instance |
| Get events for a specific Pod |
Pod Operations
Tool | Description |
| List pods stuck in Terminating state |
| Force-delete a single stuck Terminating pod (grace_period=0) |
| Force-delete ALL stuck Terminating pods in a namespace |
| Find pods in CrashLoopBackOff, ImagePullBackOff, OOMKilled, etc. |
| List pods where at least one container is not ready |
Deployments
Tool | Description |
| List all Deployments in a namespace |
| Get detailed Deployment info (strategy, containers, conditions) |
| Scale a Deployment to N replicas |
| Trigger a rolling restart of a Deployment |
| Get rollout progress, conditions, and generation info |
| List revision history (ReplicaSets) with images and change cause |
| Roll back a Deployment to a previous revision |
| Get image repo/tag/version for a Deployment |
| Get image info for all Deployments in a namespace |
DeploymentConfigs (OpenShift)
Tool | Description |
| List all OpenShift DeploymentConfigs in a namespace |
| Get detailed DeploymentConfig info (triggers, strategy, containers) |
| Scale a DeploymentConfig to N replicas |
StatefulSets
Tool | Description |
| List all StatefulSets in a namespace |
| Get detailed StatefulSet info (volumes, service name) |
| Scale a StatefulSet to N replicas |
DaemonSets
Tool | Description |
| List all DaemonSets in a namespace |
| Get detailed DaemonSet info (node selector, containers) |
ReplicaSets
Tool | Description |
| List all ReplicaSets in a namespace |
Services
Tool | Description |
| List all Services in a namespace (ports, selectors, type) |
Routes (OpenShift)
Tool | Description |
| List all OpenShift Routes in a namespace |
| Get detailed Route info (host, TLS, backends) |
Ingresses
Tool | Description |
| List all Ingresses in a namespace |
| Get detailed Ingress info (rules, TLS, annotations) |
Horizontal Pod Autoscalers
Tool | Description |
| List all HPAs in a namespace |
| Get detailed HPA info (target ref, min/max/current replicas) |
Jobs & CronJobs
Tool | Description |
| List all Jobs in a namespace |
| Get detailed Job info (completions, conditions, containers) |
| List all CronJobs in a namespace |
| Get detailed CronJob info (schedule, concurrency, history) |
ConfigMaps
Tool | Description |
| List all ConfigMaps in a namespace |
| Get a ConfigMap including its data |
Secrets
Tool | Description |
| List Secrets in a namespace (metadata only, no values) |
| Get Secret metadata (type, keys, labels — no values) |
Nodes
Tool | Description |
| List all nodes (roles, capacity, conditions) |
| Get detailed node info (taints, allocatable, OS/runtime info) |
Storage
Tool | Description |
| List all PersistentVolumeClaims in a namespace |
| Get detailed PVC info (capacity, storage class, conditions) |
Network Policies
Tool | Description |
| List all NetworkPolicies in a namespace |
Events
Tool | Description |
| List events in a namespace (sorted by time) |
| Get events for a specific Pod |
Metrics (Observe)
Tool | Description |
| Real-time CPU/memory usage for all pods in a namespace |
| Real-time CPU/memory usage for a specific pod |
| Real-time CPU/memory usage for all cluster nodes |
| Compare actual usage vs requests/limits for right-sizing |
Monitoring (Observe)
Tool | Description |
| List PrometheusRules (alerting/recording rules) in a namespace |
| Get detailed rule groups, expressions, severity, and summaries |
| List ServiceMonitors (Prometheus scrape targets) |
| List PodMonitors (Prometheus pod scrape targets) |
| List AlertmanagerConfig resources |
Builds (OpenShift)
Tool | Description |
| List all BuildConfigs in a namespace |
| Get detailed BuildConfig info (strategy, source, triggers) |
| List all Builds in a namespace |
| Get detailed Build info (phase, duration, output image, log snippet) |
ImageStreams (OpenShift)
Tool | Description |
| List all ImageStreams in a namespace |
| Get detailed ImageStream info with all tags and image references |
Quotas & Limits
Tool | Description |
| List ResourceQuotas with used vs hard limits |
| List LimitRanges (default requests, limits, min, max) |
| List ServiceAccounts in a namespace |
Resource Deletion
Tool | Description |
| Delete a resource by kind and name |
Supported kinds for deletion: Pod, Deployment, StatefulSet, DaemonSet, ReplicaSet, Service, ConfigMap, Secret, Job, CronJob, PersistentVolumeClaim, Ingress, NetworkPolicy, HorizontalPodAutoscaler.
Usage Examples
Here are some common tasks you can ask the AI to perform:
Debugging a failing pod:
"Show me the logs for pod my-app-xyz in namespace production on prod-g1"
Find all crashing pods:
"List all failing pods in namespace my-app on prod-g1"
Force-delete stuck pods:
"Force-delete all terminating pods in namespace my-app on uat-g1"
Get logs from all containers in a pod:
"Get logs from all containers in pod my-app-xyz in namespace production"
Check resource usage (Observe > Metrics):
"Show me CPU and memory usage for all pods in namespace my-app on prod-g1"
Right-size pods:
"Compare actual resource usage vs requests for pods in namespace my-app on dev"
Check node capacity and usage:
"Show me top nodes by CPU usage on prod-g1"
Comparing deployments across environments:
"List the image tags for all deployments in namespace my-app on dev and uat-g1"
Rollback a bad deployment:
"Roll back deployment api-server in namespace my-app on prod-g1 to the previous revision"
Scaling for load:
"Scale deployment api-server to 5 replicas in namespace my-app on prod-g1"
Checking routes:
"List all routes in namespace my-app on uat-g1"
Investigating events:
"Show me recent events in namespace my-app on prod-g2"
Check alerting rules (Observe > Alerting):
"List all PrometheusRules in namespace openshift-monitoring on prod-g1"
View builds:
"List recent builds in namespace my-app on dev"
Check image streams:
"Show me all tags for imagestream my-app in namespace my-app on dev"
Check quotas:
"Show me resource quotas and usage in namespace my-app on prod-g1"
Token Management
Tokens are acquired via OCP's OAuth implicit flow and stored in memory only.
If a token expires, use
refresh_cluster_token(alias="dev")to re-authenticate.Restarting the MCP server clears all tokens — re-register clusters on restart.
Security Notes
No secrets exposed:
list_secretsandget_secret_metadatareturn only metadata (type, keys, labels) — never secret values.No persistent credentials: Tokens and passwords are held in-memory for the server process lifetime only.
SSL verification: Enabled by default. Set
verify_ssl=Falseonly for test clusters with self-signed certificates.
Development
# Install with dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Run linter
uv run ruff check src/ tests/Project Structure
ocp-mcp/
├── pyproject.toml
├── README.md
├── src/ocp_mcp/
│ ├── server.py # MCP server entry point
│ ├── cluster_manager.py # Multi-cluster registry and API client management
│ ├── auth.py # OCP OAuth token acquisition
│ ├── models.py # Pydantic response models
│ ├── exceptions.py # Custom exceptions
│ └── tools/
│ ├── registry.py # Cluster registration tools
│ ├── deployments.py # Deployment operations + rollout + rollback
│ ├── ocp_deploymentconfigs.py # DeploymentConfig operations (OCP)
│ ├── workloads.py # StatefulSets, DaemonSets, ReplicaSets
│ ├── jobs.py # Jobs and CronJobs
│ ├── resources.py # Pods, Namespaces, Services, delete_resource
│ ├── pod_ops.py # Force-delete, terminating/failing/not-ready pods
│ ├── logs.py # Pod log retrieval (single, all containers, previous)
│ ├── events.py # Namespace and Pod events
│ ├── metrics.py # Real-time pod/node metrics + usage vs requests
│ ├── monitoring.py # PrometheusRules, ServiceMonitors, PodMonitors
│ ├── hpa.py # Horizontal Pod Autoscalers
│ ├── configmaps.py # ConfigMap operations
│ ├── secrets.py # Secret metadata (no values)
│ ├── quotas.py # ResourceQuotas, LimitRanges, ServiceAccounts
│ ├── image_info.py # Deployment image/tag inspection
│ ├── nodes.py # Node listing and details
│ ├── storage.py # PersistentVolumeClaim operations
│ ├── routes.py # OpenShift Route operations
│ ├── ocp_builds.py # Builds, BuildConfigs, ImageStreams (OCP)
│ └── networking.py # Ingresses and NetworkPolicies
└── tests/
├── test_auth.py
└── test_cluster_manager.pyLicense
Internal use.
Available Tools
77 toolsdelete_resourceB
Delete a Kubernetes resource by kind and name.
Supported kinds: Pod, Deployment, Service, ConfigMap, HorizontalPodAutoscaler
Inputs: kind (required), name (required), namespace, cluster_alias.
force_delete_all_terminating_podsB
Force-delete ALL pods stuck in Terminating state in a namespace.
Inputs: namespace, cluster_alias.
force_delete_podB
Force-delete a pod stuck in Terminating state (grace_period_seconds=0).
Use this when a pod will not terminate normally and is stuck.
Inputs: name (required), namespace, cluster_alias.
get_all_container_logsA
Get logs from ALL containers in a multi-container Pod.
Returns a dict mapping container name to its log output.
Inputs: name (required), previous, namespace, tail_lines, +3 more. Returns: object
get_buildC
Get detailed information about an OpenShift Build.
Inputs: name (required), namespace, cluster_alias.
get_buildconfigC
Get detailed information about an OpenShift BuildConfig.
Inputs: name (required), namespace, cluster_alias.
get_configmapC
Get a ConfigMap including its data.
Inputs: name (required), namespace, cluster_alias.
get_cronjobB
Get detailed information about a specific CronJob.
Inputs: name (required), namespace, cluster_alias.
get_daemonsetB
Get detailed information about a specific DaemonSet.
Inputs: name (required), namespace, cluster_alias.
get_deploymentC
Get detailed information about a specific Deployment.
Inputs: name (required), namespace, cluster_alias.
get_deploymentconfigC
Get detailed information about an OpenShift DeploymentConfig.
Inputs: name (required), namespace, cluster_alias.
get_deployment_image_infoB
Get image repository, tag, and version label for a specific Deployment.
Inputs: name (required), namespace, cluster_alias. Returns: name, version, replicas, namespace, +2 more
get_deployment_revision_historyB
List the revision history (ReplicaSets) for a Deployment.
Inputs: name (required), namespace, cluster_alias. Returns: result
get_deployment_rollout_statusA
Get the rollout status of a Deployment including progress and conditions.
Inputs: name (required), namespace, cluster_alias.
get_hpaB
Get detailed information about a specific HorizontalPodAutoscaler.
Inputs: name (required), namespace, cluster_alias. Returns: name, namespace, target_ref, max_replicas, +3 more
get_imagestreamB
Get detailed information about an OpenShift ImageStream including all tags.
Inputs: name (required), namespace, cluster_alias.
get_ingressB
Get detailed information about a specific Ingress.
Inputs: name (required), namespace, cluster_alias.
get_jobB
Get detailed information about a specific Job.
Inputs: name (required), namespace, cluster_alias.
get_nodeB
Get detailed information about a specific node.
Inputs: name (required), cluster_alias.
get_podC
Get detailed information about a specific Pod.
Inputs: name (required), namespace, cluster_alias.
get_pod_eventsC
Get events for a specific Pod.
Inputs: name (required), namespace, cluster_alias. Returns: result
get_pod_logsA
Get logs from a Pod.
Options:
container: target a specific container in a multi-container pod
tail_lines: number of lines from the end (default 100)
since_seconds: only return logs from the last N seconds
timestamps: prepend RFC3339 timestamp to each log line
previous: get logs from the previous terminated instance
Inputs: name (required), previous, container, namespace, +4 more. Returns: result
get_previous_pod_logsA
Get logs from the previous (crashed/terminated) instance of a pod container.
Shortcut for get_pod_logs(..., previous=True).
Inputs: name (required), container, namespace, tail_lines, +1 more. Returns: result
get_prometheus_ruleB
Get detailed PrometheusRule including all alerting and recording rules.
Inputs: name (required), namespace, cluster_alias.
get_pvcB
Get detailed information about a specific PersistentVolumeClaim.
Inputs: name (required), namespace, cluster_alias.
get_routeB
Get detailed information about a specific OpenShift Route.
Inputs: name (required), namespace, cluster_alias.
get_secret_metadataA
Get Secret metadata (type, keys, labels). Secret values are NOT returned for security.
Inputs: name (required), namespace, cluster_alias.
get_statefulsetB
Get detailed information about a specific StatefulSet.
Inputs: name (required), namespace, cluster_alias.
list_alertmanager_configsA
List AlertmanagerConfig resources in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_buildconfigsB
List all OpenShift BuildConfigs in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_buildsB
List all OpenShift Builds in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_clustersA
List all registered clusters (no tokens or passwords exposed).
Inputs: no named parameters. Returns: result
list_configmapsB
List all ConfigMaps in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_cronjobsB
List all CronJobs in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_daemonsetsA
List all DaemonSets in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_deploymentconfigsB
List all OpenShift DeploymentConfigs in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_deploymentsB
List all Deployments in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_deployments_image_infoA
Get image repository, tag, and version label for all Deployments in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_eventsA
List events in a namespace, sorted by last timestamp descending.
Inputs: namespace, cluster_alias. Returns: result
list_failing_podsB
List pods that are in error states: CrashLoopBackOff, ImagePullBackOff, ErrImagePull, OOMKilled, etc.
Inputs: namespace, cluster_alias. Returns: result
list_hpasB
List all HorizontalPodAutoscalers in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_imagestreamsB
List all OpenShift ImageStreams in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_ingressesB
List all Ingresses in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_jobsC
List all Jobs in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_limit_rangesB
List all LimitRanges in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_namespacesB
List all namespaces (projects) in the cluster.
Inputs: cluster_alias. Returns: result
list_network_policiesA
List all NetworkPolicies in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_nodesC
List all nodes in the cluster with status and capacity info.
Inputs: cluster_alias. Returns: result
list_pod_monitorsA
List all PodMonitors in a namespace (Prometheus pod scrape targets).
Inputs: namespace, cluster_alias. Returns: result
list_podsB
List all Pods in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_pods_not_readyC
List pods where at least one container is not ready.
Inputs: namespace, cluster_alias. Returns: result
list_prometheus_rulesA
List all PrometheusRules (alerting/recording rules) in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_pvcsB
List all PersistentVolumeClaims in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_replicasetsB
List all ReplicaSets in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_resource_quotasA
List all ResourceQuotas in a namespace with used vs hard limits.
Inputs: namespace, cluster_alias. Returns: result
list_routesB
List all OpenShift Routes in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_secretsA
List all Secrets in a namespace (metadata only, no secret data exposed).
Inputs: namespace, cluster_alias. Returns: result
list_service_accountsC
List all ServiceAccounts in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_service_monitorsC
List all ServiceMonitors in a namespace (Prometheus scrape targets).
Inputs: namespace, cluster_alias. Returns: result
list_servicesC
List all Services in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_standard_clustersA
List built-in cluster aliases and API/OAuth URLs for dev/uat/prod environments.
Inputs: no named parameters. Returns: result
list_statefulsetsB
List all StatefulSets in a namespace.
Inputs: namespace, cluster_alias. Returns: result
list_terminating_podsA
List pods stuck in Terminating state.
A pod is considered terminating if it has a deletion_timestamp set.
Inputs: namespace, cluster_alias. Returns: result
pod_resource_usage_vs_requestsA
Compare actual pod resource usage against configured requests/limits.
Useful for right-sizing: identifies over-provisioned and under-provisioned pods.
Inputs: namespace, cluster_alias. Returns: result
refresh_cluster_tokenA
Re-authenticate and refresh the OAuth token for a cluster.
Uses the default cluster if alias is not provided.
Inputs: alias. Returns: alias, api_url, username, is_default
register_clusterA
Register an OpenShift cluster by acquiring an OAuth token.
The first registered cluster automatically becomes the default. Provide oauth_url when OAuth is served from a dedicated hostname. Set set_default=True to make this cluster the default when registering additional clusters.
Inputs: alias (required), api_url (required), password (required), username (required), +3 more. Returns: alias, api_url, username, is_default
register_standard_clustersA
Register all built-in cluster aliases in one call.
By default, top-level username/password are used for every alias. Use credentials_by_alias to override credentials per alias.
Inputs: password (required), username (required), verify_ssl, set_default_alias, +1 more. Returns: result
remove_clusterA
Remove a registered cluster. If it was the default, the next registered cluster becomes default.
Inputs: alias (required).
rollback_deploymentA
Roll back a Deployment to a previous revision.
If revision is not specified, rolls back to the previous revision. Uses ReplicaSet history to find the target revision's pod template.
Inputs: name (required), revision, namespace, cluster_alias.
rollout_restartB
Trigger a rolling restart of a Deployment by patching the pod template annotation.
Inputs: name (required), namespace, cluster_alias.
scale_deploymentB
Scale a Deployment to the specified number of replicas.
Inputs: name (required), replicas (required), namespace, cluster_alias.
scale_deploymentconfigB
Scale an OpenShift DeploymentConfig to the specified number of replicas.
Inputs: name (required), replicas (required), namespace, cluster_alias.
scale_statefulsetB
Scale a StatefulSet to the specified number of replicas.
Inputs: name (required), replicas (required), namespace, cluster_alias.
set_default_clusterA
Set the default cluster used when no cluster_alias is provided to other tools.
Inputs: alias (required).
top_nodesB
Get real-time CPU and memory usage for all nodes (like 'oc adm top nodes').
Inputs: cluster_alias. Returns: result
top_podC
Get real-time CPU and memory usage for a specific pod.
Inputs: name (required), namespace, cluster_alias.
top_podsA
Get real-time CPU and memory usage for all pods in a namespace (like 'oc adm top pods').
Inputs: namespace, cluster_alias. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 77 tools
Most tools target distinct resource types (list_* vs get_* per kind), and overlap is limited to a few areas like logs (get_pod_logs, get_all_container_logs, get_previous_pod_logs) and deployment operations (rollout_restart, rollback_deployment, get_deployment_revision_history). Descriptions clarify these related tools, so an agent can usually pick the right one, but the sheer number increases selection risk.
The dominant pattern is verb_noun in snake_case (list_pods, get_deployment, scale_statefulset), which is predictable. However, there are deviations like rollout_restart (noun_verb), top_pods/top_nodes (no list/get prefix), and pod_resource_usage_vs_requests (descriptive phrase) that break the strict pattern.
With 77 tools, the surface is very large and far exceeds the typical well-scoped range. While OpenShift is broad, many tools are similar list/get variants for different resource kinds, making the server feel overloaded. This volume could overwhelm agents and increase decision cost.
The server covers a wide range of OpenShift resources with list/get, scaling, logs, events, and monitoring. However, there are notable gaps: no create/update for most resources, delete only for a few kinds, and missing some common resources like roles/rolebindings. Core operational workflows are present, but full lifecycle coverage is incomplete.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
AI-powered incident management and server monitoring via MCP.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with multiple Kubernetes clusters simultaneously, providing comprehensive tools for cluster management, resource operations, and diagnostics across different environments.-
- AlicenseAqualityDmaintenanceAI-powered MCP server for enterprise OpenShift/Kubernetes cluster management, providing diagnostic tools, RAG knowledge retrieval, and autonomous remediation recommendations.9MIT
- AlicenseCqualityCmaintenanceAn MCP server that provides complete Kubernetes API operations, enabling cluster management, resource CRUD, diagnostics, backup/restore, and multi-cluster configuration via natural language.322MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to interact with Red Hat OpenShift AI environments, providing tools for project management, workbench operations, model serving, and more.295 PyPI10Apache 2.0