7.3 KiB
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
# 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
# 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
# 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
git clone https://github.com/yourusername/n8n-mcp.git
cd n8n-mcp
npm install
npm run build
npm run rebuild
2. Configure Environment
cp .env.example .env
Edit .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
# 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:
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:
your-domain.com {
reverse_proxy localhost:3000
}
Client Setup
1. Install mcp-remote
npm install -g mcp-remote
2. Configure Claude Desktop
Edit Claude Desktop config:
Option 1: Using global mcp-remote installation
{
"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)
{
"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)
{
"mcpServers": {
"n8n-remote": {
"command": "mcp-remote",
"args": [
"connect",
"https://your-domain.com/mcp",
"--header",
"Authorization: Bearer your-secure-token-here"
]
}
}
}
3. Test Connection
- Restart Claude Desktop
- The MCP tools should be available
- Test with: "List all n8n nodes"
Security Considerations
- Always use HTTPS in production
- Keep AUTH_TOKEN secret - treat it like a password
- Firewall rules - Only expose necessary ports
- Regular updates - Keep dependencies updated
- Monitor logs - Check for unauthorized access attempts
Health Monitoring
Check server health:
curl https://your-domain.com/health
Expected response:
{
"status": "ok",
"mode": "http",
"version": "2.3.0"
}
Testing
Use the included test script to verify your HTTP server:
# 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
# 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
# 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
# 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
- Use a VPS with good network connectivity
- Enable gzip compression in your proxy
- For Docker deployments:
- Use
--restart unless-stoppedfor reliability - Monitor with
docker stats n8n-mcp - Set memory limits in docker-compose.yml
- Use
- For manual deployments, use PM2:
pm2 start npm --name "n8n-mcp" -- run start:http
Production Deployment Examples
Using Docker with Systemd
Create /etc/systemd/system/n8n-mcp-docker.service:
[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:
[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:
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.