mirror of
https://github.com/open-webui/mcpo
synced 2025-06-26 18:26:58 +00:00
187 lines
5.7 KiB
Markdown
187 lines
5.7 KiB
Markdown
# ⚡️ mcpo
|
||
|
||
Expose any MCP tool as an OpenAPI-compatible HTTP server—instantly.
|
||
|
||
mcpo is a dead-simple proxy that takes an MCP server command and makes it accessible via standard RESTful OpenAPI, so your tools "just work" with LLM agents and apps expecting OpenAPI servers.
|
||
|
||
No custom protocol. No glue code. No hassle.
|
||
|
||
## 🤔 Why Use mcpo Instead of Native MCP?
|
||
|
||
MCP servers usually speak over raw stdio, which is:
|
||
|
||
- 🔓 Inherently insecure
|
||
- ❌ Incompatible with most tools
|
||
- 🧩 Missing standard features like docs, auth, error handling, etc.
|
||
|
||
mcpo solves all of that—without extra effort:
|
||
|
||
- ✅ Works instantly with OpenAPI tools, SDKs, and UIs
|
||
- 🛡 Adds security, stability, and scalability using trusted web standards
|
||
- 🧠 Auto-generates interactive docs for every tool, no config needed
|
||
- 🔌 Uses pure HTTP—no sockets, no glue code, no surprises
|
||
|
||
What feels like "one more step" is really fewer steps with better outcomes.
|
||
|
||
mcpo makes your AI tools usable, secure, and interoperable—right now, with zero hassle.
|
||
|
||
## 🚀 Quick Usage
|
||
|
||
We recommend using uv for lightning-fast startup and zero config.
|
||
|
||
```bash
|
||
uvx mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
|
||
```
|
||
|
||
Or, if you’re using Python:
|
||
|
||
```bash
|
||
pip install mcpo
|
||
mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
|
||
```
|
||
|
||
To use an SSE-compatible MCP server, simply specify the server type and endpoint:
|
||
|
||
```bash
|
||
mcpo --port 8000 --api-key "top-secret" --server-type "sse" -- http://127.0.0.1:8001/sse
|
||
```
|
||
|
||
To use a Streamable HTTP-compatible MCP server, specify the server type and endpoint:
|
||
|
||
```bash
|
||
mcpo --port 8000 --api-key "top-secret" --server-type "streamable_http" -- http://127.0.0.1:8002/mcp
|
||
```
|
||
|
||
You can also run mcpo via Docker with no installation:
|
||
|
||
```bash
|
||
docker run -p 8000:8000 ghcr.io/open-webui/mcpo:main --api-key "top-secret" -- your_mcp_server_command
|
||
```
|
||
|
||
Example:
|
||
|
||
```bash
|
||
uvx mcpo --port 8000 --api-key "top-secret" -- uvx mcp-server-time --local-timezone=America/New_York
|
||
```
|
||
|
||
That’s it. Your MCP tool is now available at http://localhost:8000 with a generated OpenAPI schema — test it live at [http://localhost:8000/docs](http://localhost:8000/docs).
|
||
|
||
🤝 **To integrate with Open WebUI after launching the server, check our [docs](https://docs.openwebui.com/openapi-servers/open-webui/).**
|
||
|
||
### 🔄 Using a Config File
|
||
|
||
You can serve multiple MCP tools via a single config file that follows the [Claude Desktop](https://modelcontextprotocol.io/quickstart/user) format:
|
||
|
||
Start via:
|
||
|
||
```bash
|
||
mcpo --config /path/to/config.json
|
||
```
|
||
|
||
Example config.json:
|
||
|
||
```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", // Explicitly define type
|
||
"url": "http://127.0.0.1:8001/sse"
|
||
},
|
||
"mcp_streamable_http": {
|
||
"type": "streamable_http",
|
||
"url": "http://127.0.0.1:8002/mcp"
|
||
} // Streamable HTTP MCP Server
|
||
}
|
||
}
|
||
```
|
||
|
||
Each tool will be accessible under its own unique route, e.g.:
|
||
- http://localhost:8000/memory
|
||
- http://localhost:8000/time
|
||
|
||
Each with a dedicated OpenAPI schema and proxy handler. Access full schema UI at: `http://localhost:8000/<tool>/docs` (e.g. /memory/docs, /time/docs)
|
||
|
||
## 🔧 Requirements
|
||
|
||
- Python 3.8+
|
||
- uv (optional, but highly recommended for performance + packaging)
|
||
|
||
## 🛠️ Development & Testing
|
||
|
||
To contribute or run tests locally:
|
||
|
||
1. **Set up the environment:**
|
||
```bash
|
||
# Clone the repository
|
||
git clone https://github.com/open-webui/mcpo.git
|
||
cd mcpo
|
||
|
||
# Install dependencies (including dev dependencies)
|
||
uv sync --dev
|
||
```
|
||
|
||
2. **Run tests:**
|
||
```bash
|
||
uv run pytest
|
||
```
|
||
|
||
3. **Running Locally with Active Changes:**
|
||
|
||
To run `mcpo` with your local modifications from a specific branch (e.g., `my-feature-branch`):
|
||
|
||
```bash
|
||
# Ensure you are on your development branch
|
||
git checkout my-feature-branch
|
||
|
||
# Make your code changes in the src/mcpo directory or elsewhere
|
||
|
||
# Run mcpo using uv, which will use your local, modified code
|
||
# This command starts mcpo on port 8000 and proxies your_mcp_server_command
|
||
uv run mcpo --port 8000 -- your_mcp_server_command
|
||
|
||
# Example with a test MCP server (like mcp-server-time):
|
||
# uv run mcpo --port 8000 -- uvx mcp-server-time --local-timezone=America/New_York
|
||
```
|
||
This allows you to test your changes interactively before committing or creating a pull request. Access your locally running `mcpo` instance at `http://localhost:8000` and the auto-generated docs at `http://localhost:8000/docs`.
|
||
|
||
|
||
## 🪪 License
|
||
|
||
MIT
|
||
|
||
## 🤝 Contributing
|
||
|
||
We welcome and strongly encourage contributions from the community!
|
||
|
||
Whether you're fixing a bug, adding features, improving documentation, or just sharing ideas—your input is incredibly valuable and helps make mcpo better for everyone.
|
||
|
||
Getting started is easy:
|
||
|
||
- Fork the repo
|
||
- Create a new branch
|
||
- Make your changes
|
||
- Open a pull request
|
||
|
||
Not sure where to start? Feel free to open an issue or ask a question—we’re happy to help you find a good first task.
|
||
|
||
## ✨ Star History
|
||
|
||
<a href="https://star-history.com/#open-webui/mcpo&Date">
|
||
<picture>
|
||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=open-webui/mcpo&type=Date&theme=dark" />
|
||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=open-webui/mcpo&type=Date" />
|
||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=open-webui/mcpo&type=Date" />
|
||
</picture>
|
||
</a>
|
||
|
||
---
|
||
|
||
✨ Let's build the future of interoperable AI tooling together! |