80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
# MCP Servers for Open WebUI
|
|
|
|
**Deployed:** 2026-07-15
|
|
**Status:** Live on app1 (152.53.36.131)
|
|
**Docker compose:** /root/docker/litellm/docker-compose.yml
|
|
|
|
## Fleet
|
|
|
|
| MCP | Port | Tools | Description |
|
|
|---|---|---|---|
|
|
| Super Search | :8899 | 10 | Web search, extract, news, academic, images, lookup |
|
|
| Browser | :8901 | 5 | Screenshots, JS execute, click, extract, browse |
|
|
| Filesystem | :8900 | 5 | List, read, write, search, create dir |
|
|
| Email | :8902 | 3 | Send, inbox, search |
|
|
| Git/Gitea | :8903 | 4 | List repos, search, browse, read files |
|
|
|
|
## Architecture
|
|
|
|
All MCPs run as Docker services alongside LiteLLM on app1, sharing the `litellm-net` network.
|
|
Wired into Open WebUI via `tool_server.connections` in SQLite.
|
|
|
|
## Access
|
|
|
|
### In Open WebUI
|
|
|
|
All MCPs are wired into Open WebUI at **http://ai.itpropartner.com** (or **https://admin-ai.itpropartner.com/ui**). They appear as tools available to the AI model — no separate login needed once you're in Open WebUI.
|
|
|
|
The connections are stored in SQLite at:
|
|
```
|
|
/var/lib/docker/volumes/openwebui_data/_data/webui.db → config.key = 'tool_server.connections'
|
|
```
|
|
|
|
Each connection is a JSON object in the array:
|
|
```json
|
|
{
|
|
"url": "http://host.docker.internal:8899/mcp",
|
|
"type": "mcp",
|
|
"auth_type": "none",
|
|
"info": {"name": "Super Search (MCP)", "description": "..."},
|
|
"config": {"enable": true}
|
|
}
|
|
```
|
|
|
|
### Adding a new MCP to Open WebUI
|
|
|
|
1. Build and start the MCP service in `/root/docker/litellm/docker-compose.yml` (map to `127.0.0.1:<port>` on app1)
|
|
2. Insert the connection into the SQLite DB:
|
|
```bash
|
|
ssh app1 "sqlite3 /var/lib/docker/volumes/openwebui_data/_data/webui.db \
|
|
\"UPDATE config SET value = json_insert(value, '\$[#]', json_object(
|
|
'url', 'http://host.docker.internal:PORT/mcp',
|
|
'type', 'mcp',
|
|
'auth_type', 'none',
|
|
'config', json_object('enable', true),
|
|
'info', json_object('name', 'NAME', 'description', 'DESC')
|
|
)) WHERE key = 'tool_server.connections';\""
|
|
```
|
|
3. Restart Open WebUI: `cd /root/docker/litellm && docker compose restart openwebui`
|
|
4. Verify in admin-ai UI → Workspace → Tools
|
|
|
|
### Direct MCP access (testing)
|
|
|
|
All MCPs are reachable on app1's loopback. From app1:
|
|
```bash
|
|
# List tools
|
|
curl http://127.0.0.1:8899/mcp # Super Search
|
|
curl http://127.0.0.1:8901/mcp # Browser
|
|
curl http://127.0.0.1:8900/mcp # Filesystem
|
|
curl http://127.0.0.1:8902/mcp # Email
|
|
curl http://127.0.0.1:8903/mcp # Git/Gitea
|
|
```
|
|
|
|
From Core (Hermes), MCPs are accessed via the admin-ai proxy URL `https://admin-ai.itpropartner.com/mcp` (not direct loopback).
|
|
|
|
## Recovery
|
|
|
|
```bash
|
|
cd /root/docker/litellm && docker compose up -d
|
|
```
|