🛰️ MCP 支持
本文档介绍了如何轻松设置和部署由 Open WebUI 提供的 MCP(模型上下文协议)到 OpenAPI 代理服务器 (mcpo)。了解如何使用适合最终用户和开发者的标准、熟悉的 OpenAPI 端点,轻松暴露基于 MCP 的工具服务器。
📌 什么是 MCP 代理服务器?
MCP 到 OpenAPI 代理服务器允许您直接通过标准的 REST/OpenAPI API 使用采用 MCP(模型上下文协议)实现的工具服务器,无需管理不熟悉或复杂的自定义协议。如果您是最终用户或应用程序开发者,这意味着您可以通过熟悉的 REST 类端点直接轻松地与强大的基于 MCP 的工具交互。
💡 为什么要使用 mcpo?
虽然 MCP 工具服务器功能强大且灵活,但它们通常通过标准输入/输出 (stdio) 进行通信,并且经常在您的本地机器上运行,在那里它们可以轻松访问您的文件系统、环境和其他本地系统能力。
这是一个优势,但也伴随着局限性。
如果您想在云端部署您的主界面(如 Open WebUI),您很快就会遇到一个问题:您的云实例无法通过 stdio 直接与在您本地机器上运行的 MCP 服务器通信。
MCP 服务器通常依赖原始的 stdio 通信,这种方式
- 🔓 在不同环境中本质上不安全
- ❌ 与大多数现代工具、UI 或平台不兼容
- 🧩 缺乏认证、文档和错误处理等关键功能
mcpo 代理会自动消除这些问题
- ✅ 立即与现有 OpenAPI 工具、SDK 和客户端兼容
- 🛡 为您的工具提供安全、可扩展且基于标准的 HTTP 端点包装
- 🧠 为每个工具自动生成交互式 OpenAPI 文档,完全无需配置
- 🔌 使用纯 HTTP——无需套接字设置、守护进程管理或特定于平台的粘合代码
因此,尽管添加 mcpo 起初可能看起来像是“仅仅多了一层”,但实际上,它简化了所有事情,同时为您带来
- 更好的集成 ✅
- 更好的安全性 ✅
- 更好的可扩展性 ✅
- 更愉快的开发者和用户 ✅
✨ 有了 mcpo,您仅限于本地的 AI 工具变得云端可用、界面友好且即时互操作,而无需更改工具服务器代码的任何一行。
✅ 快速入门:在本地运行代理
使用轻量、易用的工具 mcpo(GitHub 仓库)启动 MCP 到 OpenAPI 代理服务器就是这么简单
-
前提条件
- 安装了 Python 3.8+ 及
pip
。 - MCP 兼容应用(例如:
mcp-server-time
) - (可选但推荐)安装
uv
以实现更快的启动和零配置便利性。
- 安装了 Python 3.8+ 及
-
安装 mcpo
使用 uv(推荐)
uvx mcpo --port 8000 -- your_mcp_server_command
或使用 pip
pip install mcpo
mcpo --port 8000 -- your_mcp_server_command
- 🚀 运行代理服务器
要启动 MCP 到 OpenAPI 代理服务器,您需要一个 MCP 兼容的工具服务器。如果您还没有,MCP 社区提供了各种现成的 MCP 服务器实现。
✨ 在哪里找到 MCP 服务器?
您可以在以下仓库示例中找到官方支持的 MCP 服务器
例如,流行的 Time MCP 服务器的文档在此处,并且通常在 README 中提供的 MCP 配置内清晰引用。具体而言,README 中提到
添加到您的 Claude 设置中
"mcpServers": {
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"]
}
}
🔑 将此 MCP 设置转换为快速本地代理命令
您可以像这样通过 MCP 到 OpenAPI 代理 (mcpo
) 直接轻松运行推荐的 MCP 服务器 (mcp-server-time
)
uvx mcpo --port 8000 -- uvx mcp-server-time --local-timezone=America/New_York
就是这样!您现在已在本地运行 MCP 到 OpenAPI 代理,并通过标准 OpenAPI 端点暴露了强大的 MCP Time 服务器,可在以下地址访问
- 📖 交互式 OpenAPI 文档:
http://localhost:8000/docs
您可以随意将 uvx mcp-server-time --local-timezone=America/New_York
替换为官方仓库中提供的其他 MCP 实现中的首选 MCP 服务器命令。
🤝 在启动服务器后与 Open WebUI 集成,请查看我们的文档。
🚀 访问生成的 API
MCP 代理 (mcpo
) 启动后会自动
- 动态发现 MCP 工具并生成 REST 端点。
- 创建交互式、易于理解的 OpenAPI 文档,可在以下地址访问
http://localhost:8000/docs
只需通过 HTTP 客户端、AI 代理或您偏好的其他 OpenAPI 工具直接调用自动生成的 API 端点即可。
📖 最终用户示例工作流程
假设您已启动上述服务器命令 (uvx mcp-server-time
)
- 访问您的本地 API 文档,地址为
http://localhost:8000/docs
。 - 选择一个生成的端点(例如
/get_current_time
),然后使用提供的交互式表单。 - 点击“Execute”,立即收到响应。
无需复杂设置,即时获得 REST API。
🚀 生产环境部署(示例)
部署您的 MCP 到 OpenAPI 代理(由 mcpo 提供支持)非常简单。以下是如何轻松将其 Docker 化并部署到云或 VPS 解决方案的步骤
🐳 使用 mcpo 将代理服务器 Docker 化
- Dockerfile 示例
在您的部署目录中创建以下 Dockerfile
FROM python:3.11-slim
WORKDIR /app
RUN pip install mcpo uv
# Replace with your MCP server command; example: uvx mcp-server-time
CMD ["uvx", "mcpo", "--host", "0.0.0.0", "--port", "8000", "--", "uvx", "mcp-server-time", "--local-timezone=America/New_York"]
- 在本地构建并运行容器
docker build -t mcp-proxy-server .
docker run -d -p 8000:8000 mcp-proxy-server
- 部署您的容器
推送到 DockerHub 或其他注册表
docker tag mcp-proxy-server yourdockerusername/mcp-proxy-server:latest
docker push yourdockerusername/mcp-proxy-server:latest
使用 Docker Compose、Kubernetes YAML 配置清单或您喜欢的云容器服务(AWS ECS、Azure Container Instances、Render.com 或 Heroku)进行部署。
✔️ 您的生产环境 MCP 服务器现在可以通过 REST API 轻松访问!
🧑💻 技术细节与背景
🍃 工作原理(技术摘要)
-
动态Schema发现与端点:服务器启动时,代理连接到 MCP 服务器以查询可用工具。它根据 MCP 工具 Schema 自动构建 FastAPI 端点,创建简洁明了的 REST 端点。
-
OpenAPI 自动文档:生成的端点会通过 FastAPI 内置的 Swagger UI (
/docs
) 无缝地生成文档并可用。无需额外编写文档。 -
异步与高性能:基于强大的异步库构建,确保并发用户的速度和可靠性。
📚 幕后:
- FastAPI(自动路由和文档生成)
- MCP 客户端(标准 MCP 集成和 Schema 发现)
- 标准 JSON over HTTP(轻松集成)
⚡️ 为何 MCP 到 OpenAPI 代理更胜一筹?
以下是为什么通过代理方法利用 OpenAPI 访问 MCP 服务器会显著更好,以及为什么 Open WebUI 热烈支持它的原因
- 用户友好且熟悉的界面:无需自定义客户端;只需使用您已经熟悉的 HTTP REST 端点即可。
- 即时集成:立即兼容数千个现有的 REST/OpenAPI 工具、SDK 和服务。
- 强大且自动的文档:内置的 Swagger UI 文档是自动生成的,始终准确且得到维护。
- 无新增协议开销:消除了直接处理 MCP 特定协议复杂性和套接字通信问题的必要性。
- 经过实战考验的安全性与稳定性:继承成熟的 HTTPS 传输、标准认证方法(JWT、API 密钥)、稳定的异步库以及 FastAPI 久经考验的健壮性。
- 面向未来:MCP 代理使用现有、稳定、标准的 REST/OpenAPI 格式,保证获得长期的社区支持和演进。
🌟 总结:MCP 到 OpenAPI 使您强大的基于 MCP 的 AI 工具通过直观、可靠且可扩展的 REST 端点获得广泛可访问性。Open WebUI 自豪地支持并推荐这种一流方法。
📢 社区与支持
- 如有疑问、建议或功能请求,请使用我们的 GitHub Issue 跟踪器 或加入我们的社区讨论。
集成愉快!🌟🚀