# HTTP Deployment Guide This guide explains how to deploy n8n-MCP as a private HTTP server for remote access. ## Overview The HTTP mode allows you to run n8n-MCP on a remote server and connect to it from Claude Desktop using the mcp-remote adapter. This is designed for single-user private deployments. ## Deployment Options ### Option 1: Docker Deployment (Recommended) 🐳 The easiest way to deploy n8n-MCP is using Docker: #### Quick Start ```bash # 1. Create configuration echo "AUTH_TOKEN=$(openssl rand -base64 32)" > .env # 2. Start with Docker Compose docker compose up -d # 3. Check health curl http://localhost:3000/health ``` #### Production Deployment ```bash # 1. Clone repository git clone https://github.com/yourusername/n8n-mcp.git cd n8n-mcp # 2. Create production .env cat > .env << EOF AUTH_TOKEN=$(openssl rand -base64 32) NODE_ENV=production LOG_LEVEL=info PORT=3000 EOF # 3. Deploy with Docker Compose docker compose up -d # 4. Check logs docker compose logs -f ``` #### Using Pre-built Images ```yaml # docker-compose.yml version: '3.8' services: n8n-mcp: image: ghcr.io/czlonkowski/n8n-mcp:latest environment: MCP_MODE: http AUTH_TOKEN: ${AUTH_TOKEN:?Required} ports: - "3000:3000" volumes: - n8n-mcp-data:/app/data restart: unless-stopped volumes: n8n-mcp-data: ``` ### Option 2: Manual Installation If you prefer not to use Docker: #### 1. Clone and Build ```bash git clone https://github.com/yourusername/n8n-mcp.git cd n8n-mcp npm install npm run build npm run rebuild ``` #### 2. Configure Environment ```bash cp .env.example .env ``` Edit `.env`: ```env # HTTP mode configuration MCP_MODE=http PORT=3000 HOST=0.0.0.0 # Generate secure token AUTH_TOKEN=your-secure-token-here # Other settings NODE_DB_PATH=./data/nodes.db MCP_LOG_LEVEL=info NODE_ENV=production ``` #### 3. Start the Server ```bash # Using the deployment script ./scripts/deploy-http.sh # Or manually MCP_MODE=http npm start ``` The server will start on `http://0.0.0.0:3000` ### 4. Setup HTTPS Proxy (Recommended) #### Using nginx: ```nginx server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } ``` #### Using Caddy: ```caddyfile your-domain.com { reverse_proxy localhost:3000 } ``` ## Client Setup ### 1. Install mcp-remote ```bash npm install -g mcp-remote ``` ### 2. Configure Claude Desktop Edit Claude Desktop config: **Option 1: Using global mcp-remote installation** ```json { "mcpServers": { "n8n-remote": { "command": "mcp-remote", "args": [ "connect", "https://your-domain.com/mcp" ], "env": { "MCP_AUTH_TOKEN": "your-secure-token-here" } } } } ``` **Option 2: Using npx (no installation required)** ```json { "mcpServers": { "n8n-remote": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/mcp-remote@latest", "connect", "https://your-domain.com/mcp" ], "env": { "MCP_AUTH_TOKEN": "your-secure-token-here" } } } } ``` **Option 3: Using custom headers (if needed)** ```json { "mcpServers": { "n8n-remote": { "command": "mcp-remote", "args": [ "connect", "https://your-domain.com/mcp", "--header", "Authorization: Bearer your-secure-token-here" ] } } } ``` ### 3. Test Connection 1. Restart Claude Desktop 2. The MCP tools should be available 3. Test with: "List all n8n nodes" ## Security Considerations 1. **Always use HTTPS** in production 2. **Keep AUTH_TOKEN secret** - treat it like a password 3. **Firewall rules** - Only expose necessary ports 4. **Regular updates** - Keep dependencies updated 5. **Monitor logs** - Check for unauthorized access attempts ## Health Monitoring Check server health: ```bash curl https://your-domain.com/health ``` Expected response: ```json { "status": "ok", "mode": "http", "version": "2.3.0" } ``` ## Testing Use the included test script to verify your HTTP server: ```bash # Test local server ./scripts/test-http.sh # Test remote server ./scripts/test-http.sh https://your-domain.com # Test with custom token AUTH_TOKEN=your-token ./scripts/test-http.sh # Verbose output VERBOSE=1 ./scripts/test-http.sh ``` The test script checks: - Health endpoint - CORS preflight - Authentication - Valid MCP requests - Error handling - Request size limits ## Troubleshooting ### Docker-specific Issues #### Container won't start ```bash # Check logs docker compose logs n8n-mcp # Check if port is already in use lsof -i :3000 # Rebuild and restart docker compose down docker compose up -d --build ``` #### Database initialization fails ```bash # Copy existing database docker cp data/nodes.db n8n-mcp:/app/data/ # Or rebuild inside container docker compose exec n8n-mcp npm run rebuild ``` #### Permission issues ```bash # Fix volume permissions docker compose exec n8n-mcp chown -R nodejs:nodejs /app/data ``` ### General Issues #### Connection Refused - Check firewall rules - Verify server is running - Check nginx/proxy configuration - Run the test script to diagnose - For Docker: ensure ports are mapped correctly #### Authentication Failed - Verify AUTH_TOKEN matches in both server and client - Check Authorization header format - Token should be at least 32 characters - Docker: check .env file is loaded #### MCP Tools Not Available - Restart Claude Desktop - Check mcp-remote installation - Verify server logs for errors - Ensure CORS headers are working - Docker: check container health status ## Performance Tips 1. Use a VPS with good network connectivity 2. Enable gzip compression in your proxy 3. For Docker deployments: - Use `--restart unless-stopped` for reliability - Monitor with `docker stats n8n-mcp` - Set memory limits in docker-compose.yml 4. For manual deployments, use PM2: ```bash pm2 start npm --name "n8n-mcp" -- run start:http ``` ## Production Deployment Examples ### Using Docker with Systemd Create `/etc/systemd/system/n8n-mcp-docker.service`: ```ini [Unit] Description=n8n MCP Docker Container After=docker.service Requires=docker.service [Service] Type=simple WorkingDirectory=/opt/n8n-mcp ExecStart=/usr/bin/docker compose up ExecStop=/usr/bin/docker compose down Restart=on-failure [Install] WantedBy=multi-user.target ``` ### Manual Installation with Systemd Create `/etc/systemd/system/n8n-mcp.service`: ```ini [Unit] Description=n8n MCP HTTP Server After=network.target [Service] Type=simple User=your-user WorkingDirectory=/path/to/n8n-mcp ExecStart=/usr/bin/npm run start:http Restart=on-failure Environment=NODE_ENV=production [Install] WantedBy=multi-user.target ``` Enable and start: ```bash sudo systemctl enable n8n-mcp sudo systemctl start n8n-mcp ``` ## Limitations - Single-user design (no multi-tenancy) - Stateless (no session persistence) - No built-in rate limiting - Basic token authentication only For multi-user deployments, consider implementing a proper API gateway with user management.