| title | Deployment Options | |||||
|---|---|---|---|---|---|---|
| description | Deploy MCP Server with LangGraph to production | |||||
| icon | rocket | |||||
| seoTitle | Deployment Guide: Multi-Cloud MCP Server Deployment | |||||
| seoDescription | Deploy MCP Server with LangGraph to GCP, AWS, Azure, or on-premises. Kubernetes, Docker, Cloud Run, and LangGraph Platform deployment options. | |||||
| keywords |
|
|||||
| contentType | explanation |
Choose the deployment method that best fits your needs:
One-command serverless deployment - **Best for**: Quick production deployments - **Complexity**: ★☆☆☆☆ Minimal - **Time**: ~2 minutes* - **Cost**: Pay-per-use GCP serverless container platform - **Best for**: GCP-native applications - **Complexity**: ★★☆☆☆ Low - **Time**: ~10 minutes* - **Cost**: Pay-per-use Production-grade K8s deployment - **Best for**: Enterprise, self-hosted - **Complexity**: ★★★★☆ High - **Time**: ~1-2 hours* - **Cost**: Fixed + usage Quick Docker Compose setup - **Best for**: Development, testing - **Complexity**: ★☆☆☆☆ Minimal - **Time**: ~15 minutes* - **Cost**: Hosting only Flexible Helm chart deployment - **Best for**: Customizable K8s - **Complexity**: ★★★☆☆ Medium - **Time**: ~30 minutes* - **Cost**: Fixed + usage Environment-specific overlays - **Best for**: Multi-environment K8s - **Complexity**: ★★★☆☆ Medium - **Time**: ~45 minutes* - **Cost**: Fixed + usage *Time estimates assume prerequisites are configured (accounts, credentials, CLI tools installed). First-time setup may take longer. See individual deployment guides for detailed requirements.| Feature | LangGraph Platform | Cloud Run | Kubernetes | Docker |
|---|---|---|---|---|
| Setup Time | ~2 min* | ~10 min* | ~1-2 hrs* | ~15 min* |
| Infrastructure | ✅ None | ❌ Complex | ||
| Scaling | ✅ Auto | ✅ Auto | ❌ Manual | |
| LangSmith Integration | ✅ Built-in | |||
| Versioning | ✅ Built-in | ❌ None | ||
| Cost | Pay-per-use | Pay-per-use | Fixed + usage | Hosting only |
| Best For | Quick production | GCP apps | Enterprise | Development |
*Time estimates with prerequisites configured. First-time setup takes longer.
**Recommendation**: Start with **LangGraph Platform** for fastest time-to-production, or **Cloud Run** if you're already on GCP. Use **Kubernetes** for enterprise self-hosted deployments.flowchart TB
Internet[Internet] --> LB[Load Balancer]
LB --> Ingress[Ingress Controller]
Ingress --> Kong[Kong API Gateway]
Kong --> Agent[LangGraph Agent Pods]
Agent --> OpenFGA[OpenFGA]
Agent --> Infisical[Infisical]
Agent --> LLM[LLM Provider API]
OpenFGA --> Postgres[(PostgreSQL)]
Agent --> OTEL[OTEL Collector]
OTEL --> Jaeger[Jaeger]
OTEL --> Prom[Prometheus]
Prom --> Grafana[Grafana]
%% ColorBrewer2 Set3 palette - each component type uniquely colored
classDef externalStyle fill:#8dd3c7,stroke:#2a9d8f,stroke-width:2px,color:#333
classDef lbStyle fill:#fb8072,stroke:#e74c3c,stroke-width:2px,color:#333
classDef ingressStyle fill:#fdb462,stroke:#e67e22,stroke-width:2px,color:#333
classDef agentStyle fill:#b3de69,stroke:#7cb342,stroke-width:2px,color:#333
classDef authzStyle fill:#d9d9d9,stroke:#95a5a6,stroke-width:2px,color:#333
classDef secretsStyle fill:#bc80bd,stroke:#8e44ad,stroke-width:2px,color:#333
classDef llmStyle fill:#fccde5,stroke:#ec7ab8,stroke-width:2px,color:#333
classDef dataStyle fill:#80b1d3,stroke:#3498db,stroke-width:2px,color:#333
classDef otelStyle fill:#ffffb3,stroke:#f1c40f,stroke-width:2px,color:#333
classDef tracingStyle fill:#fb8072,stroke:#e74c3c,stroke-width:2px,color:#333
classDef metricsStyle fill:#fdb462,stroke:#e67e22,stroke-width:2px,color:#333
classDef dashStyle fill:#ccebc5,stroke:#82c99a,stroke-width:2px,color:#333
class Internet externalStyle
class LB lbStyle
class Ingress,Kong ingressStyle
class Agent agentStyle
class OpenFGA authzStyle
class Infisical secretsStyle
class LLM llmStyle
class Postgres dataStyle
class OTEL otelStyle
class Jaeger tracingStyle
class Prom metricsStyle
class Grafana dashStyle
<Check>Fully supported and tested</Check>
**Features**:
- ✅ Autopilot and Standard clusters
- ✅ Workload Identity for secrets
- ✅ Cloud Armor for DDoS protection
- ✅ Cloud Load Balancing
- ✅ Managed Prometheus
[Deploy to GKE →](/deployment/kubernetes/gke)
<Check>Fully supported and tested</Check>
**Features**:
- ✅ Fargate and EC2 node groups
- ✅ IAM for service accounts
- ✅ AWS WAF integration
- ✅ Application Load Balancer
- ✅ CloudWatch integration
[Deploy to EKS →](/deployment/kubernetes/eks)
<Check>Fully supported and tested</Check>
**Features**:
- ✅ Standard and Premium tiers
- ✅ Azure AD integration
- ✅ Azure Key Vault for secrets
- ✅ Application Gateway
- ✅ Azure Monitor
[Deploy to AKS →](/deployment/kubernetes/aks)
Also compatible with:
- **Rancher** - Enterprise Kubernetes management
- **VMware Tanzu** - Enterprise Kubernetes platform
- **OpenShift** - Red Hat Kubernetes distribution
- **On-Premises** - Self-managed Kubernetes
- **DigitalOcean** - Managed Kubernetes
- **Linode** - LKE (Linode Kubernetes Engine)
Use the standard [Kubernetes guide](/deployment/kubernetes) for these platforms.
```bash
python scripts/validate_production.py --strict
```
Ensure all checks pass before deploying.
See [Secrets Management](/guides/infisical-setup)
Or use GitHub Actions for automated builds.
For a quick test deployment:
## 1. Configure environment
cp .env.example .env.production
## Edit .env.production with your values
## 2. Start services
docker compose -f docker-compose.yml up -d
## 3. Verify
curl http://localhost:8000/healthFor production deployment:
## 1. Create namespace
kubectl create namespace mcp-server-langgraph
## 2. Create secrets
kubectl create secret generic mcp-server-langgraph-secrets \
--from-literal=jwt-secret-key="$(openssl rand -base64 32)" \
--from-literal=google-api-key="YOUR_KEY" \
-n mcp-server-langgraph
## 3. Deploy with Helm
helm upgrade --install mcp-server-langgraph ./helm/mcp-server-langgraph \
--namespace mcp-server-langgraph \
--values values-production.yaml \
--wait
## 4. Verify deployment
kubectl rollout status deployment/mcp-server-langgraph -n mcp-server-langgraphDeploy the monitoring stack:
## Prometheus + Grafana
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace
## Jaeger
helm install jaeger jaegertracing/jaeger \
--namespace monitoring
## OpenTelemetry Collector
kubectl apply -f kubernetes/otel-collector/Access dashboards:
- Grafana: http://grafana.yourdomain.com (admin/admin)
- Jaeger: http://jaeger.yourdomain.com
- Prometheus: http://prometheus.yourdomain.com
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: mcp-server-langgraph
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: mcp-server-langgraph
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80kubectl apply -f kubernetes/vpa/Ensure high availability with:
- Multiple Replicas: Run at least 3 replicas
- Pod Disruption Budget: Maintain minimum availability
- Multi-Zone Deployment: Spread across availability zones
- Health Checks: Liveness and readiness probes
- Graceful Shutdown: Handle SIGTERM properly
- Circuit Breakers: Fail fast with timeouts
Production security checklist:
- [ ] TLS enabled for all endpoints
- [ ] Network policies applied
- [ ] Pod security policies enforced
- [ ] RBAC configured with least privilege
- [ ] Secrets encrypted at rest
- [ ] Audit logging enabled
- [ ] Regular security scans
- [ ] Rate limiting configured