[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698Z0ZZ4F68A2MZ4WRKWMJC":3,"skill-same:01M698Z0ZZ4F68A2MZ4WRKWMJC":110},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M698Z0ZZ4F68A2MZ4WRKWMJC","api-gateway-mcp-server",null,"Configures Google Cloud API Gateway to act as a remote Model Context Protocol (MCP) server (Public Preview) that exposes REST APIs as agent tools over HTTP (POST \u002Fmcp). Use when migrating OpenAPI 2.0 specs to OpenAPI 3.x for MCP, annotating specs with x-google-api-management.mcp and x-google-mcp-tool, securing tools\u002Flist with JWTs or API keys, connecting Google ADK (McpToolset) or Apigee API hub and Agent Registry, or troubleshooting MCP JSON-RPC errors (-32601, -32602, -32000). Do not use for Apigee X proxy bundles, outbound LLM model routing, or GKE Gateway API.","google\u002Fskills","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698WR0H76ENHE587T9EJT89",24122,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,9],"api gateway mcp server","mcp server","api gateway","gateway","server","MCP","api","gke","when","api keys","errors","remote","outbound","preview","agent registry","model","model context protocol","google cloud","adk","2026-11-10 10:12:30",false,"---\nname: api-gateway-mcp-server\nmetadata:\n  version: \"1.0.1\"\n  category: AiAndMachineLearning\ndescription: >-\n  Configures Google Cloud API Gateway to act as a remote Model Context Protocol\n  (MCP) server (Public Preview) that exposes REST APIs as agent tools over\n  HTTP (POST \u002Fmcp). Use when migrating OpenAPI 2.0 specs\n  to OpenAPI 3.x for MCP, annotating specs with x-google-api-management.mcp\n  and x-google-mcp-tool, securing tools\u002Flist with JWTs or API keys,\n  connecting Google ADK (McpToolset) or Apigee API hub and Agent Registry, or\n  troubleshooting MCP JSON-RPC errors (-32601, -32602, -32000). Do not use for\n  Apigee X proxy bundles, outbound LLM model routing, or GKE Gateway API.\n---\n\n# API Gateway Remote MCP Server (Public Preview)\n\nThis skill converts new or existing REST APIs on Google Cloud API Gateway into remote Model Context Protocol (MCP) servers (`POST https:\u002F\u002F{default_hostname}\u002Fmcp`, **Public Preview**). By annotating an OpenAPI 3.x (3.0.x or 3.1.x) specification with `x-google-api-management.mcp` and `x-google-mcp-tool`, API Gateway translates MCP JSON-RPC 2.0 requests (`initialize`, `notifications\u002Finitialized`, `tools\u002Flist`, `tools\u002Fcall`) into standard HTTP REST requests to your backend while enforcing existing authentication and quota policies.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you\nMUST read [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with\n`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:api-gateway-mcp-server)\"`\nand append `agent-skills\u002F1.0 (skill:api-gateway-mcp-server)` to `User-Agent` headers.\n\n## Prerequisites\n\n1. **Install the Google Cloud CLI and the validator dependency:**\n   - Install the [Google Cloud CLI](https:\u002F\u002Fdocs.cloud.google.com\u002Fsdk\u002Fdocs\u002Finstall-sdk.md.txt). Then update it to the latest version with `gcloud components update`. An old CLI can fail when it uploads an OpenAPI 3.x API config.\n   - Install Python 3.10 or later and `PyYAML` for the local OpenAPI MCP validator script:\n     ```bash\n     pip install \"PyYAML>=6.0,\u003C7.0\"\n     ```\n2. **Authenticate your environment:**\n   - Local CLI session: `gcloud auth login`\n   - Application Default Credentials (SDKs \u002F ADK): `gcloud auth application-default login`\n3. **Select or create a project, confirm billing, and pick a supported gateway location:**\n   - Select an existing project (`gcloud config set project {project_id}`) or create one (`gcloud projects create {project_id}`).\n   - Confirm that an active billing account is linked to `{project_id}`. API Gateway has a free monthly allowance of API calls for each billing account, but you still need an active billing account to deploy. Calls above the allowance and network data transfer out are charged. For current prices, see [API Gateway pricing](https:\u002F\u002Fcloud.google.com\u002Fapi-gateway\u002Fpricing).\n   - Use `us-central1` as the default `--location` for gateway commands. For the other supported regions, see [API Gateway deployment model](https:\u002F\u002Fdocs.cloud.google.com\u002Fapi-gateway\u002Fdocs\u002Fdeployment-model.md.txt).\n4. **Enable the required Google Cloud APIs:**\n   ```bash\n   gcloud services enable \\\n     apigateway.googleapis.com \\\n     servicemanagement.googleapis.com \\\n     servicecontrol.googleapis.com \\\n     --project={project_id}\n   ```\n   For API hub discovery (optional), enable the API hub API in the API hub host project: `gcloud services enable apihub.googleapis.com --project={hub_project_id}`. To query Agent Registry (optional), also run `gcloud services enable agentregistry.googleapis.com --project={project_id}`.\n5. **Verify the IAM roles (use the most restrictive role for each step):**\n   - To create and update the API, API configs, and gateways: API Gateway Admin (`roles\u002Fapigateway.admin`) on `{project_id}`. To run the `gcloud services enable` commands: Service Usage Admin (`roles\u002Fserviceusage.serviceUsageAdmin`) on that project.\n   - To reference the gateway service account in an API config: Service Account User (`roles\u002Fiam.serviceAccountUser`) on `{gateway_sa_name}@{project_id}.iam.gserviceaccount.com`.\n   - For a Cloud Run backend: grant the gateway service account the Cloud Run Invoker role (`roles\u002Frun.invoker`) on the service.\n   - To mint test ID tokens as a caller service account: Service Account Token Creator (`roles\u002Fiam.serviceAccountTokenCreator`) on `{caller_sa_email}`.\n   - Reference: [Configure the development environment](https:\u002F\u002Fdocs.cloud.google.com\u002Fapi-gateway\u002Fdocs\u002Fconfigure-dev-env.md.txt).\n\n## Decision Matrix: MCP Server Configuration and Client Integration\n\n| Task | Required Mechanism | Critical Guardrail | Detailed Reference |\n| --- | --- | --- | --- |\n| Migrate OpenAPI 2.0 (`swagger: \"2.0\"`) or author OpenAPI 3.x for MCP | Root `x-google-api-management.mcp` + named `backends` + operation-level `x-google-mcp-tool` | NEVER add MCP extensions to an OpenAPI 2.0 spec. **Rationale:** MCP is not supported for OpenAPI 2.0. Use OpenAPI 3.0.x or 3.1.x, and deploy the spec with `gcloud api-gateway api-configs create`. Keep all MCP operations in one OpenAPI document: if an API config has several documents, API Gateway serves the MCP tools of only one of them. | [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) |\n| Optimize tool names, descriptions, and schemas for LLM tool selection | `x-google-mcp-tool` (`name`, `description`, `false`) + described `requestBody` properties | Every operation MUST have an `operationId`, with or without MCP. Every exposed tool MUST resolve to a unique name that matches `[A-Za-z0-9_.-]{1,128}` (`x-google-mcp-tool.name`, or else the `operationId`), a non-empty description, and a non-empty response body (`HTTP 204` is unsupported). Only `GET`, `POST`, `PUT`, `PATCH`, and `DELETE` operations can be tools, and a gateway serves at most 1,000 tools. API Gateway rejects complex nested schemas when you create the API config, but a simple nested object body works. In OpenAPI 3.1, give each schema one `type`, because API Gateway also rejects a type list such as `type: [\"string\", \"null\"]`. Describe each property, and check each tool's `inputSchema` in `tools\u002Flist` after you deploy. | [OpenAPI Agent Tool Optimizer](references\u002Fopenapi-agent-tool-optimizer.md) |\n| Secure `tools\u002Flist` and hide internal\u002Fadmin routes | `x-google-api-management.mcp.tools-list.security` (exactly one JWT or API key scheme; a JWT scheme is also listed in root `security`) + `x-google-mcp-tool: false` | `tools\u002Flist` is unauthenticated by default. It accepts one JWT scheme, or one API key scheme sent in the `x-api-key` header. API Gateway rejects a config whose JWT `tools-list.security` scheme is missing from the root `security` list, and that root entry also requires the JWT on every REST operation without its own `security`. If the root list already has an API key scheme, add the JWT to the same requirement object (AND): API Gateway does not support alternative (OR) requirements with an API key. An `mcp` object (for `tools-list`) also enables MCP for every eligible operation, so opt out each operation that agents must not use. `x-google-mcp-tool: false` hides a route from MCP only; keep REST `security` on admin routes. | [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) |\n| Connect Google ADK (`McpToolset`) and discover in API hub \u002F Agent Registry | `McpToolset` (`StreamableHTTPConnectionParams`) + API hub project attachment | No separate registration step is needed. After you attach the API Gateway project to API hub, the MCP server appears in API hub as `{your_api} (MCP)` and in Agent Registry automatically. | [ADK and API Hub Discovery](references\u002Fadk-and-api-hub-discovery.md) |\n| Verify `\u002Fmcp` JSON-RPC lifecycle and troubleshoot `-32601` \u002F `-32602` \u002F `-32000` errors | `POST https:\u002F\u002F{default_hostname}\u002Fmcp` with `MCP-Protocol-Version: 2025-11-25` | Keep `\u002Fmcp` at the host root: a `servers` base path (such as `\u002Fv2`) applies to REST paths only, and `{basepath}\u002Fmcp` returns HTTP 404. Nest JSON request bodies under `params.arguments.body` (`{\"body\": {...}}`). NEVER combine `x-google-api-management.mcp` with `x-google-model-router` in one config. **Rationale:** API Gateway does not allow MCP and model routing in the same API config. | [MCP Verification and Troubleshooting](references\u002Fmcp-limitations-and-troubleshooting.md) |\n\n## Execution Workflow and Validation Loop\n\n1. **Upgrade and annotate the OpenAPI 3.x specification:**\n   - The references in this skill contain the conversion rules: the [Swagger 2.0 Construct Conversion Map](references\u002Fopenapi-v2-to-v3-mcp-migration.md#swagger-20-construct-conversion-map) covers each Swagger 2.0 construct, and the [Complete Converted Example](references\u002Fopenapi-v2-to-v3-mcp-migration.md#complete-converted-example) shows a finished spec with a Google ID token scheme. Use them before you search other sources.\n   - Follow [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) and [OpenAPI Agent Tool Optimizer](references\u002Fopenapi-agent-tool-optimizer.md) to set `openapi` to a 3.0.x or 3.1.x version (the examples use `3.0.4`), remove unsupported OpenAPI 2.0 fields (`x-google-allow`), define `x-google-api-management.backends` (with `jwtAudience` or `disableAuth`), configure `x-google-api-management.mcp.tools-list.security` with exactly one JWT or API key scheme (add a JWT scheme to the root `security` list too, in the same requirement object as any API key scheme), author `x-google-mcp-tool` descriptions stating *when and why* to invoke each tool, and opt out administrative routes (`x-google-mcp-tool: false`).\n   - Before you deploy, give the user a short summary that states each of these points, and get approval:\n     - MCP is not supported for OpenAPI 2.0, so you converted the spec to OpenAPI 3.x.\n     - Which operations you exposed as tools, and which you opted out with `x-google-mcp-tool: false`. Opted-out operations stay on REST.\n     - If `tools\u002Flist` uses a JWT scheme, the root `security` entry makes every REST operation without its own `security` require the JWT. The gateway rejects REST callers without it.\n     - The MCP endpoint is `https:\u002F\u002F{default_hostname}\u002Fmcp`, at the host root even when the spec sets a `servers` base path.\n     - The limits that apply: only `GET`, `POST`, `PUT`, `PATCH`, and `DELETE` operations can be tools, a gateway serves at most 1,000 tools, request parameters must be primitive types, API Gateway rejects complex nested schemas and OpenAPI 3.1 type lists (such as `type: [\"string\", \"null\"]`) when you create the API config, tools cannot return `HTTP 204`, and MCP is stateless with UTF-8 text responses only.\n   - Give the same points when the user only asks for the converted spec or for advice, without a deploy.\n   - Preserve exact quota metric names in `x-google-api-management.metrics` across API configs so existing gateways do not fail with HTTP 500 `Failed to call Service Control Quota`.\n2. **Run the deterministic MCP OpenAPI validation loop before creating the API config:**\n   - Execute `scripts\u002Fvalidate_mcp_openapi.py` on `{candidate_openapi_spec}`:\n     ```bash\n     python3 scripts\u002Fvalidate_mcp_openapi.py --spec={candidate_openapi_spec}\n     ```\n   - If `scripts\u002Fvalidate_mcp_openapi.py` exits with code `1` (`status: \"FAIL\"`), fix every reported error in `{candidate_openapi_spec}` (such as OpenAPI 2.0 syntax, `x-google-allow`, path-level `x-google-mcp-tool`, undefined backend names, an operation without an `operationId`, missing descriptions, invalid or duplicate tool names, a header parameter with the reserved `x-google-` prefix, a `tools-list.security` scheme that is neither an `oauth2` JWT nor an `apiKey` scheme, a JWT `tools-list.security` scheme missing from the root `security` list, alternative (OR) security requirements with an API key, or an `x-google-model-router` operation in an MCP spec) and re-run the script until it exits with code `0` (`status: \"PASS\"`). If it exits with code `2`, fix the file path or YAML syntax error printed to stderr.\n   - Read every warning (such as an `HTTP 204` response, a request parameter that is not a primitive type, or operations that an `mcp` object exposes by default). Fix it, or tell the user why you keep it.\n3. **Create the API (if new), create the API config, deploy the gateway, and enable the managed service (request human approval before updating a production gateway):**\n   ```bash\n   gcloud api-gateway apis create {api_id} --project={project_id}\n\n   gcloud api-gateway api-configs create {config_id} \\\n     --api={api_id} \\\n     --openapi-spec={candidate_openapi_spec} \\\n     --backend-auth-service-account={gateway_sa_name}@{project_id}.iam.gserviceaccount.com \\\n     --project={project_id}\n\n   gcloud api-gateway gateways update {gateway_id} \\\n     --api={api_id} \\\n     --api-config={config_id} \\\n     --location={region} \\\n     --project={project_id}\n\n   gcloud services enable $(gcloud api-gateway apis describe {api_id} --project={project_id} --format=\"value(managedService)\") --project={project_id}\n   ```\n    *(For a brand-new gateway, run `gcloud api-gateway gateways create {gateway_id} ...` instead of `gateways update`).*\n   - Run one `api-configs create` at a time per API. Wait for it to finish before you start the next one, because API Gateway creates only one config for an API at a time. A complex API config can take up to ten minutes to create.\n   - If clients use API keys from other projects, enable the managed service in each of those projects too. API Gateway rejects an API key unless the API is enabled in the project that created the key.\n4. **Verify the JSON-RPC 2.0 lifecycle and connect ADK \u002F API hub:**\n   - Send every probe to `https:\u002F\u002F{default_hostname}\u002Fmcp`, even when the spec sets a `servers` base path.\n   - An HTML `404 Page not found` means that the gateway may not be deployed correctly. Check that the gateway state is `ACTIVE` and that the last create or update finished, and retry before you change the config. During a gateway update, some requests can still reach the previous API config. A JSON 404 (`The current request is not defined by this API.`) means that the active config does not define the path.\n   - If `tools\u002Flist` requires a JWT, mint a Google ID token whose audience is in `x-google-auth.audiences`: `gcloud auth print-identity-token --impersonate-service-account={caller_sa_email} --audiences={jwt_audience}`. If `tools\u002Flist` requires an API key, send it in the `x-api-key` header.\n   - Run the `initialize`, `notifications\u002Finitialized`, `tools\u002Flist`, and `tools\u002Fcall` verification probes in [MCP Verification and Troubleshooting](references\u002Fmcp-limitations-and-troubleshooting.md).\n   - Connect Google ADK (`McpToolset`) and verify automatic catalog discovery in Apigee API hub (`{your_api} (MCP)`) and Agent Registry using [ADK and API Hub Discovery](references\u002Fadk-and-api-hub-discovery.md).\n\n## Pre-Deployment Checklist\n\n- [ ] Specification version is `openapi: 3.0.x` or `3.1.x` (not `swagger: \"2.0\"`), omits `x-google-allow`, and does not contain `x-google-model-router`.\n- [ ] `python3 scripts\u002Fvalidate_mcp_openapi.py --spec={candidate_openapi_spec}` returns `status: \"PASS\"` (exit code `0`).\n- [ ] Every operation has an `operationId`, and all MCP operations are in one OpenAPI document.\n- [ ] `x-google-api-management.mcp.tools-list.security` names exactly one scheme: an `oauth2` JWT scheme with `x-google-auth` that the root `security` list also references, or an `apiKey` scheme with `in: header` and `name: x-api-key`.\n- [ ] If `tools\u002Flist` uses a JWT scheme, the user knows that REST operations without their own `security` now require that JWT.\n- [ ] Administrative, health-check, and `HTTP 204` endpoints are opted out with `x-google-mcp-tool: false`, and opted-out admin paths remain protected on REST.\n- [ ] MCP clients call `https:\u002F\u002F{default_hostname}\u002Fmcp` (not `{basepath}\u002Fmcp`), nest `tools\u002Fcall` JSON request bodies inside `params.arguments.body`, and send `MCP-Protocol-Version: 2025-11-25`.\n\n## Resource Cleanup\n\nTo avoid ongoing charges when tearing down a test or staging environment, request human approval and delete the gateway, API config, API, and service account in dependency order:\n\n```bash\ngcloud api-gateway gateways delete {gateway_id} --location={region} --project={project_id}\ngcloud api-gateway api-configs delete {config_id} --api={api_id} --project={project_id}\ngcloud api-gateway apis delete {api_id} --project={project_id}\ngcloud iam service-accounts delete {gateway_sa_name}@{project_id}.iam.gserviceaccount.com --project={project_id}\n```\n","# API Gateway Remote MCP Server (Public Preview)\n\nThis skill converts new or existing REST APIs on Google Cloud API Gateway into remote Model Context Protocol (MCP) servers (`POST https:\u002F\u002F{default_hostname}\u002Fmcp`, **Public Preview**). By annotating an OpenAPI 3.x (3.0.x or 3.1.x) specification with `x-google-api-management.mcp` and `x-google-mcp-tool`, API Gateway translates MCP JSON-RPC 2.0 requests (`initialize`, `notifications\u002Finitialized`, `tools\u002Flist`, `tools\u002Fcall`) into standard HTTP REST requests to your backend while enforcing existing authentication and quota policies.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you\nMUST read [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with\n`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:api-gateway-mcp-server)\"`\nand append `agent-skills\u002F1.0 (skill:api-gateway-mcp-server)` to `User-Agent` headers.\n\n## Prerequisites\n\n1. **Install the Google Cloud CLI and the validator dependency:**\n   - Install the [Google Cloud CLI](https:\u002F\u002Fdocs.cloud.google.com\u002Fsdk\u002Fdocs\u002Finstall-sdk.md.txt). Then update it to the latest version with `gcloud components update`. An old CLI can fail when it uploads an OpenAPI 3.x API config.\n   - Install Python 3.10 or later and `PyYAML` for the local OpenAPI MCP validator script:\n     ```bash\n     pip install \"PyYAML>=6.0,\u003C7.0\"\n     ```\n2. **Authenticate your environment:**\n   - Local CLI session: `gcloud auth login`\n   - Application Default Credentials (SDKs \u002F ADK): `gcloud auth application-default login`\n3. **Select or create a project, confirm billing, and pick a supported gateway location:**\n   - Select an existing project (`gcloud config set project {project_id}`) or create one (`gcloud projects create {project_id}`).\n   - Confirm that an active billing account is linked to `{project_id}`. API Gateway has a free monthly allowance of API calls for each billing account, but you still need an active billing account to deploy. Calls above the allowance and network data transfer out are charged. For current prices, see [API Gateway pricing](https:\u002F\u002Fcloud.google.com\u002Fapi-gateway\u002Fpricing).\n   - Use `us-central1` as the default `--location` for gateway commands. For the other supported regions, see [API Gateway deployment model](https:\u002F\u002Fdocs.cloud.google.com\u002Fapi-gateway\u002Fdocs\u002Fdeployment-model.md.txt).\n4. **Enable the required Google Cloud APIs:**\n   ```bash\n   gcloud services enable \\\n     apigateway.googleapis.com \\\n     servicemanagement.googleapis.com \\\n     servicecontrol.googleapis.com \\\n     --project={project_id}\n   ```\n   For API hub discovery (optional), enable the API hub API in the API hub host project: `gcloud services enable apihub.googleapis.com --project={hub_project_id}`. To query Agent Registry (optional), also run `gcloud services enable agentregistry.googleapis.com --project={project_id}`.\n5. **Verify the IAM roles (use the most restrictive role for each step):**\n   - To create and update the API, API configs, and gateways: API Gateway Admin (`roles\u002Fapigateway.admin`) on `{project_id}`. To run the `gcloud services enable` commands: Service Usage Admin (`roles\u002Fserviceusage.serviceUsageAdmin`) on that project.\n   - To reference the gateway service account in an API config: Service Account User (`roles\u002Fiam.serviceAccountUser`) on `{gateway_sa_name}@{project_id}.iam.gserviceaccount.com`.\n   - For a Cloud Run backend: grant the gateway service account the Cloud Run Invoker role (`roles\u002Frun.invoker`) on the service.\n   - To mint test ID tokens as a caller service account: Service Account Token Creator (`roles\u002Fiam.serviceAccountTokenCreator`) on `{caller_sa_email}`.\n   - Reference: [Configure the development environment](https:\u002F\u002Fdocs.cloud.google.com\u002Fapi-gateway\u002Fdocs\u002Fconfigure-dev-env.md.txt).\n\n## Decision Matrix: MCP Server Configuration and Client Integration\n\n| Task | Required Mechanism | Critical Guardrail | Detailed Reference |\n| --- | --- | --- | --- |\n| Migrate OpenAPI 2.0 (`swagger: \"2.0\"`) or author OpenAPI 3.x for MCP | Root `x-google-api-management.mcp` + named `backends` + operation-level `x-google-mcp-tool` | NEVER add MCP extensions to an OpenAPI 2.0 spec. **Rationale:** MCP is not supported for OpenAPI 2.0. Use OpenAPI 3.0.x or 3.1.x, and deploy the spec with `gcloud api-gateway api-configs create`. Keep all MCP operations in one OpenAPI document: if an API config has several documents, API Gateway serves the MCP tools of only one of them. | [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) |\n| Optimize tool names, descriptions, and schemas for LLM tool selection | `x-google-mcp-tool` (`name`, `description`, `false`) + described `requestBody` properties | Every operation MUST have an `operationId`, with or without MCP. Every exposed tool MUST resolve to a unique name that matches `[A-Za-z0-9_.-]{1,128}` (`x-google-mcp-tool.name`, or else the `operationId`), a non-empty description, and a non-empty response body (`HTTP 204` is unsupported). Only `GET`, `POST`, `PUT`, `PATCH`, and `DELETE` operations can be tools, and a gateway serves at most 1,000 tools. API Gateway rejects complex nested schemas when you create the API config, but a simple nested object body works. In OpenAPI 3.1, give each schema one `type`, because API Gateway also rejects a type list such as `type: [\"string\", \"null\"]`. Describe each property, and check each tool's `inputSchema` in `tools\u002Flist` after you deploy. | [OpenAPI Agent Tool Optimizer](references\u002Fopenapi-agent-tool-optimizer.md) |\n| Secure `tools\u002Flist` and hide internal\u002Fadmin routes | `x-google-api-management.mcp.tools-list.security` (exactly one JWT or API key scheme; a JWT scheme is also listed in root `security`) + `x-google-mcp-tool: false` | `tools\u002Flist` is unauthenticated by default. It accepts one JWT scheme, or one API key scheme sent in the `x-api-key` header. API Gateway rejects a config whose JWT `tools-list.security` scheme is missing from the root `security` list, and that root entry also requires the JWT on every REST operation without its own `security`. If the root list already has an API key scheme, add the JWT to the same requirement object (AND): API Gateway does not support alternative (OR) requirements with an API key. An `mcp` object (for `tools-list`) also enables MCP for every eligible operation, so opt out each operation that agents must not use. `x-google-mcp-tool: false` hides a route from MCP only; keep REST `security` on admin routes. | [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) |\n| Connect Google ADK (`McpToolset`) and discover in API hub \u002F Agent Registry | `McpToolset` (`StreamableHTTPConnectionParams`) + API hub project attachment | No separate registration step is needed. After you attach the API Gateway project to API hub, the MCP server appears in API hub as `{your_api} (MCP)` and in Agent Registry automatically. | [ADK and API Hub Discovery](references\u002Fadk-and-api-hub-discovery.md) |\n| Verify `\u002Fmcp` JSON-RPC lifecycle and troubleshoot `-32601` \u002F `-32602` \u002F `-32000` errors | `POST https:\u002F\u002F{default_hostname}\u002Fmcp` with `MCP-Protocol-Version: 2025-11-25` | Keep `\u002Fmcp` at the host root: a `servers` base path (such as `\u002Fv2`) applies to REST paths only, and `{basepath}\u002Fmcp` returns HTTP 404. Nest JSON request bodies under `params.arguments.body` (`{\"body\": {...}}`). NEVER combine `x-google-api-management.mcp` with `x-google-model-router` in one config. **Rationale:** API Gateway does not allow MCP and model routing in the same API config. | [MCP Verification and Troubleshooting](references\u002Fmcp-limitations-and-troubleshooting.md) |\n\n## Execution Workflow and Validation Loop\n\n1. **Upgrade and annotate the OpenAPI 3.x specification:**\n   - The references in this skill contain the conversion rules: the [Swagger 2.0 Construct Conversion Map](references\u002Fopenapi-v2-to-v3-mcp-migration.md#swagger-20-construct-conversion-map) covers each Swagger 2.0 construct, and the [Complete Converted Example](references\u002Fopenapi-v2-to-v3-mcp-migration.md#complete-converted-example) shows a finished spec with a Google ID token scheme. Use them before you search other sources.\n   - Follow [OpenAPI 2.0 to 3.x Migration](references\u002Fopenapi-v2-to-v3-mcp-migration.md) and [OpenAPI Agent Tool Optimizer](references\u002Fopenapi-agent-tool-optimizer.md) to set `openapi` to a 3.0.x or 3.1.x version (the examples use `3.0.4`), remove unsupported OpenAPI 2.0 fields (`x-google-allow`), define `x-google-api-management.backends` (with `jwtAudience` or `disableAuth`), configure `x-google-api-management.mcp.tools-list.security` with exactly one JWT or API key scheme (add a JWT scheme to the root `security` list too, in the same requirement object as any API key scheme), author `x-google-mcp-tool` descriptions stating *when and why* to invoke each tool, and opt out administrative routes (`x-google-mcp-tool: false`).\n   - Before you deploy, give the user a short summary that states each of these points, and get approval:\n     - MCP is not supported for OpenAPI 2.0, so you converted the spec to OpenAPI 3.x.\n     - Which operations you exposed as tools, and which you opted out with `x-google-mcp-tool: false`. Opted-out operations stay on REST.\n     - If `tools\u002Flist` uses a JWT scheme, the root `security` entry makes every REST operation without its own `security` require the JWT. The gateway rejects REST callers without it.\n     - The MCP endpoint is `https:\u002F\u002F{default_hostname}\u002Fmcp`, at the host root even when the spec sets a `servers` base path.\n     - The limits that apply: only `GET`, `POST`, `PUT`, `PATCH`, and `DELETE` operations can be tools, a gateway serves at most 1,000 tools, request parameters must be primitive types, API Gateway rejects complex nested schemas and OpenAPI 3.1 type lists (such as `type: [\"string\", \"null\"]`) when you create the API config, tools cannot return `HTTP 204`, and MCP is stateless with UTF-8 text responses only.\n   - Give the same points when the user only asks for the converted spec or for advice, without a deploy.\n   - Preserve exact quota metric names in `x-google-api-management.metrics` across API configs so existing gateways do not fail with HTTP 500 `Failed to call Service Control Quota`.\n2. **Run the deterministic MCP OpenAPI validation loop before creating the API config:**\n   - Execute `scripts\u002Fvalidate_mcp_openapi.py` on `{candidate_openapi_spec}`:\n     ```bash\n     python3 scripts\u002Fvalidate_mcp_openapi.py --spec={candidate_openapi_spec}\n     ```\n   - If `scripts\u002Fvalidate_mcp_openapi.py` exits with code `1` (`status: \"FAIL\"`), fix every reported error in `{candidate_openapi_spec}` (such as OpenAPI 2.0 syntax, `x-google-allow`, path-level `x-google-mcp-tool`, undefined backend names, an operation without an `operationId`, missing descriptions, invalid or duplicate tool names, a header parameter with the reserved `x-google-` prefix, a `tools-list.security` scheme that is neither an `oauth2` JWT nor an `apiKey` scheme, a JWT `tools-list.security` scheme missing from the root `security` list, alternative (OR) security requirements with an API key, or an `x-google-model-router` operation in an MCP spec) and re-run the script until it exits with code `0` (`status: \"PASS\"`). If it exits with code `2`, fix the file path or YAML syntax error printed to stderr.\n   - Read every warning (such as an `HTTP 204` response, a request parameter that is not a primitive type, or operations that an `mcp` object exposes by default). Fix it, or tell the user why you keep it.\n3. **Create the API (if new), create the API config, deploy the gateway, and enable the managed service (request human approval before updating a production gateway):**\n   ```bash\n   gcloud api-gateway apis create {api_id} --project={project_id}\n\n   gcloud api-gateway api-configs create {config_id} \\\n     --api={api_id} \\\n     --openapi-spec={candidate_openapi_spec} \\\n     --backend-auth-service-account={gateway_sa_name}@{project_id}.iam.gserviceaccount.com \\\n     --project={project_id}\n\n   gcloud api-gateway gateways update {gateway_id} \\\n     --api={api_id} \\\n     --api-config={config_id} \\\n     --location={region} \\\n     --project={project_id}\n\n   gcloud services enable $(gcloud api-gateway apis describe {api_id} --project={project_id} --format=\"value(managedService)\") --project={project_id}\n   ```\n    *(For a brand-new gateway, run `gcloud api-gateway gateways create {gateway_id} ...` instead of `gateways update`).*\n   - Run one `api-configs create` at a time per API. Wait for it to finish before you start the next one, because API Gateway creates only one config for an API at a time. A complex API config can take up to ten minutes to create.\n   - If clients use API keys from other projects, enable the managed service in each of those projects too. API Gateway rejects an API key unless the API is enabled in the project that created the key.\n4. **Verify the JSON-RPC 2.0 lifecycle and connect ADK \u002F API hub:**\n   - Send every probe to `https:\u002F\u002F{default_hostname}\u002Fmcp`, even when the spec sets a `servers` base path.\n   - An HTML `404 Page not found` means that the gateway may not be deployed correctly. Check that the gateway state is `ACTIVE` and that the last create or update finished, and retry before you change the config. During a gateway update, some requests can still reach the previous API config. A JSON 404 (`The current request is not defined by this API.`) means that the active config does not define the path.\n   - If `tools\u002Flist` requires a JWT, mint a Google ID token whose audience is in `x-google-auth.audiences`: `gcloud auth print-identity-token --impersonate-service-account={caller_sa_email} --audiences={jwt_audience}`. If `tools\u002Flist` requires an API key, send it in the `x-api-key` header.\n   - Run the `initialize`, `notifications\u002Finitialized`, `tools\u002Flist`, and `tools\u002Fcall` verification probes in [MCP Verification and Troubleshooting](references\u002Fmcp-limitations-and-troubleshooting.md).\n   - Connect Google ADK (`McpToolset`) and verify automatic catalog discovery in Apigee API hub (`{your_api} (MCP)`) and Agent Registry using [ADK and API Hub Discovery](references\u002Fadk-and-api-hub-discovery.md).\n\n## Pre-Deployment Checklist\n\n- [ ] Specification version is `openapi: 3.0.x` or `3.1.x` (not `swagger: \"2.0\"`), omits `x-google-allow`, and does not contain `x-google-model-router`.\n- [ ] `python3 scripts\u002Fvalidate_mcp_openapi.py --spec={candidate_openapi_spec}` returns `status: \"PASS\"` (exit code `0`).\n- [ ] Every operation has an `operationId`, and all MCP operations are in one OpenAPI document.\n- [ ] `x-google-api-management.mcp.tools-list.security` names exactly one scheme: an `oauth2` JWT scheme with `x-google-auth` that the root `security` list also references, or an `apiKey` scheme with `in: header` and `name: x-api-key`.\n- [ ] If `tools\u002Flist` uses a JWT scheme, the user knows that REST operations without their own `security` now require that JWT.\n- [ ] Administrative, health-check, and `HTTP 204` endpoints are opted out with `x-google-mcp-tool: false`, and opted-out admin paths remain protected on REST.\n- [ ] MCP clients call `https:\u002F\u002F{default_hostname}\u002Fmcp` (not `{basepath}\u002Fmcp`), nest `tools\u002Fcall` JSON request bodies inside `params.arguments.body`, and send `MCP-Protocol-Version: 2025-11-25`.\n\n## Resource Cleanup\n\nTo avoid ongoing charges when tearing down a test or staging environment, request human approval and delete the gateway, API config, API, and service account in dependency order:\n\n```bash\ngcloud api-gateway gateways delete {gateway_id} --location={region} --project={project_id}\ngcloud api-gateway api-configs delete {config_id} --api={api_id} --project={project_id}\ngcloud api-gateway apis delete {api_id} --project={project_id}\ngcloud iam service-accounts delete {gateway_sa_name}@{project_id}.iam.gserviceaccount.com --project={project_id}\n```\n",{"name":5,"metadata":56,"description":7},{"version":57,"category":58},"1.0.1","AiAndMachineLearning","main","bb9b3f464aae37af360d079c1d863524955b0363","skills\u002Fcloud\u002Fapi-gateway-mcp-server",2005,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-14 01:51:35",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add google\u002Fskills --skill api-gateway-mcp-server",{"tool":74,"command":75},"bunx","bunx skills add google\u002Fskills --skill api-gateway-mcp-server",{"tool":77,"command":78},"pnpm","pnpm dlx skills add google\u002Fskills --skill api-gateway-mcp-server","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002FSKILL.md",true,[82,88,92,96,100,104],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fadk-and-api-hub-discovery.md","REFERENCE","参考文档",6799,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Freferences\u002Fadk-and-api-hub-discovery.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fattribution.md",1906,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Freferences\u002Fattribution.md",{"path":93,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fmcp-limitations-and-troubleshooting.md",10984,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Freferences\u002Fmcp-limitations-and-troubleshooting.md",{"path":97,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fopenapi-agent-tool-optimizer.md",5595,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Freferences\u002Fopenapi-agent-tool-optimizer.md",{"path":101,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fopenapi-v2-to-v3-mcp-migration.md",17615,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Freferences\u002Fopenapi-v2-to-v3-mcp-migration.md",{"path":105,"resourceType":106,"resourceTypeDesc":107,"sizeBytes":108,"sourceHtmlUrl":109},"scripts\u002Fvalidate_mcp_openapi.py","SCRIPT","脚本",22552,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fapi-gateway-mcp-server\u002Fscripts\u002Fvalidate_mcp_openapi.py",[111,144,169,195,222,246],{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":121,"publishedAt":51},"01M6998S2EZKD3GEJ7F943RZTE","sign-in-with-google-web","Implement, configure, and secure Sign In With Google (SiwG) using Google Identity Services (GIS \u002F `https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fclient`) across web architectures. Use when creating Google sign-in buttons, implementing Google One Tap with FedCM, integrating GIS in React\u002FNext.js\u002FAngular\u002FHTML, verifying ID tokens on backend runtimes (Python\u002FNode.js\u002FGo\u002FJava), enforcing Google Workspace domain restrictions (`hd`), securing client-side ID tokens via WebCrypto nonces or encrypted IndexedDB, embedding in cross-origin iframes via the Intermediate Iframe API (`https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fintermediate`), configuring Content Security Policy (CSP), COOP, and Permissions Policy (`identity-credentials-get`) headers, or handling sign-out and revocation. Don't use for legacy Google Sign-In (`gapi.auth2`), Google Cloud IAM service accounts, or Android\u002FiOS native Credential Manager.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fsign-in-with-google-web\u002FSKILL.md",[117,120],{"categoryNo":118,"categoryName":119,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[9,122,123,124,125,126,127,128,129,49,130,131,132,133,134,135,136,137,138,139,140,141,142,143],"sign in with google web","sign","with","web","android","go","security","google workspace","implement","policy","python","implementing","react","iam","permissions","buttons","secure","manager","identity","architectures","domain","runtimes",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":153,"publishedAt":51},"01M6998PHPDCAD684VW5WRG83D","dpop-adoption","Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com\u002Ftoken. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM \u002F service account authentication.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fdpop-adoption\u002FSKILL.md",[150,151,152],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[154,155,9,49,156,157,158,159,160,161,135,162,163,164,165,166,167,140,143,168,40],"dpop adoption","adoption","es6","retry","authentication","flows","challenge","code","browser","loops","at","node","token","pair","platform",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":181,"publishedAt":51},"01M6998M72TC73EEAQH4XC7EXW","retrieving-developer-knowledge","Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI\u002FGemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms. Integrates with the Developer Knowledge MCP server (search_documents, get_documents, answer_query) or the Developer Knowledge REST API fallback. Use when searching for gcloud CLI commands, API syntax, IAM permissions, official documentation, architectural comparisons, or product choice overviews. Don't use for local filesystem lookups or non-Google documentation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fretrieving-developer-knowledge\u002FSKILL.md",[175,176,179,180],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":177,"categoryName":178,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[182,183,184,37,49,33,185,186,187,188,189,190,191,40,192,38,193,135,194,136],"retrieving developer knowledge","knowledge","developer","official","developer documentation","get","search","local","choice","documents","query","across","documentation",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":51},"01M6998J2CZEXS9BES9S3WWFKC","migrate-to-rust","Clones, analyzes, plans, and migrates legacy codebases (C++, Fortran, Java, Python, C, Shell) from a GitHub URL or local directory to a modern, high-performance, deterministic, 100% Safe Rust architecture, tracking live telemetry across every task bucket, test failure\u002Ffix cycle, and Profile-Guided Optimization (PGO) stage, and producing a first-person AI storytelling report and interactive HTML infographic. Use when migrating a GitHub repository or local codebase to Rust, porting legacy C++, Fortran, Python, or Java workloads to memory-safe Rust, designing Struct-of-Arrays (SoA) or SIMD Rust architectures, or optimizing Rust ports with LLVM PGO. Don't use for unrelated non-Rust refactoring or single-line syntax questions.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fmigrate-to-rust\u002FSKILL.md",[],[202,203,204,205,206,207,208,209,132,210,211,212,213,214,215,189,216,217,218,40,219,220,193,221],"migrate to rust","rust","migrate","github","memory","performance","directory","safe","ports","llvm","soa","cycle","porting","fix","arrays","infographic","high-performance","URL","architecture","unrelated",{"skillNo":223,"name":224,"nameZh":6,"description":225,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":226,"categories":227,"keywords":231,"publishedAt":51},"01M6998GCC3K29WZ82KXMB9E02","finding-google-skills","Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Ffinding-google-skills\u002FSKILL.md",[228,229,230],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[9,232,233,234,235,168,47,236,237,238,239,158,240,241,242,190,243,244,40,245,38],"finding google skills","storage","as","messaging","trade-offs","provider","answer","fit","catalog","up","decision","use","database","candidate",{"skillNo":247,"name":248,"nameZh":6,"description":249,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":250,"categories":251,"keywords":254,"publishedAt":51},"01M6998DWNHTH0BS6W1CY8ZXMP","workload-manager-basics","Use this skill to manage Google Cloud Workload Manager evaluations, rules, scanned resources, and validation results by using public client libraries and the REST API. Use when you need to inspect workload best-practice rules, create and run evaluations for Google Cloud general best practices, SAP, SQL Server, or custom organizational rules, review violations, export results to BigQuery, or automate Workload Manager through client libraries because no service-specific public CLI or MCP server is available. Don't use for general Google Compute Engine instance management, VPC configuration, or standard IAM auditing.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fworkload-manager-basics\u002FSKILL.md",[252,253],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[255,256,139,257,9,37,258,49,33,259,260,261,262,40,263,38,135,264,265,36,266],"workload manager basics","workload","basics","cli","review","vpc","resources","inspect","you","create","libraries","run"]