
WebUI MCPO
STDIODocker image for running multiple MCP tools with a single Claude-style config file
Docker image for running multiple MCP tools with a single Claude-style config file
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
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:
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
.
docker pull masterno12/webui-mcpo:latest
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" } } }
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
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
Each tool is exposed under its own subpath, for example:
http://localhost:8000/memory
http://localhost:8000/time
Each path serves:
/docs
)Example:
http://localhost:8000/memory/docs
http://localhost:8000/time/docs
To connect tools from this MCP server in Open WebUI, you must use the full subpath for each tool:
http://localhost:8000/memory
http://localhost:8000/time
http://localhost:8000
This ensures Open WebUI recognizes and communicates with each tool server correctly.
/opt/mcpo/config.json
does not exist on container startup, a minimal default will be copied automatically.8000
.npx
, uvx
, and custom MCP tool types.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>"
]
}
}
}
"n8n-dev": {
"url": "<MCP_URL>",
"serverType": "sse"
}
With Authorization
"linux_server": {
"transport": "sse",
"endpoint": "http://192.168.40.173:8000/sse",
"bearertoken":"expected-token"
}
MCPO_API_KEY
environment variable.entrypoint.sh
to dynamically append --api-key
if the variable is present.config.json
for server configuration.v1.1
config files.mcpo
with config file support.