GCP Infrastructure Server
FreeNot checkedProvides 30+ read-only tools for querying Google Cloud Platform infrastructure, designed for AI assistants and Terraform workflows.
About
Provides 30+ read-only tools for querying Google Cloud Platform infrastructure, designed for AI assistants and Terraform workflows.
README
A Model Context Protocol (MCP) server that provides 30+ read-only tools for querying Google Cloud Platform infrastructure. Designed for AI assistants, Terraform workflow support, and any MCP-compatible client.
Each user authenticates with their own base64-encoded GCP service account key — no credentials are stored on the server.
Table of Contents
- Features
- Architecture
- Prerequisites
- Installation
- Running the Server
- Authentication Setup
- MCP Client Configuration
- Available Tools
- Terraform Integration
- Adding New Tools
- Security Considerations
Features
- 30+ infrastructure tools covering Compute, Networking, GKE, DNS, Load Balancers, and Cloud Asset Inventory
- Multi-tenant — each user provides their own service account key as a Bearer token
- SSE transport — works with any MCP client that supports URL + token
- Async — GCP API calls run in a thread pool to keep the event loop responsive
- Terraform-friendly — fetch real infrastructure state to generate or validate
.tffiles - Docker-ready — ship as a single container
Architecture
MCP Client
│
│ Authorization: Bearer <base64_sa_key>
▼
┌──────────────────────────────────────┐
│ main.py (Starlette ASGI app) │
│ ├── GET /sse → SSE stream │
│ ├── POST /messages/ → MCP messages │
│ └── GET /health → health check │
│ │
│ src/auth.py → decode token, set ctx │
│ src/server.py → shared FastMCP instance │
│ │
│ src/tools/compute.py (5 tools) │
│ src/tools/networking.py (17 tools) │
│ src/tools/gke.py (4 tools) │
│ src/tools/regions.py (4 tools) │
│ src/tools/inventory.py (3 tools) │
│ │
│ src/gcp_clients.py → client factories│
└──────────────────────────────────────┘
│
▼
Google Cloud APIs (Compute, Container, DNS, Asset Inventory)
Prerequisites
| Requirement | Minimum Version |
|---|---|
| Python | 3.10+ |
| pip | latest |
| GCP Service Account | with read-only roles |
| Docker (optional) | 20+ |
Installation
Option A — Local (virtualenv)
cd gcpmcp
# Create and activate a virtual environment
python -m venv venv
# Linux / macOS
source venv/bin/activate
# Windows (PowerShell)
.\venv\Scripts\Activate.ps1
# Install dependencies
pip install -r requirements.txt
Option B — Docker
docker build -t gcp-mcp-server .
Running the Server
Local
python main.py
| Flag | Default | Description |
|---|---|---|
--host |
0.0.0.0 |
Bind address |
--port |
8080 |
Listen port |
--log-level |
info |
debug / info / warning / error |
Example:
python main.py --host 127.0.0.1 --port 9000 --log-level debug
Docker
docker run -p 8080:8080 gcp-mcp-server
Health Check
curl http://localhost:8080/health
# {"status":"healthy","server":"gcp-infrastructure-mcp"}
Authentication Setup
1. Create a GCP Service Account
PROJECT_ID=your-project-id
# Create the service account
gcloud iam service-accounts create mcp-reader \
--display-name="MCP Infrastructure Reader"
# Grant read-only roles
for ROLE in roles/compute.viewer roles/container.viewer \
roles/dns.reader roles/cloudasset.viewer; do
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:mcp-reader@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="$ROLE"
done
# Download the JSON key
gcloud iam service-accounts keys create sa-key.json \
--iam-account=mcp-reader@${PROJECT_ID}.iam.gserviceaccount.com
2. Base64-Encode the Key
Linux / macOS:
TOKEN=$(base64 -w 0 < sa-key.json)
echo "$TOKEN"
Windows (PowerShell):
$TOKEN = [Convert]::ToBase64String([IO.File]::ReadAllBytes("sa-key.json"))
Write-Output $TOKEN
3. Required IAM Roles
| Role | Purpose |
|---|---|
roles/compute.viewer |
VMs, disks, VPCs, subnets, firewalls, LBs, routes |
roles/container.viewer |
GKE clusters and node pools |
roles/dns.reader |
Cloud DNS zones and records |
roles/cloudasset.viewer |
Cloud Asset Inventory searches |
MCP Client Configuration
Set your MCP client to connect with:
- URL:
http://<server-host>:8080/sse - Token: the base64-encoded service account key
Example — Generic MCP Client
{
"mcpServers": {
"gcp-infrastructure": {
"url": "http://localhost:8080/sse",
"token": "<BASE64_ENCODED_SERVICE_ACCOUNT_KEY>"
}
}
}
Example — Production (HTTPS)
{
"mcpServers": {
"gcp-infrastructure": {
"url": "https://mcp.example.com/sse",
"token": "<BASE64_ENCODED_SERVICE_ACCOUNT_KEY>"
}
}
}
Note: Different users can connect simultaneously, each with their own token pointing to a different GCP project.
Available Tools
Compute Engine (5 tools)
| Tool | Description |
|---|---|
list_compute_instances |
List VMs (all zones or specific zone) |
get_compute_instance |
Get full details of a specific VM |
list_disks |
List persistent disks |
list_instance_templates |
List instance templates |
list_machine_types |
List available machine types in a zone |
Networking (7 tools)
| Tool | Description |
|---|---|
list_vpcs |
List VPC networks |
get_vpc |
Get VPC details (peerings, routing) |
list_subnets |
List subnets (all regions or specific) |
get_subnet |
Get subnet details (CIDR, gateway) |
list_firewalls |
List firewall rules |
get_firewall |
Get firewall rule details |
list_routes |
List all routes |
IP Addresses (1 tool)
| Tool | Description |
|---|---|
list_addresses |
List reserved / static IPs |
Load Balancers (6 tools)
| Tool | Description |
|---|---|
list_forwarding_rules |
Regional LB frontends |
list_global_forwarding_rules |
Global HTTP(S)/SSL/TCP LB frontends |
list_backend_services |
LB backend services |
list_url_maps |
HTTP(S) LB URL routing |
list_target_pools |
Classic network LB backends |
list_health_checks |
Health checks |
SSL (1 tool)
| Tool | Description |
|---|---|
list_ssl_certificates |
SSL certificates for HTTPS LBs |
DNS (2 tools)
| Tool | Description |
|---|---|
list_dns_zones |
Cloud DNS managed zones |
list_dns_records |
DNS record sets in a zone |
GKE — Google Kubernetes Engine (4 tools)
| Tool | Description |
|---|---|
list_gke_clusters |
List GKE clusters |
get_gke_cluster |
Cluster details (networking, add-ons, security) |
list_gke_node_pools |
Node pools for a cluster |
get_gke_server_config |
Supported K8s versions & image types |
Regions & Zones (4 tools)
| Tool | Description |
|---|---|
list_regions |
All GCP regions |
get_region |
Region details (quotas, zones) |
list_zones |
All GCP zones |
get_zone |
Zone details (status, CPU platforms) |
Cloud Asset Inventory (3 tools)
| Tool | Description |
|---|---|
search_cloud_resources |
Full-text search across all resources |
list_cloud_assets |
List assets by type |
get_infrastructure_summary |
Resource counts by type (quick audit) |
Terraform Integration
This server is purpose-built for infrastructure-as-code workflows:
- Audit — Use
get_infrastructure_summaryto see what's deployed. - Explore — Drill into VPCs, subnets, firewalls, GKE clusters.
- Generate — Feed real infrastructure data to an AI to produce accurate
.tffiles. - Validate — Compare
terraform planoutput against live state.
Example Workflow
User: "List all VPCs and generate Terraform for them"
AI: → calls list_vpcs → gets 3 VPCs with auto-subnets
→ calls list_subnets → maps CIDRs per region
→ generates google_compute_network + google_compute_subnetwork resources
Adding New Tools
- Pick the right file (
src/tools/compute.py,src/tools/networking.py, etc.) or create a newsrc/tools/<name>.pymodule. - Import
mcpfromsrc.serverand credentials helpers fromsrc.auth. - Decorate your function with
@mcp.tool(). - If you create a new module, import it in
main.pyso the tools get registered.
# src/tools/storage.py (example)
from src.server import mcp
from src.auth import get_credentials, get_project_id
from src.gcp_clients import run_sync, format_response
@mcp.tool()
async def list_storage_buckets(project_id=None, max_results=100):
"""List Cloud Storage buckets."""
credentials = get_credentials()
project = project_id or get_project_id()
# ... call GCS API ...
Then add to main.py:
import src.tools.storage # noqa: F401
Project Structure
gcpmcp/
├── main.py # Entry point — HTTP server + route handlers
├── src/
│ ├── __init__.py
│ ├── server.py # Shared FastMCP instance
│ ├── auth.py # Token decoding + per-session credential mgmt
│ ├── gcp_clients.py # GCP client factories + proto-to-dict helpers
│ └── tools/
│ ├── __init__.py
│ ├── compute.py # Compute Engine tools (5)
│ ├── networking.py # VPC / firewall / DNS / LB tools (17)
│ ├── gke.py # GKE tools (4)
│ ├── regions.py # Region & zone tools (4)
│ └── inventory.py # Cloud Asset Inventory tools (3)
├── requirements.txt # Python dependencies
├── Dockerfile # Container image
└── README.md # This file
Security Considerations
| Concern | Mitigation |
|---|---|
| Token in transit | Use HTTPS (TLS) in production — the Bearer token is a full credential. |
| Least privilege | Grant only viewer / reader roles — never editor or owner. |
| Key rotation | Rotate service account keys regularly; delete unused keys. |
| Network access | Restrict the MCP server to trusted networks (VPN, firewall rules). |
| Secrets in VCS | Never commit sa-key.json or base64 tokens to version control. |
| Server hardening | Run as a non-root user in Docker; pin dependency versions. |
License
MIT
Installing GCP Infrastructure Server
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/nsachin08/GCPInfraMCPFAQ
Is GCP Infrastructure Server MCP free?
Yes, GCP Infrastructure Server MCP is free — one-click install via Unyly at no cost.
Does GCP Infrastructure Server need an API key?
No, GCP Infrastructure Server runs without API keys or environment variables.
Is GCP Infrastructure Server hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install GCP Infrastructure Server in Claude Desktop, Claude Code or Cursor?
Open GCP Infrastructure Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare GCP Infrastructure Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
