Skip to main content
Glama

get_operation

Read-onlyIdempotent

Gets the details of a specific GKE operation.

Input Schema

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

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorsNoErrors encountered during the operation.
operationNoJSON string of the GKE Operation object. See: https://docs.cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.operations

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed21 schema fields changed
    • removedOutput schema / $defs / Metric
      Removed value: -{
      -  "description": "Progress metric is (string, int|float|string) pair.",
      -  "properties": {
      -    "doubleValue": {
      -      "description": "For metrics with floating point value.",
      -      "format": "double",
      -      "type": "number"
      -    },
      -    "intValue": {
      -      "description": "For metrics with integer value.",
      -      "format": "int64",
      -      "type": "string"
      -    },
      -    "name": {
      -      "description": "Required. Metric name, e.g., \"nodes total\", \"percent done\".",
      -      "type": "string"
      -    },
      -    "stringValue": {
      -      "description": "For metrics with custom values (ratios, visual progress, etc.).",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • removedOutput schema / $defs / OperationProgress
      Removed value: -{
      -  "description": "Information about operation (or operation stage) progress.",
      -  "properties": {
      -    "metrics": {
      -      "description": "Progress metric bundle, for example: metrics: [{name: \"nodes done\", int_value: 15}, {name: \"nodes total\", int_value: 32}] or metrics: [{name: \"progress\", double_value: 0.56}, {name: \"progress scale\", double_value: 1.0}]",
      -      "items": {
      -        "$ref": "#/$defs/Metric"
      -      },
      -      "type": "array"
      -    },
      -    "name": {
      -      "description": "A non-parameterized string describing an operation stage. Unset for single-stage operations.",
      -      "type": "string"
      -    },
      -    "stages": {
      -      "description": "Substages of an operation or a stage.",
      -      "items": {
      -        "$ref": "#/$defs/OperationProgress"
      -      },
      -      "type": "array"
      -    },
      -    "status": {
      -      "description": "Status of an operation stage. Unset for single-stage operations.",
      -      "enum": [
      -        "STATUS_UNSPECIFIED",
      -        "PENDING",
      -        "RUNNING",
      -        "DONE",
      -        "ABORTING"
      -      ],
      -      "type": "string",
      -      "x-google-enum-descriptions": [
      -        "Not set.",
      -        "The operation has been created.",
      -        "The operation is currently running.",
      -        "The operation is done, either cancelled or completed.",
      -        "The operation is aborting."
      -      ]
      -    }
      -  },
      -  "type": "object"
      -}
    • removedOutput schema / $defs / StatusCondition
      Removed value: -{
      -  "description": "StatusCondition describes why a cluster or a node pool has a certain status (e.g., ERROR or DEGRADED).",
      -  "properties": {
      -    "canonicalCode": {
      -      "description": "Canonical code of the condition.",
      -      "enum": [
      -        "OK",
      -        "CANCELLED",
      -        "UNKNOWN",
      -        "INVALID_ARGUMENT",
      -        "DEADLINE_EXCEEDED",
      -        "NOT_FOUND",
      -        "ALREADY_EXISTS",
      -        "PERMISSION_DENIED",
      -        "UNAUTHENTICATED",
      -        "RESOURCE_EXHAUSTED",
      -        "FAILED_PRECONDITION",
      -        "ABORTED",
      -        "OUT_OF_RANGE",
      -        "UNIMPLEMENTED",
      -        "INTERNAL",
      -        "UNAVAILABLE",
      -        "DATA_LOSS"
      -      ],
      -      "type": "string",
      -      "x-google-enum-descriptions": [
      -        "Not an error; returned on success. HTTP Mapping: 200 OK",
      -        "The operation was cancelled, typically by the caller. HTTP Mapping: 499 Client Closed Request",
      -        "Unknown error. For example, this error may be returned when a `Status` value received from another address space belongs to an error space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error. HTTP Mapping: 500 Internal Server Error",
      -        "The client specified an invalid argument. Note that this differs from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). HTTP Mapping: 400 Bad Request",
      -        "The deadline expired before the operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. HTTP Mapping: 504 Gateway Timeout",
      -        "Some requested entity (e.g., file or directory) was not found. Note to server developers: if a request is denied for an entire class of users, such as gradual feature rollout or undocumented allowlist, `NOT_FOUND` may be used. If a request is denied for some users within a class of users, such as user-based access control, `PERMISSION_DENIED` must be used. HTTP Mapping: 404 Not Found",
      -        "The entity that a client attempted to create (e.g., file or directory) already exists. HTTP Mapping: 409 Conflict",
      -        "The caller does not have permission to execute the specified operation. `PERMISSION_DENIED` must not be used for rejections caused by exhausting some resource (use `RESOURCE_EXHAUSTED` instead for those errors). `PERMISSION_DENIED` must not be used if the caller can not be identified (use `UNAUTHENTICATED` instead for those errors). This error code does not imply the request is valid or the requested entity exists or satisfies other pre-conditions. HTTP Mapping: 403 Forbidden",
      -        "The request does not have valid authentication credentials for the operation. HTTP Mapping: 401 Unauthorized",
      -        "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. HTTP Mapping: 429 Too Many Requests",
      -        "The operation was rejected because the system is not in a state required for the operation's execution. For example, the directory to be deleted is non-empty, an rmdir operation is applied to a non-directory, etc. Service implementors can use the following guidelines to decide between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: (a) Use `UNAVAILABLE` if the client can retry just the failing call. (b) Use `ABORTED` if the client should retry at a higher level. For example, when a client-specified test-and-set fails, indicating the client should restart a read-modify-write sequence. (c) Use `FAILED_PRECONDITION` if the client should not retry until the system state has been explicitly fixed. For example, if an \"rmdir\" fails because the directory is non-empty, `FAILED_PRECONDITION` should be returned since the client should not retry unless the files are deleted from the directory. HTTP Mapping: 400 Bad Request",
      -        "The operation was aborted, typically due to a concurrency issue such as a sequencer check failure or transaction abort. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 409 Conflict",
      -        "The operation was attempted past the valid range. E.g., seeking or reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate `INVALID_ARGUMENT` if asked to read at an offset that is not in the range [0,2^32-1], but it will generate `OUT_OF_RANGE` if asked to read from an offset past the current file size. There is a fair bit of overlap between `FAILED_PRECONDITION` and `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific error) when it applies so that callers who are iterating through a space can easily look for an `OUT_OF_RANGE` error to detect when they are done. HTTP Mapping: 400 Bad Request",
      -        "The operation is not implemented or is not supported/enabled in this service. HTTP Mapping: 501 Not Implemented",
      -        "Internal errors. This means that some invariants expected by the underlying system have been broken. This error code is reserved for serious errors. HTTP Mapping: 500 Internal Server Error",
      -        "The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 503 Service Unavailable",
      -        "Unrecoverable data loss or corruption. HTTP Mapping: 500 Internal Server Error"
      -      ]
      -    },
      -    "code": {
      -      "deprecated": true,
      -      "description": "Machine-friendly representation of the condition Deprecated. Use canonical_code instead.",
      -      "enum": [
      -        "UNKNOWN",
      -        "GCE_STOCKOUT",
      -        "GKE_SERVICE_ACCOUNT_DELETED",
      -        "GCE_QUOTA_EXCEEDED",
      -        "SET_BY_OPERATOR",
      -        "CLOUD_KMS_KEY_ERROR",
      -        "CA_EXPIRING",
      -        "NODE_SERVICE_ACCOUNT_MISSING_PERMISSIONS",
      -        "CLOUD_KMS_KEY_DESTROYED"
      -      ],
      -      "type": "string",
      -      "x-google-enum-descriptions": [
      -        "UNKNOWN indicates a generic condition.",
      -        "GCE_STOCKOUT indicates that Google Compute Engine resources are temporarily unavailable.",
      -        "GKE_SERVICE_ACCOUNT_DELETED indicates that the user deleted their robot service account.",
      -        "Google Compute Engine quota was exceeded.",
      -        "Cluster state was manually changed by an SRE due to a system logic error.",
      -        "Unable to perform an encrypt operation against the CloudKMS key used for etcd level encryption.",
      -        "Cluster CA is expiring soon.",
      -        "Node service account is missing permissions.",
      -        "Cloud KMS key version used for etcd level encryption has been destroyed. This is a permanent error."
      -      ]
      -    },
      -    "message": {
      -      "description": "Human-friendly representation of the condition",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • changedOutput schema / description
      Previous value: -"This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only."New value: +"MCPOperation wraps the GKE Operation with an errors field."
    • removedOutput schema / properties / clusterConditions
      Removed value: -{
      -  "deprecated": true,
      -  "description": "Which conditions caused the current cluster state. Deprecated. Use field error instead.",
      -  "items": {
      -    "$ref": "#/$defs/StatusCondition"
      -  },
      -  "type": "array"
      -}
    • removedOutput schema / properties / detail
      Removed value: -{
      -  "description": "Output only. Detailed operation progress, if available.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / endTime
      Removed value: -{
      -  "description": "Output only. The time the operation completed, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / error
      Removed value: -{
      -  "$ref": "#/$defs/Status",
      -  "description": "The error result of the operation in case of failure."
      -}
    • addedOutput schema / properties / errors
      Added value: +{
      +  "description": "Errors encountered during the operation.",
      +  "items": {
      +    "$ref": "#/$defs/Status"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / location
      Removed value: -{
      -  "description": "Output only. The name of the Google Compute Engine [zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available) or [region](https://cloud.google.com/compute/docs/regions-zones/regions-zones#available) in which the cluster resides.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / name
      Removed value: -{
      -  "description": "Output only. The server-assigned ID for the operation.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / nodepoolConditions
      Removed value: -{
      -  "deprecated": true,
      -  "description": "Which conditions caused the current node pool state. Deprecated. Use field error instead.",
      -  "items": {
      -    "$ref": "#/$defs/StatusCondition"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / operation
      Added value: +{
      +  "description": "JSON string of the GKE Operation object. See: https://docs.cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.operations",
      +  "type": "string"
      +}
    • removedOutput schema / properties / operationType
      Removed value: -{
      -  "description": "Output only. The operation type.",
      -  "enum": [
      -    "TYPE_UNSPECIFIED",
      -    "CREATE_CLUSTER",
      -    "DELETE_CLUSTER",
      -    "UPGRADE_MASTER",
      -    "UPGRADE_NODES",
      -    "REPAIR_CLUSTER",
      -    "UPDATE_CLUSTER",
      -    "CREATE_NODE_POOL",
      -    "DELETE_NODE_POOL",
      -    "SET_NODE_POOL_MANAGEMENT",
      -    "AUTO_REPAIR_NODES",
      -    "AUTO_UPGRADE_NODES",
      -    "SET_LABELS",
      -    "SET_MASTER_AUTH",
      -    "SET_NODE_POOL_SIZE",
      -    "SET_NETWORK_POLICY",
      -    "SET_MAINTENANCE_POLICY",
      -    "RESIZE_CLUSTER",
      -    "FLEET_FEATURE_UPGRADE"
      -  ],
      -  "readOnly": true,
      -  "type": "string",
      -  "x-google-enum-deprecated": [
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    false,
      -    true,
      -    true,
      -    true,
      -    false,
      -    true,
      -    true,
      -    false,
      -    false
      -  ],
      -  "x-google-enum-descriptions": [
      -    "Not set.",
      -    "The cluster is being created. The cluster should be assumed to be unusable until the operation finishes. In the event of the operation failing, the cluster will enter the ERROR state and eventually be deleted.",
      -    "The cluster is being deleted. The cluster should be assumed to be unusable as soon as this operation starts. In the event of the operation failing, the cluster will enter the ERROR state and the deletion will be automatically retried until completed.",
      -    "The cluster version is being updated. Note that this includes \"upgrades\" to the same version, which are simply a recreation. This also includes [auto-upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades#upgrading_automatically). For more details, see [documentation on cluster upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades#cluster_upgrades).",
      -    "A node pool is being updated. Despite calling this an \"upgrade\", this includes most forms of updates to node pools. This also includes [auto-upgrades](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-upgrades). This operation sets the progress field and may be canceled. The upgrade strategy depends on [node pool configuration](https://cloud.google.com/kubernetes-engine/docs/concepts/node-pool-upgrade-strategies). The nodes are generally still usable during this operation.",
      -    "A problem has been detected with the control plane and is being repaired. This operation type is initiated by GKE. For more details, see [documentation on repairs](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions#repairs).",
      -    "The cluster is being updated. This is a broad category of operations and includes operations that only change metadata as well as those that must recreate the entire cluster. If the control plane must be recreated, this will cause temporary downtime for zonal clusters. Some features require recreating the nodes as well. Those will be recreated as separate operations and the update may not be completely functional until the node pools recreations finish. Node recreations will generally follow [maintenance policies](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions). Some GKE-initiated operations use this type. This includes certain types of auto-upgrades and incident mitigations.",
      -    "A node pool is being created. The node pool should be assumed to be unusable until this operation finishes. In the event of an error, the node pool may be partially created. If enabled, [node autoprovisioning](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning) may have automatically initiated such operations.",
      -    "The node pool is being deleted. The node pool should be assumed to be unusable as soon as this operation starts.",
      -    "The node pool's manamagent field is being updated. These operations only update metadata and may be concurrent with most other operations.",
      -    "A problem has been detected with nodes and [they are being repaired](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair). This operation type is initiated by GKE, typically automatically. This operation may be concurrent with other operations and there may be multiple repairs occurring on the same node pool.",
      -    "Unused. Automatic node upgrade uses UPGRADE_NODES.",
      -    "Unused. Updating labels uses UPDATE_CLUSTER.",
      -    "Unused. Updating master auth uses UPDATE_CLUSTER.",
      -    "The node pool is being resized. With the exception of resizing to or from size zero, the node pool is generally usable during this operation.",
      -    "Unused. Updating network policy uses UPDATE_CLUSTER.",
      -    "Unused. Updating maintenance policy uses UPDATE_CLUSTER.",
      -    "The control plane is being resized. This operation type is initiated by GKE. These operations are often performed preemptively to ensure that the control plane has sufficient resources and is not typically an indication of issues. For more details, see [documentation on resizes](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions#repairs).",
      -    "Fleet features of GKE Enterprise are being upgraded. The cluster should be assumed to be blocked for other upgrades until the operation finishes."
      -  ]
      -}
    • removedOutput schema / properties / progress
      Removed value: -{
      -  "$ref": "#/$defs/OperationProgress",
      -  "description": "Output only. Progress information for an operation.",
      -  "readOnly": true
      -}
    • removedOutput schema / properties / selfLink
      Removed value: -{
      -  "description": "Output only. Server-defined URI for the operation. Example: `https://container.googleapis.com/v1alpha1/projects/123/locations/us-central1/operations/operation-123`.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / startTime
      Removed value: -{
      -  "description": "Output only. The time the operation started, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / status
      Removed value: -{
      -  "description": "Output only. The current status of the operation.",
      -  "enum": [
      -    "STATUS_UNSPECIFIED",
      -    "PENDING",
      -    "RUNNING",
      -    "DONE",
      -    "ABORTING"
      -  ],
      -  "readOnly": true,
      -  "type": "string",
      -  "x-google-enum-descriptions": [
      -    "Not set.",
      -    "The operation has been created.",
      -    "The operation is currently running.",
      -    "The operation is done, either cancelled or completed.",
      -    "The operation is aborting."
      -  ]
      -}
    • removedOutput schema / properties / statusMessage
      Removed value: -{
      -  "deprecated": true,
      -  "description": "Output only. If an error has occurred, a textual description of the error. Deprecated. Use the field error instead.",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / targetLink
      Removed value: -{
      -  "description": "Output only. Server-defined URI for the target of the operation. The format of this is a URI to the resource being modified (such as a cluster, node pool, or node). For node pool repairs, there may be multiple nodes being repaired, but only one will be the target. Examples: - ## `https://container.googleapis.com/v1/projects/123/locations/us-central1/clusters/my-cluster` ## `https://container.googleapis.com/v1/projects/123/zones/us-central1-c/clusters/my-cluster/nodePools/my-np` `https://container.googleapis.com/v1/projects/123/zones/us-central1-c/clusters/my-cluster/nodePools/my-np/node/my-node`",
      -  "readOnly": true,
      -  "type": "string"
      -}
    • removedOutput schema / properties / zone
      Removed value: -{
      -  "deprecated": true,
      -  "description": "Output only. The name of the Google Compute Engine [zone](https://cloud.google.com/compute/docs/zones#available) in which the operation is taking place. This field is deprecated, use location instead.",
      -  "readOnly": true,
      -  "type": "string"
      -}
  2. First observed

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds no behavioral context beyond that, such as return behavior, error cases, or resource implications, providing no extra disclosure beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that directly states the tool's purpose. No filler or redundant information, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter schema, strong annotations, and presence of an output schema, the description is fully adequate. It tells the agent what the tool does and the schema covers invocation details, so no further context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter 'name' is well-documented with format details. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Gets') and resource ('details of a specific GKE operation'), clearly distinguishing it from sibling tools like list_operations or cancel_operation. It states exactly what the tool does with no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a single GKE operation by name, which is clear context. However, it does not explicitly mention alternatives or when not to use it, such as 'use list_operations to list all operations'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.6/5.0
Disambiguation4/5

Most tools target distinct actions and resources, but a few pairs could confuse agents, such as get_cluster (GKE cluster details) vs get_k8s_cluster_info (kubectl cluster-info), or apply_k8s_manifest vs patch_k8s_resource. Overall, descriptions help clarify the differences.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in lowercase snake_case (e.g., create_cluster, list_node_pools, get_k8s_logs). There are no mixed conventions or unpredictable naming variations.

Tool Count4/5

With 23 tools, the server covers both GKE cluster management and in-cluster Kubernetes operations, which justifies the count. It is slightly on the heavier side but remains within a reasonable scope for such a broad domain.

Completeness3/5

The tool surface covers create, read, update, and list operations for clusters and node pools, but notably lacks delete_cluster and delete_node_pool. This leaves an obvious lifecycle gap that agents cannot work around without additional tooling.

Resources