Google Kubernetes Engine MCP server

Endpoint: https://container.googleapis.com/mcp · Authentication: Sign in with OAuth

Manages GKE clusters, node pools, and operations and reads Kubernetes resources in a Google Cloud project. Requires Google Cloud credentials through OAuth.

How do I authenticate?

Add the endpoint in your client, start Connect or Sign in, approve the requested scopes, and return to the client. OAuth discovery finds the authorization server; client registration requirements vary by provider. Follow the provider guidance and client setup below.

Authentication and connection guide

Connection specification

Remote endpoint
https://container.googleapis.com/mcp
Browser access
Not yet measured
Declared MCP transport
Streamable HTTP
Live-validated MCP transport
Streamable HTTP — Observed by the latest catalog validation
Declared authentication
OAuth 2.1
Detected authentication
OAuth 2.1 detected or retained from publisher evidence
Alternative endpoint
https://container.googleapis.com/mcp/read-only — Read-only tool set without create or update tools (OAuth 2.1)
Protocol lifecycle
Stateful MCP · 2025-11-25
Authorization server
https://accounts.google.com/
Category
Cloud

Product documentation · Official listing documentation

Provider guidance

  • Initialization and tool listing succeeded without credentials in the 2026-10-20 audit; tool calls require Google Cloud credentials. Google OAuth clients are pre-registered in a Google Cloud project; the server does not advertise Dynamic Client Registration.

More Cloud MCP servers · Browse all MCP servers · Test this endpoint in the MCP Playground

Authorization setup

Registration requirements not verified

The OAuth authorization and app-registration requirements for this exact endpoint have not been verified. A compatible client will request authorization, but follow the publisher documentation and do not guess client credentials or callbacks.

Publisher evidence reviewed .

Publisher documentation

Connect it

Live-validated endpoint: https://container.googleapis.com/mcp · Streamable HTTP. Registration requirements not verified: The OAuth authorization and app-registration requirements for this exact endpoint have not been verified. A compatible client will request authorization, but follow the publisher documentation and do not guess client credentials or callbacks.

Agent prompt for Claude Code or Codex
Add the Google Kubernetes Engine MCP server to my MCP client configuration and verify that it works.

What it is: Manages GKE clusters, node pools, and operations and reads Kubernetes resources in a Google Cloud project. Requires Google Cloud credentials through OAuth.
Server URL: https://container.googleapis.com/mcp
Transport: Streamable HTTP (remote MCP server, no local install).
Authentication: OAuth 2.1. Registration requirements not verified: The OAuth authorization and app-registration requirements for this exact endpoint have not been verified. A compatible client will request authorization, but follow the publisher documentation and do not guess client credentials or callbacks.
Tools (23, as last observed by mcptest): apply_k8s_manifest, cancel_operation, check_k8s_auth, create_cluster, create_node_pool, delete_k8s_resource, describe_k8s_resource, get_cluster, get_k8s_cluster_info, get_k8s_logs, get_k8s_resource, get_k8s_rollout_status, get_k8s_version, get_node_pool, get_operation, list_clusters, list_k8s_api_resources, list_k8s_events, list_node_pools, list_operations, patch_k8s_resource, update_cluster, update_node_pool.
Reference: https://mcptest.io/servers/google-kubernetes-engine/

Steps:
1. Work out which MCP client I use (Claude Code, Codex, Cursor, VS Code or another) and add the server under the name "google-kubernetes-engine" in that client's MCP configuration, user scope unless I ask otherwise.
   Claude Code: claude mcp add --transport http --scope user 'google-kubernetes-engine' 'https://container.googleapis.com/mcp'
   Other clients: use the setup for that client on the reference page.
2. Never write a credential value into a file that could be committed; reference an environment variable or the client's secret store, and ask me for any value you need.
3. Verify: connect to the server and call tools/list. Confirm the tools above are listed, and report any sign-in step I still have to complete.
MCP client

