ā MCP Reverse Proxy with Management UI
A complete, self-contained reverse proxy system for managing multiple MCP (Model Context Protocol) servers. Features automatic HTTPS with Let's Encrypt, built-in Redis, web-based configuration wizard, and zero-config deployment. No environment variables or external dependencies required!
ā ⨠Key Features
ā š Zero Configuration Required
Web-Based Setup Wizard : Configure everything through the browser on first run
No Environment Variables : All settings managed through the UI
Built-in Redis : Redis server included in container - no external setup
Automatic HTTPS : Let's Encrypt certificates fetched and managed automatically
Self-Contained : Single Docker container with everything included
ā š Automatic SSL/HTTPS
Let's Encrypt Integration : Just enter your domain - certificates handled automatically
Auto-Renewal : Certificates renew automatically before expiration
Force HTTPS : Automatic HTTP to HTTPS redirection
Cloudflare DNS Support : Alternative validation without opening port 80
Self-Signed Option : For development environments
ā š Network & External Access
Multiple Tunnel Options : Cloudflare Tunnel, ngrok, Tailscale Funnel
UPnP Port Mapping : Automatic router configuration
Port Forwarding Detection : Real-time port accessibility checking
Non-Standard Ports : Enhanced security (8437, 3437, 8443)
Zero-Config External Access : No manual router configuration needed
API Key Authentication : Secure access control
Encrypted Secrets : Sensitive data encrypted at rest
ā š¦ MCP Management
Process Management : Spawn, monitor, restart MCP servers
GitHub Deployment : Deploy MCPs directly from repositories
Health Monitoring : Track process health and metrics
Auto-restart : Configurable restart policies
Real-time Logs : Stream logs from each MCP process
Resource Limits : CPU and memory constraints
ā šļø Web Management Interface
Initial Setup Wizard : Step-by-step first-time configuration
Settings Panel : Comprehensive configuration management
Real-time Dashboard : Monitor all services
Network Configuration : Manage SSL, ports, and networking
Backup/Restore : Export and import configurations
No Config Files : Everything managed through the UI
ā š Quick Start
ā Option 1: Docker Compose (Recommended)
# Clone the repository
git clone https://github.com/keithah/mcp-reverse-proxy.git
cd mcp-reverse-proxy
# Start with Docker Compose
docker-compose up -d
Copy
ā Option 2: Docker Hub (ARM64 & AMD64)
# Create data directories
mkdir -p data logs mcp-services backups certs
# Run from Docker Hub (works on ARM64 Oracle VMs)
docker run -d \
--name mcp-proxy \
-p 8437:8437 \
-p 3437:3437 \
-p 8443:8443 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/mcp-services:/app/mcp-services \
-v $(pwd)/backups:/app/backups \
-v $(pwd)/certs:/app/certs \
-e NODE_ENV=production \
-e INITIAL_SETUP=true \
--restart unless-stopped \
keithah/mcp-reverse-proxy:latest
Copy
ā Option 3: Docker Compose for ARM64/Oracle Cloud
# docker-compose.yml for ARM64 systems
version: '3.8'
services:
mcp-proxy:
image: keithah/mcp-reverse-proxy:latest
container_name: mcp-proxy
ports:
- "8437:8437" # Backend API
- "3437:3437" # Frontend UI
- "8443:8443" # HTTPS
environment:
- NODE_ENV=production
- INITIAL_SETUP=true
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./mcp-services:/app/mcp-services
- ./backups:/app/backups
- ./certs:/app/certs
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8437/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Copy
ā 2ļøā£ Open Setup Wizard
Navigate to: http://localhost:3437ā
The setup wizard will guide you through:
Network Configuration - Set ports and UPnP settings
SSL/HTTPS Setup - Configure Let's Encrypt or self-signed certificates
Security - API keys are auto-generated
Database & Redis - Already configured (built-in)
GitHub Integration - Optional, for deploying MCPs
Review & Complete - Save your API key!
ā 3ļøā£ That's It!
No configuration files, no environment variables, no external dependencies. Everything is configured through the web UI.
ā šÆ First-Time Setup Wizard
When you first access the system, you'll see:
![Setup Wizard Steps]
Welcome Screen - Overview of what will be configured
Network Settings - Ports (8437, 3437, 8443) and UPnP auto-configuration
Security & SSL - Choose Let's Encrypt or self-signed certificates
Built-in Services - Redis status and connection testing
GitHub (Optional) - Add token for private repositories only (public repos work without token)
Review & Complete - Receive your API key for admin access
ā Automatic Let's Encrypt Setup
During the SSL step, simply:
Select "Let's Encrypt"
Enter your domain (e.g., mcp.yourdomain.com)
Enter your email
Click "Complete Setup"
The system will:
ā
Contact Let's Encrypt automatically
ā
Validate your domain
ā
Download and install certificates
ā
Configure HTTPS on port 8443
ā
Set up auto-renewal
ā
Force HTTP to HTTPS redirect
No manual certificate management required!
ā š External Access Options
The MCP Reverse Proxy includes multiple ways to expose your services to the internet without manual router configuration:
ā š Cloudflare Tunnel
Secure, encrypted tunnels without opening ports:
# Setup with subdomain (free)
curl -X POST http://localhost:8437/api/tunnel/cloudflare/setup \
-H "Content-Type: application/json" \
-d '{
"token": "your-cloudflare-token",
"domain": "mcp-proxy"
}'
# Creates: https://mcp-proxy.trycloudflare.com
# Setup with custom domain
curl -X POST http://localhost:8437/api/tunnel/cloudflare/setup \
-H "Content-Type: application/json" \
-d '{
"token": "your-cloudflare-token",
"domain": "mcp.yourdomain.com"
}'
# Creates: https://mcp.yourdomain.com
Copy
Benefits:
ā
No port forwarding required
ā
DDoS protection included
ā
Global CDN
ā
Custom domains supported (own your URL)
ā
Free subdomains (*.trycloudflare.com)
ā
Automatic HTTPS certificates
Requirements:
Cloudflare account
Cloudflare Tunnel token
For custom domains: Domain must be on Cloudflare DNS
Custom Domain Setup:
Add your domain to Cloudflare
Create a Cloudflare Tunnel in the dashboard
Get your tunnel token
Use your full domain: "domain": "mcp.yourdomain.com"
System automatically creates:
Main UI: https://mcp.yourdomain.com
API: https://api.mcp.yourdomain.com
ā š ngrok Tunnel
Instant public URLs for development and testing:
# Setup via API
curl -X POST http://localhost:8437/api/tunnel/ngrok/setup \
-H "Content-Type: application/json" \
-d '{
"authToken": "your-ngrok-token",
"domain": "your-custom-domain.ngrok.io",
"region": "us"
}'
Copy
Benefits:
ā
Instant setup
ā
Custom domains (paid plans)
ā
Multiple regions
ā
Great for development
Requirements:
ngrok account (free tier available)
ngrok auth token
ā š Tailscale Funnel
Private network with public access:
# Setup via API
curl -X POST http://localhost:8437/api/tunnel/tailscale/setup \
-H "Content-Type: application/json" \
-d '{
"authKey": "your-tailscale-auth-key"
}'
Copy
Benefits:
ā
Zero-trust networking
ā
P2P connections
ā
ACL controls
ā
MagicDNS support
Requirements:
Tailscale account
Tailscale auth key
ā š UPnP Port Mapping
Automatic router configuration:
# Setup via API
curl -X POST http://localhost:8437/api/tunnel/upnp/setup \
-H "Content-Type: application/json"
Copy
Benefits:
ā
No external services
ā
Direct connections
ā
Low latency
ā
No monthly costs
Requirements:
UPnP enabled router
Public IP address
ā šÆ Tunnel Management API
All tunnel options are available via REST API at /api/tunnel:
# Get current tunnel status
curl http://localhost:8437/api/tunnel/config
# Test external connectivity
curl -X POST http://localhost:8437/api/tunnel/test
# Stop all tunnels
curl -X POST http://localhost:8437/api/tunnel/stop
Copy
ā š± Web UI Management
Access tunnel configuration through the web interface:
Open Settings ā Network ā External Access
Choose your preferred tunnel method
Enter required credentials
Click Setup Tunnel
Test connectivity with Test Connection
The system will automatically:
Configure the tunnel service
Display your external URL
Monitor tunnel health
Handle reconnections
ā šļø Web-Based Configuration
ā No Environment Variables Needed!
All configuration is done through the web UI. The system stores everything in a database and manages all settings internally.
ā Settings Panel
Access the comprehensive settings panel by clicking the "Settings" button in the dashboard:
Server Configuration : Ports, environment settings
Network Settings : UPnP, port forwarding
Security : API keys, authentication (auto-generated)
SSL/HTTPS : Let's Encrypt, certificates
Redis : Built-in server status and testing
GitHub : Integration for MCP deployment
Monitoring : Logs, metrics, retention
Backup/Restore : Export and import configurations
ā Built-in Redis
Redis is included in the Docker container and managed automatically:
No external Redis needed
Runs on localhost:6379 inside container
Managed by Supervisor
Persistent data storage
Zero configuration required
ā Configuration Storage
All settings are stored in SQLite database:
/app/data/mcp-proxy.db - Main configuration database
Encrypted sensitive values
Persistent across container restarts
Backup and restore functionality
ā šÆ Container Architecture
ā Single Container Solution
The system runs as a single Docker container with multiple services managed by Supervisor:
mcp-proxy container:
āāā Redis Server (localhost:6379)
āāā Backend API (port 8437)
āāā Frontend UI (port 3437)
āāā HTTPS Server (port 8443)
āāā MCP Processes (managed)
āāā Supervisor (process manager)
Copy
ā Built-in Services
Redis : Cache and queue management
SQLite : Configuration and data storage
Supervisor : Process management and monitoring
SSL Manager : Automatic certificate handling
UPnP Manager : Network configuration
ā š§ Advanced Configuration
ā Let's Encrypt Options
Two certificate validation methods:
HTTP-01 Challenge (Default)
Requires port 80 accessible from internet
Automatic domain validation
Works with most setups
DNS-01 Challenge (Cloudflare)
No port 80 required
Uses Cloudflare API for DNS records
Better for behind firewalls/NAT
Configure in Settings ā SSL/HTTPS ā Provider Options
ā Network Ports
The system uses non-standard ports for security:
8437 : Backend API (instead of 8080)
3437 : Frontend UI (instead of 3000)
8443 : HTTPS (instead of 443)
All ports are configurable through the UI.
ā Security Features
API Key Authentication : Required for all admin functions
Encrypted Storage : Sensitive data encrypted at rest
HSTS Headers : Strict Transport Security
CSP Headers : Content Security Policy
Rate Limiting : Per-endpoint and global limits
Process Isolation : Each MCP runs separately
ā š± Using the System
ā Access Points
After setup completion:
HTTP : http://your-domain:8437 (redirects to HTTPS if SSL enabled)
HTTPS : https://your-domain:8443 (with Let's Encrypt certificate)
Local : http://localhost:3437 (for initial setup)
ā šļø Management Interface
ā Dashboard Features
Service Overview : All MCP services with real-time status
Health Monitoring : System health, uptime, resource usage
Quick Actions : Start, stop, restart services
Real-time Updates : Live status updates without refresh
ā Settings Panel
Comprehensive configuration management:
Server Settings
Port configuration (8437, 3437, 8443)
Environment settings
Performance tuning
SSL/HTTPS Management
Let's Encrypt setup and renewal
Certificate status and validation
Force HTTPS configuration
Network Configuration
UPnP port mapping status
Port forwarding testing
Public/Private IP detection
Router configuration status
Security Settings
API key management
Authentication settings
Rate limiting configuration
Redis Management
Built-in Redis server status
Connection testing
Performance metrics
GitHub Integration
Repository deployment settings (public repos work without token)
Webhook configuration (requires token)
Token management (optional for private repos only)
System Monitoring
Log levels and retention
Metrics collection
Health check intervals
Backup/Restore
Configuration export
Settings import
Restore points
ā MCP Service Requirements
For automatic deployment, MCP services should include one of the following:
MCP Manifest File (mcp.json or mcp-manifest.json):
{
"name": "my-mcp-service",
"description": "My MCP Service",
"entryPoint": "index.js",
"requiredEnv": ["API_KEY"],
"defaultEnv": {
"PORT": "3000"
}
}
Copy
Package.json with MCP Configuration :
{
"name": "my-mcp-service",
"main": "index.js",
"mcp": {
"requiredEnv": ["API_KEY"],
"defaultEnv": {
"PORT": "3000"
}
}
}
Copy
ā Development
ā Project Structure
āāā src/
ā āāā index.ts # Main server entry point
ā āāā lib/
ā ā āāā process-manager.ts # MCP process management
ā ā āāā github.ts # GitHub integration
ā ā āāā db/ # Database schema and migrations
ā ā āāā logger.ts # Logging utilities
ā āāā server/
ā āāā proxy.ts # Reverse proxy implementation
ā āāā api.ts # Management API
ā āāā github-api.ts # GitHub API endpoints
ā āāā middleware/ # Express middleware
āāā app/ # Next.js frontend
ā āāā page.tsx # Dashboard
ā āāā components/ # React components
āāā docker-compose.yml # Docker composition
āāā Dockerfile # Container definition
Copy
ā Running Tests
ā Building for Production
npm run build
npm start
Copy
ā š Automatic Let's Encrypt Setup
ā Zero-Touch SSL Configuration
The system handles Let's Encrypt automatically:
During Setup Wizard :
Select "Let's Encrypt" as SSL provider
Enter your domain (e.g., proxy.yourdomain.com)
Enter your email for certificate notifications
Click "Complete Setup"
What Happens Automatically :
System contacts Let's Encrypt
ā
Validates domain ownership
ā
Downloads SSL certificate
ā
Installs and configures HTTPS
ā
Sets up auto-renewal (daily checks)
ā
Forces HTTP ā HTTPS redirect
Copy
Certificate Renewal :
Automatic renewal before expiration
Email notifications for any issues
Zero downtime certificate updates
ā Validation Methods
HTTP-01 Challenge (Default)
Port 80 must be accessible from internet
Automatic validation via HTTP
UPnP will map port 80 if enabled
DNS-01 Challenge (Cloudflare)
No port 80 required
Uses Cloudflare API
Add Cloudflare token in SSL settings
Better for complex network setups
ā SSL Status Monitoring
Check SSL status in real-time:
Settings ā SSL/HTTPS ā Certificate Status
Expiration dates and renewal status
Validation method and domain verification
ā š Built-in Redis & Supervisor
ā Redis Server
Redis runs inside the container automatically:
Port : localhost:6379 (internal only)
Persistence : Data saved to /app/data
Management : Controlled by Supervisor
Monitoring : Status available in Settings ā Redis
ā Supervisor Process Management
All services managed by Supervisor:
[Redis Server] - Cache and queues
[Backend API] - Main application
[Frontend UI] - Management interface
Copy
Process monitoring and auto-restart built-in.
ā šØ Troubleshooting
ā Setup Issues
Can't access http://localhost:3437ā
Check Docker container is running: docker-compose ps
Verify port mapping in docker-compose.yml
Check container logs: docker-compose logs
Setup wizard won't complete
Ensure Docker has write access to ./data directory
Check container logs for database errors
Verify all required dependencies loaded
ā SSL Certificate Issues
Let's Encrypt validation fails
Verify domain points to your public IP
Check port 80 is accessible from internet
Try Cloudflare DNS validation instead
Use staging mode first to test
Certificate not renewing
Check Settings ā SSL/HTTPS ā Certificate Status
Verify cron job is running
Check logs for renewal errors
ā Network Connection Issues
Can't connect to HTTPS
Verify SSL certificate installed correctly
Check port 8443 is forwarded through router
Test with Settings ā Network ā Port Forwarding Check
UPnP not working
Enable UPnP on your router
Check Settings ā Network ā UPnP Status
Manually forward ports if UPnP unavailable
ā Service Management
MCP service won't start
Check Settings ā Monitoring ā Logs
Verify service configuration in database
Test GitHub repository access
Check resource limits and permissions
Redis connection failed
Check Settings ā Redis ā Test Connection
Verify Redis process running in container
Check Supervisor status
ā Getting Help
Container Logs : docker-compose logs -f
Settings Panel : Check all status indicators
Network Panel : Test port forwarding and SSL
Backup Config : Export settings before troubleshooting
ā Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests
Submit a pull request
ā License
MIT
ā Support
For issues and feature requests, please use the GitHub issue trackerā .
ā š What's New
ā v2.0 - External Access & Multi-Architecture Support
ā
Cloudflare Tunnel Support : Zero-config secure tunnels
ā
ngrok Integration : Instant public URLs
ā
Tailscale Funnel : Zero-trust networking with public access
ā
Enhanced UPnP : Automatic router configuration
ā
ARM64 Support : Works on Oracle Cloud, Raspberry Pi, Apple Silicon
ā
Multi-Architecture Docker : Single image for AMD64 and ARM64
ā
Docker Hub : keithah/mcp-reverse-proxy:latest
ā
Tunnel Management API : RESTful tunnel control
ā
Web UI Tunnel Config : Point-and-click external access setup