Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
MCP server for Google Cloud Storage with fine-grained tool access control.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
GCS_PROJECT_ID, GCS_SERVICE_ACCOUNT_KEY_FILE, GCS_SERVICE_ACCOUNT_KEY_JSON, GCS_BUCKET, GCS_ENABLED_TOOLGROUPS, GCS_ENABLED_TOOLS, GCS_DISABLED_TOOLS, SKIP_HEALTH_CHECKSValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"gcs": {
"command": "npx",
"args": [
"-y",
"gcs-google-mcp-server"
],
"env": {
"GCS_PROJECT_ID": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_FILE": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_JSON": "your-value",
"GCS_BUCKET": "your-value",
"GCS_ENABLED_TOOLGROUPS": "your-value",
"GCS_ENABLED_TOOLS": "your-value",
"GCS_DISABLED_TOOLS": "your-value",
"SKIP_HEALTH_CHECKS": "your-value"
}
}
}
}Run this in your terminal
claude mcp add gcs --env GCS_PROJECT_ID=your-value --env GCS_SERVICE_ACCOUNT_KEY_FILE=your-value --env GCS_SERVICE_ACCOUNT_KEY_JSON=your-value --env GCS_BUCKET=your-value --env GCS_ENABLED_TOOLGROUPS=your-value --env GCS_ENABLED_TOOLS=your-value --env GCS_DISABLED_TOOLS=your-value --env SKIP_HEALTH_CHECKS=your-value -- npx -y gcs-google-mcp-serverFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"gcs": {
"command": "npx",
"args": [
"-y",
"gcs-google-mcp-server"
],
"env": {
"GCS_PROJECT_ID": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_FILE": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_JSON": "your-value",
"GCS_BUCKET": "your-value",
"GCS_ENABLED_TOOLGROUPS": "your-value",
"GCS_ENABLED_TOOLS": "your-value",
"GCS_DISABLED_TOOLS": "your-value",
"SKIP_HEALTH_CHECKS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"gcs": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"gcs-google-mcp-server"
],
"env": {
"GCS_PROJECT_ID": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_FILE": "your-value",
"GCS_SERVICE_ACCOUNT_KEY_JSON": "your-value",
"GCS_BUCKET": "your-value",
"GCS_ENABLED_TOOLGROUPS": "your-value",
"GCS_ENABLED_TOOLS": "your-value",
"GCS_DISABLED_TOOLS": "your-value",
"SKIP_HEALTH_CHECKS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
GCS_BUCKET envGCS_ENABLED_TOOLGROUPS envGCS_ENABLED_TOOLS envGCS_DISABLED_TOOLS envSKIP_HEALTH_CHECKS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified against the domain pulsemcp.com (the registry checks domain ownership)
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: GCS_PROJECT_ID, GCS_SERVICE_ACCOUNT_KEY_FILE, GCS_SERVICE_ACCOUNT_KEY_JSON
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.14) reached the registry 5 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Recta
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Cheaper cross-chain stablecoin routes for AI agents; 5 % of the verified saving, nothing if none.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
MCP server for Google Cloud Storage operations with fine-grained tool access control. Supports read/write operations on GCS buckets and objects, with configurable tool groups for security and permission management.
| Tool | Group | Description |
|---|---|---|
list_buckets | readonly | List all GCS buckets in the Google Cloud project |
list_objects | readonly | List objects in a bucket with prefix and pagination |
get_object | readonly | Get object contents as text |
download_object | readonly | Download a single object to a local file (binary-safe) |
download_prefix | readonly | Recursively download a prefix to a local directory (binary-safe) |
head_bucket | readonly | Check if a bucket exists and is accessible |
put_object | readwrite | Upload or update an object from inline string content |
put_object_from_path | readwrite | Upload a single local file by streaming from disk (binary-safe, context-free) |
upload_prefix | readwrite | Recursively upload a local directory tree from disk (binary-safe, context-free) |
copy_object | readwrite | Copy an object within or across buckets |
create_bucket | readwrite | Create a new GCS bucket |
delete_object | delete | Delete an object from a bucket |
delete_bucket | delete | Delete an empty GCS bucket |
get_object returns an object's contents inline as UTF-8 text, which is lossy for binary data and impractical for large files or many files at once. For local data-wrangling, use the download tools instead — both stream raw bytes to disk and belong to the readonly toolgroup:
/), collects per-object errors without aborting the batch, and returns a manifest: {
"destinationDir": "/tmp/gcs-download-my-bucket-1700000000000", "objectCount": 1234, "totalBytes": 5678901, "files": [ { "key": "logs/2024/01/data.json", "localPath": "/tmp/.../01/data.json", "size": 1234 } ], "filesTruncated": true, "errors": [] }
The inline files list is capped (maxInlineEntries, default 100), but objectCount and totalBytes always reflect the full download. When destinationDir is omitted it defaults to a unique folder under the OS temp directory.
put_object takes the object content inline as a string argument, which routes every byte through the model context and requires base64 for binary data — impractical for large files or bulk uploads. For uploading files or folders without consuming context, use the local-path upload tools instead. Both stream raw bytes directly from disk to GCS server-side, returning only metadata. They belong to the readwrite toolgroup, so read-only deployments never gain them.
contentType). Binary files (images, archives) work without base64. Returns { bucket, key, sourcePath, size, etag, generation }. {
"bucket": "my-bucket", "sourceDir": "/tmp/exports", "destPrefix": "uploads/", "objectCount": 1234, "totalBytes": 5678901, "files": [ { "localPath": "/tmp/exports/01/data.json", "key": "uploads/01/data.json", "size": 1234 } ], "filesTruncated": true, "errors": [] }
The inline files list is capped (maxInlineEntries, default 100), but objectCount and totalBytes always reflect the full upload. When destPrefix is omitted, files upload to the bucket root.
| Resource | Description |
|---|---|
gcs://config | Server configuration and status (for debugging) |
Control which tools are available via the GCS_ENABLED_TOOLGROUPS environment variable:
| Group | Description |
|---|---|
readonly | Read-only operations (list, get, head) |
readwrite | Non-destructive write operations (put, copy, create) |
delete | Delete operations (delete_object, delete_bucket) |
Examples:
GCS_ENABLED_TOOLGROUPS="readonly" - Only read operationsGCS_ENABLED_TOOLGROUPS="readonly,readwrite" - Read and write, no deletesGCS_ENABLED_TOOLGROUPS="readonly,readwrite,delete" - All operationsFine-grained control over specific tools:
GCS_ENABLED_TOOLS="list_buckets,get_object" - Only enable these toolsGCS_DISABLED_TOOLS="delete_bucket,delete_object" - Disable these toolsConstrain all operations to a specific bucket using GCS_BUCKET:
GCS_BUCKET="my-bucket"
When set:
list_buckets, create_bucket, delete_bucket, head_bucket) are hiddenbucket parameter is automatically injected and hidden from tool inputscopy_object, both source and destination are constrained to the specified bucketThis lets you grant a least-privilege service account that has only object-level access to one bucket, without project-level bucket-listing permission. The startup healthcheck honors this: when GCS_BUCKET is set it validates credentials with an object-scoped probe (storage.objects.list on that bucket) and never calls the project-level bucket list or a bucket-metadata probe. See Required IAM permissions for the exact permissions per mode.
The minimal IAM permissions depend on whether the server is constrained to a single bucket (GCS_BUCKET) and which tool groups you enable. The startup healthcheck validates credentials within these bounds — it does not require any permission beyond what the table below lists for your mode.
| Mode | Permission the healthcheck needs | Notes |
|---|---|---|
Single bucket (GCS_BUCKET set) | storage.objects.list on the constrained bucket | Probes list_objects with maxResults: 1. Does not require project-level storage.buckets.list or bucket-metadata storage.buckets.get, so a correctly least-privilege, object-only service account can start. |
Unconstrained (no GCS_BUCKET) | project-level storage.buckets.list | Validates by listing buckets in the project. |
Set SKIP_HEALTH_CHECKS=true to bypass startup validation entirely (disables all credential checks — not recommended).
Beyond the healthcheck, each tool needs the corresponding GCS permission at runtime. Grant only what the tool groups you enable require:
| Tool / group | Permission |
|---|---|
list_objects (readonly) | storage.objects.list |
get_object, download_object (readonly) | storage.objects.get |
download_prefix (readonly) | storage.objects.list, storage.objects.get |
list_buckets (readonly) | storage.buckets.list |
head_bucket (readonly) | storage.buckets.get |
put_object, put_object_from_path, upload_prefix, copy_object (readwrite) | storage.objects.create, storage.objects.get (these tools read each object's metadata back after writing to return its etag/generation; copy_object additionally reads the copy source) |
| create_bucket (readwrite) | storage.buckets.create
Only the beginning is shown; read the rest in the repo