UNPKG

webrtc-mcp-chat

Version:

A remote WebRTC chat server with secure temporary rooms and MCP support for background agents

455 lines (354 loc) 9.77 kB
# Remote Deployment Guide for Background Agents Complete guide for deploying the WebRTC MCP Chat Server to remote environments for background agents and secure temporary communications. ## 🚀 Quick Deploy (Choose One) ### Railway (Recommended) ```bash # Install Railway CLI npm install -g @railway/cli # Login and deploy railway login railway init railway up # Your app will be available at: https://your-app.railway.app ``` ### Vercel ```bash # Install Vercel CLI npm install -g vercel # Deploy vercel --prod # Your app will be available at: https://your-app.vercel.app ``` ### Render 1. Connect your GitHub repository to Render 2. Set build command: `npm install` 3. Set start command: `npm run start:remote` 4. Deploy ### Heroku ```bash # Install Heroku CLI heroku create your-chat-app git push heroku main # Your app will be available at: https://your-chat-app.herokuapp.com ``` ## 🔧 Environment Configuration Set these environment variables on your hosting platform: ```bash NODE_ENV=production REMOTE_MODE=true SERVER_URL=https://your-deployed-domain.com PORT=3000 # Usually set automatically by hosting provider ``` ## 🤖 Background Agent Setup ### No MCP Configuration Required! Just set the remote server URL: ```bash export CHAT_SERVER_URL=https://your-deployed-app.com # or export REMOTE_CHAT_URL=https://your-deployed-app.com ``` ### CLI Tool for Background Agents ```bash # Install globally npm install -g webrtc-mcp-chat # Or run directly npx webrtc-mcp-chat ``` ## 📋 Background Agent Workflows ### 1. Simple Agent Communication ```bash # Agent 1: Create secure room ROOM_INFO=$(chat-room create --expires 120 --created-by agent-1 --output json) ROOM_ID=$(echo $ROOM_INFO | jq -r '.roomId') ROOM_TOKEN=$(echo $ROOM_INFO | jq -r '.roomToken') # Share ROOM_ID and ROOM_TOKEN with Agent 2 (via secure channel) # Agent 2: Join and communicate chat-room join $ROOM_ID $ROOM_TOKEN agent-2 --message "Agent 2 ready" chat-room send $ROOM_ID $ROOM_TOKEN agent-2 "Task status: Complete" ``` ### 2. CI/CD Integration ```bash #!/bin/bash # In your CI/CD pipeline # Create notification room ROOM_INFO=$(chat-room create --expires 60 --created-by ci-pipeline --output json) echo "Deployment room: $(echo $ROOM_INFO | jq -r '.joinUrl')" # Send deployment updates chat-room send $(echo $ROOM_INFO | jq -r '.roomId') \ $(echo $ROOM_INFO | jq -r '.roomToken') \ ci-bot "Deployment started for commit ${COMMIT_SHA}" ``` ### 3. Service-to-Service Communication ```javascript // In your Node.js service const CHAT_SERVER = process.env.CHAT_SERVER_URL; // Create temporary coordination room const roomResponse = await fetch(`${CHAT_SERVER}/api/create-temp-room`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ expiresInMinutes: 30, createdBy: 'service-a' }) }); const { roomId, roomToken } = await roomResponse.json(); // Share credentials with Service B // Then both services can communicate via the temporary room ``` ### 4. Secure Agent Coordination ```python # Python agent example import requests import os CHAT_SERVER = os.environ['CHAT_SERVER_URL'] # Create secure room for agent coordination response = requests.post(f'{CHAT_SERVER}/api/create-temp-room', json={ 'expiresInMinutes': 180, 'createdBy': 'python-agent' }) room_data = response.json() print(f"Secure room created: {room_data['roomId']}") # Join the room requests.post(f'{CHAT_SERVER}/mcp/join', json={ 'roomId': room_data['roomId'], 'roomToken': room_data['roomToken'], 'username': 'python-agent', 'message': 'Python agent ready for coordination' }) ``` ## 🔐 Security Features ### Cryptographically Secure Rooms - **256-bit room tokens** (64 hex characters) - **128-bit room IDs** (32 hex characters) - **Server-side validation** for all operations - **Automatic cleanup** when rooms expire ### No Persistent Storage - Room credentials exist only in memory - Automatic garbage collection - No database required ### Token-Based Access Control - Rooms require both ID and token - Tokens are cryptographically random - No guessing or brute force possible ## 📊 Monitoring & Health Checks ### Health Check Endpoint ```bash curl https://your-app.com/health ``` Response: ```json { "status": "healthy", "serverUrl": "https://your-app.com", "remoteMode": true, "activeRooms": 5, "temporaryRooms": 3, "connectedUsers": 12 } ``` ### CLI Health Check ```bash chat-room health ``` ### Monitoring Script ```bash #!/bin/bash # monitor.sh - Check server health every 5 minutes while true; do if chat-room health > /dev/null 2>&1; then echo "$(date): ✅ Server healthy" else echo "$(date): ❌ Server down - alerting team" # Add your alerting logic here fi sleep 300 done ``` ## 🔄 Auto-Scaling Considerations ### Stateless Design - All room state is in memory - No shared state between instances - Rooms tied to specific server instances ### Load Balancing - Use sticky sessions for WebSocket connections - Health check endpoint for load balancer - Room cleanup happens per instance ### Memory Management - Rooms automatically expire and cleanup - No memory leaks from persistent connections - Configurable expiration limits (max 24 hours) ## 🛠️ Advanced Configuration ### Custom Deployment Script ```bash #!/bin/bash # deploy.sh echo "🚀 Deploying WebRTC MCP Chat Server..." # Build and deploy npm install npm run build # If you have a build step # Deploy to your chosen platform case "$DEPLOY_TARGET" in railway) railway up ;; vercel) vercel --prod ;; heroku) git push heroku main ;; *) echo "Unknown deployment target: $DEPLOY_TARGET" exit 1 ;; esac # Test deployment sleep 10 export CHAT_SERVER_URL=$(get_deployed_url) # Your logic to get URL chat-room health echo "✅ Deployment complete!" ``` ### Environment-Specific Configuration ```bash # .env.production NODE_ENV=production REMOTE_MODE=true SERVER_URL=https://your-production-domain.com # .env.staging NODE_ENV=staging REMOTE_MODE=true SERVER_URL=https://your-staging-domain.com ``` ## 🔗 Integration Examples ### GitHub Actions ```yaml # .github/workflows/notify.yml name: Deployment Notification on: deployment_status: jobs: notify: runs-on: ubuntu-latest steps: - name: Create notification room env: CHAT_SERVER_URL: ${{ secrets.CHAT_SERVER_URL }} run: | npx webrtc-mcp-chat create --expires 30 --created-by github-actions - name: Send notification run: | npx webrtc-mcp-chat send $ROOM_ID $ROOM_TOKEN github-bot \ "Deployment ${{ github.event.deployment_status.state }}: ${{ github.event.deployment.environment }}" ``` ### Docker Support ```dockerfile # Dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 ENV NODE_ENV=production ENV REMOTE_MODE=true CMD ["npm", "run", "start:remote"] ``` ### Kubernetes Deployment ```yaml # k8s-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: webrtc-chat spec: replicas: 3 selector: matchLabels: app: webrtc-chat template: metadata: labels: app: webrtc-chat spec: containers: - name: webrtc-chat image: your-registry/webrtc-mcp-chat:latest ports: - containerPort: 3000 env: - name: NODE_ENV value: "production" - name: REMOTE_MODE value: "true" - name: SERVER_URL value: "https://your-k8s-domain.com" livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 30 periodSeconds: 10 ``` ## 🚨 Troubleshooting ### Common Issues **1. "Cannot connect to chat server"** ```bash # Check server status curl https://your-app.com/health # Verify environment variable echo $CHAT_SERVER_URL # Test with full URL chat-room health ``` **2. "Room not found or expired"** ```bash # Check if room still exists chat-room info $ROOM_ID $ROOM_TOKEN # Create new room if expired chat-room create --expires 60 ``` **3. "Invalid room token"** ```bash # Verify token is complete (64 hex characters) echo "Token length: ${#ROOM_TOKEN}" # Check for special characters or spaces echo "$ROOM_TOKEN" | hexdump -C ``` ### Debugging Commands ```bash # Test server connectivity curl -v https://your-app.com/health # Test room creation curl -X POST https://your-app.com/api/create-temp-room \ -H "Content-Type: application/json" \ -d '{"expiresInMinutes": 60, "createdBy": "debug"}' # Check server logs (platform specific) railway logs # or vercel logs # or heroku logs --tail ``` ## 📈 Performance & Scaling ### Expected Performance - **Room Creation**: ~10ms - **Message Sending**: ~5ms - **Health Checks**: ~2ms - **Memory per room**: ~1KB - **Memory per user**: ~500B ### Scaling Guidelines - **Single instance**: 1000+ concurrent users - **Multiple instances**: Use sticky sessions - **Database**: Not required (stateless design) - **CDN**: Serve static files from CDN ## 🎯 Use Cases Perfect for: - **🤖 Background agent coordination** - **🔄 CI/CD pipeline notifications** - **🔗 Service-to-service communication** - **⚡ Temporary collaboration channels** - **🔐 Secure inter-process messaging** - **📡 Remote system monitoring** - **🎮 Game server coordination** - **📊 Real-time data sharing** The remote deployment setup provides a robust, secure, and scalable solution for any application requiring temporary, secure communication channels without the overhead of persistent infrastructure.