283 lines
5.2 KiB
Markdown
283 lines
5.2 KiB
Markdown
# 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.
|
|
|
|
## Requirements
|
|
|
|
- Node.js v16+ on the server
|
|
- A server with a public IP or domain
|
|
- HTTPS proxy (nginx/caddy) for secure connections
|
|
- mcp-remote installed on the client
|
|
|
|
## Server Setup
|
|
|
|
### 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
|
|
```
|
|
|
|
Generate a secure token:
|
|
```bash
|
|
openssl rand -base64 32
|
|
```
|
|
|
|
### 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
|
|
|
|
### Connection Refused
|
|
- Check firewall rules
|
|
- Verify server is running
|
|
- Check nginx/proxy configuration
|
|
- Run the test script to diagnose
|
|
|
|
### Authentication Failed
|
|
- Verify AUTH_TOKEN matches in both server and client
|
|
- Check Authorization header format
|
|
- Token should be at least 32 characters
|
|
|
|
### MCP Tools Not Available
|
|
- Restart Claude Desktop
|
|
- Check mcp-remote installation
|
|
- Verify server logs for errors
|
|
- Ensure CORS headers are working
|
|
|
|
## Performance Tips
|
|
|
|
1. Use a VPS with good network connectivity
|
|
2. Enable gzip compression in your proxy
|
|
3. Consider using PM2 for process management:
|
|
```bash
|
|
pm2 start npm --name "n8n-mcp" -- run start:http
|
|
```
|
|
|
|
## Example Systemd Service
|
|
|
|
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. |