Deployment
This guide covers deploying Universal Crypto MCP to production environments.
Deployment Options
Option 1: NPX (Simplest)
For quick testing and development:
Option 2: Global Installation
For dedicated servers:
Option 3: Docker
For containerized deployments:
docker run -d \
--name universal-crypto-mcp \
-p 3000:3000 \
-e X402_PRIVATE_KEY=$X402_PRIVATE_KEY \
-e COINGECKO_API_KEY=$COINGECKO_API_KEY \
nirholas/universal-crypto-mcp:latest
Option 4: Custom Server
For full control, build your own server:
import { createServer } from "@nirholas/universal-crypto-mcp";
const server = createServer({
transport: "http",
port: 3000,
modules: ["trading", "market-data", "defi"],
});
server.start();
Docker Deployment
Dockerfile
FROM node:20-alpine
WORKDIR /app
# Install the package
RUN npm install -g @nirholas/universal-crypto-mcp
# Expose port for HTTP mode
EXPOSE 3000
# Start in HTTP mode
CMD ["universal-crypto-mcp", "--http", "--port", "3000"]
Docker Compose
version: "3.8"
services:
mcp-server:
image: nirholas/universal-crypto-mcp:latest
ports:
- "3000:3000"
environment:
- MCP_TRANSPORT=http
- MCP_PORT=3000
- LOG_LEVEL=INFO
- X402_PRIVATE_KEY=${X402_PRIVATE_KEY}
- COINGECKO_API_KEY=${COINGECKO_API_KEY}
- BINANCE_API_KEY=${BINANCE_API_KEY}
- BINANCE_API_SECRET=${BINANCE_API_SECRET}
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
Cloud Deployments
AWS EC2
- Launch an EC2 instance (t3.small or larger)
- Install Node.js and npm
- Install Universal Crypto MCP
- Configure systemd service
# Install Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install package
sudo npm install -g @nirholas/universal-crypto-mcp
# Create systemd service
sudo nano /etc/systemd/system/universal-crypto-mcp.service
Systemd service file:
[Unit]
Description=Universal Crypto MCP Server
After=network.target
[Service]
Type=simple
User=ubuntu
Environment=NODE_ENV=production
Environment=MCP_TRANSPORT=http
Environment=MCP_PORT=3000
ExecStart=/usr/bin/universal-crypto-mcp
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable universal-crypto-mcp
sudo systemctl start universal-crypto-mcp
Google Cloud Run
# cloudbuild.yaml
steps:
- name: "gcr.io/cloud-builders/docker"
args: ["build", "-t", "gcr.io/$PROJECT_ID/universal-crypto-mcp", "."]
- name: "gcr.io/cloud-builders/docker"
args: ["push", "gcr.io/$PROJECT_ID/universal-crypto-mcp"]
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
args:
- gcloud
- run
- deploy
- universal-crypto-mcp
- --image=gcr.io/$PROJECT_ID/universal-crypto-mcp
- --platform=managed
- --region=us-central1
- --allow-unauthenticated
Vercel (Serverless)
For HTTP endpoints only:
// api/mcp.js
import { createHandler } from "@nirholas/universal-crypto-mcp/serverless";
export default createHandler({
modules: ["market-data"],
});
Nginx Reverse Proxy
upstream mcp_backend {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name mcp.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name mcp.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/mcp.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mcp.yourdomain.com/privkey.pem;
location / {
proxy_pass http://mcp_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Environment Configuration
Production Checklist
- [ ] Set
NODE_ENV=production - [ ] Configure proper logging (
LOG_LEVEL=INFO) - [ ] Set up health checks
- [ ] Configure rate limiting
- [ ] Enable HTTPS
- [ ] Set up monitoring
Secrets Management
Use environment variables for sensitive data:
# Use a secrets manager
export X402_PRIVATE_KEY=$(aws secretsmanager get-secret-value --secret-id x402-key --query SecretString --output text)
Health Checks
The server exposes a health endpoint:
Monitoring
Prometheus Metrics
Enable metrics collection:
Metrics endpoint: http://localhost:3000/metrics
Logging
Configure structured logging:
Alerting
Set up alerts for: - High error rate - Slow response times - Memory usage - Failed health checks
Security Considerations
Network Security
- Use HTTPS in production
- Configure firewall rules
- Use VPC for cloud deployments
API Key Rotation
Rotate API keys regularly:
Rate Limiting
Configure rate limiting in nginx or at the application level:
limit_req_zone $binary_remote_addr zone=mcp:10m rate=10r/s;
location / {
limit_req zone=mcp burst=20 nodelay;
proxy_pass http://mcp_backend;
}
Scaling
Horizontal Scaling
Run multiple instances behind a load balancer:
# kubernetes deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: universal-crypto-mcp
spec:
replicas: 3
selector:
matchLabels:
app: universal-crypto-mcp
template:
spec:
containers:
- name: mcp
image: nirholas/universal-crypto-mcp:latest
ports:
- containerPort: 3000
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
Vertical Scaling
For memory-intensive operations:
Next Steps
- Package Overview - Explore all packages
- x402 Payments - Set up AI payments
- API Reference - Full API documentation