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
Markdown
# 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.