mcpo
A simple, secure MCP-to-OpenAPI proxy server
- 评测生成时间(北京时间)
- 本报告引擎
- v3.17.3
- 当前引擎
- v3.17.3
规则版本一致,但报告只反映生成时的证据,不代表项目代码和安全状态始终不变。
进入后确认来源与额度,提交才会创建任务。
核对代码版本与送评文本摘要
仅记录实际送评的受限文本,不是完整仓库审计、安装结果或运行时安全保证。Stars、下载量和仓库元数据为采集时的独立信号,不属于此 commit 快照。
open-webui/mcpo @ 788ff92e5288a899a743a252edd5748f4ad4ab1f目录树:68b372f957872105e87c0276dbe9fc6d1f1ec9b9
README 来源:README.md
- README.md · 8639 字符
SHA-256: 5cce2e340f64e1243816adb7c9fd05594f7c03c8789d4f909e3f46e77455c4f7 - Dockerfile · 1114 字符
SHA-256: 6d0184d1fa066681431d99e18288a5ee23b03040da3ff6fd460e9efc2661d513 - pyproject.toml · 713 字符
SHA-256: 1962c7a71eb7c51505b1ccd8e820f72612e8bd866149a83defb620dad882ead4
摘要对应送评 UTF-8 文本,可能为限额节选,不等于 Git blob SHA。来源由采集方提供,摘要本身不证明来源真实性。
综合采用结论
存在需要人工复核的风险或证据不足
- 基础评测完成+25/25确定性评分与静态安全扫描已完成
- README 有效证据+18/257,316 个去重后的有效字符
- 独立证据来源+12/203 类非重复证据,重复文件不叠加
- 仓库元数据+10/10已取得仓库状态与采用数据
- 活跃记录+5/5已取得最近提交时间
- AI 复核+15/15已完成结构化 AI 证据复核
本报告评了什么
综合分用于静态采用筛选,不是任务成功率,也不代表使用 Skill 后的能力提升。
- 静态检查范围
- 记录 3 个文件 · 10,466 字符
- 只检查采集到的受限文本与已知风险模式;未读取的脚本、依赖和运行环境不在结论内。
- AI 内容复核
- 已使用
- 复核送评文本的说明和设计,不是安装测试或实际任务执行。记录缺失时不推断已使用或未使用。
- 真实任务效果
- 本报告未提供实测证据
- 没有使用/不使用 Skill 的任务对照、重复运行或耗时与 token 成本结果。采用前仍需在隔离环境验证自己的任务。
脚本引用覆盖
脚本引用覆盖记录不可得;不推断没有引用或已经检查。
mcpo 代理架构
README 以组件与依赖关系描述 MCP 服务经 mcpo 暴露为 OpenAPI 路由,无明确时序步骤
左右滑动查看完整图示
- • Quick Usage 节:-- your_mcp_server_command 启动 stdio 服务
- • Quick Usage 节:--server-type "sse"/"streamable-http" 指向远程端点
- • Using a Config File 节:每个工具在独立路由下暴露并生成 OpenAPI schema
- Quick Usage 节:uvx mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
- Using a Config File 节:config.json 中 mcpServers 支持 command/args、type: sse、type: streamable-http、disabledTools
- OAuth 2.1 Authentication 节:storage_type 默认 file,token 存于 ~/.mcpo/tokens/,callback_port 默认 3030
- Serving Under a Subpath 节:--root-path "/api/mcpo" 后路由变为 /api/mcpo/memory
- Requirements 节:Python 3.8+,uv 可选;License 节:MIT
- 问题与用途描述
- 有效 README
- 安装或接入步骤
- 可执行示例
- 明确解决 MCP 仅支持 stdio、与 OpenAPI 生态不兼容的问题,并给出 uvx、pip、Docker 三种启动方式
- 发现高风险的一键下载执行或安装命令
- 缺少输出或结果说明
- 未给出任何请求/响应体或工具调用结果示例,输出契约不可验证
- 代理层对 MCP 工具报错如何映射为 HTTP 状态码与错误体未说明
- OAuth 细节外链 OAUTH_GUIDE.md,正文仅列选项,安全默认值(如 api-key 是否必填)未明确
需要把现有 MCP 工具接入 OpenAPI/LLM Agent 平台的开发者、希望用 HTTP 与 API Key 替代裸 stdio 的本地部署场景、需在反向代理子路径下托管多个 MCP 服务的运维场景
要求零配置、无需命令行启动的纯 GUI 用户、需要完整错误码契约与 SLA 文档的企业集成评审
也有自己的公开项目?先看完证据,再用当前规则生成独立报告。
评测我的项目 →unsafe-install-commandDockerfile:13high confidenceRUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \修复:固定版本与校验和,先下载审查再执行,避免管道直接交给 Shell。
- 01固定版本与校验和,先下载审查再执行,避免管道直接交给 Shell。
- 02补充输出或结果说明
方法、证据与局限展开收起
GitHub Repository API
3 个文件 · 10,466 字符
v3.17.3 · AI 内容复核:已使用(deepseek-flash)
- 静态评测不会安装或执行项目代码
- 安全扫描基于高信号文件与已知模式,不能替代人工审计
- 流行度只反映采用程度,不代表安全或工程质量
30 天热度趋势
README
⚡️ 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.
uvx mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
Or, if you’re using Python:
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:
mcpo --port 8000 --api-key "top-secret" --server-type "sse" -- http://127.0.0.1:8001/sse
You can also provide headers for the SSE connection:
mcpo --port 8000 --api-key "top-secret" --server-type "sse" --header '{"Authorization": "Bearer token", "X-Custom-Header": "value"}' -- http://127.0.0.1:8001/sse
To use a Streamable HTTP-compatible MCP server, specify the server type and endpoint:
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:
docker run -p 8000:8000 ghcr.io/open-webui/mcpo:main --api-key "top-secret" -- your_mcp_server_command
Example:
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.
🤝 To integrate with Open WebUI after launching the server, check our docs.
🌐 Serving Under a Subpath (--root-path)
If you need to serve mcpo behind a reverse proxy or under a subpath (e.g., /api/mcpo), use the --root-path argument:
mcpo --port 8000 --root-path "/api/mcpo" --api-key "top-secret" -- your_mcp_server_command
All routes will be served under the specified root path, e.g. http://localhost:8000/api/mcpo/memory.
🔄 Using a Config File
You can serve multiple MCP tools via a single config file that follows the Claude Desktop format.
Enable hot-reload mode with --hot-reload to automatically watch your config file for changes and reload servers without downtime:
Start via:
mcpo --config /path/to/config.json
Or with hot-reload enabled:
mcpo --config /path/to/config.json --hot-reload
Example config.json:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"],
"disabledTools": ["convert_time"] // Disable specific tools if needed
},
"mcp_sse": {
"type": "sse", // Explicitly define type
"url": "http://127.0.0.1:8001/sse",
"headers": {
"Authorization": "Bearer token",
"X-Custom-Header": "value"
}
},
"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.:
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)
🔐 OAuth 2.1 Authentication
mcpo supports OAuth 2.1 authentication for MCP servers that require it. The implementation defaults to dynamic client registration, so most servers only need minimal configuration:
{
"mcpServers": {
"oauth-protected-server": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp",
"oauth": {
"server_url": "http://localhost:8000"
}
}
}
}
OAuth Configuration Options
Basic Options:
server_url(required): OAuth server base URLstorage_type: "file" (persistent) or "memory" (session-only, default: "file")callback_port: Local port for OAuth callback (default: 3030)use_loopback: Auto-open browser for auth (default: true)
Advanced Options (rarely needed): For servers that don't support dynamic client registration, you can specify static client metadata:
{
"mcpServers": {
"legacy-oauth-server": {
"type": "streamable-http",
"url": "http://api.example.com/mcp",
"oauth": {
"server_url": "http://api.example.com",
"client_metadata": {
"client_name": "My MCPO Client",
"redirect_uris": ["http://localhost:3030/callback"]
}
}
}
}
}
Note: Avoid setting
scope,authorization_endpoint, ortoken_endpointin the config. These are automatically discovered from the server's OAuth metadata during the dynamic registration flow.
On first connection, mcpo will:
- Perform dynamic client registration (if supported)
- Open your browser for authorization
- Capture the OAuth callback automatically
- Store tokens securely (in
~/.mcpo/tokens/for file storage) - Use tokens for all subsequent requests
OAuth is supported for streamable-http server types. See OAUTH_GUIDE.md for detailed documentation.
🔧 Requirements
- Python 3.8+
- uv (optional, but highly recommended for performance + packaging)
🛠️ Development & Testing
To contribute or run tests locally:
-
Set up the environment:
# Clone the repository git clone https://github.com/open-webui/mcpo.git cd mcpo # Install dependencies (including dev dependencies) uv sync --dev -
Run tests:
uv run pytest -
Running Locally with Active Changes:
To run
mcpowith your local modifications from a specific branch (e.g.,my-feature-branch):# 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_YorkThis allows you to test your changes interactively before committing or creating a pull request. Access your locally running
mcpoinstance athttp://localhost:8000and the auto-generated docs athttp://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
✨ Let's build the future of interoperable AI tooling together!