webui-mcpo

webui-mcpo

3.5

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.

πŸ”— Related Links