Claude Code setup

Run in a terminal. This user-scoped entry is available across projects.

claude mcp add --transport http --scope user 'google-kubernetes-engine' 'https://container.googleapis.com/mcp'
  • After adding the server, open Claude Code, run /mcp, select the server, and follow the browser flow to authenticate.

Codex CLI setup

Run in a terminal; Codex stores the entry in ~/.codex/config.toml.

codex mcp add 'google-kubernetes-engine' --url 'https://container.googleapis.com/mcp'
codex mcp login 'google-kubernetes-engine'

Cursor setup

Add to .cursor/mcp.json for this project, or ~/.cursor/mcp.json for all projects.

{
  "mcpServers": {
    "google-kubernetes-engine": {
      "url": "https://container.googleapis.com/mcp"
    }
  }
}

VS Code setup

Add to .vscode/mcp.json, or run “MCP: Open User Configuration” for a private user-level entry.

{
  "servers": {
    "google-kubernetes-engine": {
      "type": "http",
      "url": "https://container.googleapis.com/mcp"
    }
  }
}

Claude setup

Add the endpoint above in Claude:

  • Customize > Connectors > Add custom connector
  • Team/Enterprise: Organization settings > Connectors > Add > Custom > Web

Claude Desktop setup

Add the endpoint above in Claude Desktop:

  • Remote: Customize > Connectors (same as claude.ai)
  • Local: Settings > Developer > Edit Config, or Settings > Extensions for .mcpb files
  • ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows), local servers only

ChatGPT setup

Add the endpoint above in ChatGPT:

  • ChatGPT web: Plugins > Add custom MCP server, then configure authentication and accept the risk warning

Windsurf setup

Add the endpoint above in Windsurf:

  • ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json on Windows), serverUrl or url
  • Cascade panel > ... > MCPs > Open MCP config file

Gemini CLI setup

Add the endpoint above in Gemini CLI:

  • gemini mcp add --transport http <name> <url>
  • ~/.gemini/settings.json (user) or .gemini/settings.json (project), mcpServers

MCP SDK setup

Add the endpoint above in MCP SDK:

  • Programmatic: new Client(...).connect(new StreamableHTTPClientTransport(url))

Notes for every client

  • Publisher evidence (reviewed 2026-10-20): https://docs.cloud.google.com/kubernetes-engine/docs/how-to/use-gke-mcp
  • Alternative endpoint: https://container.googleapis.com/mcp/read-only — Read-only tool set without create or update tools.
  • Provider guidance: Initialization and tool listing succeeded without credentials in the 2026-10-20 audit; tool calls require Google Cloud credentials. Google OAuth clients are pre-registered in a Google Cloud project; the server does not advertise Dynamic Client Registration.

Client compatibility

ClientStatusWhy
Claude CodeSupportedClaude Code supports Streamable HTTP servers and OAuth sign-in.
CodexSupportedCodex supports Streamable HTTP servers and OAuth sign-in.
CursorSupportedCursor supports Streamable HTTP servers and OAuth sign-in.
VS CodeSupportedVS Code supports Streamable HTTP servers and OAuth sign-in.
ClaudeSupportedClaude supports Streamable HTTP servers and OAuth sign-in.
Claude DesktopSupportedClaude Desktop supports Streamable HTTP servers and OAuth sign-in.
ChatGPTPartialStateful routing needs operational care: ChatGPT can preserve MCP sessions, but the deployment must route a session consistently and retain its state.
WindsurfPartialWindsurf's documentation does not state support for OAuth sign-in.
Gemini CLISupportedGemini CLI supports Streamable HTTP servers and OAuth sign-in.
MCP SDKSupportedMCP SDK supports Streamable HTTP servers and OAuth sign-in.

Computed from this server's validated transport, protocol and authentication against documented client support. Checks the catalog has not observed are not counted.

