|
--- |
|
title: 'MCP Settings Configuration' |
|
description: 'Configure MCP servers and their settings for MCPHub' |
|
--- |
|
|
|
|
|
|
|
This guide explains how to configure MCP servers in MCPHub using the `mcp_settings.json` file and related configurations. |
|
|
|
|
|
|
|
MCPHub uses several configuration files: |
|
|
|
- **`mcp_settings.json`**: Main MCP server configurations |
|
- **`servers.json`**: Server metadata and grouping |
|
- **`.env`**: Environment variables and secrets |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"mcpServers": { |
|
"server-name": { |
|
"command": "command-to-run", |
|
"args": ["arg1", "arg2"], |
|
"env": { |
|
"ENV_VAR": "value" |
|
}, |
|
"cwd": "/working/directory", |
|
"timeout": 30000, |
|
"restart": true |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"mcpServers": { |
|
"fetch": { |
|
"command": "uvx", |
|
"args": ["mcp-server-fetch"], |
|
"env": { |
|
"USER_AGENT": "MCPHub/1.0" |
|
} |
|
}, |
|
"playwright": { |
|
"command": "npx", |
|
"args": ["@playwright/mcp@latest", "--headless"], |
|
"timeout": 60000 |
|
}, |
|
"slack": { |
|
"command": "npx", |
|
"args": ["-y", "@modelcontextprotocol/server-slack"], |
|
"env": { |
|
"SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}", |
|
"SLACK_TEAM_ID": "${SLACK_TEAM_ID}" |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
| Field | Type | Description | |
|
| --------- | ------ | -------------------------- | |
|
| `command` | string | Executable command or path | |
|
| `args` | array | Command-line arguments | |
|
|
|
|
|
|
|
| Field | Type | Default | Description | |
|
| -------------- | ------- | --------------- | --------------------------- | |
|
| `env` | object | `{}` | Environment variables | |
|
| `cwd` | string | `process.cwd()` | Working directory | |
|
| `timeout` | number | `30000` | Startup timeout (ms) | |
|
| `restart` | boolean | `true` | Auto-restart on failure | |
|
| `maxRestarts` | number | `5` | Maximum restart attempts | |
|
| `restartDelay` | number | `5000` | Delay between restarts (ms) | |
|
| `stdio` | string | `pipe` | stdio configuration | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"fetch": { |
|
"command": "uvx", |
|
"args": ["mcp-server-fetch"], |
|
"env": { |
|
"USER_AGENT": "MCPHub/1.0", |
|
"MAX_REDIRECTS": "10" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"playwright": { |
|
"command": "npx", |
|
"args": ["@playwright/mcp@latest", "--headless"], |
|
"timeout": 60000, |
|
"env": { |
|
"PLAYWRIGHT_BROWSERS_PATH": "/tmp/browsers" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"filesystem": { |
|
"command": "npx", |
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"], |
|
"env": { |
|
"ALLOWED_OPERATIONS": "read,write,list" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"sqlite": { |
|
"command": "uvx", |
|
"args": ["mcp-server-sqlite", "--db-path", "/path/to/database.db"], |
|
"env": { |
|
"SQLITE_READONLY": "false" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"slack": { |
|
"command": "npx", |
|
"args": ["-y", "@modelcontextprotocol/server-slack"], |
|
"env": { |
|
"SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}", |
|
"SLACK_TEAM_ID": "${SLACK_TEAM_ID}", |
|
"SLACK_APP_TOKEN": "${SLACK_APP_TOKEN}" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"email": { |
|
"command": "python", |
|
"args": ["-m", "mcp_server_email"], |
|
"env": { |
|
"SMTP_HOST": "smtp.gmail.com", |
|
"SMTP_PORT": "587", |
|
"EMAIL_USER": "${EMAIL_USER}", |
|
"EMAIL_PASSWORD": "${EMAIL_PASSWORD}" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"github": { |
|
"command": "npx", |
|
"args": ["-y", "@modelcontextprotocol/server-github"], |
|
"env": { |
|
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"gdrive": { |
|
"command": "npx", |
|
"args": ["-y", "@google/mcp-server-gdrive"], |
|
"env": { |
|
"GOOGLE_CLIENT_ID": "${GOOGLE_CLIENT_ID}", |
|
"GOOGLE_CLIENT_SECRET": "${GOOGLE_CLIENT_SECRET}", |
|
"GOOGLE_REFRESH_TOKEN": "${GOOGLE_REFRESH_TOKEN}" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"amap": { |
|
"command": "npx", |
|
"args": ["-y", "@amap/amap-maps-mcp-server"], |
|
"env": { |
|
"AMAP_MAPS_API_KEY": "${AMAP_API_KEY}", |
|
"AMAP_LANGUAGE": "zh-cn" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"osm": { |
|
"command": "python", |
|
"args": ["-m", "mcp_server_osm"], |
|
"env": { |
|
"OSM_USER_AGENT": "MCPHub/1.0" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
MCPHub supports environment variable substitution using `${VAR_NAME}` syntax: |
|
|
|
```json |
|
{ |
|
"mcpServers": { |
|
"api-server": { |
|
"command": "python", |
|
"args": ["-m", "api_server"], |
|
"env": { |
|
"API_KEY": "${API_KEY}", |
|
"API_URL": "${API_BASE_URL}/v1", |
|
"DEBUG": "${NODE_ENV:development}" |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
Default values can be specified with `${VAR_NAME:default}`: |
|
|
|
```json |
|
{ |
|
"timeout": "${MCP_TIMEOUT:30000}", |
|
"maxRestarts": "${MCP_MAX_RESTARTS:5}" |
|
} |
|
``` |
|
|
|
|
|
|
|
Use different configurations based on environment: |
|
|
|
```json |
|
{ |
|
"mcpServers": { |
|
"database": { |
|
"command": "python", |
|
"args": ["-m", "db_server"], |
|
"env": { |
|
"DB_URL": "${NODE_ENV:development == 'production' ? DATABASE_URL : DEV_DATABASE_URL}" |
|
} |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"custom-python": { |
|
"command": "python", |
|
"args": ["./servers/custom_server.py"], |
|
"cwd": "/app/custom-servers", |
|
"env": { |
|
"PYTHONPATH": "/app/custom-servers", |
|
"CONFIG_FILE": "./config.json" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
```json |
|
{ |
|
"custom-node": { |
|
"command": "node", |
|
"args": ["./servers/custom-server.js"], |
|
"cwd": "/app/custom-servers", |
|
"env": { |
|
"NODE_ENV": "production" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Complement `mcp_settings.json` with server metadata: |
|
|
|
```json |
|
{ |
|
"servers": { |
|
"fetch": { |
|
"name": "Fetch Server", |
|
"description": "HTTP client for web requests", |
|
"category": "web", |
|
"tags": ["http", "api", "web"], |
|
"version": "1.0.0", |
|
"author": "MCPHub Team", |
|
"documentation": "https://docs.mcphub.com/servers/fetch", |
|
"enabled": true |
|
}, |
|
"playwright": { |
|
"name": "Playwright Browser", |
|
"description": "Web automation and scraping", |
|
"category": "automation", |
|
"tags": ["browser", "scraping", "automation"], |
|
"version": "2.0.0", |
|
"enabled": true |
|
} |
|
}, |
|
"groups": { |
|
"web-tools": { |
|
"name": "Web Tools", |
|
"description": "Tools for web interaction", |
|
"servers": ["fetch", "playwright"], |
|
"access": "public" |
|
}, |
|
"admin-tools": { |
|
"name": "Admin Tools", |
|
"description": "Administrative utilities", |
|
"servers": ["filesystem", "database"], |
|
"access": "admin" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```json |
|
{ |
|
"groups": { |
|
"production": { |
|
"name": "Production Tools", |
|
"description": "Stable production servers", |
|
"servers": ["fetch", "slack", "github"], |
|
"access": "authenticated", |
|
"rateLimit": { |
|
"requestsPerMinute": 100, |
|
"burstLimit": 20 |
|
} |
|
}, |
|
"experimental": { |
|
"name": "Experimental Features", |
|
"description": "Beta and experimental servers", |
|
"servers": ["experimental-ai", "beta-search"], |
|
"access": "admin", |
|
"enabled": false |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
| Access Level | Description | |
|
| --------------- | -------------------------- | |
|
| `public` | No authentication required | |
|
| `authenticated` | Valid JWT token required | |
|
| `admin` | Admin role required | |
|
| `custom` | Custom permission logic | |
|
|
|
|
|
|
|
|
|
|
|
MCPHub supports hot reloading of configurations: |
|
|
|
```bash |
|
|
|
curl -X POST http://localhost:3000/api/admin/reload-config \ |
|
-H "Authorization: Bearer your-admin-token" |
|
``` |
|
|
|
|
|
|
|
MCPHub validates configurations on startup and reload: |
|
|
|
```json |
|
{ |
|
"validation": { |
|
"strict": true, |
|
"allowUnknownServers": false, |
|
"requireDocumentation": true |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
1. **Use environment variables** for sensitive data: |
|
|
|
```json |
|
{ |
|
"env": { |
|
"API_KEY": "${API_KEY}", |
|
"DATABASE_PASSWORD": "${DB_PASSWORD}" |
|
} |
|
} |
|
``` |
|
|
|
2. **Limit server permissions**: |
|
```json |
|
{ |
|
"filesystem": { |
|
"command": "npx", |
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/restricted/path"], |
|
"env": { |
|
"READONLY": "true" |
|
} |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
1. **Set appropriate timeouts**: |
|
|
|
```json |
|
{ |
|
"timeout": 30000, |
|
"maxRestarts": 3, |
|
"restartDelay": 5000 |
|
} |
|
``` |
|
|
|
2. **Resource limits**: |
|
```json |
|
{ |
|
"env": { |
|
"NODE_OPTIONS": "--max-old-space-size=512", |
|
"MEMORY_LIMIT": "512MB" |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
1. **Enable health checks**: |
|
|
|
```json |
|
{ |
|
"healthCheck": { |
|
"enabled": true, |
|
"interval": 30000, |
|
"timeout": 5000 |
|
} |
|
} |
|
``` |
|
|
|
2. **Logging configuration**: |
|
```json |
|
{ |
|
"env": { |
|
"LOG_LEVEL": "info", |
|
"LOG_FORMAT": "json" |
|
} |
|
} |
|
``` |
|
|
|
|
|
|
|
|
|
|
|
**Server won't start**: Check command and arguments |
|
|
|
```bash |
|
|
|
uvx mcp-server-fetch |
|
``` |
|
|
|
**Environment variables not found**: Verify `.env` file |
|
|
|
```bash |
|
|
|
printenv | grep API_KEY |
|
``` |
|
|
|
**Permission errors**: Check file permissions and paths |
|
|
|
```bash |
|
# Verify executable permissions |
|
ls -la /path/to/server |
|
``` |
|
|
|
### Debug Configuration |
|
|
|
Enable debug mode for detailed logging: |
|
|
|
```json |
|
{ |
|
"debug": { |
|
"enabled": true, |
|
"logLevel": "debug", |
|
"includeEnv": false, |
|
"logStartup": true |
|
} |
|
} |
|
``` |
|
|
|
### Validation Errors |
|
|
|
Common validation errors and solutions: |
|
|
|
1. **Missing required fields**: Add `command` and `args` |
|
2. **Invalid timeout**: Use number, not string |
|
3. **Environment variable not found**: Check `.env` file |
|
4. **Command not found**: Verify installation and PATH |
|
|
|
This comprehensive guide covers all aspects of configuring MCP servers in MCPHub for various use cases and environments. |
|
|