Skip to main content
Glama

platform-mcp

mcp-name: io.github.deBilla/platform-mcp

A read-only Model Context Protocol server that turns an AI agent (Claude Code, Claude Desktop, or any MCP client) into a GCP platform engineer. Point it at your Google Cloud projects and ask it to investigate incidents, take inventory, and surface cost-optimization opportunities — all without any ability to change your infrastructure.

Observation only. No tool in this server mutates state. Combined with a viewer-only identity (below), that gives you a hard, defense-in-depth guarantee that an agent can look but never touch.

What it can do

Area

Tools

Environments

list_environments

Logs & errors

query_logs, get_recent_errors, list_error_groups

Metrics & alerting

query_metric, list_alert_policies, list_uptime_checks

Cost & recommendations

get_cost_breakdown, get_billing_info, list_cost_recommendations, list_recommendations

Resource inventory

search_assets, list_compute_instances, list_cloud_run_services, list_gke_clusters, list_sql_instances

Typical prompts once it's connected:

  • "What are the top error groups in the last 24 hours, and which one is newest?"

  • "Which GKE node pools are over-provisioned? Show mean CPU against machine type."

  • "Where can I reduce spend in this project?"

Related MCP server: k8s-readonly-mcp

Multiple environments

One server can reach several projects. Define them under PLATFORM_MCP_ENVIRONMENTS (see Configuration) and the agent picks one from the wording of your prompt:

  • "Any errors in staging in the last hour?"

  • "Compare Cloud Run services between staging and prod."

Every tool takes an optional environment argument. Omit it and the default environment is used; pass environment="production" to target another. Names, any aliases you define, common shorthands (prod, stg, qa, …) and bare project ids all resolve. An unrecognized name is an error listing the valid options — a typo can never silently retarget the wrong project.

Each environment carries its own service account, so staging and production are reached through separate identities from the same process, and every result echoes back the environment and project it came from.

Requirements

  • Python 3.11+

  • A Google Cloud project and credentials (your own login, or a service account)

  • The gcloud CLI for the one-time setup

Install

uvx platform-mcp          # no install step; uv fetches it on demand
pipx install platform-mcp # or keep it on PATH

From a checkout, for development:

git clone https://github.com/deBilla/platform-mcp.git
cd platform-mcp
python3 -m venv .venv
./.venv/bin/pip install -e ".[dev]"

Check your setup

platform-mcp doctor

This checks, for every configured environment, that Application Default Credentials exist, that the read-only service account can be impersonated, that a real API read succeeds, and that the billing export is readable — printing the exact command to fix whatever fails. Run it before reporting a problem.

One-time GCP setup

Run these once per project you want to reach — staging and production each need their own APIs enabled and their own read-only service account.

1. Enable the APIs the tools depend on:

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_ID

2. Grant read-only access to the identity the server runs as.

For local development with your own login (Application Default Credentials):

gcloud auth application-default login

The identity needs these viewer roles on the project, plus roles/billing.viewer on the billing account:

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_breakdown

3. (Recommended) Use a dedicated read-only service account instead of your login. platform-mcp setup does every step below, is safe to re-run, and prints the config stanza at the end. It ships with the package, so there is nothing to clone:

uvx platform-mcp setup \
  --project YOUR_PROJECT_ID \
  --user you@example.com \
  --billing-dataset YOUR_BILLING_PROJECT:billing   # optional

Or by hand:

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 \
  roles/bigquery.jobUser; do
  gcloud projects add-iam-policy-binding $PROJECT \
    --member="serviceAccount:$SA" --role="$ROLE" --condition=None
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 $PROJECT

The grant everyone forgets. roles/bigquery.jobUser above only lets the account start a query; it grants no access to any data. A billing export almost always lives in a different project, so the account also needs read on that dataset. Without it get_cost_breakdown returns 403 while every other tool works, which reads like a bug in the tool rather than a missing grant:

bq add-iam-policy-binding \
  --member="serviceAccount:$SA" --role=roles/bigquery.dataViewer \
  YOUR_BILLING_PROJECT:billing

If you lack admin on the billing project, that one line is what to send to someone who has it. platform-mcp doctor checks it and says which side is missing.

Then reference it as that environment's impersonate value in PLATFORM_MCP_ENVIRONMENTS (preferred — no key file), or point at a downloaded key via GOOGLE_APPLICATION_CREDENTIALS.

Impersonation is performed by whatever identity your ADC resolves to. If your ADC is itself an impersonated service account, that SA — not your user — needs roles/iam.serviceAccountTokenCreator on each platform-mcp-ro.

Security model

Read-only is enforced by IAM, not by OAuth scope. The server requests the broad cloud-platform scope and stays read-only purely because it never calls a mutating API. Do not rely on the code alone — run it under a viewer-only identity (step 3 above) so the credential itself is incapable of writing, regardless of what code executes. This gives you two independent layers: the server doesn't try to write, and the identity couldn't if it did.

With multiple environments this stays per-project: each environment authenticates as its own service account, so a staging identity is never used to reach production. Grant each one viewer-only access to its project alone.

Configuration

The friendliest option is a config file, which keeps project ids and service account emails out of every client config you own:

mkdir -p ~/.config/platform-mcp
cp config.toml.example ~/.config/platform-mcp/config.toml
$EDITOR ~/.config/platform-mcp/config.toml

With that in place, registering the server takes no environment variables at all. Point PLATFORM_MCP_CONFIG elsewhere to use a different file — a copy committed to your infrastructure repo, for instance.

Environment variables still work and always win over the file, so an existing setup keeps running unchanged and a one-off override needs no edit:

Variable

Purpose

PLATFORM_MCP_ENVIRONMENTS

JSON map of environment name → settings. The recommended way to configure the server.

PLATFORM_MCP_DEFAULT_ENVIRONMENT

Environment used when a tool call omits environment. Defaults to staging if configured, else the first entry.

GOOGLE_APPLICATION_CREDENTIALS

Path to a read-only SA key file (alternative to impersonation).

PLATFORM_MCP_DEFAULT_LIMIT

Default max rows for list-style tools (default 50).

PLATFORM_MCP_ENVIRONMENTS holds a JSON object; each entry accepts:

Key

Purpose

project

Required. GCP project id.

impersonate

Read-only SA to impersonate for this environment (no key file needed).

billing_export_table

Fully-qualified BigQuery billing export table, required only for get_cost_breakdown (e.g. YOUR_PROJECT_ID.billing.gcp_billing_export_v1_XXXXXX).

aliases

Extra names the agent may use for this environment.

A bare string value is shorthand for {"project": "..."}. As JSON inside .mcp.json the quotes must be escaped; unescaped it reads:

{
  "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"
  }
}

Single-environment mode. If PLATFORM_MCP_ENVIRONMENTS is unset the server behaves as before, exposing one environment named default:

Variable

Purpose

GCP_PROJECT

Target project. Falls back to your ADC default project if unset.

IMPERSONATE_SERVICE_ACCOUNT

Read-only SA to impersonate. Also the fallback for registry entries with no impersonate.

BILLING_EXPORT_TABLE

Billing export table. Also the fallback for registry entries with no billing_export_table.

Register with a client

Claude Code — with a config file in place, this is the whole thing:

claude mcp add platform-mcp --scope user -- uvx platform-mcp

Claude Desktop — the same command and args in claude_desktop_config.json:

{
  "mcpServers": {
    "platform-mcp": {
      "command": "uvx",
      "args": ["platform-mcp"]
    }
  }
}

Without a config file, add the environment variables from .mcp.json.example to either form.

Skip the approval prompt

Every tool here is read-only, so approving each call individually adds nothing. Allow the whole server once, in Claude Code settings:

{ "permissions": { "allow": ["mcp__platform-mcp__*"] } }

The glob must sit after a literal mcp__<server>__ prefix — an unanchored pattern like mcp__* is ignored with a warning and approves nothing.