Similar servers

  • Cloudflare — Remote MCP server for Cloudflare Workers, D1, R2, DNS, and account APIs. OAuth 2.1
  • Vercel — Vercel's remote MCP server for inspecting and managing projects, deployments, logs, and platform resources. OAuth 2.1
  • Cloudflare Workers Bindings — Manages the storage, AI, and compute primitives that Workers bind to, such as KV, R2, and D1, in a Cloudflare account. Requires Cloudflare OAuth. OAuth 2.1
  • Cloudflare Workers Builds — Lists Workers Builds and reads their status and logs for Workers connected to Git. Requires Cloudflare OAuth. OAuth 2.1
  • Cloudflare Browser Run — Fetches web pages through Cloudflare Browser Rendering and returns HTML, Markdown, or screenshots. Requires Cloudflare OAuth. OAuth 2.1
  • Cloudflare Containers — Spins up a sandboxed container development environment for running code. Requires Cloudflare OAuth. OAuth 2.1

Guides for this server

Watch this server for breaking changes

Share and embed

Maintain Google Kubernetes Engine? Embed this badge in your README. It follows the latest catalog validation result and links to this server profile.

mcptest.io: ready

Latest validation evidence

Validation status
Online when last tested
Validation checked at
Oct 26, 2026 at 11:06 AM
Validation detail
Negotiated stateful MCP 2025-11-25 at https://container.googleapis.com/mcp; detected transport streamable-http; authentication oauth

Tool inventory

What the catalog validator observed on at https://container.googleapis.com/mcp without credentials. The live server may have changed since; connect in the Playground for the current list.

Tools provided by Google Kubernetes Engine 23

