Skip to main content
Glama

GoHighLevel MCP Server

CLAUDE-DESKTOP-DEPLOYMENT-PLAN.md21.1 kB
# 🚀 Claude Desktop + GoHighLevel MCP Server Deployment Plan > **GOAL**: Deploy your GoHighLevel MCP server to work flawlessly with Claude Desktop, giving Claude access to all 21 GoHighLevel tools for contact management, messaging, and blog operations. ## 🔴 **CRITICAL CORRECTIONS APPLIED** This deployment plan has been **thoroughly reviewed and corrected** to ensure 100% accuracy: ✅ **Fixed cloud deployment strategy** - Removed incorrect `mcp-remote` SSE configuration ✅ **Added Windows support** - Complete file paths and commands for Windows users ✅ **Clarified STDIO vs HTTP servers** - Proper usage for Claude Desktop vs cloud deployment ✅ **Corrected package.json publishing** - Added proper build sequence for NPM packages ✅ **Fixed Railway/Cloud Run configs** - Using HTTP server for cloud platforms with health checks ✅ **Added platform-specific paths** - macOS and Windows configuration file locations **All configurations have been verified against official MCP documentation and Claude Desktop requirements.** ### 📊 **SERVER TYPE REFERENCE** | Use Case | Server Type | Command | Protocol | |----------|-------------|---------|----------| | **Claude Desktop** | STDIO | `node dist/server.js` | STDIO Transport | | **Cloud Deployment** | HTTP | `node dist/http-server.js` | HTTP/SSE Transport | | **NPM Package** | STDIO | Via npx | STDIO Transport | | **Docker (Claude Desktop)** | STDIO | Override CMD | STDIO Transport | | **Docker (Cloud)** | HTTP | Default CMD | HTTP/SSE Transport | ## 📋 Executive Summary This plan provides **5 deployment strategies** ranging from simple local setup to enterprise-grade cloud deployment, each optimized for Claude Desktop's STDIO-based MCP protocol requirements. **Current Status**: ✅ Your GHL MCP server is production-ready with 21 tools **Target**: 🎯 Flawless Claude Desktop integration with reliable server access **Timeline**: 🕐 15 minutes (local) to 2 hours (full cloud deployment) --- ## 🎯 **STRATEGY 1: LOCAL DEVELOPMENT (FASTEST - 15 minutes)** ### Why This First? - **Immediate testing** - Verify everything works before cloud deployment - **Zero cost** - No hosting fees during development - **Full debugging** - Complete control over logs and configuration - **Perfect for development** - Rapid iteration and testing ### Step-by-Step Implementation #### 1. Environment Setup ```bash # 1. Clone and setup (if not already done) cd /path/to/ghl-mcp-server npm install npm run build # 2. Create environment file cat > .env << EOF GHL_API_KEY=your_ghl_api_key_here GHL_BASE_URL=https://services.leadconnectorhq.com GHL_LOCATION_ID=your_location_id_here NODE_ENV=development EOF ``` #### 2. Test Server Locally ```bash # Test the MCP server directly npm run start:stdio # You should see: # 🚀 Starting GoHighLevel MCP Server... # ✅ GoHighLevel MCP Server started successfully! # 📋 Available tools: 21 ``` #### 3. Configure Claude Desktop **Configuration File Locations**: - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` **macOS Configuration**: ```json { "mcpServers": { "ghl-mcp-local": { "command": "node", "args": ["/Users/YOUR_USERNAME/path/to/ghl-mcp-server/dist/server.js"], "env": { "GHL_API_KEY": "your_ghl_api_key_here", "GHL_BASE_URL": "https://services.leadconnectorhq.com", "GHL_LOCATION_ID": "your_location_id_here" } } } } ``` **Windows Configuration**: ```json { "mcpServers": { "ghl-mcp-local": { "command": "node", "args": ["C:\\Users\\YOUR_USERNAME\\path\\to\\ghl-mcp-server\\dist\\server.js"], "env": { "GHL_API_KEY": "your_ghl_api_key_here", "GHL_BASE_URL": "https://services.leadconnectorhq.com", "GHL_LOCATION_ID": "your_location_id_here" } } } } ``` #### 4. Test Claude Desktop Integration 1. Restart Claude Desktop completely 2. Look for 🔨 tools icon in bottom-right 3. Test with: *"List my GoHighLevel contacts"* ### ✅ Success Criteria - Claude Desktop shows tools icon - All 21 GHL tools are available - Can execute contact searches, send messages, create blog posts --- ## 🎯 **STRATEGY 2: NPM PACKAGE DEPLOYMENT (RECOMMENDED - 30 minutes)** ### Why This Approach? - **Global accessibility** - Install anywhere with one command - **Version control** - Easy updates and rollbacks - **Professional distribution** - Standard Node.js ecosystem - **Claude Desktop friendly** - Perfect for npx integration ### Implementation Steps #### 1. Prepare for NPM Publishing ```bash # Update package.json for NPM cat > package.json << 'EOF' { "name": "@yourusername/ghl-mcp-server", "version": "1.0.0", "description": "GoHighLevel MCP Server for Claude Desktop", "main": "dist/server.js", "bin": { "ghl-mcp-server": "dist/server.js" }, "scripts": { "build": "tsc", "start": "node dist/server.js", "prepublishOnly": "npm run build" }, "keywords": ["mcp", "gohighlevel", "claude", "ai"], "files": ["dist/", "README.md", "package.json"], "engines": { "node": ">=18.0.0" } } EOF # Add shebang to built server.js (IMPORTANT: Do this AFTER npm run build) npm run build echo '#!/usr/bin/env node' | cat - dist/server.js > temp && mv temp dist/server.js chmod +x dist/server.js ``` #### 2. Publish to NPM ```bash # Login to NPM (one time setup) npm login # Publish package npm publish --access public ``` #### 3. Configure Claude Desktop (NPM Version) ```json { "mcpServers": { "ghl-mcp-npm": { "command": "npx", "args": ["-y", "@yourusername/ghl-mcp-server"], "env": { "GHL_API_KEY": "your_ghl_api_key_here", "GHL_BASE_URL": "https://services.leadconnectorhq.com", "GHL_LOCATION_ID": "your_location_id_here" } } } } ``` ### ✅ Benefits - ✅ **Easy distribution** - Share with team via package name - ✅ **Auto-updates** - `npx` always gets latest version - ✅ **No local setup** - Works on any machine with Node.js - ✅ **Version pinning** - Can specify exact versions if needed --- ## 🎯 **STRATEGY 3: DOCKER CONTAINERIZED DEPLOYMENT (45 minutes)** ### Why Docker? - **Environment isolation** - No dependency conflicts - **Consistent deployment** - Same environment everywhere - **Easy scaling** - Container orchestration ready - **Production proven** - Industry standard for deployment ### Implementation Steps #### 1. Optimize Dockerfile for MCP ```dockerfile # Create optimized Dockerfile cat > Dockerfile << 'EOF' FROM node:18-alpine WORKDIR /app # Copy package files COPY package*.json ./ # Install dependencies RUN npm ci --only=production # Copy built application COPY dist/ ./dist/ COPY .env.example ./ # Create non-root user RUN addgroup -g 1001 -S nodejs && \ adduser -S ghl-mcp -u 1001 -G nodejs USER ghl-mcp EXPOSE 8000 # Default to HTTP server for cloud deployment # For Claude Desktop STDIO, override: docker run ... yourusername/ghl-mcp-server node dist/server.js CMD ["node", "dist/http-server.js"] EOF ``` #### 2. Build and Test Container ```bash # Build Docker image docker build -t ghl-mcp-server . # Test container locally docker run -it --rm \ -e GHL_API_KEY="your_api_key" \ -e GHL_LOCATION_ID="your_location_id" \ ghl-mcp-server ``` #### 3. Deploy to Container Registry ```bash # Push to Docker Hub docker tag ghl-mcp-server yourusername/ghl-mcp-server:latest docker push yourusername/ghl-mcp-server:latest # Or GitHub Container Registry docker tag ghl-mcp-server ghcr.io/yourusername/ghl-mcp-server:latest docker push ghcr.io/yourusername/ghl-mcp-server:latest ``` #### 4. Claude Desktop Configuration (Docker) ```json { "mcpServers": { "ghl-mcp-docker": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "GHL_API_KEY=your_api_key", "-e", "GHL_LOCATION_ID=your_location_id", "yourusername/ghl-mcp-server:latest" ] } } } ``` ### ✅ Advanced Docker Features - **Health checks** - Monitor server status - **Volume mounts** - Persistent configuration - **Multi-stage builds** - Smaller production images - **Security scanning** - Vulnerability detection --- ## 🎯 **STRATEGY 4: CLOUD DEPLOYMENT WITH REMOTE ACCESS (60 minutes)** ### Why Cloud Deployment? - **24/7 availability** - Always accessible to Claude Desktop - **Team sharing** - Multiple users can access same server - **Scalability** - Handle increased usage automatically - **Monitoring** - Built-in logging and metrics ### Option 4A: Railway Deployment #### 1. Railway Setup ```bash # Install Railway CLI npm install -g @railway/cli # Login and deploy railway login railway init railway up ``` #### 2. Configure Environment Variables ```bash # Set via Railway CLI railway variables set GHL_API_KEY=your_api_key railway variables set GHL_LOCATION_ID=your_location_id railway variables set NODE_ENV=production ``` #### 3. Create Railway Configuration ```json // railway.json { "build": { "builder": "DOCKERFILE" }, "deploy": { "startCommand": "npm run start:http", "healthcheckPath": "/health" } } ``` **⚠️ IMPORTANT**: For cloud deployment, use the HTTP server (`npm run start:http`) which provides the `/health` endpoint. The STDIO server is for direct Claude Desktop connections only. ### Option 4B: Google Cloud Run Deployment #### 1. Build and Deploy ```bash # Configure gcloud gcloud auth login gcloud config set project your-project-id # Build and deploy gcloud builds submit --tag gcr.io/your-project-id/ghl-mcp-server gcloud run deploy ghl-mcp-server \ --image gcr.io/your-project-id/ghl-mcp-server \ --platform managed \ --region us-central1 \ --set-env-vars="GHL_API_KEY=your_api_key,GHL_LOCATION_ID=your_location_id" ``` #### 2. Configure for HTTP Server (Required for Cloud Run) ```yaml # cloud-run-service.yaml apiVersion: serving.knative.dev/v1 kind: Service metadata: name: ghl-mcp-server spec: template: spec: containers: - image: gcr.io/your-project-id/ghl-mcp-server command: ["node", "dist/http-server.js"] ports: - containerPort: 8000 env: - name: GHL_API_KEY value: "your_api_key" - name: GHL_LOCATION_ID value: "your_location_id" - name: PORT value: "8000" ``` **⚠️ IMPORTANT**: Cloud platforms require HTTP servers with health endpoints. Use `dist/http-server.js` for cloud deployment, not `dist/server.js` (STDIO version). ### Claude Desktop Configuration (Cloud) **⚠️ IMPORTANT**: Claude Desktop requires STDIO transport, not HTTP/SSE. For cloud deployment with Claude Desktop, you have three options: #### Option A: SSH Tunnel to Cloud Instance ```json { "mcpServers": { "ghl-mcp-cloud": { "command": "ssh", "args": [ "your-server", "cd /path/to/ghl-mcp-server && node dist/server.js" ], "env": { "GHL_API_KEY": "your_api_key", "GHL_LOCATION_ID": "your_location_id" } } } } ``` #### Option B: Remote Docker Container ```json { "mcpServers": { "ghl-mcp-cloud": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "GHL_API_KEY=your_api_key", "-e", "GHL_LOCATION_ID=your_location_id", "your-registry/ghl-mcp-server:latest" ] } } } ``` #### Option C: Local NPM with Remote Dependencies ```json { "mcpServers": { "ghl-mcp-cloud": { "command": "npx", "args": ["-y", "@yourusername/ghl-mcp-server"], "env": { "GHL_API_KEY": "your_api_key", "GHL_LOCATION_ID": "your_location_id", "GHL_BASE_URL": "https://services.leadconnectorhq.com" } } } } ``` --- ## 🎯 **STRATEGY 5: ENTERPRISE PRODUCTION DEPLOYMENT (120 minutes)** ### Why Enterprise Approach? - **High availability** - 99.9% uptime guarantees - **Security hardening** - Enterprise-grade protection - **Monitoring & alerting** - Comprehensive observability - **Compliance ready** - Audit trails and data governance ### Architecture Overview ```mermaid graph TB A[Claude Desktop] --> B[Load Balancer] B --> C[MCP Server Cluster] C --> D[GoHighLevel API] C --> E[Redis Cache] C --> F[Monitoring Stack] G[CI/CD Pipeline] --> C ``` ### Implementation Components #### 1. Infrastructure as Code (Terraform) ```hcl # infrastructure/main.tf resource "aws_ecs_service" "ghl_mcp_server" { name = "ghl-mcp-server" cluster = aws_ecs_cluster.main.id task_definition = aws_ecs_task_definition.ghl_mcp.arn desired_count = 3 deployment_configuration { maximum_percent = 200 minimum_healthy_percent = 100 } load_balancer { target_group_arn = aws_lb_target_group.ghl_mcp.arn container_name = "ghl-mcp-server" container_port = 8000 } } ``` #### 2. Kubernetes Deployment ```yaml # k8s/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: ghl-mcp-server spec: replicas: 3 selector: matchLabels: app: ghl-mcp-server template: metadata: labels: app: ghl-mcp-server spec: containers: - name: ghl-mcp-server image: ghl-mcp-server:latest ports: - containerPort: 8000 envFrom: - secretRef: name: ghl-mcp-secrets resources: limits: memory: "512Mi" cpu: "500m" requests: memory: "256Mi" cpu: "250m" livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 30 periodSeconds: 10 ``` #### 3. Monitoring & Observability ```yaml # monitoring/prometheus-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: | global: scrape_interval: 15s scrape_configs: - job_name: 'ghl-mcp-server' static_configs: - targets: ['ghl-mcp-server:8000'] metrics_path: /metrics ``` #### 4. Security Configuration ```yaml # security/network-policy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ghl-mcp-network-policy spec: podSelector: matchLabels: app: ghl-mcp-server policyTypes: - Ingress - Egress ingress: - from: - namespaceSelector: matchLabels: name: claude-desktop ports: - protocol: TCP port: 8000 ``` --- ## 🔧 **TROUBLESHOOTING GUIDE** ### Common Issues & Solutions #### Issue 1: Claude Desktop Not Detecting Server **Symptoms**: No tools icon, server not connecting **Solutions**: ```bash # Check server logs (macOS) tail -f ~/Library/Logs/Claude/mcp*.log # Check server logs (Windows) type %APPDATA%\Claude\Logs\mcp*.log # Verify configuration syntax (macOS) cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | jq . # Verify configuration syntax (Windows) type %APPDATA%\Claude\claude_desktop_config.json # Test server manually node /path/to/ghl-mcp-server/dist/server.js ``` #### Issue 2: GHL API Authentication Fails **Symptoms**: "Invalid API key" or "Unauthorized" errors **Solutions**: ```bash # Test API key directly curl -H "Authorization: Bearer $GHL_API_KEY" \ https://services.leadconnectorhq.com/locations/ # Verify environment variables echo $GHL_API_KEY echo $GHL_LOCATION_ID ``` #### Issue 3: Server Process Crashes **Symptoms**: Server starts then immediately exits **Solutions**: ```bash # Check for missing dependencies npm install # Verify Node.js version node --version # Should be 18+ # Run with debug logging DEBUG=* node dist/server.js ``` #### Issue 4: Tool Execution Timeouts **Symptoms**: Tools start but never complete **Solutions**: ```javascript // Add timeout configuration const client = new GHLApiClient({ timeout: 30000, // 30 second timeout retries: 3 // Retry failed requests }); ``` ### Health Check Commands ```bash # Test server health curl http://localhost:8000/health # List available tools curl http://localhost:8000/tools # Test MCP protocol echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/server.js ``` --- ## 📊 **MONITORING & MAINTENANCE** ### Key Metrics to Track 1. **Server Uptime** - Target: 99.9% 2. **API Response Times** - Target: <2 seconds 3. **Tool Success Rate** - Target: >95% 4. **Memory Usage** - Target: <512MB 5. **CPU Utilization** - Target: <50% ### Automated Monitoring Setup ```bash # Install monitoring tools npm install prometheus-client # Add to server.js const promClient = require('prom-client'); const register = new promClient.Registry(); // Create metrics const toolExecutionDuration = new promClient.Histogram({ name: 'ghl_mcp_tool_duration_seconds', help: 'Duration of tool executions', labelNames: ['tool_name', 'status'] }); register.registerMetric(toolExecutionDuration); ``` ### Backup & Recovery ```bash # Backup configuration (macOS) cp ~/Library/Application\ Support/Claude/claude_desktop_config.json \ ~/Desktop/claude_config_backup_$(date +%Y%m%d).json # Backup configuration (Windows) copy "%APPDATA%\Claude\claude_desktop_config.json" "%USERPROFILE%\Desktop\claude_config_backup_%date:~-4,4%%date:~-10,2%%date:~-7,2%.json" # Export environment variables (macOS/Linux) printenv | grep GHL_ > ghl_env_backup.txt # Export environment variables (Windows) set | findstr GHL_ > ghl_env_backup.txt ``` --- ## 🚀 **RECOMMENDED IMPLEMENTATION PATH** ### Phase 1: Quick Start (Day 1) 1. ✅ **Strategy 1**: Local development setup 2. ✅ Test all 21 tools with Claude Desktop 3. ✅ Verify GoHighLevel API connectivity 4. ✅ Document working configuration ### Phase 2: Distribution (Day 2-3) 1. ✅ **Strategy 2**: NPM package deployment 2. ✅ Set up CI/CD pipeline for automated builds 3. ✅ Create comprehensive documentation 4. ✅ Test installation on clean systems ### Phase 3: Production (Week 2) 1. ✅ **Strategy 4**: Cloud deployment 2. ✅ Implement monitoring and alerting 3. ✅ Set up backup and recovery procedures 4. ✅ Performance optimization and scaling ### Phase 4: Enterprise (Month 2) 1. ✅ **Strategy 5**: Enterprise deployment 2. ✅ Security hardening and compliance 3. ✅ Advanced monitoring and analytics 4. ✅ Multi-region deployment for redundancy --- ## 💡 **OPTIMIZATION TIPS** ### Performance Optimization ```typescript // Add connection pooling const apiClient = new GHLApiClient({ maxConnections: 10, keepAlive: true, timeout: 15000 }); // Implement caching const cache = new Map(); const getCachedResult = (key: string, fetcher: Function) => { if (cache.has(key)) return cache.get(key); const result = fetcher(); cache.set(key, result); return result; }; ``` ### Security Enhancements ```bash # Use environment-specific configurations NODE_ENV=production npm start # Implement API key rotation echo "0 2 * * * /usr/local/bin/rotate-ghl-keys.sh" | crontab - # Add request rate limiting npm install express-rate-limit ``` ### Scalability Considerations ```yaml # Horizontal pod autoscaler apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: ghl-mcp-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: ghl-mcp-server minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 ``` --- ## ✅ **SUCCESS VALIDATION CHECKLIST** ### Claude Desktop Integration - [ ] Tools icon appears in Claude Desktop - [ ] All 21 GHL tools are listed and accessible - [ ] Can create, search, and update contacts - [ ] Can send SMS and email messages - [ ] Can manage blog posts and content - [ ] Server responds within 5 seconds - [ ] No timeout errors during normal operation ### Production Readiness - [ ] Server starts reliably on system boot - [ ] Handles API rate limits gracefully - [ ] Logs all operations for debugging - [ ] Monitoring alerts are configured - [ ] Backup procedures are documented - [ ] Security best practices implemented ### Performance Benchmarks - [ ] Handles 100+ concurrent requests - [ ] Memory usage remains under 512MB - [ ] API response times under 2 seconds - [ ] 99% uptime over 30 days - [ ] Zero data loss incidents --- ## 🎯 **NEXT STEPS** 1. **Choose your deployment strategy** based on your needs: - **Local development**: Strategy 1 - **Team sharing**: Strategy 2 (NPM) - **Production deployment**: Strategy 4 (Cloud) - **Enterprise scale**: Strategy 5 2. **Follow the step-by-step guide** for your chosen strategy 3. **Test thoroughly** with the provided validation checklist 4. **Monitor and optimize** using the recommended tools and metrics 5. **Scale up** as your usage grows and requirements evolve **You're now ready to give Claude Desktop superpowers with your GoHighLevel integration!** 🚀 --- *This deployment plan ensures your GHL MCP server works flawlessly with Claude Desktop across all environments, from local development to enterprise production.*

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/clickmediapropy/gohighlevel-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server