MCP Inspector — for interactive testing:

uvx --with 'mcp[cli]' mcp dev src/platform_mcp/server.py

Observability

Every tool call appends one JSON line to ~/.local/state/platform-mcp/audit.jsonl:

{"ts":"2026-08-30T18:20:11+0800","tool":"query_logs","environment":"production",
 "project":"my-app","duration_ms":412,"count":50,"bytes":18422,"error":null}

Free-text arguments are recorded by name only — a Cloud Logging filter can carry user ids from the logs being searched, and the audit file must not become a second copy of that. Set PLATFORM_MCP_AUDIT_LOG to another path, or to off.

Diagnostic logs go to stderr (PLATFORM_MCP_LOG_LEVEL to adjust); in stdio transport stdout carries the protocol, so nothing else may be written there. In Claude Code, read them with claude --debug=mcp.

For a record that does not depend on this server at all, enable Data Access audit logs in GCP for the read-only service accounts. Token minting already appears in Admin Activity logs without any configuration.

Development

./.venv/bin/python -m pytest

The suite runs against an in-memory MCP client — no network and no GCP credentials — and covers environment resolution, the tool contract, annotations, error translation and the audit log. The only subprocess is bash -n over the packaged setup script, which is skipped where bash is absent.

The setup script lives at src/platform_mcp/scripts/ because it ships as package data; platform-mcp setup runs it from wherever the package is installed, so the quickstart needs no checkout.

Notes

  • All tools cap result counts and truncate long payloads to stay token-friendly.

  • GCP clients are built lazily and cached per environment, so switching between staging and production mid-conversation costs one client construction each.

  • Cost recommenders are zonal/regional; list_cost_recommendations auto-discovers the locations where you have resources (via Asset Inventory) and fans out, skipping locations and recommenders that are empty or unavailable. It reports skipped_calls and fails loudly if it cannot discover any location, because "I could not look" and "there is nothing to save" must not look alike.

  • get_cost_breakdown uses parameterized BigQuery queries with a whitelisted set of group-by columns, and filters to the selected environment's project. A billing export covers the whole billing account, so pass all_projects=true when you want account-wide totals.

License

MIT © 2026 Dimuthu Wickramanayake

Available Tools

16 tools
get_billing_infoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_breakdownA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo
group_byNoservice
environmentNo
all_projectsNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_errorsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
limitNo
serviceNo
environmentNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_policiesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_servicesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_instancesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_recommendationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationsNo
environmentNo
limit_per_callNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_environmentsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_groupsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
limitNo
serviceNo
environmentNo

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_clustersA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_recommendationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
locationNoglobal
environmentNo
recommender_idYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_instancesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_checksA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
environmentNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_logsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
filterNo
freshnessNo1h
environmentNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_metricA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
windowNo1h
alignerNoMEAN
environmentNo
metric_typeYes
resource_filterNo
alignment_periodNo5m

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_assetsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
asset_typesNo
environmentNo
include_labelsNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. Dates show when Glama detected each change.

  1. 16 tool updatesv0.4.0
    • First observedget_billing_info
    • First observedget_cost_breakdown
    • First observedget_recent_errors
    • First observedlist_alert_policies
    • First observedlist_cloud_run_services
    • First observedlist_compute_instances
    • First observedlist_cost_recommendations
    • First observedlist_environments
    • First observedlist_error_groups
    • First observedlist_gke_clusters
    • First observedlist_recommendations
    • First observedlist_sql_instances
    • First observedlist_uptime_checks
    • First observedquery_logs
    • First observedquery_metric
    • First observedsearch_assets

TDQS

A4/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Read-only MCP server for turva.dev, an agent-readiness audit and advisory service.

  • 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.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A read-only MCP server for inspecting Kubernetes clusters, allowing LLMs to list resources, describe pods, and read logs without mutation.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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
  • F
    license
    A
    quality
    C
    maintenance
    A 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.
    4
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deBilla/platform-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server