跳到主要内容

🛰️ MCP 支持

本文档介绍如何轻松设置和部署由 Open WebUI 提供的 MCP(Model Context Protocol)-to-OpenAPI 代理服务器 (mcpo)。了解如何通过标准、熟悉的 OpenAPI 端点,将基于 MCP 的工具服务器公开给终端用户和开发者。

📌 什么是 MCP 代理服务器?

MCP-to-OpenAPI 代理服务器允许您使用 MCP(Model Context Protocol) 实现的工具服务器可以直接通过标准的 REST/OpenAPI API 进行访问——不需要管理陌生或复杂的自定义协议。如果你是终端用户或应用开发人员,这意味着您可以通过熟悉的类 REST 端点轻松地与基于 MCP 的强大工具交互。

💡 为什么使用 mcpo?

尽管 MCP 工具服务器十分强大且灵活,但它们通常通过标准输入/输出(stdio)进行通信——通常在您的本地设备运行,可以轻松访问您的文件系统、环境和其他原生系统功能。

这是一种优势——但同时也是一种限制。

如果你希望在云端部署你的主界面(例如 Open WebUI),很快就会遇到一个问题:你的云实例无法通过 stdio 直接与运行在本地设备上的 MCP 服务器交流。

这就是 mcpo 带来的革命性解决方案。

MCP 服务器通常依赖原始的 stdio 通信,其特点包括:

  • 🔓 在跨环境中存在固有的不安全性
  • ❌ 与大多数现代工具、UI 或平台不兼容
  • 🧩 缺乏关键功能,例如身份验证、文档以及错误处理

mcpo 代理自动消除了这些问题:

  • ✅ 立即与现有的 OpenAPI 工具、SDK 和客户端兼容
  • 🛡 使用安全、可扩展和基于标准的 HTTP 端点对工具进行封装
  • 🧠 为每个工具自动生成交互式 OpenAPI 文档,完全无配置
  • 🔌 使用纯 HTTP——无需套接字设置、守护程序管理或平台特定的胶水代码

因此,尽管添加 mcpo 乍一看可能像是 "仅仅多了一层"——但实际上,它简化了所有操作,同时为您提供:

  • 更好的集成 ✅
  • 更好的安全性 ✅
  • 更好的可扩展性 ✅
  • 更满意的开发者和用户 ✅

✨ 使用 mcpo,你的本地 AI 工具将变得云端准备、UI 友好,并能够立即互操作——无需更改工具服务器代码的一行。

✅ 快速开始:在本地运行代理

以下是使用轻量且易于使用的工具 mcpo (GitHub Repository) 启动 MCP-to-OpenAPI 代理服务器的简单步骤:

  1. 先决条件

    • Python 3.8+,并安装了 pip
    • MCP 兼容的应用程序(例如:mcp-server-time)
    • (可选但推荐) 安装 uv,以实现更快启动和零配置的便利。
  2. 安装 mcpo

使用 uv (推荐):

uvx mcpo --port 8000 -- your_mcp_server_command

或使用 pip

pip install mcpo
mcpo --port 8000 -- your_mcp_server_command
  1. 🚀 运行代理服务器

要启动 MCP-to-OpenAPI 代理服务器,你需要一个 MCP 兼容的工具服务器。如果你还没有,请查看 MCP 社区提供的一些现成的 MCP 服务器实现。

在哪里找到 MCP 服务器?

你可以在以下示例库中找到官方支持的 MCP 服务器:

例如,流行的 时间 MCP 服务器 文档在 这里,且通常会在 README 文件中清楚地引用提供的 MCP 配置。尤其是 README 中指出:

添加到你的 Claude 设置:

"mcpServers": {   
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"]
}
}

🔑 将此 MCP 设置翻译为快速的本地代理命令

你可以通过 MCP-to-OpenAPI 代理 (mcpo) 轻松运行推荐的 MCP 服务器 (mcp-server-time),如下所示:

uvx mcpo --port 8000 -- uvx mcp-server-time --local-timezone=America/New_York

就是这样!你现在已启动 MCP-to-OpenAPI 代理,并通过以下标准 OpenAPI 端点公开强大的 MCP 时间服务器

随意将 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):

  • http://localhost:8000/docs 查看本地API文档。
  • 选择一个生成的端点(例如 /get_current_time)并使用提供的交互式表单。
  • 点击“Execute”按钮并立即接收您的响应。

无需复杂设置——即刻拥有REST API。

🚀 生产环境部署(示例)

部署您的MCP到OpenAPI代理(由mcpo驱动)非常简单。以下是如何将其轻松Docker化并部署到云或VPS的步骤:

🐳 使用mcpo对代理服务器进行Docker化

  1. Dockerfile示例

在您的部署目录中创建如下Dockerfile

FROM python:3.11-slim
WORKDIR /app
RUN pip install mcpo uv
# 替换为您的MCP服务器命令;示例:uvx mcp-server-time
CMD ["uvx", "mcpo", "--host", "0.0.0.0", "--port", "8000", "--", "uvx", "mcp-server-time", "--local-timezone=America/New_York"]
  1. 在本地构建并运行容器
docker build -t mcp-proxy-server .
docker run -d -p 8000:8000 mcp-proxy-server
  1. 部署容器

推送到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轻松访问!

🧑‍💻 技术细节和背景

🍃 工作原理(技术摘要)

  • 动态架构发现与端点:服务器启动时,代理连接到MCP服务器以查询可用的工具。它基于MCP工具的架构自动生成FastAPI端点,创建简洁明了的REST端点。

  • OpenAPI自动文档:生成的端点与FastAPI内置Swagger UI(/docs)无缝关联,提供自动生成的文档,无需额外书写。

  • 异步且高性能:基于强大的异步库构建,确保多用户并发情况下的速度与可靠性。

📚 核心技术:

  • FastAPI(自动路由和文档生成)
  • MCP客户端(标准的MCP集成与架构发现)
  • 基于HTTP的标准JSON(便于集成)

⚡️ MCP到OpenAPI代理为何卓越?

以下是为什么通过代理方式来利用MCP服务器并通过OpenAPI进行访问更优,以及Open WebUI对此强烈支持的原因:

  • 用户友好且熟悉的接口:无需定制客户端,只需使用您已熟悉的HTTP REST端点。
  • 即时集成:与数以千计的现有REST/OpenAPI工具、SDK和服务完全兼容。
  • 强大且自动化的文档:内置Swagger UI文档会自动生成,始终准确且维护良好。
  • 无需新的协议开销:免去直接处理MCP特定协议复杂性和套接字通信问题的必要性。
  • 经过实战检验的安全性与稳定性:继承了成熟的HTTPS传输、标准认证方法(如JWT、API密钥)、稳固的异步库以及FastAPI的可靠性。
  • 未来适应性:MCP代理使用现有、稳定、标准的REST/OpenAPI格式,社区长期支持与进化有保障。

🌟 总结:通过MCP-to-OpenAPI,使您的强大的基于MCP的AI工具可以通过简单、可靠、可扩展的REST端点向更广用户开放。Open WebUI对此卓越的方法深感自豪并强烈推荐。

📢 社区与支持

祝您的集成愉快!🌟🚀