GCP MCP server has 8 well-named tools covering GCP services (Resource Manager, Compute Engine, Cloud Storage). Tool names follow verb_noun convention consistently (list_projects, get_project, start_instance, stop_instance). Descriptions are present for all tools and most are 50-200 characters, matching LLM-optimized baseline. However, critical gaps exist: (1) parameter descriptions are sparse or missing in 6 of 8 tools; (2) output schemas are not documented, callers don't know what fields to expect; (3) error handling is minimal (raw exceptions, no recovery guidance); (4) no input validation documentation; (5) no pagination support despite list_ tools that could return many items. The code shows good implementation (async/await, proper exception types like NotFoundError, lifespan context), but tool definitions lack the detail needed for reliable LLM invocation.
Get details for a single Compute Engine instance.
Fetch metadata for a single project.
List Cloud Storage buckets in a project.
List Compute Engine instances. If ``zone`` is omitted, returns an aggregated list across all zones.
List GCP projects visible to the active credentials.
List IAM service accounts in a project. Uses the IAM Admin REST API via ``google-auth``. This avoids a hard dependency on ``google-cloud-iam`` while still providing coverage of IAM surface.
No output schemas documented. Callers do not know what fields to expect from tool responses. For example, list_projects returns a dict with project_id, name, state, parent, but this is inferred from code, not declared in the tool definition. LLMs cannot plan downstream tool calls or extract the right data without documented output structure.
Input parameters lack descriptions for most tools. For example, list_instances has project_id and zone parameters but descriptions are minimal or missing context. Missing param descriptions force LLMs to guess intent and type.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Start a stopped Compute Engine instance.
Stop a running Compute Engine instance.
No pagination support on list_ tools (list_projects, list_service_accounts, list_instances, list_buckets). These tools can return unbounded results, a project might have hundreds of instances or buckets. Current implementation can exhaust context window.
Error handling does not guide recovery. Tools raise NotFoundError and APIError with minimal context. For example, 'Project not found' does not suggest calling list_projects() to discover valid names.
No idempotency guarantee documented. start_instance and stop_instance modify state. If an agent retries due to ambiguous network failure, will the tool detect and skip duplicate operations, or will it error/double-execute?
Write-risk tools (start_instance, stop_instance) have no confirmation or dry-run support. An LLM can stop a production instance in one call with no undo path.
Parameter type constraints not documented. For example, project_id is described as 'The GCP project ID' but no length, format, or character-set constraints are stated.
No documentation of default behavior for optional parameters. list_instances and list_buckets accept optional project_id; the code falls back to GCP_DEFAULT_PROJECT_ID, but tool description does not state this.