OpenShift 4 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_cluster_infoB | Get high-level cluster information: name, API URL, version, channel, and platform type. |
| get_cluster_version | Show ClusterVersion history, conditions (Available/Progressing/Degraded), and available updates. |
| get_cluster_operators | List all ClusterOperators with Available/Progressing/Degraded/Version columns; degraded operators are listed first. |
| get_cluster_operator_detailsC | Get detailed conditions, versions, and related objects for a single ClusterOperator. |
| get_infrastructure_configC | Get Infrastructure and Network configuration CRDs from config.openshift.io/v1. |
| list_nodesC | List all nodes with ROLES, STATUS, OS image, KUBELET version, and AGE. |
| get_nodeA | Get capacity, allocatable resources, conditions, and taints for a node. |
| cordon_nodeA | Cordon a node so that no new pods are scheduled on it. |
| uncordon_nodeA | Uncordon a node to allow new pods to be scheduled on it again. |
| drain_node | Drain a node by evicting all evictable pods (cordons the node first). Args: name: Name of the node to drain. ignore_daemonsets: Ignore DaemonSet-managed pods (default True). delete_emptydir_data: Allow deletion of pods with emptyDir volumes (default False). force: Force eviction of pods not managed by a controller (default False). grace_period: Seconds for graceful termination; -1 uses pod default. cluster: Named cluster to target (empty = default). |
| list_namespacesA | List all namespaces with STATUS, LABELS, and AGE. |
| create_namespaceB | Create a new namespace, optionally with labels. Args: name: Namespace name. labels: Comma-separated KEY=VALUE pairs (e.g. "env=prod,team=platform"). cluster: Named cluster to target (empty = default). |
| delete_namespaceA | DESTRUCTIVE: Delete a namespace and ALL resources within it. This action is irreversible. All pods, services, persistent volume claims, and other objects in the namespace will be permanently deleted. Args: name: Namespace to delete. cluster: Named cluster to target (empty = default). |
| get_namespace_resource_quotaC | List ResourceQuotas and LimitRanges in a namespace. |
| list_events | List the most recent 50 events, optionally filtered by namespace, field selector, or involved object name. Args: namespace: Namespace to query (empty = all namespaces). field_selector: Kubernetes field selector (e.g. "reason=BackOff"). involved_object: Filter by involvedObject.name (appended to field_selector). cluster: Named cluster to target (empty = default). |
| get_etcd_statusC | Get ETCD cluster status from operator.openshift.io/v1 etcds/cluster. |
| list_cluster_contextsC | Show all configured MCP clusters and the active oc kubeconfig contexts. |
| list_podsA | List pods with NAMESPACE, NAME, STATUS, READY, RESTARTS, NODE, and AGE columns. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector (e.g. "app=nginx"). field_selector: Field selector (e.g. "status.phase=Running"). cluster: Named cluster to target (empty = default). |
| get_podA | Show detailed information for a pod: phase, node, IP, QoS class, container states, and conditions. Args: name: Pod name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| get_pod_logs | Fetch logs from a pod container. Args: name: Pod name. namespace: Namespace (default: "default"). container: Container name (empty = first/only container). previous: Return logs from the previous container instance. tail_lines: Number of lines from the end (default 100, 0 = unlimited). since_seconds: Only return logs newer than this many seconds. cluster: Named cluster to target (empty = default). |
| exec_in_podB | Execute a command inside a pod via oc exec. command is split with shlex — shell metacharacters (pipes, redirects) are not interpreted. |
| delete_podC | Delete a pod. Args: name: Pod name. namespace: Namespace (default: "default"). force: Force-delete immediately (grace-period=0). cluster: Named cluster to target (empty = default). |
| describe_pod | Run 'oc describe pod' for detailed pod information including events. Args: name: Pod name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_deployments | List Deployments with NAMESPACE, NAME, READY, UP-TO-DATE, AVAILABLE, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter deployments. cluster: Named cluster to target (empty = default). |
| scale_deployment | Scale a Deployment to the specified number of replicas. Args: name: Deployment name. replicas: Desired replica count. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| rollout_restart_deploymentB | Trigger a rolling restart of a Deployment (equivalent to 'oc rollout restart'). Args: name: Deployment name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| rollout_undo_deployment | Undo a Deployment rollout, optionally to a specific revision. Args: name: Deployment name. namespace: Namespace (default: "default"). revision: Target revision number (0 = previous revision). cluster: Named cluster to target (empty = default). |
| rollout_status_deployment | Show the rollout status of a Deployment (equivalent to 'oc rollout status'). Args: name: Deployment name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_statefulsetsA | List StatefulSets with NAMESPACE, NAME, READY, SERVICE, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter StatefulSets. cluster: Named cluster to target (empty = default). |
| scale_statefulset | Scale a StatefulSet to the specified number of replicas. Args: name: StatefulSet name. replicas: Desired replica count. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_daemonsets | List DaemonSets with NAMESPACE, NAME, DESIRED, CURRENT, READY, UP-TO-DATE, AVAILABLE, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter DaemonSets. cluster: Named cluster to target (empty = default). |
| list_jobsA | List Jobs with NAMESPACE, NAME, COMPLETIONS, ACTIVE, SUCCEEDED, FAILED, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter Jobs. cluster: Named cluster to target (empty = default). |
| list_cronjobs | List CronJobs with NAMESPACE, NAME, SCHEDULE, SUSPEND, ACTIVE, LAST RUN, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter CronJobs. cluster: Named cluster to target (empty = default). |
| create_job_from_cronjob | Create a Job immediately from a CronJob template (manual trigger). Args: cronjob_name: Source CronJob name. job_name: Name for the newly created Job. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_deployment_configs | List OpenShift DeploymentConfigs (apps.openshift.io/v1) with NAMESPACE, NAME, REVISION, DESIRED, CURRENT, and AGE. Args: namespace: Namespace to query (empty = all namespaces). cluster: Named cluster to target (empty = default). |
| rollout_deployment_config | Trigger a new rollout of an OpenShift DeploymentConfig (oc rollout latest dc/). Args: name: DeploymentConfig name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_servicesA | List Services with NAMESPACE, NAME, TYPE, CLUSTER-IP, EXTERNAL-IP, PORT(S), and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter Services. cluster: Named cluster to target (empty = default). |
| get_service | Show detailed info for a Service including selector, ports, and current Endpoints. Args: name: Service name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| delete_serviceC | Delete a Service. Args: name: Service name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_routesA | List OpenShift Routes (route.openshift.io/v1) with NAMESPACE, NAME, HOST/PATH, TLS, SERVICE, and AGE. Args: namespace: Namespace to query (empty = all namespaces). cluster: Named cluster to target (empty = default). |
| get_routeA | Get detailed information for an OpenShift Route including admitted status and TLS config. Args: name: Route name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| create_route | Create an OpenShift Route by exposing a Service. Uses 'oc expose' to create a basic route and then patches TLS termination and path if required. Args: name: Route name. namespace: Namespace. service: Name of the Service to expose. host: Hostname for the route (empty = let the router assign one). path: URL path prefix (default "/"). tls_termination: TLS termination type: "edge", "passthrough", "reencrypt", or "" (no TLS). port: Target port name or number (empty = first port from Service). cluster: Named cluster to target (empty = default). |
| delete_routeC | Delete an OpenShift Route. Args: name: Route name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| list_ingressesA | List Kubernetes Ingress objects with NAMESPACE, NAME, CLASS, HOSTS, ADDRESS, PORTS, and AGE. Args: namespace: Namespace to query (empty = all namespaces). label_selector: Label selector to filter Ingresses. cluster: Named cluster to target (empty = default). |
| list_network_policies | List NetworkPolicies with NAMESPACE, NAME, POD-SELECTOR, POLICY-TYPES, and AGE. Args: namespace: Namespace to query (empty = all namespaces). cluster: Named cluster to target (empty = default). |
| delete_network_policyB | Delete a NetworkPolicy. Args: name: NetworkPolicy name. namespace: Namespace (default: "default"). cluster: Named cluster to target (empty = default). |
| get_cluster_network_config | Get the cluster-wide Network configuration from config.openshift.io/v1 networks/cluster. Shows network type, cluster networks, service networks, and machine networks. |
| get_ingress_controller | Get an OpenShift IngressController from operator.openshift.io/v1. Args: name: IngressController name (default: "default"). cluster: Named cluster to target (empty = default). |
| list_pvsC | List PersistentVolumes with capacity, access modes, storage class, reclaim policy, status, and claim. |
| get_pvC | Get detailed PersistentVolume info including CSI, NFS, HostPath, or EBS source. |
| delete_pvB | Delete a PersistentVolume. WARNING: ensure no PVC is bound before deleting. |
| list_pvcsB | List PersistentVolumeClaims with status, volume, capacity, access modes, and storage class. |
| get_pvcB | Get detailed PersistentVolumeClaim info including conditions. |
| create_pvcB | Create a PersistentVolumeClaim. storage_request example: 10Gi access_mode: ReadWriteOnce, ReadOnlyMany, ReadWriteMany, ReadWriteOncePod. |
| delete_pvcB | Delete a PersistentVolumeClaim. WARNING: data loss may occur if PVC is in use. |
| list_storage_classes | List StorageClasses. The cluster default is marked with (default). |
| list_volume_snapshotsB | List VolumeSnapshots (snapshot.storage.k8s.io/v1) with source PVC, class, and ready status. |
| create_volume_snapshot | Create a VolumeSnapshot from a PersistentVolumeClaim. |
| list_configmapsC | List ConfigMaps with namespace, name, key count, and age. |
| get_configmap | Get ConfigMap keys and values. Values longer than 200 characters are truncated. |
| create_configmapB | Create a ConfigMap. data is KEY=VALUE pairs separated by newlines or commas. Example: KEY1=value1\nKEY2=value2 |
| update_configmap | Set or update a single key in a ConfigMap using strategic merge patch. |
| delete_configmapC | Delete a ConfigMap. |
| list_secretsB | List Secrets showing type and key count only — secret values are never displayed. |
| get_secret_keysA | List the key names of a Secret. Values are never shown for security. |
| list_service_accountsC | List ServiceAccounts with number of secrets and image pull secrets. |
| list_usersB | List OpenShift users with their identities and group memberships. |
| get_userA | Get OpenShift user details: full name, identities, and group memberships. |
| list_groups | List OpenShift Groups with member count and up to 5 member names. |
| create_groupC | Create an empty OpenShift Group. |
| add_user_to_group | Add a user to an OpenShift Group (atomic — uses oc adm groups add-users). |
| remove_user_from_group | Remove a user from an OpenShift Group (atomic — uses oc adm groups remove-users). |
| list_rolesB | List Roles in a namespace with the number of policy rules. |
| list_cluster_rolesB | List ClusterRoles with the number of policy rules. |
| list_role_bindings | List RoleBindings in a namespace with role reference and bound subjects. |
| list_cluster_role_bindingsC | List ClusterRoleBindings with role reference and bound subjects. |
| create_role_bindingC | Create a RoleBinding in a namespace. subject_kind: User, Group, or ServiceAccount. cluster_role: if True, references a ClusterRole instead of a Role. |
| delete_role_bindingC | Delete a RoleBinding. |
| get_user_access | List all actions a user can perform using 'oc auth can-i --list --as='. Specify namespace to scope the check; omit for cluster-wide actions. |
| list_build_configs | List BuildConfigs with strategy type, source, last version, and age. |
| get_build_configB | Describe a BuildConfig in detail using oc describe bc. |
| start_buildC | Start a new build from a BuildConfig. Optionally supply from_dir to use a local directory as the binary source. |
| list_builds | List Builds with phase, duration, reason, and age. |
| get_buildC | Get detailed Build information: phase, reason, output image, and timing. |
| get_build_logsA | Retrieve logs for a Build. Set follow=True to stream (returns available output). |
| list_image_streamsC | List ImageStreams with their internal Docker repository and tag count. |
| list_image_stream_tagsC | List tags for an ImageStream with image digest and creation timestamp. |
| list_installed_operatorsB | List installed operators (ClusterServiceVersions) with display name, version, and phase. |
| get_operator_statusB | Get ClusterServiceVersion status: phase, conditions, and owned CRDs. If namespace is empty, all namespaces are searched for a CSV whose name matches. |
| list_subscriptionsC | List OLM Subscriptions with package, channel, source, current CSV, and age. |
| create_subscription | Create an OLM Subscription to install an operator from a CatalogSource. install_mode is informational only (set via OperatorGroup, not Subscription spec). |
| delete_subscription | Delete an OLM Subscription. Set also_delete_csv=True to also remove the currently installed CSV. |
| list_catalog_sourcesC | List CatalogSources with display name, type, publisher, and connection state. |
| list_operator_groupsC | List OperatorGroups with their target namespaces and service account. |
| list_install_plansC | List InstallPlans with approval mode, approved status, phase, and CSV names. |
| approve_install_planC | Approve a Manual InstallPlan by patching spec.approved=True. |
| list_operator_conditionsC | List OperatorConditions (operators.coreos.com/v2) with active condition summary. |
| list_machine_setsA | List MachineSets with desired/ready/available replica counts, instance type, and age. |
| get_machine_set | Describe a MachineSet showing all spec and status details. |
| scale_machine_setA | Scale a MachineSet to the given number of replicas by patching spec.replicas. WARNING: Scaling down will cause machines (and their nodes) to be deleted. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| troubleshoot_pod | Step-by-step runbook for diagnosing a failing or misbehaving pod. |
| debug_network_connectivity | Step-by-step runbook for diagnosing network connectivity between pods/services. |
| investigate_node_pressure | Step-by-step runbook for diagnosing and resolving node resource pressure. |
| plan_cluster_upgrade | Step-by-step runbook for safely upgrading an OpenShift cluster to a new version. |
| setup_new_project | Step-by-step runbook for provisioning a new OpenShift project with proper guardrails. |
| deploy_ml_model | Step-by-step runbook for deploying an ML model using OpenShift AI (RHOAI). |
| investigate_cluster_degradation | Step-by-step runbook for investigating a degraded or unhealthy cluster. |
| migrate_vm_workload | Step-by-step runbook for live-migrating a KubeVirt VM to another node. |
| debug_operator_install | Step-by-step runbook for diagnosing a stuck or failed operator installation. |
| configure_gitops_application | Step-by-step runbook for deploying an application via OpenShift GitOps (ArgoCD). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| cluster_info | Current cluster version and infrastructure summary. |
| cluster_nodes | List all cluster nodes with role, ready status, OS image, kubelet version, and age. |
| cluster_operators | List all cluster operators sorted degraded-first, with available/progressing/degraded status. |
| cluster_alerts | List currently firing alerts from Alertmanager. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ay-garg/openshift-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server