Experimental MCP server for interacting with Google Cloud Platform resources
Server has 7 tools with basic schemas and descriptions, but significant gaps prevent higher scores. All tools have descriptions (10-80 chars, mostly adequate) and input schemas with types. However, output schemas are undocumented, LLMs cannot plan downstream calls. Error handling is minimal (generic exception catches returning error dicts). No parameter validation guidance, no enum constraints, no pagination support for list tools. Destructive tools (delete_cloud_run_service, delete_secret) lack confirmation patterns. Tool names are clear and verb-prefixed, but composition is weak: list_secrets returns bare strings instead of structured objects with IDs for chaining.
Add a new secret or a new version to an existing secret in Google Cloud Secret Manager
Delete a Cloud Run service from Google Cloud Run
Delete a secret from Google Cloud Secret Manager
Get the latest logs for a Cloud Run service (default 100 lines)
Get a secret value from Google Cloud Secret Manager
List all Cloud Run services in the specified project and region
Output schemas undocumented. list_cloud_run_services returns list[dict[str, str]] but LLM cannot see field names (name, uri). get_cloud_run_service_logs returns list[dict] with unspecified structure. list_secrets returns list[str] (bare strings, not objects). Without documented output schemas, agents cannot plan chaining or extract required IDs.
Destructive tools lack confirmation/dry-run pattern. delete_cloud_run_service and delete_secret execute immediately with no confirmation step. Agents make mistakes, irreversible operations should support a dry-run or explicit confirmation to prevent catastrophic errors.
list_secrets returns bare secret names (list[str]) instead of structured objects. Downstream tools (delete_secret, get_secret_value) need secret_name, but list_secrets provides no metadata (creation date, version count, labels). Broken composition forces extra lookup calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
List all secrets in the project
Error handling is generic. All tools catch Exception and return error dicts with str(e). Stack traces and raw API errors are unhelpful to LLMs. No recovery guidance (e.g., 'Service not found. Try list_cloud_run_services() first'). No error classification (retryable vs fatal).
No pagination support. list_cloud_run_services and list_secrets accept no limit/offset/page_size parameters. Large result sets will blow context windows. Baseline: list tools should accept limit (default 20-50) and return total_count or next_cursor.