webui-mcpo
If you are the rightful owner of webui-mcpo and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Model Context Protocol (MCP) server is a versatile and lightweight server designed to manage and proxy multiple MCP tools through a unified API interface.
π§ webui-mcpo: Run Multiple MCP Tools with a Single Config on Open WebUI
Docker Hub Image: masterno12/webui-mcpo:latest
This Docker image provides a ready-to-use instance of MCPO, a lightweight, composable MCP (Model Context Protocol) server designed to proxy multiple MCP tools in one unified API server β using a simple config file in the Claude Desktop format.
π What is MCP?
Learn more at the Open WebUI MCP Server docs
Supported official MCP servers: https://github.com/modelcontextprotocol/servers
π‘ Why this approach?
When starting out, I found that the official Open WebUI documentation often highlights one-liner launch commands (e.g. using npx
or uvx
directly) and provides translations from Claude configs to one-liners.
However, I noticed two things:
- The MCP server registry (https://github.com/modelcontextprotocol/servers) nearly always gives the Claude-style JSON configuration, not the one-liners.
- MCPO, when acting as a hub, expects Claude configs directlyβthere is no benefit in converting them to one-liners manually.
So instead of manually translating JSON blocks to CLI commands, I embraced the Claude config format fully. This makes the setup clearer, easier to maintain, and perfectly compatible with mcpo
.
π Quick Start (with Docker Hub)
1. Pull the image
docker pull masterno12/webui-mcpo:latest
2. Create a config.json
You must provide a config.json
in a local folder (e.g., mcpo/
). If mcpo/config.json
does not exist, the container will automatically generate a minimal default one.
The local folder mcpo/
must be in the same directory where docker-compose.yml is.
π Example config.json
:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"]
},
"mcp_sse": {
"type": "sse",
"url": "http://127.0.0.1:8001/sse"
},
"mcp_streamable_http": {
"type": "streamable_http",
"url": "http://127.0.0.1:8002/mcp"
}
}
}
π³ Run with Docker Compose
services:
mcpo:
image: masterno12/webui-mcpo:latest
container_name: webui-mcpo
ports:
- "8000:8000"
volumes:
- ./mcpo:/opt/mcpo
restart: unless-stopped
Start the server:
docker-compose up -d
π¨ Build the Image from Dockerfile
Clone the repo:
git clone https://github.com/masterno12/webui-mcpo.git
cd webui-mcpo
Build the image locally:
docker build -t webui-mcpo:latest .
Then either run it directly:
docker run -d -p 8000:8000 -v "$PWD/mcpo:/opt/mcpo" webui-mcpo:latest
Or use the provided Docker Compose setup:
docker-compose up -d --build
π Accessing Tools
Each tool is exposed under its own subpath, for example:
http://localhost:8000/memory
http://localhost:8000/time
Each path serves:
- An individual OpenAPI schema (
/docs
) - A dedicated handler
Example:
http://localhost:8000/memory/docs
http://localhost:8000/time/docs
β Open WebUI Integration
To connect tools from this MCP server in Open WebUI, you must use the full subpath for each tool:
β Valid tool entries:
http://localhost:8000/memory
http://localhost:8000/time
π« Invalid:
http://localhost:8000
This ensures Open WebUI recognizes and communicates with each tool server correctly.
π Notes
- If
/opt/mcpo/config.json
does not exist on container startup, a minimal default will be copied automatically. - Container exposes port
8000
. - Supports
npx
,uvx
, and custom MCP tool types.
n8n support
The sse provide by n8n work when use with supergateway
{
"mcpServers": {
"n8n": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--sse",
"<MCP_URL>"
]
}
}
}
With Authorization
{
"mcpServers": {
"n8n": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--sse",
"<MCP_URL>",
"--header",
"Authorization: Bearer <MCP_BEARER_TOKEN>"
]
}
}
}
But, mcpo should work with native sse (but not for me, i let it here if you want to try)
"n8n-dev": {
"url": "<MCP_URL>",
"serverType": "sse"
}
With Authorization
"linux_server": {
"transport": "sse",
"endpoint": "http://192.168.40.173:8000/sse",
"bearertoken":"expected-token"
}
π¦ Changelog
v1.2 β Added API Key Support via ENV (2025-05-24)
- β
Added support for API key injection via
MCPO_API_KEY
environment variable. - π οΈ Updated
entrypoint.sh
to dynamically append--api-key
if the variable is present. - π Keeps using
config.json
for server configuration. - π Improved documentation for Docker Compose usage.
- π§ͺ Backward-compatible with
v1.1
config files.
v1.1 β Initial Release
- π§ Basic Docker image for
mcpo
with config file support. - π Lightweight and ready-to-use Open WebUI MCP server launcher.