platform-mcp
platform-mcp
Un servidor Model Context Protocol de solo lectura que convierte a un agente de IA (Claude Code, Claude Desktop o cualquier cliente MCP) en un ingeniero de plataforma de GCP. Apúntalo a tus proyectos de Google Cloud y pídele que investigue incidentes, haga inventario y detecte oportunidades de optimización de costos, todo sin ninguna capacidad de modificar tu infraestructura.
Solo observación. Ninguna herramienta de este servidor muta el estado. Combinado con una identidad de solo visor (más abajo), te brinda una garantía sólida de defensa en profundidad de que un agente puede mirar pero nunca tocar.
Qué puede hacer
Área | Herramientas |
Entornos |
|
Registros y errores |
|
Métricas y alertas |
|
Costos y recomendaciones |
|
Inventario de recursos |
|
Prompts típicos una vez conectado:
"¿Cuáles son los principales grupos de errores en las últimas 24 horas y cuál es el más reciente?"
"¿Qué grupos de nodos de GKE están sobreaprovisionados? Muestra la CPU media según el tipo de máquina."
"¿Dónde puedo reducir gastos en este proyecto?"
Related MCP server: k8s-readonly-mcp
Múltiples entornos
Un servidor puede alcanzar varios proyectos. Defínelos en PLATFORM_MCP_ENVIRONMENTS (consulta Configuración) y el agente elegirá uno según la redacción de tu prompt:
"¿Algún error en staging en la última hora?"
"Compara los servicios de Cloud Run entre staging y prod."
Cada herramienta acepta un argumento opcional environment. Si se omite, se usa el entorno predeterminado; pasa environment="production" para apuntar a otro. Los nombres, cualquier alias que definas, abreviaturas comunes (prod, stg, qa, …) e identificadores de proyecto simples se resuelven. Un nombre no reconocido es un error que lista las opciones válidas: un error tipográfico nunca puede redirigir silenciosamente al proyecto equivocado.
Cada entorno tiene su propia cuenta de servicio, por lo que staging y producción se alcanzan mediante identidades separadas desde el mismo proceso, y cada resultado devuelve el environment y project del que proviene.
Requisitos
Python 3.11+
Un proyecto de Google Cloud y credenciales (tu propio inicio de sesión o una cuenta de servicio)
Instalación
git clone https://github.com/deBilla/platform-mcp.git
cd platform-mcp
python3 -m venv .venv
./.venv/bin/pip install -e .Configuración única de GCP
Ejecuta esto una vez por proyecto al que quieras acceder: staging y producción necesitan sus propias APIs habilitadas y su propia cuenta de servicio de solo lectura.
1. Habilita las APIs de las que dependen las herramientas:
gcloud services enable \
logging.googleapis.com monitoring.googleapis.com clouderrorreporting.googleapis.com \
recommender.googleapis.com cloudasset.googleapis.com cloudbilling.googleapis.com \
bigquery.googleapis.com \
--project YOUR_PROJECT_ID2. Otorga acceso de solo lectura a la identidad con la que se ejecuta el servidor.
Para desarrollo local con tu propio inicio de sesión (Application Default Credentials):
gcloud auth application-default loginLa identidad necesita estos roles de visor en el proyecto, además de roles/billing.viewer en la cuenta de facturación:
roles/viewer # broad read (compute, run, gke, sql via Asset Inventory)
roles/logging.viewer
roles/monitoring.viewer
roles/errorreporting.viewer
roles/recommender.viewer
roles/cloudasset.viewer
roles/bigquery.dataViewer # only for get_cost_breakdown
roles/bigquery.jobUser # only for get_cost_breakdown3. (Recomendado) Usa una cuenta de servicio dedicada de solo lectura en lugar de tu inicio de sesión:
PROJECT=YOUR_PROJECT_ID
gcloud iam service-accounts create platform-mcp-ro \
--display-name "platform-mcp read-only" --project $PROJECT
SA=platform-mcp-ro@$PROJECT.iam.gserviceaccount.com
for ROLE in roles/viewer roles/logging.viewer roles/monitoring.viewer \
roles/errorreporting.viewer roles/recommender.viewer roles/cloudasset.viewer; do
gcloud projects add-iam-policy-binding $PROJECT \
--member="serviceAccount:$SA" --role="$ROLE"
done
# Let your own login impersonate it (no key file to manage):
gcloud iam service-accounts add-iam-policy-binding $SA \
--member="user:you@example.com" \
--role="roles/iam.serviceAccountTokenCreator" --project $PROJECTLuego refiérela como el valor impersonate de ese entorno en PLATFORM_MCP_ENVIRONMENTS (preferido: sin archivo de clave), o apunta a una clave descargada mediante GOOGLE_APPLICATION_CREDENTIALS.
La suplantación la realiza la identidad a la que resuelve tu ADC. Si tu ADC es en sí misma una cuenta de servicio suplantada, esa SA (no tu usuario) necesita
roles/iam.serviceAccountTokenCreatoren cadaplatform-mcp-ro.
Modelo de seguridad
El modo de solo lectura se aplica mediante IAM, no mediante el alcance de OAuth. El servidor solicita el amplio alcance cloud-platform y permanece en solo lectura únicamente porque nunca llama a una API que mute el estado. No confíes solo en el código: ejecútalo bajo una identidad de solo visor (paso 3 anterior) para que la credencial en sí sea incapaz de escribir, sin importar qué código se ejecute. Esto te da dos capas independientes: el servidor no intenta escribir, y la identidad no podría aunque lo intentara.
Con múltiples entornos, esto se mantiene por proyecto: cada entorno se autentica como su propia cuenta de servicio, por lo que una identidad de staging nunca se usa para acceder a producción. Otorga a cada uno acceso de solo visor únicamente a su proyecto.
Configuración
Copia la configuración de ejemplo y completa tus valores:
cp .mcp.json.example .mcp.json.mcp.json está en git-ignore, por lo que tus identificadores de proyecto y correos de cuentas de servicio permanecen locales. Variables de entorno que puede configurar (o tu shell):
Variable | Propósito |
| Mapa JSON de nombre de entorno → configuración. La forma recomendada de configurar el servidor. |
| Entorno utilizado cuando una llamada a herramienta omite |
| Ruta a un archivo de clave de SA de solo lectura (alternativa a la suplantación). |
| Máximo de filas predeterminado para herramientas de tipo lista (predeterminado 50). |
PLATFORM_MCP_ENVIRONMENTS contiene un objeto JSON; cada entrada acepta:
Clave | Propósito |
| Requerido. Identificador del proyecto de GCP. |
| SA de solo lectura para suplantar en este entorno (no se necesita archivo de clave). |
| Tabla de exportación de facturación de BigQuery totalmente calificada, requerida solo para |
| Nombres adicionales que el agente puede usar para este entorno. |
Un valor de cadena simple es una abreviatura de {"project": "..."}. Como JSON dentro de .mcp.json, las comillas deben escaparse; sin escapar se lee:
{
"staging": {
"project": "my-app-staging",
"impersonate": "platform-mcp-ro@my-app-staging.iam.gserviceaccount.com"
},
"production": {
"project": "my-app",
"impersonate": "platform-mcp-ro@my-app.iam.gserviceaccount.com",
"billing_export_table": "my-app.billing.gcp_billing_export_v1_XXXXXX"
}
}Modo de entorno único. Si PLATFORM_MCP_ENVIRONMENTS no está configurado, el servidor se comporta como antes, exponiendo un entorno llamado default:
Variable | Propósito |
| Proyecto objetivo. Si no se establece, usa el proyecto predeterminado de tu ADC. |
| SA de solo lectura para suplantar. También es el respaldo para entradas de registro sin |
| Tabla de exportación de facturación. También es el respaldo para entradas de registro sin |
Registro con un cliente
Claude Code / Claude Desktop — agrega el bloque de .mcp.json.example a tu configuración de MCP (.mcp.json en un proyecto para Claude Code, o claude_desktop_config.json para Desktop), apuntando command al script de consola del venv para que no se necesite instalación global:
{
"mcpServers": {
"platform-mcp": {
"command": "/absolute/path/to/platform-mcp/.venv/bin/platform-mcp",
"env": {
"PLATFORM_MCP_DEFAULT_ENVIRONMENT": "staging",
"PLATFORM_MCP_ENVIRONMENTS": "{\"staging\":{\"project\":\"YOUR_STAGING_PROJECT_ID\",\"impersonate\":\"platform-mcp-ro@YOUR_STAGING_PROJECT_ID.iam.gserviceaccount.com\"},\"production\":{\"project\":\"YOUR_PROD_PROJECT_ID\",\"impersonate\":\"platform-mcp-ro@YOUR_PROD_PROJECT_ID.iam.gserviceaccount.com\"}}"
}
}
}
}MCP Inspector — para pruebas interactivas:
./.venv/bin/mcp dev src/platform_mcp/server.pyNotas
Todas las herramientas limitan el número de resultados y truncan cargas útiles largas para ser amigables con los tokens.
Los clientes de GCP se crean de forma diferida y se almacenan en caché por entorno, por lo que cambiar entre staging y producción a mitad de conversación cuesta una construcción de cliente por cada uno.
Los recomendadores de costos son zonales/regionales;
list_cost_recommendationsdescubre automáticamente las ubicaciones donde tienes recursos (mediante Asset Inventory) y se expande, omitiendo ubicaciones y recomendadores que están vacíos o no disponibles.get_cost_breakdownutiliza consultas parametrizadas de BigQuery con un conjunto de columnas de agrupación en lista blanca.
Licencia
MIT © 2026 Dimuthu Wickramanayake
Available Tools
16 toolsget_billing_infoARead-onlyIdempotent
Return the billing account linked to the project and its status.
Args: environment: Which configured GCP environment to inspect, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint true and destructiveHint false, covering the safety profile. The description adds the fact that it returns both the account and its status and that environment inspection is parameterized, but it does not disclose potential error cases, auth requirements, or what 'status' means. This is acceptable because annotations carry the main behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with the core purpose first and parameter documentation second. No filler, no repetition of annotation fields, and all content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with rich annotations and no output schema, the description is nearly complete: it states purpose, return subject, and parameter usage. It does not specify possible status values or behavior when no billing account exists, but these are minor gaps for an optional-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description fully explains the sole parameter: what environment represents, examples ('staging', 'production'), and the default behavior when omitted. This is more than the schema provides and leaves no ambiguity about how to invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and object: 'Return the billing account linked to the project and its status.' This clearly conveys functionality and, by focusing on billing account rather than costs or logs, distinguishes it from siblings like get_cost_breakdown and query_logs. However, it does not explicitly name a sibling or draw a contrast, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance or exclusions relative to sibling tools. The only usage instruction concerns the optional environment parameter ('Omit to use the default environment'), which is parameter behavior, not tool-selection guidance. An agent must infer from the name and purpose when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_breakdownARead-onlyIdempotent
Summarize recent spend from the BigQuery billing export.
By default this reports spend for the selected environment's project only. A billing export table covers every project on the billing account, and several environments commonly share one table, so an unfiltered query would return identical account-wide totals for staging and production.
Only the environment holding the export needs 'billing_export_table' set: one billing account exports to one project, and that export already covers every project on the account. Asking any other environment for costs returns an error naming the one that has it.
Args: group_by: One of 'service', 'sku', 'project', 'region'. Default 'service'. days: Lookback window in days over usage_start_time. Default 30. limit: Max rows returned (highest net cost first). all_projects: Report the whole billing account instead of just this environment's project. Pair with group_by='project' to compare projects; the totals then are not specific to this environment. environment: Which configured GCP environment to bill against, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| group_by | No | service | |
| environment | No | ||
| all_projects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, and the description adds substantial behavioral context beyond that: shared billing tables cause unfiltered queries to return identical account-wide totals, only the environment holding the export needs billing_export_table set, and other environments return an error naming the proper one. This explains real operational behavior rather than restating the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, then explains the critical billing-export caveat, then lists parameters. Every sentence adds necessary information; none is filler or redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read-only tool with no output schema, this description covers everything needed to call it correctly: defaults, parameter semantics, configuration prerequisites, cross-environment behavior, and error handling. It also warns about the all_projects total being non-environment-specific, preventing a likely misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it succeeds. It documents every parameter with meaningful details: group_by's allowed values, days' lookback basis, limit's ordering by highest net cost, all_projects' account-wide behavior and pairing advice, and environment's role and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Summarize recent spend from the BigQuery billing export.' The description further clarifies scope by contrasting environment-project-only reporting with account-wide reporting, distinguishing this tool from nearby billing and recommendation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool and how to behave in common configurations: by default it reports only the selected environment's project, all_projects switches to account-wide totals, and non-exporting environments error with the name of the exporting one. It does not explicitly name sibling tools as alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_errorsARead-onlyIdempotent
Return recent log entries at severity ERROR or higher.
Args: service: Optional service name to narrow to (matched against resource.labels.service_name and logName). hours: How many hours back to search. Default 1. limit: Maximum number of entries to return (newest first). environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| limit | No | ||
| service | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral context: only severity ERROR or higher is returned, results are ordered newest first, and service matching applies to both resource.labels.service_name and logName. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose statement is followed by a compact, alphabetized Args list covering all four parameters with no filler. Every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only log retrieval tool with no required parameters and no output schema, the description covers invocation and behavior well. It lacks an explicit description of the returned entry fields or pagination, but the parameter semantics plus annotations make calling the tool correctly feasible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it delivers. Every parameter is explained: service matching semantics, hours-back with default, maximum limit with ordering, and environment selection with default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Return recent log entries at severity ERROR or higher.' It differentiates by severity and recency, which separates it from broader tools like query_logs, though it does not explicitly name or contrast any siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when recent error-level logs are needed—and explains optional narrowing by service and environment. However, it gives no explicit guidance about when to prefer a sibling tool such as query_logs or list_error_groups, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_policiesARead-onlyIdempotent
List Cloud Monitoring alert policies and whether they are enabled.
Args: limit: Maximum number of policies to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not repeat that this is a safe read operation. The description adds useful context by noting the output includes whether policies are enabled and by explaining the environment selection behavior. It does not disclose pagination or return structure details, but the annotations and simple tool nature keep the burden low.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and each sentence in the Args section earns its place by clarifying a parameter. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with no required parameters, no output schema, and annotations covering the safety profile, the description is complete. It covers what the tool does, what the parameters mean, and the behavior when 'environment' is omitted. Nothing essential for invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions for the parameters, but the description fully compensates. It explains 'limit' as the maximum number of policies to return and explains 'environment' with concrete examples and the default-omission behavior. This is exactly the semantic clarity an agent needs beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List Cloud Monitoring alert policies and whether they are enabled.' This clearly identifies the tool's function and distinguishes it from sibling tools that list other resource types such as compute instances, GKE clusters, or uptime checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames the tool as listing Cloud Monitoring alert policies, which is enough to infer when it should be used. It does not explicitly state when to prefer alternatives or when not to use it, but the resource-specific language provides clear context among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cloud_run_servicesARead-onlyIdempotent
List Cloud Run services.
Args: limit: Maximum number of services to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the 'default environment' behavior, but it does not disclose pagination, return format, or permission requirements, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The parameter explanations are brief, directly useful, and do not repeat schema information unnecessarily beyond what is needed for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no required parameters, the description is nearly complete. It explains both parameters and the default environment behavior, which is enough for an agent to select and invoke the tool. A return-value or permission note would make it fully complete, but the absence is not critical at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does this well: 'limit' is defined as the maximum number of services to return, and 'environment' is explained with examples and default behavior. It could add a pointer to list_environments for valid environment values, but it is already effective.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List Cloud Run services.' It is specific enough to distinguish from sibling tools that list other GCP resources like compute instances or GKE clusters, though it does not explicitly differentiate itself from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It explains how to use the environment parameter but does not mention when an agent should prefer this over list_compute_instances, list_gke_clusters, or list_environments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_compute_instancesARead-onlyIdempotent
List Compute Engine VM instances with location and status.
Args: limit: Maximum number of instances to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description does not need to restate safety. It adds useful context about environment selection and default behavior, but it does not disclose pagination, ordering, or response shape beyond the listed location and status fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description opens with a one-sentence summary and then provides a compact Args block. There is no filler, and every sentence either clarifies scope or parameter behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional parameters and strong annotations, the description is nearly complete. It covers the resource, key output attributes, and environment handling, though it stops short of fully specifying the return shape or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by documenting both parameters: limit as the maximum number of instances, and environment with concrete examples ('staging', 'production') and default behavior. This goes beyond the bare schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List Compute Engine VM instances', and adds output scope with 'location and status'. This distinguishes it clearly from sibling list tools such as list_gke_clusters and list_sql_instances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by naming Compute Engine VM instances, but it does not explicitly route around alternatives or state when not to use it. There is no mention of sibling tools like list_gke_clusters, so an agent must infer the boundary from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_recommendationsARead-onlyIdempotent
Aggregate GCP cost-optimization recommendations (idle/rightsizing/etc).
Fans out the cost recommenders across the locations where the project has resources. Recommenders/locations that are empty or not enabled are skipped.
Args: locations: Optional comma-separated zones/regions to scan (e.g. 'us-central1,us-central1-a'). If empty, auto-discovers from Asset Inventory (requires the Cloud Asset API). limit_per_call: Max recommendations to pull per recommender+location. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| locations | No | ||
| environment | No | ||
| limit_per_call | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals important behavioral traits: it fans out across locations, skips empty or disabled recommenders, and auto-discovers locations via Asset Inventory when locations are omitted, including a dependency on the Cloud Asset API. These details materially help an agent predict execution behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary sentence fronts the core purpose, followed by a short behavior note and a compact Args section. Every sentence carries distinct information, and there is no filler or repetition of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main operational concerns: what is aggregated, how locations are handled, the Cloud Asset API requirement, the per-call limit, and environment selection. It does not describe the shape or pagination of the returned recommendations, but given the read-only and idempotent annotations plus the strong parameter detail, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining every parameter: locations as comma-separated zones/regions with auto-discovery behavior, limit_per_call as a per recommender+location cap, and environment as a configured GCP environment selector with a default behavior. This is exactly the semantic enrichment the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Aggregate GCP cost-optimization recommendations (idle/rightsizing/etc).' This clearly distinguishes the tool from the sibling list_recommendations by narrowing scope to cost-optimization, and the behavior is further clarified with the fan-out and skip semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context about locations, auto-discovery, and environment selection, but it never explicitly states when to choose this tool over alternatives such as list_recommendations or get_cost_breakdown. Usage is implied by the purpose rather than explicitly contrasted with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_environmentsARead-onlyIdempotent
List the GCP environments this server can query and which is the default.
Pass one of the returned names as the environment argument of any other
tool to target that project (e.g. environment='production'). Omitting the
argument uses the default environment shown here. Common shorthands such as
'prod' and 'stg' are accepted, as is a bare project id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations: the server's queryable environment set, the notion of a default, and acceptance of shorthands or bare project IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary purpose is front-loaded, and the usage details follow in a logical order. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the lack of an output schema, the description tells the agent exactly what will be returned (environment names and the default) and how to consume those values. Nothing necessary for correct use is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so there is nothing for the schema to document. The description goes further by explaining the semantics of the `environment` argument used in sibling tools, which is the real value the agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the GCP environments this server can query and which is the default.' This clearly differentiates the tool from sibling query/list tools by framing it as the environment-discovery entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent how and when to use the output: pass returned names as the `environment` argument of any other tool, and omit the argument to use the default. It also documents accepted shorthands, leaving no ambiguity about invocation behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_error_groupsARead-onlyIdempotent
List grouped application errors from Error Reporting with counts.
Args: hours: Lookback window; snapped to the nearest supported period (1h, 6h, 1d, 1w, 30d). Default 24. service: Optional service name filter (Error Reporting "service" label). limit: Maximum number of error groups to return (most frequent first). environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| limit | No | ||
| service | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond annotations: hours are 'snapped to the nearest supported period', results are ordered by frequency, and environment selection is configurable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose followed by a tight, well-organized argument list. Every sentence adds meaning without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all parameters, defaults, ordering, and environment behavior, which is sufficient for calling the tool correctly. It does not describe the return structure, but the absence of an output schema makes a brief note about counts and ordering a reasonable partial response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all four parameters: lookback window and snapping behavior, service label filtering, maximum result limit, and environment selection with an example. No parameter is left underdocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action, 'List grouped application errors from Error Reporting with counts', which clearly identifies the resource and output. It is clear but does not explicitly distinguish itself from sibling tools like get_recent_errors or query_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains parameters and defaults but offers no guidance on when to use this tool versus alternatives such as get_recent_errors or query_logs. There are no explicit exclusions or conditions that would help an agent select among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gke_clustersARead-onlyIdempotent
List GKE (Kubernetes Engine) clusters.
Args: limit: Maximum number of clusters to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds a small behavioral detail about environment selection and defaulting, but otherwise discloses no additional behavior such as pagination, scoping, or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a concise parameter breakdown. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only two-parameter list tool, the description fully covers what the agent needs to invoke it correctly: the resource type, the meaning of each parameter, and environment defaulting behavior. No output schema exists, so return details are not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It clearly explains both parameters: 'limit' as the maximum number of clusters returned, and 'environment' with example values and explicit default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List GKE (Kubernetes Engine) clusters.' It is clear and unambiguous, but it does not differentiate this tool from sibling listing tools beyond the resource name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to prefer this tool over alternatives such as list_compute_instances or list_cloud_run_services. It explains the environment parameter, but not tool-selection context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recommendationsARead-onlyIdempotent
List recommendations from a specific recommender at a specific location.
Args: recommender_id: Recommender id, e.g. 'google.compute.instance.MachineTypeRecommender' or 'google.iam.policy.Recommender'. location: Zone (e.g. 'us-central1-a'), region (e.g. 'us-central1'), or 'global' depending on the recommender. Default 'global'. limit: Maximum number of recommendations to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| location | No | global | |
| environment | No | ||
| recommender_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context like environment selection and location being dependent on the recommender, but it does not disclose pagination behavior, return shape, or default environment resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary sentence is front-loaded and the Args list is clean and scannable. It is slightly longer than strictly necessary but every parameter explanation earns its place, especially the examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the essential invocation details: required and optional parameters, defaults, and examples. It is not fully complete because it does not differentiate from sibling recommendation tools or describe what the returned recommendations look like, but these are minor gaps given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining all four parameters. It gives concrete recommender_id examples, zone/region/global values for location, the meaning of limit, and the environment parameter with examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List recommendations from a specific recommender at a specific location.' This clearly states the tool's function. However, it does not distinguish itself from the sibling tool list_cost_recommendations, so an agent must infer that this is the general-purpose recommender tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus list_cost_recommendations or other sibling tools. The parameter examples imply a general recommender context, but no alternatives, exclusions, or selection conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sql_instancesARead-onlyIdempotent
List Cloud SQL instances.
Args: limit: Maximum number of instances to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover the safety profile with readOnlyHint, idempotentHint, and destructiveHint, lowering the bar. The description adds a note about environment scoping but does not disclose return format, pagination, or default-environment details. It neither contradicts the annotations nor provides substantial additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one direct purpose sentence followed by terse, meaningful parameter explanations. There is no filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with two optional parameters, strong annotations, and no nested schema, the description is sufficient. It documents both parameters and their defaults, and the safety profile is already carried by the annotations, so nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no parameter descriptions, so the description carries full responsibility. It compensates well: 'limit' is defined as the maximum number of instances, and 'environment' is explained with concrete examples and explicit default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource, 'List Cloud SQL instances,' which clearly identifies the operation. It is readily distinguishable from sibling list tools such as list_compute_instances and list_gke_clusters because the resource is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the verb-resource pairing: this is the tool to call when enumerating Cloud SQL instances. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, so it earns only an implied-usage score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_uptime_checksARead-onlyIdempotent
List Cloud Monitoring uptime check configurations.
Args: limit: Maximum number of uptime checks to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds some context by scoping the query to a configured GCP environment and noting the default behavior when environment is omitted, but it does not disclose other behavioral details such as response shape or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a minimal Args section. Every sentence earns its place, with no redundant filler or repetition of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional parameters, the description covers the essential invocation details and the environment-scoping concept. It does not describe the return format, but since there is no output schema and this is a straightforward list operation, the gap is minor rather than blocking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for explaining parameters. It does so clearly for both: limit is 'Maximum number of uptime checks to return' and environment is explained with concrete examples ('staging', 'production') and guidance to omit for the default. This adds real meaning beyond the bare schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List Cloud Monitoring uptime check configurations.' This clearly distinguishes the tool from sibling tools that handle logs, metrics, alerts, cost, or compute resources, so an agent can confidently identify its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, and no exclusions are stated. The environment parameter is explained for selecting an environment, but the description does not help an agent decide between this and sibling tools such as list_alert_policies or query_metric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_logsARead-onlyIdempotent
Query Cloud Logging with an advanced-filter expression.
Args: filter: Cloud Logging advanced filter (e.g. 'severity>=WARNING AND resource.type="cloud_run_revision"'). Leave empty to match all logs. freshness: How far back to look, e.g. '30m', '1h', '2d'. Default '1h'. limit: Maximum number of entries to return (newest first). environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment. Call list_environments to see what is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No | ||
| freshness | No | 1h | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds useful behavioral detail: an empty filter matches all logs, results are returned newest first, and freshness controls the lookback window. This complements the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, leading with the core purpose before listing parameter details. Every line provides useful guidance without repeating schema defaults unnecessarily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with no required parameters, it covers invocation essentials: filter syntax, time window, result ordering, and environment selection. The return shape is not described, but that is a minor gap given the tool name and read-only annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for parameter meaning. It thoroughly explains all four parameters with examples, defaults, and edge-case behavior such as empty filter and default environment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries Cloud Logging using an advanced-filter expression. It identifies the resource and action specifically, though it does not explicitly differentiate itself from sibling tools like get_recent_errors or query_metric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool for flexible Cloud Logging queries by explaining filter, freshness, limit, and environment. It does not explicitly state when to prefer sibling tools like get_recent_errors or list_error_groups for error-focused queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_metricARead-onlyIdempotent
Query a Cloud Monitoring metric time series.
Args: metric_type: Metric type, e.g. 'compute.googleapis.com/instance/cpu/utilization'. resource_filter: Optional extra filter, e.g. 'resource.labels.instance_id="123"'. window: How far back to query, e.g. '1h', '6h', '1d'. Default '1h'. aligner: Aggregation across the alignment period: MEAN, MAX, MIN, SUM, COUNT, RATE, PERCENTILE_99. Default MEAN. alignment_period: Bucket size for aggregation, e.g. '1m', '5m'. Default '5m'. limit: Maximum number of time series to return. environment: Which configured GCP environment to query, e.g. 'staging' or 'production'. Omit to use the default environment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| window | No | 1h | |
| aligner | No | MEAN | |
| environment | No | ||
| metric_type | Yes | ||
| resource_filter | No | ||
| alignment_period | No | 5m |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context: default environment handling, default window/alignment, and aligner semantics. It doesn't mention pagination or output shape, but those are not critical for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The structure is a single purpose sentence followed by a tight Args block. Each line provides format, default, or allowed values without filler. The length is justified by the need to document seven parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All required inputs and defaults are specified, and the annotations cover safety, so the tool can be called correctly. The only gap is that there is no output schema and the description doesn't describe the shape of the returned time series or how multiple series are returned, but this is a minor omission for a read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it succeeds. Every parameter is explained with concrete examples or valid values: metric_type, resource_filter, window, aligner options, alignment_period, limit, and environment. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Query a Cloud Monitoring metric time series.' This clearly distinguishes the tool from siblings such as query_logs and list_alert_policies, and the metric_type examples make the target concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parameter docs explain how to configure the query but never state when to use query_metric instead of sibling tools like query_logs or list_cost_recommendations. Usage is implied by the purpose statement and parameter details, but there is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_assetsARead-onlyIdempotent
Search all cloud resources in the project via Cloud Asset Inventory.
Args: asset_types: Optional comma-separated asset types to filter, e.g. 'compute.googleapis.com/Instance,run.googleapis.com/Service'. query: Optional free-text/structured query, e.g. 'state:RUNNING' or 'location:us-central1'. limit: Maximum number of resources to return. Default 50; raise it when you know you need a full inventory, since each resource costs context. include_labels: Include resource labels. Off by default because deployment labels are usually the largest part of the response and rarely answer the question being asked. environment: Which configured GCP environment to search, e.g. 'staging' or 'production'. Omit to use the default environment. Call list_environments to see what is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| asset_types | No | ||
| environment | No | ||
| include_labels | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds valuable behavioral context beyond that: limit defaults and context cost, why include_labels is off, and how environment selection behaves. This helps an agent make informed invocation decisions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses a compact args list where every line earns its place. No filler or redundant restatement of the schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five optional parameters and no output schema, the description covers all invocation-relevant aspects: filter syntax, defaults, context-cost trade-offs, and environment handling. It gives enough information for an agent to select and call the tool correctly without additional lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully by explaining every parameter with concrete examples, defaults, and rationale. It adds meaning far beyond the bare schema properties, especially around limit and include_labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Search'), a clear resource scope ('all cloud resources'), and the mechanism ('Cloud Asset Inventory'), which immediately distinguishes it from sibling list_* tools that target specific GCP resources. It is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates when to use the tool: for broad searches across all cloud resources, with optional filtering by asset type and query. It does not explicitly contrast with sibling tools or state when not to use it, but the scope and parameter guidance imply the appropriate context, and it directs users to list_environments for environment setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
v0.4.0- First observed
get_billing_info - First observed
get_cost_breakdown - First observed
get_recent_errors - First observed
list_alert_policies - First observed
list_cloud_run_services - First observed
list_compute_instances - First observed
list_cost_recommendations - First observed
list_environments - First observed
list_error_groups - First observed
list_gke_clusters - First observed
list_recommendations - First observed
list_sql_instances - First observed
list_uptime_checks - First observed
query_logs - First observed
query_metric - First observed
search_assets
TDQS
Scored across 16 tools
Most tools target clearly distinct GCP resources or actions, but query_logs and get_recent_errors overlap as general vs. error-filtered log queries, and list_cost_recommendations vs. list_recommendations could cause some selection uncertainty despite their aggregate/specific distinction.
All tools follow a consistent verb_noun pattern: list_* for enumeration, query_* for log/metric queries, get_* for specific lookups, and search_assets for asset discovery. There are no mixed naming conventions or unpredictable verbs.
At 16 tools, the server is slightly above the ideal 3-15 range, but the count is justified by the broad GCP read-only scope covering logs, errors, metrics, alerts, costs, billing, and multiple resource types. No tool feels redundant enough to remove.
The toolset covers core platform observability, cost, billing, and resource discovery well, with no obvious dead ends for typical read-only queries. Minor gaps exist such as lacking detailed single-resource fetches and specific listings for services like Cloud Storage or BigQuery, though search_assets partially mitigates these.
Maintenance
Related MCP Connectors
The Google Compute Engine MCP server is a fully-managed Model Context Protocol server that provides tools to manage Google Compute Engine resources through AI agents. It enables capabilities including instance management (creating, starting, stopping, resetting, listing), disk management, handling instance templates and group managers, viewing machine and accelerator types, managing images, and accessing reservation and commitment information. The server operates as a zero-deployment, enterprise-grade endpoint at https://compute.googleapis.com/mcp with built-in IAM-based security.
The Google GKE MCP server is a managed Model Context Protocol server that provides AI applications with tools to manage Google Kubernetes Engine (GKE) clusters and Kubernetes resources. It exposes a structured, discoverable interface that allows AI agents to interact with GKE and Kubernetes APIs, enabling them to inspect cluster configurations, retrieve Kubernetes resource YAMLs, monitor operations like cluster upgrades, diagnose issues, and optimize costs—all without needing to parse text output or use complex kubectl commands.
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for AI coding agents to inspect repositories, audit code quality, route engineering skills, and plan safe issue/PR workflows.1MIT
- AlicenseAqualityDmaintenanceA read-only MCP server for inspecting Kubernetes clusters, allowing LLMs to list resources, describe pods, and read logs without mutation.5MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that lets an LLM inspect an AWS account — list EC2 instances, S3 buckets, IAM users, and cost — with a structural guarantee against any mutations.MIT
- AlicenseAqualityDmaintenanceA secure, read-only MCP server for AI-powered system monitoring. It provides real-time OS metrics, config discovery, and safe log tailing to enable autonomous infrastructure audits without shell access risks.41ISC