OpenShift 4 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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