google-cloud-console-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_CLOUD_PROJECT | No | Google Cloud project ID | |
| GOOGLE_MCP_TOOL_GROUPS | No | Comma-separated list of tool groups to enable (playconsole, cloudcore, firebase, storage) | |
| GOOGLE_OAUTH_CLIENT_ID | No | OAuth client ID for browser sign-in | |
| GOOGLE_OAUTH_CLIENT_SECRET | No | OAuth client secret for browser sign-in | |
| GOOGLE_SERVICE_ACCOUNT_JSON | No | Service account key JSON, inline | |
| GOOGLE_APPLICATION_CREDENTIALS | No | Path to a service account key file |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| play_create_editA | Starts a new edit transaction for a Play Console app. Required before uploading a new bundle/APK or changing tracks, listings, or details. Returns an editId to pass to the other play_* tools, and must be finished with play_commit_edit (or discarded with play_delete_edit). |
| play_get_editB | Fetches the status of an existing edit (e.g. to check it hasn't expired). |
| play_validate_editA | Validates an edit without committing it — checks e.g. that uploaded bundles and track changes are consistent. Useful to sanity-check a release before play_commit_edit. |
| play_commit_editA | Commits an edit, making all changes made within it (new bundle, track updates, listing changes, ...) live on Google Play. This is the point of no return for a release. |
| play_delete_editA | Discards an in-progress edit without applying any of its changes. |
| play_upload_bundleA | Uploads a new Android App Bundle (.aab) file into an open edit. Provide a local file path. After uploading, assign the returned versionCode to a track with play_update_track and then play_commit_edit to publish it. |
| play_upload_apkA | Uploads a new APK file into an open edit. Prefer play_upload_bundle (.aab) for new apps — Google Play requires App Bundles for new apps as of Aug 2021 — APK upload remains for existing APK-based apps. |
| play_list_bundlesB | Lists all App Bundles present in an edit, with their versionCode and sha256. |
| play_list_apksC | Lists all APKs present in an edit. |
| play_upload_deobfuscation_fileA | Uploads a ProGuard/R8 mapping file (or native debug symbols) for a given APK/bundle versionCode, so Play Console can de-obfuscate crash stack traces. |
| play_list_tracksA | Lists all release tracks (internal, alpha, beta, production, and any custom tracks) for an app within an edit, including which versionCodes are on each and their rollout status. |
| play_get_trackC | Fetches the current releases on a single track (e.g. "production"). |
| play_update_trackA | Replaces the full set of releases on a track. This is how you publish a new version to a track, change rollout percentage, halt a rollout, or remove a version (by omitting its versionCode from the releases array). Must be followed by play_commit_edit to go live. For a simple 'add this new version to this track' use play_release_to_track instead. |
| play_release_to_trackA | High-level helper for the common 'ship this build' workflow: creates an edit, sets the given track's release to exactly the given versionCode(s) with the given status/rollout, and commits. Use this instead of manually chaining play_create_edit + play_update_track + play_commit_edit unless you need finer control (e.g. multiple simultaneous releases on a track, or editing other things in the same edit first). |
| play_remove_version_from_trackA | Removes one versionCode from a track's active releases (e.g. to pull a bad build off production) by fetching the track, filtering it out, and committing. Note this only unpublishes the version from that track — it does not delete the uploaded artifact itself (Google Play does not support deleting uploaded bundles/APKs). |
| play_list_listingsB | Lists the store listing (title, descriptions, ...) for every localized language. |
| play_get_listingB | Fetches the store listing (title, short/full description, video URL) for one language. |
| play_update_listingA | Updates the store listing text for one language (title, short description, full description, promo video). Only provided fields are sent; omit a field to leave it server-side unless the underlying API requires full replacement (it does — fetch with play_get_listing first if you need to preserve untouched fields). |
| play_delete_listingC | Removes the store listing for one localized language entirely. |
| play_list_imagesB | Lists uploaded images of a given type (screenshots, icon, feature graphic, ...) for a language. |
| play_upload_imageC | Uploads one image (PNG/JPEG) into a store listing image slot for a language. |
| play_delete_imageB | Deletes a single uploaded image by its imageId (from play_list_images). |
| play_delete_all_imagesB | Deletes every image in a given image slot for a language (e.g. clear all phoneScreenshots). |
| play_get_app_detailsB | Fetches app-wide details: default language and developer contact info (email, phone, website). |
| play_update_app_detailsC | Updates app-wide default language and/or developer contact info. |
| play_list_reviewsC | Lists user reviews for an app, optionally filtered and paginated. |
| play_get_reviewC | Fetches one review by id. |
| play_reply_reviewA | Posts (or updates) the developer reply to a user review. There can only be one developer reply per review — calling this again replaces the previous reply. |
| play_get_testersC | Fetches the tester list (individual emails, and/or Google Groups) configured for a testing track. |
| play_update_testersA | Replaces the full tester list for a track. Provide googleGroups (Google Group email addresses) and/or googleGroups-managed testers per the Play API — most projects manage testers via a Google Group, so pass that group's email in googleGroups. |
| play_list_inapp_productsB | Lists all managed in-app products (non-subscription) for an app. |
| play_get_inapp_productC | Fetches one in-app product by SKU. |
| play_create_inapp_productC | Creates a new managed in-app product (one-time purchase). |
| play_update_inapp_productA | Updates an existing in-app product's status/price/listing. Pass allowMissing:true to upsert (create if it doesn't exist yet). |
| play_delete_inapp_productC | Deletes an in-app product by SKU. |
| play_list_subscriptionsC | Lists all subscription products for an app (Play Subscriptions API v2). |
| play_get_subscriptionB | Fetches one subscription product by product id. |
| gcp_list_projectsB | Lists GCP projects visible to the authenticated identity. Supports Cloud Resource Manager filter syntax, e.g. filter: "state:ACTIVE" or "parent.id:1234567890". |
| gcp_get_projectB | Fetches details of a single GCP project. |
| gcp_create_projectB | Creates a new GCP project. The caller's credentials need resourcemanager.projects.create permission (typically requires org/folder-level access, not just a service account scoped to one existing project). |
| gcp_delete_projectA | Requests deletion of a GCP project (soft delete — Google retains it for ~30 days and it can be restored with gcp_undelete_project within that window). |
| gcp_undelete_projectA | Restores a project that was recently soft-deleted (within the ~30 day retention window). |
| gcp_get_project_iam_policyB | Fetches the full IAM policy (role bindings) for a project. |
| gcp_set_project_iam_policyA | Replaces the entire IAM policy for a project. Prefer gcp_add_project_iam_binding / gcp_remove_project_iam_binding for a single role change — this overwrites everything, so fetch with gcp_get_project_iam_policy first if you need to preserve existing bindings. |
| gcp_add_project_iam_bindingA | Grants one role to one member on a project, preserving all existing bindings (read-modify-write against the current policy). |
| gcp_remove_project_iam_bindingA | Revokes one role from one member on a project, preserving all other bindings. |
| gcp_list_service_accountsC | Lists all service accounts in a project. |
| gcp_get_service_accountB | Fetches one service account by email or by projects/{p}/serviceAccounts/{id} name. |
| gcp_create_service_accountC | Creates a new service account in a project. |
| gcp_delete_service_accountC | Deletes a service account. This is not immediately reversible after ~30 days. |
| gcp_list_service_account_keysA | Lists key ids for a service account (never returns private key material for existing keys). |
| gcp_create_service_account_keyA | Creates a new JSON key for a service account and returns the private key material base64-encoded (privateKeyData in the response) — save it immediately, Google does not let you retrieve it again after this call. Treat the output as a secret. |
| gcp_delete_service_account_keyC | Revokes a service account key by its key id. |
| gcp_list_enabled_apisC | Lists all APIs/services currently enabled for a project. |
| gcp_search_available_apisA | Lists/searches Google APIs available to enable on a project (enabled or not). Use this to find the exact service name to pass to gcp_enable_api. |
| gcp_enable_apiC | Enables a Google API for a project, e.g. "androidpublisher.googleapis.com". |
| gcp_disable_apiB | Disables a Google API for a project. Dependent services may stop working. |
| gcp_get_api_statusB | Checks whether a specific API is enabled for a project. |
| firebase_list_projectsB | Lists Firebase projects the authenticated identity can access. |
| firebase_get_projectA | Fetches Firebase-specific metadata for a project (this requires Firebase to already be enabled on the GCP project — see firebase_add_firebase). |
| firebase_add_firebaseA | Enables Firebase on an existing GCP project, turning it into a Firebase project. This is a long-running operation; the response is an Operation resource — check its |
| firebase_list_android_appsB | Lists the Android apps registered under a Firebase project. |
| firebase_create_android_appC | Registers a new Android app (by package name) under a Firebase project. |
| firebase_list_ios_appsC | Lists the iOS apps registered under a Firebase project. |
| firebase_create_ios_appC | Registers a new iOS app (by bundle id) under a Firebase project. |
| firebase_list_web_appsC | Lists the web apps registered under a Firebase project. |
| firebase_create_web_appC | Registers a new web app under a Firebase project. |
| firebase_appdistribution_upload_releaseA | Uploads a build (.apk/.aab for Android, .ipa for iOS) to Firebase App Distribution. This creates a new release (or updates an existing one if the binary is identical). Returns a long-running Operation — the release resource name is in the operation response once done. Follow up with firebase_appdistribution_distribute_release to notify testers. |
| firebase_appdistribution_list_releasesC | Lists releases uploaded for a Firebase app, newest first by default. |
| firebase_appdistribution_get_releaseB | Fetches one release by its full resource name. |
| firebase_appdistribution_distribute_releaseA | Grants testers/groups access to an already-uploaded release and emails them. Creates testers that don't exist yet from testerEmails. |
| firebase_appdistribution_delete_releasesC | Deletes up to 100 releases at once, by their full resource names. |
| firebase_appdistribution_list_groupsC | Lists tester groups for a Firebase project. |
| firebase_appdistribution_create_groupC | Creates a new tester group under a Firebase project. |
| firebase_appdistribution_delete_groupA | Deletes a tester group by its full resource name. |
| firebase_appdistribution_add_testers_to_groupB | Adds tester emails to a group, creating tester resources for any that don't exist yet. |
| firebase_appdistribution_remove_testers_from_groupA | Removes tester emails from a group (they lose access to releases shared with that group). |
| firebase_appdistribution_list_testersC | Lists testers for a Firebase project. |
| firebase_appdistribution_add_testersB | Creates tester resources for the given emails at the project level (not tied to a group). |
| firebase_appdistribution_remove_testersB | Deletes tester resources for the given emails from a project entirely. |
| gcs_list_bucketsC | Lists all Cloud Storage buckets in a project. |
| gcs_get_bucketA | Fetches metadata (location, storage class, versioning, etc.) for a bucket. |
| gcs_create_bucketC | Creates a new Cloud Storage bucket. Bucket names are globally unique across all of GCS. |
| gcs_delete_bucketA | Deletes an empty bucket. Delete all objects in it first with gcs_delete_object. |
| gcs_list_objectsC | Lists objects in a bucket, optionally filtered by prefix (folder-like path). |
| gcs_get_object_metadataA | Fetches metadata for one object (size, contentType, md5Hash, generation, ...) without downloading its content. |
| gcs_upload_objectC | Uploads a local file to a bucket at the given object path/key. |
| gcs_download_objectC | Downloads an object's content to a local file path. |
| gcs_delete_objectC | Deletes one object from a bucket. |
| ar_list_repositoriesC | Lists Artifact Registry repositories in a project/location. |
| ar_create_repositoryC | Creates a new Artifact Registry repository (docker, maven, npm, python, apt, yum, go, generic, ...). |
| ar_delete_repositoryA | Deletes a repository and all packages/versions inside it. |
| ar_list_packagesC | Lists packages (e.g. Docker image names) within a repository. |
| ar_list_versionsB | Lists versions (e.g. image tags/digests) of one package. |
| ar_delete_versionB | Deletes one version of a package (e.g. an old Docker image tag/digest) to free up storage. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 95 tools
Tools are generally distinguishable by resource and action, but there are multiple high-level helpers (gcp_add_project_iam_binding vs gcp_set_project_iam_policy, play_update_track vs play_release_to_track vs play_remove_version_from_track) with overlapping intent that could confuse an agent about which to use. The descriptions do provide guidance, but the overlaps remain significant.
Most tool names follow a consistent gcp_/firebase_/gcs_/ar_/play_ prefix and verb_noun pattern, which is good. However, play_ tools use verbs like 'commit', 'validate', 'release', 'reply' that break the strict verb_noun convention, and firebase_appdistribution_* has very long multi-word names, creating mixed readability.
95 tools is extremely heavy for a single MCP server, spanning GCP, Firebase, GCS, Artifact Registry, and Play Console. This likely overwhelms an agent's selection process and indicates the server conflates multiple distinct domains into one surface.
Coverage across the stated domains is broad: GCP projects/APIs/IAM/service accounts, Firebase apps and App Distribution, GCS buckets/objects, Artifact Registry repos, and Play Console releases/listings/testers/products. Minor gaps exist (e.g., no gcp_list_orgs or firebase_delete_app), but core CRUD and lifecycle operations are well represented.