fleetmind-dispatch-ai / start_with_proxy.py
mashrur950's picture
done authentication
1cf571b
"""
FleetMind MCP Server with Authentication Proxy
Launches both the FastMCP server and the authentication proxy.
This script:
1. Starts FastMCP server on port 7861 (internal)
2. Starts authentication proxy on port 7860 (public)
3. Handles graceful shutdown of both processes
Usage:
python start_with_proxy.py
"""
import subprocess
import sys
import time
import signal
import os
from pathlib import Path
# Process handles
fastmcp_process = None
proxy_process = None
def signal_handler(sig, frame):
"""Handle Ctrl+C gracefully"""
print("\n\nShutting down FleetMind MCP Server...")
if proxy_process:
print(" -> Stopping proxy...")
proxy_process.terminate()
try:
proxy_process.wait(timeout=5)
except subprocess.TimeoutExpired:
proxy_process.kill()
if fastmcp_process:
print(" -> Stopping FastMCP server...")
fastmcp_process.terminate()
try:
fastmcp_process.wait(timeout=5)
except subprocess.TimeoutExpired:
fastmcp_process.kill()
print("[OK] FleetMind MCP Server stopped.")
sys.exit(0)
def main():
global fastmcp_process, proxy_process
# Register signal handler
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
print("\n" + "=" * 70)
print("FleetMind MCP Server with Multi-Tenant Authentication")
print("=" * 70)
print("Starting components:")
print(" 1. FastMCP Server (port 7861) - Internal")
print(" 2. Auth Proxy (port 7860) - Public")
print("=" * 70 + "\n")
# Get Python executable
python_exe = sys.executable
# Start FastMCP server
print("[1/2] Starting FastMCP server on port 7861...")
try:
# Don't capture output - let it show in console
fastmcp_process = subprocess.Popen(
[python_exe, "app.py"]
)
print("[OK] FastMCP server starting (output below)...")
except Exception as e:
print(f"[ERROR] Failed to start FastMCP server: {e}")
sys.exit(1)
# Wait a bit for FastMCP to initialize
print(" Waiting for FastMCP to initialize...")
time.sleep(3)
# Check if FastMCP is still running
if fastmcp_process.poll() is not None:
print("[ERROR] FastMCP server failed to start")
print(" Check the error messages above")
sys.exit(1)
print("[OK] FastMCP server running")
# Start proxy
print("\n[2/2] Starting authentication proxy on port 7860...")
try:
# Don't capture output - let it show in console
proxy_process = subprocess.Popen(
[python_exe, "proxy.py"]
)
print("[OK] Auth proxy starting (output below)...")
except Exception as e:
print(f"[ERROR] Failed to start proxy: {e}")
if fastmcp_process:
fastmcp_process.terminate()
sys.exit(1)
# Wait a bit for proxy to initialize
time.sleep(2)
# Check if proxy is still running
if proxy_process.poll() is not None:
print("[ERROR] Proxy failed to start")
if fastmcp_process:
fastmcp_process.terminate()
sys.exit(1)
print("[OK] Auth proxy running")
print("\n" + "=" * 70)
print("[OK] FleetMind MCP Server is READY!")
print("=" * 70)
print(f"Connect to: http://localhost:7860/sse")
print(f"Claude Desktop config:")
print(f' "args": ["mcp-remote", "http://localhost:7860/sse?api_key=YOUR_KEY"]')
print("=" * 70)
print("\n[AUTH] Multi-tenant authentication is ENABLED")
print(" Each connection's API key will be captured automatically\n")
print("Press Ctrl+C to stop...\n")
# Monitor both processes
try:
while True:
# Check FastMCP
if fastmcp_process.poll() is not None:
print("[ERROR] FastMCP server stopped unexpectedly")
if proxy_process:
proxy_process.terminate()
sys.exit(1)
# Check proxy
if proxy_process.poll() is not None:
print("[ERROR] Proxy stopped unexpectedly")
if fastmcp_process:
fastmcp_process.terminate()
sys.exit(1)
# Read and display logs (non-blocking)
# This keeps the terminal responsive
time.sleep(1)
except KeyboardInterrupt:
signal_handler(signal.SIGINT, None)
if __name__ == "__main__":
# Check if required files exist
if not Path("app.py").exists():
print("[ERROR] app.py not found")
sys.exit(1)
if not Path("proxy.py").exists():
print("[ERROR] proxy.py not found")
sys.exit(1)
main()