
The Ultimate Model Context Protocol Hub
Aggregate tools from multiple MCP servers into a unified portal with dynamic discovery and cross-platform Docker support.
Navigate to the folder where you want to store this (repo, mcps, etc.)
Open terminal and input the following:
git clone https://github.com/Chillbruhhh/MCPportal.git
cd MCPportal
-
Build the Docker image:
docker build -t mcp-portal -f docker/Dockerfile .
-
Run the container:
docker run -d -p 8020:8020 --name mcp-portal mcp-portal
OR use auto-detection:
python run-docker.py
-
Open the Web UI:
- Visit http://localhost:8020 in your browser.
- Install dependencies:
pip install -r requirements.txt
- Start the portal:
python -m mcp_gateway.main
- Open the Web UI:
- Visit http://localhost:8020 in your browser.
- π Dynamic MCP Discovery: Automatically finds and integrates MCP servers from Cursor, VS Code, Claude Desktop, and more
- π Unified API: Single endpoint for all your MCP tools and resources
- π³ Docker Ready: Cross-platform containerization with automatic configuration mounting
- β‘ Real-time Management: Web UI for server management, tool exploration, and configuration editing
- π§ Cross-Platform: Works on Windows, macOS, and Linux with intelligent command translation
- π Monitoring: Built-in logging, health checks, and performance metrics
# Clone and install
git clone https://github.com/Chillbruhhh/MCPPortal.git
cd mcp-portal
pip install -r requirements.txt
# Start the portal
python -m mcp_gateway.main
# Open web UI: http://localhost:8020
# Build image
docker build -t mcp-portal -f docker/Dockerfile .
# Auto-detect and run with your MCPs
python run-docker.py
MCP Portal automatically discovers MCP servers from your IDE configurations and aggregates them into a single, unified interface:
flowchart TB
subgraph subGraph0["π Discovery Phase"]
D["Configuration Scanner"]
A["Cursor IDE<br>Configuration"]
B["VS Code<br>Settings"]
C["Claude Desktop<br>Config"]
E["Other IDEs<br>Config Files"]
end
subgraph subGraph1["π MCP Portal Core"]
F["Server Discovery Engine"]
G["Configuration Parser"]
H["Server Registry"]
I["Process Manager"]
J["Tool Aggregator"]
K["Unified API Server"]
end
subgraph subGraph2["π‘ MCP Servers"]
direction LR
S1["Search Engine<br>MCP Server"]
S2["Database Tools<br>MCP Server"]
S3["Browser Control<br>MCP Server"]
S4["File System<br>MCP Server"]
S5["Web Scraping<br>MCP Server"]
S6["Code Analysis<br>MCP Server"]
end
subgraph subGraph3["π οΈ Aggregated Tools"]
direction LR
T1["web_search"]
T2["database_query"]
T3["take_screenshot"]
T4["read_file"]
T5["scrape_website"]
T6["analyze_code"]
end
subgraph subGraph4["ποΈ Management Dashboard"]
N["Web UI Dashboard<br>Monitor & Control MCP Servers"]
N1["Server Status Monitor"]
N2["Tool Management"]
N3["Configuration Editor"]
N4["Real-time Logs"]
end
subgraph subGraph5["π AI Agent Interface"]
L["REST API<br>Tool Endpoints"]
M["WebSocket/SSE<br>Real-time Events"]
end
subgraph subGraph6["π€ AI Agents & Applications"]
O["Claude Desktop<br>AI Assistant"]
P["ChatGPT<br>AI Assistant"]
Q["Custom AI Apps<br>Autonomous Agents"]
R["Development Tools<br>AI-Powered IDEs"]
S["Multi-Agent Systems<br>Agent Frameworks"]
end
subgraph subGraph7["π Workflow"]
direction TB
W2["Parse MCP Settings"]
W1["Scan IDE Configs"]
W3["Start MCP Servers"]
W4["Aggregate Tools"]
W5["Expose Unified API"]
W6["AI Agents Call Tools"]
W7["Return Results"]
end
A --> D
B --> D
C --> D
E --> D
D --> F
F --> G
G --> H
H --> I
I --> J
J --> K & T1 & T2 & T3 & T4 & T5 & T6
K --> N & L & M
N --> N1 & N2 & N3 & N4
L --> O & P & R & S
M --> Q
I -.-> S1 & S2 & S3 & S4 & S5 & S6
W1 --> W2
W2 --> W3
W3 --> W4
W4 --> W5
W5 --> W6
W6 --> W7
D:::discoveryStyle
A:::discoveryStyle
B:::discoveryStyle
C:::discoveryStyle
E:::discoveryStyle
F:::portalStyle
G:::portalStyle
H:::portalStyle
I:::portalStyle
J:::portalStyle
K:::portalStyle
S1:::serverStyle
S2:::serverStyle
S3:::serverStyle
S4:::serverStyle
S5:::serverStyle
S6:::serverStyle
T1:::toolStyle
T2:::toolStyle
T3:::toolStyle
T4:::toolStyle
T5:::toolStyle
T6:::toolStyle
N:::dashboardStyle
N1:::dashboardStyle
N2:::dashboardStyle
N3:::dashboardStyle
N4:::dashboardStyle
L:::interfaceStyle
M:::interfaceStyle
O:::aiStyle
P:::aiStyle
Q:::aiStyle
R:::aiStyle
S:::aiStyle
W2:::workflowStyle
W1:::workflowStyle
W3:::workflowStyle
W4:::workflowStyle
W5:::workflowStyle
W6:::workflowStyle
W7:::workflowStyle
classDef discoveryStyle fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#000
classDef portalStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#000
classDef serverStyle fill:#e8f5e8,stroke:#388e3c,stroke-width:2px,color:#000
classDef toolStyle fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#000
classDef dashboardStyle fill:#fff8e1,stroke:#ff8f00,stroke-width:2px,color:#000
classDef interfaceStyle fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000
classDef aiStyle fill:#e1f5fe,stroke:#0288d1,stroke-width:3px,color:#000
classDef workflowStyle fill:#f1f8e9,stroke:#689f38,stroke-width:2px,color:#000
- Cursor IDE (
.cursor/mcp.json
) - VS Code (
settings.json
) - Claude Desktop (
claude_desktop_config.json
) - Windsurf (
.windsurf/mcp_servers.json
) - Continue.dev (
.continue/config.json
) - Custom configurations
Endpoint | Method | Description |
---|---|---|
/ |
GET | Web UI dashboard |
/api/v1/servers |
GET | List all MCP servers |
/api/v1/tools |
GET | List all aggregated tools |
/api/v1/resources |
GET | List all resources |
/api/v1/config |
GET/POST | Manage MCP configurations |
/api/v1/servers/refresh |
POST | Refresh server discovery |
/api/v1/mcp |
SSE/POST | Main MCP endpoint for tool execution/events |
/sse |
GET | Server-Sent Events for real-time updates |
MCP_PORTAL_PORT=8020
MCP_PORTAL_HOST=0.0.0.0
MCP_PORTAL_LOG_LEVEL=INFO
{
"mcpServers": {
"mcp-portal": {
"type": "sse",
"url": "http://localhost:8020/api/v1/mcp"
}
}
}
Note for Windsurf users: Use
serverUrl
instead ofurl
in your configuration:
{
"mcpServers": {
"mcp-portal": {
"transport": "sse",
"serverUrl": "http://localhost:8020/api/v1/mcp"
}
}
}
claude mcp add-json mcp-portal '{"type":"sse","url":"http://localhost:8020/api/v1/mcp"}' --scope user
# 1. Build the Docker image
docker build -t mcp-portal .
# 2. Run the container
docker run -d -p 8020:8020 --name mcp-portal mcp-portal
# 3. Open the web UI
# Visit http://localhost:8020 in your browser
# Build and run production container
./docker/build.sh prod
# View logs
docker logs mcp-portal-container
# Stop
docker stop mcp-portal-container
curl http://localhost:8020/api/v1/tools
curl -X POST http://localhost:8020/api/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{"tool": "brave-search", "arguments": {"query": "MCP documentation"}}'
- Server Management: Enable/disable MCP servers
- Tool Explorer: Browse and test tools interactively
- Configuration Editor: Edit MCP configs with JSON validation
- Real-time Monitoring: Live server status and logs
# Run tests
pytest tests/
# Run with coverage
pytest --cov=mcp_gateway tests/
# Test specific functionality
pytest tests/test_discovery.py -v
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Model Context Protocol for the foundational framework
- FastAPI for the excellent web framework
- Pydantic for data validation
- All the amazing MCP server developers in the community
Ready to unlock the full potential of your MCP ecosystem? β Star this repo and get started with python run-docker.py
!