--- title: 'Server Management' description: 'Centrally manage multiple MCP servers with hot-swappable configuration' --- ## Overview MCPHub's server management system allows you to centrally configure, monitor, and control multiple MCP (Model Context Protocol) servers from a single dashboard. All changes are applied in real-time without requiring server restarts. ## Adding MCP Servers ### Via Dashboard 1. **Access the Dashboard**: Navigate to `http://localhost:3000` and log in 2. **Click "Add Server"**: Located in the servers section 3. **Fill Server Details**: - **Name**: Unique identifier for the server - **Command**: Executable command (e.g., `npx`, `uvx`, `python`) - **Arguments**: Array of command arguments - **Environment Variables**: Key-value pairs for environment setup - **Working Directory**: Optional working directory for the command ### Via Configuration File Edit your `mcp_settings.json` file: ```json { "mcpServers": { "server-name": { "command": "command-to-run", "args": ["arg1", "arg2"], "env": { "API_KEY": "your-api-key", "CONFIG_VALUE": "some-value" }, "cwd": "/optional/working/directory" } } } ``` ### Via API Use the REST API to add servers programmatically: ```bash curl -X POST http://localhost:3000/api/servers \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -d '{ "name": "fetch-server", "command": "uvx", "args": ["mcp-server-fetch"], "env": {} }' ``` ## Popular MCP Server Examples Provides web scraping and HTTP request capabilities: ```json { "fetch": { "command": "uvx", "args": ["mcp-server-fetch"] } } ``` **Available Tools:** - `fetch`: Make HTTP requests - `fetch_html`: Scrape web pages - `fetch_json`: Get JSON data from APIs Browser automation for web interactions: ```json { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest", "--headless"] } } ``` **Available Tools:** - `playwright_navigate`: Navigate to web pages - `playwright_screenshot`: Take screenshots - `playwright_click`: Click elements - `playwright_fill`: Fill forms File and directory management: ```json { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"] } } ``` **Available Tools:** - `read_file`: Read file contents - `write_file`: Write to files - `create_directory`: Create directories - `list_directory`: List directory contents Database operations: ```json { "sqlite": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/database.db"] } } ``` **Available Tools:** - `execute_query`: Execute SQL queries - `describe_tables`: Get table schemas - `create_table`: Create new tables Slack workspace integration: ```json { "slack": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-slack"], "env": { "SLACK_BOT_TOKEN": "xoxb-your-bot-token", "SLACK_TEAM_ID": "T1234567890" } } } ``` **Available Tools:** - `send_slack_message`: Send messages to channels - `list_slack_channels`: List available channels - `get_slack_thread`: Get thread messages GitHub repository operations: ```json { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token" } } } ``` **Available Tools:** - `create_or_update_file`: Create/update repository files - `search_repositories`: Search GitHub repositories - `create_issue`: Create issues - `create_pull_request`: Create pull requests Google Drive file operations: ```json { "gdrive": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-gdrive"], "env": { "GDRIVE_CLIENT_ID": "your-client-id", "GDRIVE_CLIENT_SECRET": "your-client-secret", "GDRIVE_REDIRECT_URI": "your-redirect-uri" } } } ``` **Available Tools:** - `gdrive_search`: Search files and folders - `gdrive_read`: Read file contents - `gdrive_create`: Create new files Chinese mapping and location services: ```json { "amap": { "command": "npx", "args": ["-y", "@amap/amap-maps-mcp-server"], "env": { "AMAP_MAPS_API_KEY": "your-api-key" } } } ``` **Available Tools:** - `search_location`: Search for locations - `get_directions`: Get route directions - `reverse_geocode`: Convert coordinates to addresses ## Server Lifecycle Management ### Starting Servers Servers are automatically started when: - MCPHub boots up - A server is added via the dashboard or API - A server configuration is updated - A stopped server is manually restarted ### Stopping Servers You can stop servers: - **Via Dashboard**: Toggle the server status switch - **Via API**: Send a POST request to `/api/servers/{name}/toggle` - **Automatically**: Servers stop if they crash or encounter errors ### Restarting Servers Servers are automatically restarted: - When configuration changes are made - After environment variable updates - When manually triggered via dashboard or API ## Server Status Monitoring ### Status Indicators Each server displays a status indicator: - 🟢 **Running**: Server is active and responding - 🟡 **Starting**: Server is initializing - 🔴 **Stopped**: Server is not running - ⚠️ **Error**: Server encountered an error ### Real-time Logs View server logs in real-time: 1. **Dashboard Logs**: Click on a server to view its logs 2. **API Logs**: Access logs via `/api/logs` endpoint 3. **Streaming Logs**: Subscribe to log streams via WebSocket ### Health Checks MCPHub automatically performs health checks: - **Initialization Check**: Verifies server starts successfully - **Tool Discovery**: Confirms available tools are detected - **Response Check**: Tests server responsiveness - **Resource Monitoring**: Tracks CPU and memory usage ## Configuration Management ### Environment Variables Servers can use environment variables for configuration: ```json { "server-name": { "command": "python", "args": ["server.py"], "env": { "API_KEY": "${YOUR_API_KEY}", "DEBUG": "true", "MAX_CONNECTIONS": "10" } } } ``` **Environment Variable Expansion:** - `${VAR_NAME}`: Expands to environment variable value - `${VAR_NAME:-default}`: Uses default if variable not set - `${VAR_NAME:+value}`: Uses value if variable is set ### Working Directory Set the working directory for server execution: ```json { "server-name": { "command": "./local-script.sh", "args": [], "cwd": "/path/to/server/directory" } } ``` ### Command Variations Different ways to specify server commands: ```json { "npm-server": { "command": "npx", "args": ["-y", "package-name", "--option", "value"] } } ``` ```json { "python-server": { "command": "uvx", "args": ["package-name", "--config", "config.json"] } } ``` ```json { "direct-python": { "command": "python", "args": ["-m", "module_name", "--arg", "value"] } } ``` ```json { "local-script": { "command": "./server.sh", "args": ["--port", "8080"], "cwd": "/path/to/script" } } ``` ## Advanced Features ### Hot Reloading MCPHub supports hot reloading of server configurations: 1. **Config File Changes**: Automatically detects changes to `mcp_settings.json` 2. **Dashboard Updates**: Immediately applies changes made through the web interface 3. **API Updates**: Real-time updates via REST API calls 4. **Zero Downtime**: Graceful server restarts without affecting other servers ### Resource Limits Control server resource usage: ```json { "resource-limited-server": { "command": "memory-intensive-server", "args": [], "limits": { "memory": "512MB", "cpu": "50%", "timeout": "30s" } } } ``` ### Dependency Management Handle server dependencies: MCPHub can automatically install missing packages: ```json { "auto-install-server": { "command": "npx", "args": ["-y", "package-that-might-not-exist"], "autoInstall": true } } ``` Run setup scripts before starting servers: ```json { "setup-server": { "preStart": ["npm install", "pip install -r requirements.txt"], "command": "python", "args": ["server.py"] } } ``` ## Troubleshooting **Check the following:** - Command is available in PATH - All required environment variables are set - Working directory exists and is accessible - Network ports are not blocked - Dependencies are installed **Debug steps:** 1. Check server logs in the dashboard 2. Test command manually in terminal 3. Verify environment variable expansion 4. Check file permissions **Common causes:** - Invalid configuration parameters - Missing API keys or credentials - Resource limits exceeded - Dependency conflicts **Solutions:** 1. Review server logs for error messages 2. Test with minimal configuration 3. Verify all credentials and API keys 4. Check system resource availability **Possible issues:** - Server not fully initialized - Tool discovery timeout - Communication protocol mismatch - Server reporting errors **Debug steps:** 1. Wait for server initialization to complete 2. Check server logs for tool registration messages 3. Test direct communication with server 4. Verify MCP protocol compatibility ## Next Steps Organize servers into logical groups Set up AI-powered tool discovery Server management API documentation Detailed configuration options