🚀颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索

🔥🔥🔥本篇笔记所对应的视频:www.bilibili.com/video/BV1rj... Open WebUI 的 MCPo 项目:将 MCP 工具无缝集成到 OpenAPI 的创新解决方案

随着人工智能工具和模型的快速发展,如何高效、安全地将这些工具集成到标准化的 API 接口中成为了开发者面临的重要挑战。Open WebUI 的 MCPo 项目(Model Context Protocol-to-OpenAPI Proxy Server)正是为了解决这一问题而设计的。本文将带您深入了解 MCPo 的功能、优势及其对开发者生态的影响。


什么是 MCPo?

MCPo 是一个简单、可靠的代理服务器,能够将任何基于 MCP 协议的工具转换为兼容 OpenAPI 的 HTTP 服务器。它通过标准化 RESTful API 接口,让复杂的工具变得易于使用,并支持与大语言模型(LLM)代理和应用程序的无缝交互。

核心功能:

  • 即时兼容性:支持 OpenAPI 工具、SDK 和用户界面,无需额外配置。
  • 安全性与稳定性:采用标准化的 HTTPS 传输协议,支持 JWT 和 API 密钥认证。
  • 自动生成文档:无需手动配置,自动生成交互式 Swagger UI 文档。
  • 纯 HTTP 支持:无需额外的套接字或胶合代码,简化开发流程。

MCPo 的工作原理

MCPo 的核心在于其代理功能,它能够动态发现 MCP 工具并生成 REST API 端点,同时提供人性化的 OpenAPI 文档。以下是其典型工作流程:

  1. 启动 MCPo 服务器,例如: 或通过 Python:

    css 复制代码
    uvx mcpo --port 8000 -- your_mcp_server_command
    css 复制代码
    pip install mcpo
    mcpo --port 8000 -- your_mcp_server_command
  2. 自动生成 API 文档,访问地址为 http://localhost:8000/docs

  3. 用户可以直接调用生成的 API 端点,通过 HTTP 客户端或其他工具进行交互。

此外,MCPo 支持通过配置文件管理多个 MCP 工具,使不同工具可以通过唯一路由访问。例如:

css 复制代码
{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "time": {
      "command": "uvx",
      "args": ["mcp-server-time", "--local-timezone=America/New_York"]
    }
  }
}

最新功能更新

根据项目最新发布的更新日志,MCPo 引入了以下新特性:

  • 图像内容支持:现在可以直接处理 MCP 工具生成的图像内容,并以二进制格式返回给用户,用于动态图表、AI艺术等场景。
  • CLI API 密钥认证 :通过 -api-key 参数轻松保护端点,适用于公共或多代理部署。
  • 灵活的跨域访问控制(CORS) :新增 -cors-allow-origins 参数,为前端应用和远程 UI 集成提供支持,同时保持安全性。

为什么选择 MCPo?

相比原生 MCP 协议,MCPo 提供了显著优势:

  • 用户友好的接口:不需要学习新的协议,仅需熟悉 HTTP REST 接口即可操作。
  • 即插即用的集成能力:兼容数千种现有工具和服务。
  • 强大的文档支持:自动维护准确且易用的文档。
  • 安全与稳定性保障:基于成熟框架(如 FastAPI),确保高性能和长久支持。

社区反馈与未来发展

MCPo 项目已在 GitHub 和 Reddit 社区中引发广泛讨论。开发者对其易用性和强大的功能表示认可,同时也提出了改进建议,例如增加 SSL 支持和更灵活的配置选项。

随着人工智能工具需求的增长,MCPo 有望成为连接 AI 工具与标准化接口的重要桥梁,为开发者提供更高效、更安全的解决方案。


🚀安装ollama

ollama.com/

🚀在ollama中安装模型

arduino 复制代码
ollama run gemma3

🚀安装mcpo

bash 复制代码
# 安装mcpo
pip install mcpo

mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command

# 启动时间mcp server
uvx mcpo --port 8000 --api-key "top-secret" -- uvx mcp-server-time --local-timezone=America/New_York

# 启动fetch mcp server
uvx mcpo --port 8000 -- uvx mcp-server-fetch

# 查看文档:
<http://localhost:8000/docs>
<http://localhost:8000/openapi.json>

# 使用配置文件启动
mcpo --config /path/to/config.json

# 配置文件示例:
{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "time": {
      "command": "uvx",
      "args": ["mcp-server-time", "--local-timezone=America/New_York"]
    }
  }
}

🚀安装Open WebUI

bash 复制代码
# pip 安装
pip install -U open-webui

# 启动 
open-webui serve

# 源代码安装
git clone -b v0.6.0 <https://github.com/open-webui/open-webui.git>
cd open-webui/

cp -RPp .env.example .env

npm i
npm run build

cd ./backend
pip install -r requirements.txt -U

# 启动
bash start.sh

🚀测试通过MCPO调用MCP Fetch server

python 复制代码
import requests
import json

def fetch_webpage(url, max_length=10000, start_index=0, raw=False):
    """
    Fetch content from a URL using the MCP Fetch server.

    Args:
        url (str): The URL to fetch
        max_length (int): Maximum number of characters to return
        start_index (int): Start content from this character index
        raw (bool): Get raw HTML content without markdown conversion

    Returns:
        dict: The response from the server containing the fetched content
    """
    try:
        # Make a POST request to the fetch endpoint
        response = requests.post(
            "<http://localhost:8000/fetch>",
            json={
                "url": url,
                "max_length": max_length,
                "start_index": start_index,
                "raw": raw
            }
        )

        # Ensure the request was successful
        response.raise_for_status()

        # Parse the response
        return response.json()
    except Exception as e:
        return {"error": str(e)}

# Example usage
if __name__ == "__main__":
    # Fetch the specific URL you requested
    target_url = "<https://www.aivi.fyi/aiagents/RooCode-Gemini2.5Pro-OpenAIAgentsSDK>"
    result = fetch_webpage(target_url)
    print(result)
相关推荐
一只叫煤球的猫33 分钟前
2025年终总结:我与AI——减少内耗、疯狂学习、享受乐趣
aigc·openai·ai编程
机器之心4 小时前
多模态推理新范式!DiffThinker:用扩散模型「画」出推理和答案
人工智能·openai
熊猫钓鱼>_>8 小时前
AI 加 CloudBase 帮我从零快速打造儿童英语故事学习乐园
ide·人工智能·ai·mcp·codebuddy·cloudbase·ai toolkit
pauli15 小时前
MCP 科普
mcp
用户9083246027315 小时前
大模型还在硬编码?Spring AI 实现“动态热切换”全攻略(上)
后端·openai
QING61815 小时前
移动端攻城狮 —— 浅谈 AI 编程对我的影响?
openai·ai编程·cursor
机器之心1 天前
智元提出SOP,让VLA模型在真实世界实现可扩展的在线进化
人工智能·openai
GeminiJM1 天前
我的 MCP 学习之旅:从困惑到理解
人工智能·mcp
holidaypenguin1 天前
常用MCP记录
前端·mcp
Jagger_1 天前
【提示词】主播风格概念化内容创作
aigc·openai·ai编程