Back to Guides

Deploy AnythingMCP on Google Cloud Run

Deploy AnythingMCP as a serverless container on Google Cloud Run with Cloud SQL for PostgreSQL. Scalable, pay-per-use MCP gateway.

Why Google Cloud Run?

Cloud Run lets you run containers without managing servers. Combined with Cloud SQL for PostgreSQL, it provides a scalable, pay-per-use deployment. HTTPS is handled automatically — no reverse proxy needed.

This is more advanced than VM-based deployments. You cannot run setup.sh on Cloud Run, so you must build the image, push it, and configure environment variables manually.

Prerequisites

  • A GCP account with billing enabled
  • gcloud CLI installed and authenticated
  • Docker installed locally
gcloud config set project YOUR_PROJECT_ID
gcloud config set run/region europe-west1

gcloud services enable \
  run.googleapis.com \
  sqladmin.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com

Set Up Cloud SQL

gcloud sql instances create anythingmcp-db \
  --database-version=POSTGRES_16 \
  --tier=db-f1-micro \
  --region=europe-west1

gcloud sql databases create anythingmcp --instance=anythingmcp-db

gcloud sql users create amcp \
  --instance=anythingmcp-db \
  --password=YOUR_DB_PASSWORD

Note the instance connection name (e.g. project-id:europe-west1:anythingmcp-db).

Build and Push the Image

git clone https://github.com/HelpCode-ai/anythingmcp.git
cd anythingmcp

# Option A: Build locally
docker build -t europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest .
docker push europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest

# Option B: Build with Cloud Build
gcloud builds submit --tag europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest

Generate Secrets

Since setup.sh cannot run on Cloud Run, generate secrets manually:

JWT_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 16)
NEXTAUTH_SECRET=$(openssl rand -hex 32)

Deploy to Cloud Run

gcloud run deploy anythingmcp \
  --image=europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest \
  --allow-unauthenticated \
  --port=4000 \
  --min-instances=1 \
  --max-instances=5 \
  --memory=512Mi \
  --cpu=1 \
  --set-env-vars="NODE_ENV=production" \
  --set-env-vars="DATABASE_URL=postgresql://amcp:YOUR_DB_PASSWORD@localhost:5432/anythingmcp" \
  --set-env-vars="JWT_SECRET=$JWT_SECRET" \
  --set-env-vars="ENCRYPTION_KEY=$ENCRYPTION_KEY" \
  --set-env-vars="NEXTAUTH_SECRET=$NEXTAUTH_SECRET" \
  --set-env-vars="MCP_AUTH_MODE=oauth2" \
  --add-cloudsql-instances=YOUR_PROJECT_ID:europe-west1:anythingmcp-db

--min-instances=1 avoids cold starts. The Cloud SQL proxy uses a Unix socket, so localhost works in the DATABASE_URL.

Custom Domain (Optional)

gcloud run domain-mappings create \
  --service=anythingmcp \
  --domain=mcp.example.com \
  --region=europe-west1

Follow the DNS instructions in the output. SSL is provisioned automatically.

Limitations

  • Stateless — Cloud Run instances are ephemeral. All data must be in Cloud SQL.
  • Cold starts — Use --min-instances=1 to mitigate (small cost).
  • No setup.sh — All config is via environment variables at deploy time.
  • Costs — Cloud Run charges per request + vCPU time. Cloud SQL has a fixed monthly cost.

Updating

git pull
docker build -t europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest .
docker push europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest
gcloud run deploy anythingmcp \
  --image=europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest \
  --region=europe-west1

Existing env vars and Cloud SQL connections are preserved across redeployments.