Some details were sanitized for public display.

  • apply_k8s_manifestoutputSchema declared

    Applies a Kubernetes manifest to a cluster using server-side apply. This is similar to running `kubectl apply --server-side`.

    Input dryRun?: boolean, forceConflicts?: boolean, parent: string, yamlManifest: string
    • dryRun?: booleanoptional

      Optional. If true, run in dry-run mode.

    • forceConflicts?: booleanoptional

      Optional. If true, force conflicts resolution when applying.

    • parent: stringrequired

      Required. The cluster to apply the manifest to. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • yamlManifest: stringrequired

      Required. The YAML manifest to apply.

  • cancel_operationoutputSchema declared

    Cancels a specific GKE operation.

    Input name: string, parent: string
    • name: stringrequired

      Required. The name (project, location, operation id) of the operation to cancel. Specified in the format `projects/*/locations/*/operations/*`.

    • parent: stringrequired

      Required. The parent cluster of the operation. Specified in the format `projects/*/locations/*/clusters/*`.

  • check_k8s_authoutputSchema declared

    Checks whether an action is allowed on a Kubernetes resource. This is similar to running `kubectl auth can-i`.

    Input namespace?: string, parent: string, resource?: string, resourceType: string, verb: string
    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, "default" is used for namespace-scoped resources.

    • parent: stringrequired

      Required. The cluster to check authorization against. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • resource?: stringoptional

      Optional. The name of the resource to check.

    • resourceType: stringrequired

      Required. The type of resource to check. e.g. "pods", "deployments", "services".

    • verb: stringrequired

      Required. The verb to check. e.g. "get", "list", "watch", "create", "update", "patch", "delete".

  • create_clusteroutputSchema declared

    Creates a new GKE cluster in a given project and location. It's recommended to read the [GKE documentation]([REDACTED URI] to understand cluster configuration options. Cluster creation will default to Autopilot mode, as recommended by GKE best practices. If the user explicitly wants to create a Standard cluster, you need to set autopilot.enabled=false in the cluster configuration. This is similar to running `gcloud container clusters create-auto` or `gcloud container clusters create`.

    Input cluster: string, parent: string
    • cluster: stringrequired

      Required. A [cluster resource]([REDACTED URI] represented as a string using JSON format.

    • parent: stringrequired

      Required. The parent (project and location) where the cluster will be created. Specified in the format `projects/*/locations/*`.

  • create_node_pooloutputSchema declared

    Creates a node pool for a specific GKE cluster.

    Input nodePool: string, parent: string
    • nodePool: stringrequired

      Required. The node pool to create represented as a string using JSON format. The full node pool object can be found at [REDACTED URI]

    • parent: stringrequired

      Required. The parent (project, location, cluster name) where the node pool will be created. Specified in the format `projects/*/locations/*/clusters/*`.

  • delete_k8s_resourceoutputSchema declared

    Deletes a Kubernetes resource from a cluster. This is similar to running `kubectl delete`.

    Input cascade?: string, dryRun?: boolean, name: string, namespace?: string, parent: string, resourceType: string
    • cascade?: stringoptional

      Optional. The cascading deletion policy to use. If not specified, 'background' is used. Valid values are 'background', 'foreground', and 'orphan'.

    • dryRun?: booleanoptional

      Optional. If true, run in dry-run mode.

    • name: stringrequired

      Required. The name of the resource to delete.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, "default" is used.

    • parent: stringrequired

      Required. The cluster, which owns this collection of resources. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • resourceType: stringrequired

      Required. The type of resource to delete. Kubernetes resource/kind name in singular form, lower case. e.g. "pod", "deployment", "service".

  • describe_k8s_resourceoutputSchema declared

    Shows the details of a specific Kubernetes resource. This is similar to running `kubectl describe`.

    Input labelSelector?: string, name?: string, namespace?: string, parent: string, resourceType: string
    • labelSelector?: stringoptional

      Optional. A label selector to filter resources.

    • name?: stringoptional

      Optional. The name of the resource.

    • namespace?: stringoptional

      Optional. The namespace of the resource.

    • parent: stringrequired

      Required. The parent cluster.

    • resourceType: stringrequired

      Required. The type of the resource.

  • get_clusteroutputSchema declared

    Gets the details of a specific GKE cluster.

    Input name: string, readMask?: string
    • name: stringrequired

      Required. The name (project, location, cluster) of the cluster to retrieve. Specified in the format `projects/*/locations/*/clusters/*`.

    • readMask?: stringoptional

      Optional. The field mask to specify the fields to be returned in the response. Use a single "*" to get all fields. Default: autopilot,createTime,currentMasterVersion,currentNodeCount,currentNodeVersion,description,endpoint,fleet,location,name,network,nodePools.locations,nodePools.name,nodePools.status,nodePools.version,releaseChannel,resourceLabels,selfLink,status,statusMessage,subnetwork.

  • get_k8s_cluster_infooutputSchema declared

    Gets cluster endpoint information. This is similar to running `kubectl cluster-info`.

    Input parent: string
    • parent: stringrequired

      Required. The parent cluster. Format: projects/{project}/locations/{location}/clusters/{cluster}

  • get_k8s_logsoutputSchema declared

    Gets logs from a Kubernetes container in a pod. This is similar to running `kubectl logs`.

    Input allContainers?: boolean, container?: string, name: string, namespace?: string, parent: string, previous?: boolean, since?: string, sinceTime?: string, tail?: string, timestamps?: boolean
    • allContainers?: booleanoptional

      Optional. If true, retrieve logs from all containers in the pod.

    • container?: stringoptional

      Optional. The name of the container to retrieve logs from. If not specified, logs from the first container are returned.

    • name: stringrequired

      Required. The name of the resource to retrieve logs from. This can be a pod name (e.g. "my-pod") or a type/name (e.g. "deployment/my-deployment"). If a type is not specified, "pod" is assumed.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, "default" is used.

    • parent: stringrequired

      Required. The cluster to retrieve logs from. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • previous?: booleanoptional

      Optional. If true, retrieve logs from the previous instantiation of the container.

    • since?: stringoptional

      Optional. Retrieve logs since this duration ago (e.g. "1h", "10m").

    • sinceTime?: stringoptional

      Optional. Retrieve logs since this time (RFC3339). e.g. "2024-08-30T06:00:00Z".

    • tail?: stringoptional

      Optional. The number of lines from the end of the logs to show.

    • timestamps?: booleanoptional

      Optional. If true, include timestamps in the log output.

  • get_k8s_resourceoutputSchema declared

    Gets one or more Kubernetes resources from a cluster. Resources can be filtered by type, name, namespace, and label selectors. Returns the resources in YAML format. This is similar to running `kubectl get`.

    Input customColumns?: string, fieldSelector?: string, labelSelector?: string, name?: string, namespace?: string, outputFormat?: string, pageSize?: integer, pageToken?: string, parent: string, resourceType: string
    • customColumns?: stringoptional

      Optional. Custom columns to display in table output. Accepts either kubectl custom-columns format (e.g., "NAME:.metadata.name,IMAGE:.spec.containers[*].image") or comma-separated field names (e.g., "metadata.name,spec.replicas"). When both custom_columns and output_format are specified, output_format is ignored.

    • fieldSelector?: stringoptional

      Optional. A field selector to filter resources.

    • labelSelector?: stringoptional

      Optional. A label selector to filter resources.

    • name?: stringoptional

      Optional. The name of the resource to retrieve. If not specified, all resources of the given type are returned.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, all namespaces are searched.

    • outputFormat?: stringoptional

      Optional. The output format. One of: (table, wide, yaml, json). If not specified, defaults to table. When both custom_columns and output_format are specified, output_format is ignored.

    • pageSize?: integeroptional

      Optional. The maximum number of resources to return. If not specified, 500 is used. The maximum value is 1000; values above 1000 will be coerced to 1000.

    • pageToken?: stringoptional

      Optional. A page token, received from a previous `GetK8SResource` call. Provide this to retrieve the subsequent page of resources when listing resources. Cannot be used when `name` is specified.

    • parent: stringrequired

      Required. The cluster, which owns this collection of resources. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • resourceType: stringrequired

      Required. The type of resource to retrieve. Kubernetes resource/kind name in singular form, lower case. e.g. "pod", "deployment", "service".

  • get_k8s_rollout_statusoutputSchema declared

    Checks the current rollout status of a Kubernetes resource. This is similar to running `kubectl rollout status`.

    Input name: string, namespace?: string, parent: string, resourceType: string
    • name: stringrequired

      Required. The name of the resource to check.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, "default" is used for namespace-scoped resources.

    • parent: stringrequired

      Required. The cluster to check rollout status in. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • resourceType: stringrequired

      Required. The type of resource to check. e.g. "deployment", "daemonset", "statefulset".

  • get_k8s_versionoutputSchema declared

    Retrieves Kubernetes client and server versions for a given cluster. This is similar to running `kubectl version`.

    Input parent: string
    • parent: stringrequired

      Required. The cluster to get version information from, in the format `projects/*/locations/*/clusters/*`.

  • get_node_pooloutputSchema declared

    Gets the details of a specific node pool within a GKE cluster.

    Input name: string
    • name: stringrequired

      Required. The name (project, location, cluster, node pool id) of the node pool to get. Specified in the format `projects/*/locations/*/clusters/*/nodePools/*`.

  • get_operationoutputSchema declared

    Gets the details of a specific GKE operation.

    Input name: string
    • name: stringrequired

      Required. The name (project, location, operation id) of the operation to get. Specified in the format `projects/*/locations/*/operations/*`.

  • list_clustersoutputSchema declared

    Lists GKE clusters in a given project and location. Location can be a region, zone, or '-' for all locations.

    Input parent: string, readMask?: string
    • parent: stringrequired

      Required. The parent (project and location) where the clusters will be listed. Specified in the format `projects/*/locations/*`. Location "-" matches all zones and all regions.

    • readMask?: stringoptional

      Optional. The field mask to specify the fields to be returned in the response. Use a single "*" to get all fields. Default: clusters.autopilot,clusters.createTime,clusters.currentMasterVersion,clusters.currentNodeCount,clusters.currentNodeVersion,clusters.description,clusters.endpoint,clusters.fleet,clusters.location,clusters.name,clusters.network,clusters.nodePools.name,clusters.releaseChannel,clusters.resourceLabels,clusters.selfLink,clusters.status,clusters.statusMessage,clusters.subnetwork,missingZones.

  • list_k8s_api_resourcesoutputSchema declared

    Retrieves the available API groups and resources from a Kubernetes cluster. This is similar to running `kubectl api-resources`.

    Input parent: string
    • parent: stringrequired

      Required. The cluster, which owns this collection of resource types. Format: projects/{project}/locations/{location}/clusters/{cluster}

  • list_k8s_eventsoutputSchema declared

    Retrieves events from a Kubernetes cluster. This is similar to running `kubectl events`.

    Input allNamespaces?: boolean, limit?: string, name?: string, namespace?: string, parent: string, resourceType?: string
    • allNamespaces?: booleanoptional

      Optional. If true, retrieve events from all namespaces.

    • limit?: stringoptional

      Optional. The maximum number of events to return. If not specified, 500 is used.

    • name?: stringoptional

      Optional. The name of the resource to retrieve events for.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified and all_namespaces is false, "default" is used.

    • parent: stringrequired

      Required. The parent cluster. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • resourceType?: stringoptional

      Optional. The type of the resource to retrieve events for.

  • list_node_poolsoutputSchema declared

    Lists the node pools for a specific GKE cluster.

    Input parent: string
    • parent: stringrequired

      Required. The parent (project, location, cluster name) where the node pools will be listed. Specified in the format `projects/*/locations/*/clusters/*`.

  • list_operationsoutputSchema declared

    Lists GKE operations in a given project and location. Location can be a region, zone, or '-' for all locations.

    Input parent: string
    • parent: stringrequired

      Required. The parent (project and location) where the operations will be listed. Specified in the format `projects/*/locations/*`. Location "-" matches all zones and all regions.

  • patch_k8s_resourceoutputSchema declared

    Patches a Kubernetes resource. This is similar to running `kubectl patch`.

    Input name: string, namespace?: string, parent: string, patch: string, patchType?: string, resourceType: string
    • name: stringrequired

      Required. The name of the resource to patch.

    • namespace?: stringoptional

      Optional. The namespace of the resource. If not specified, "default" is used.

    • parent: stringrequired

      Required. The cluster to patch the resource in. Format: projects/{project}/locations/{location}/clusters/{cluster}

    • patch: stringrequired

      Required. The patch to apply in JSON format.

    • patchType?: stringoptional

      Optional. The patch strategy to apply. Valid values are "strategic", "merge", or "json". If not specified, "strategic" patch type will be used.

    • resourceType: stringrequired

      Required. The type of resource to patch. e.g. "pods", "deployments", "services".

  • update_clusteroutputSchema declared

    Updates a specific GKE cluster.

    Input name: string, update: string
    • name: stringrequired

      Required. The name (project, location, cluster) of the cluster to update. Specified in the format `projects/*/locations/*/clusters/*`.

    • update: stringrequired

      Required. A description of the update represented as a string using JSON format. The full update request object can be found at [REDACTED URI] [REDACTED URI]

  • update_node_pooloutputSchema declared

    Updates a specific node pool within a GKE cluster.

    Input name: string, update: string
    • name: stringrequired

      Required. The name (project, location, cluster, node pool) of the node pool to update. Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'.

    • update: stringrequired

      Required. A [node pool update request]([REDACTED URI] represented as a string using JSON format.