OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好,Open WebUI 迎来重要更新,现已正式支持 MCP 工具服务器,但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理,经测试,它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具,轻松连接工具与大语言模型(LLM)智能体及应用程序。本文将详细介绍 mcpo 工作机制,创建、部署新的 MCP 服务器,并集成到 Open WebUI 中,挖掘 MCP 工具服务器潜力,拓展应用场景。

1.MCPO架构 

MCPO架构

MCPO架构

MCPO 通过标准输入 / 输出(stdio)传输直接与 MCP 服务器进行交互。随后,在和 Open WebUI 交互时,所有 MCP 通信都会转化为 RESTful API。

2.前提条件 

本地未安装 Ollama 的,请下载并安装,下载地址:https://ollama.com/download 。

若本地未安装Open WebUI,请下载并安装,下载地址:https://github.com/open-webui/open-webui 。

安装NodeJS和Python 3.11(Open WebUI所需)/pip,或使用uv(运行命令:curl -LsSf https://astral.sh/uv/install.sh | sh) 。安装VS Code + Roo Code + Google Gemini 2.5 Pro(用于生成新MCP服务器代码)。

3.配置MCPO服务器 

创建新的Python虚拟环境:

python -m venv.venv
source.venv/bin/activate

安装MCPO服务器:

pip install mcpo

安装MCP服务器:

从这里选择服务器:https://github.com/modelcontextprotocol/servers 。尝试安装以下3个服务器:time、memory和fetch。

# 1.time mcp服务器
pip install mcp-server-time
# 2.memory mcp服务器
npm install @modelcontextprotocol/server-memory
# 3.fetch mcp服务器
pip install mcp-server-fetch

接下来,创建一个config.json文件,这样就可以通过单个MCPO服务器连接多个Minecraft服务器实例。

❯ cat config.json 
{"mcpServers": {"memory": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-memory"]},"time": {"command": "uvx","args": ["mcp-server-time", "--local-timezone=America/New_York"]},"fetch": {"command": "uvx","args": ["mcp-server-fetch"]}}
}

运行MCPO服务器:

$ uvx mcpo --config config.json --port 8001

结果日志:

❯ uvx mcpo --config config.json --port 8001
Starting MCP OpenAPI Proxy with config file: config.json
INFO:     Started server process [1190222]
INFO:     Waiting for application startup.
Knowledge Graph MCP Server running on stdio

此时完成MCPO服务器的设置。使用MCPO生成的文档链接验证MCP服务器:

MCPO 为 MCP 工具生成的 API 文档

MCPO 为 MCP 工具生成的 API 文档

MCP服务器已启动并运行,其中一个工具调用fetch也正常可用。

4.配置Open WebUI工具 

接下来,要将MCPO端点作为工具添加到Open WebUI中,点击“设置”>“工具”>“+”。然后,输入MCPO工具的URL并点击“保存”。

在 Open WebUI 中添加工具

在 Open WebUI 中添加工具

要验证工具是否已启用,可以点击输入聊天窗口中[麦克风]图标旁边的[工具]图标。

图片

5.在Open WebUI中测试工具调用 

尝试使用fetch工具,通过提问从URL检索内容:

图片

看到一个“Tool_endpoint_fetch_post”日志,这表明响应是通过工具调用功能生成的,确认Open WebUI对MCP工具的支持,在使用MCPO作为代理时是可行的。

接下来,进行另一项实验:创建一个新的MCP服务器,并将其添加到MCPO中,看看会发生什么。

6.创建新MCP服务器:关税新闻反应 

这个新MCP服务器的目的是在互联网上搜索对最近宣布的关税的最新反应。为简单起见,使用DuckDuckGo作为新闻搜索引擎。

新的关税新闻反应 MCP 服务器流程

新的关税新闻反应 MCP 服务器流程

为节省时间,使用“VS Code + Roo Code + Gemini 2.5 Pro”工具组合,通过一个需求提示快速生成MCP服务器代码和配置。

7.生成关税新闻反应MCP服务器代码 

在Roo Code的代码模式聊天窗口中输入以下需求提示:

**项目目标:**创建一个基于Python的MCP服务器,提供一个工具,用于搜索有关2025年4月宣布的美国关税的国际反应的近期新闻文章,同时支持stdio和SSE传输。**1. 业务需求:**- 服务器应允许用户(或人工智能智能体)查询关于不同国家对指定美国关税反应的新闻文章。- 重点应放在检索过去一周内发布的相关新闻上。- 服务器应进行打包,以便使用pip轻松分发和安装。**2. 技术需求:**- **MCP服务器实现:**- 使用`mcp` Python软件开发工具包(包名:`mcp`)进行实现。- 支持标准输入/输出(`stdio`)和服务器发送事件(`sse`)传输机制,可通过`--transport`命令行参数选择。- 使用`mcp.server.lowlevel.Server`提供的基于装饰器的API(`@mcp_server.list_tools`,`@mcp_server.call_tool`)。- 使用`click`进行命令行参数解析(`--transport`,`--port`)。- 使用`starlette`和`uvicorn`处理SSE传输的Web服务器组件。- **核心工具(`get_tariff_reaction_news`):**- **功能:** 使用DuckDuckGo搜索引擎(`duckduckgo-search`库)在互联网上搜索与关税反应相关的新闻文章。- **搜索查询构建:**- 基本查询:“reactions to US tariffs April 2025”- 如果提供了`country`输入:“reactions from [Country Name] to US tariffs April 2025”- 如果提供了`additional_keywords`,则追加。- **筛选:** 将搜索结果限制为过去一周内发布的新闻(在`duckduckgo-search`中使用`timelimit='w'`)。- **排名:** 默认使用DuckDuckGo的相关性/排名。- **工具模式(使用Pydantic):**- **输入(`GetTariffReactionNewsInput`):**- `country`:`Optional[str]` - 搜索重点关注的特定国家。- `additional_keywords`:`Optional[str]` - 添加到查询中的额外术语。- **内部输出模型:**- `SearchResultItem`:定义单个结果的结构(`title`、`url`、`snippet`、`source`、`published_date`)。- `SearchSuccessOutput`:成功时包含`list[SearchResultItem]`。- `SearchErrorOutput`:失败时包含`error: str`字段。- **MCP工具返回类型:** 用`@mcp_server.call_tool`装饰的函数将返回`list[mcp.types.TextContent]`。`SearchSuccessOutput`或`SearchErrorOutput`模型将被序列化为`TextContent`块的`text`字段。工具执行错误应作为标准Python异常(例如`ValueError`、`Exception`)抛出,`mcp`库会将其格式化为MCP错误响应。- **依赖项:**- `mcp[cli]>=1.6.0`:用于MCP服务器/工具实现和类型定义。- `duckduckgo-search>=2025.4.1`:用于执行网络搜索。- `pydantic>=2.11`:用于定义输入/输出模式和验证。- `anyio>=4.0`:`mcp`库通过stdio运行异步服务器所需。- `click>=8.0`:用于命令行参数解析。- `starlette>=0.27`:用于SSE传输的Web框架。- `uvicorn[standard]>=0.23`:用于运行Starlette应用程序。- `requests>=2.25`:(已包含但未直接使用)。- **开发环境:**- 使用Python虚拟环境(例如`venv`)管理依赖项。- 包含一个`requirements.txt`文件(通过`pip freeze`生成)。- **打包:**- 使用带有`setuptools`构建后端的`pyproject.toml`文件,使服务器可通过`pip`安装。- 包含一个控制台脚本入口点(`tariff-news-server`),用于运行主CLI函数(`main_cli`)。- **代码结构:**- 按逻辑组织代码(例如,在`src/tariff_news_server`包中包含`schemas.py`、`tool.py`、`server.py`)。- **执行:**- **Stdio(默认):** 通过`python -m tariff_news_server.server`或`tariff-news-server`(如果已安装)运行。在MCP设置中使用`python -m...`命令进行配置。- **SSE:** 通过`tariff-news-server --transport sse [--port <port>]`运行。在MCP设置中使用控制台脚本命令和参数进行配置,或作为指向正确URL的远程SSE服务器(例如`http://localhost:8000/mcp/sse`)。**3. 有用资源(原始链接):**- Python MCP SDK(`mcp`包):https://github.com/modelcontextprotocol/python-sdk- 示例MCP服务器:https://github.com/modelcontextprotocol/python-sdk/tree/main/examples/servers (特别是`simple-tool`提供了相关模式)。**4. 文档:**- 生成关税新闻MCP服务器的解决方案图。- 生成源代码文档。

在VS Code的Roo Code扩展聊天窗口中输入需求提示:

图片

成功完成后,将生成新的关税新闻反应MCP服务器工作代码,并生成更新后的配置,以便在Roo Code中进行测试。

8.在Roo Code中测试MCP服务器 

可以在Roo Code的MCP服务器选项卡中验证关税新闻MCP服务器是否已启用:

图片

通过提问“mexico latest reaction on tariff?”来测试工具调用是否有效:

图片

查看最终响应:

图片

基于使用关税新闻服务器检索到的近期新闻文章,墨西哥未受到2025年4月宣布的最新一轮美国关税的影响。以下是对此反应的总结:- 宽慰与庆祝:墨西哥为避开这些针对许多其他美国贸易伙伴的新关税而庆祝。- 自由贸易延续:这一豁免表明,美国和墨西哥之间现有的自由贸易关系可能在这一轮关税实施中得以存续。- 对更广泛影响的认识:尽管墨西哥直接避开了关税,但该国认识到,这些广泛的关税所造成的全球经济不确定性仍可能对其经济产生负面影响。从本质上讲,墨西哥对避免了关税的直接影响感到宽慰,但对全球贸易不稳定带来的间接后果仍持谨慎态度。

9.将新MCP服务器添加到MCPO中 

使用以下命令将新的MCP服务器安装到MCPO服务器的Python环境中:

$ git clone https://github.com/minyang-chen/AI-powered-Development.git
$ cd tariff-news-server
$ pip install -e.

通过添加关税新闻反应MCP服务器来更新MCP settings.json:

{"mcpServers": {"memory": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-memory"]},"time": {"command": "uvx","args": ["mcp-server-time", "--local-timezone=America/New_York"]},"fetch": {"command": "uvx","args": ["mcp-server-fetch"]},"tariff": {"command": "python3","args": ["-m","tariff_news_server.server"]}}
}

启动MCP服务器:

$ uvx mcpo --config./config.json --port 8001

检查MCP服务器API文档是否已启动:

图片

现在完成了MCPO服务器的更新,接下来更新Open WebUI。

10.将关税新闻MCP服务器添加到Open WebUI中 

转到“设置”/“工具”,然后点击“+”按钮:

图片

在聊天窗口中检查关税新闻反应服务器是否已启用:

图片

为测试该工具进行提问,例如可以问:“What is Canada's latest reaction to tariffs?”

图片

测试结果成功,得到了积极响应并启动了工具调用,也可以在日志文件中验证MCPO服务器的工具调用。

## MCPO服务器日志INFO:     127.0.0.1:33694 - "OPTIONS /tariff/get_tariff_reaction_news HTTP/1.1" 200 OK
Calling get_tariff_reaction_news with arguments: {'country': 'Canada'}
2025-04-03 20:06:39,935 - mcp.server.lowlevel.server - INFO - Processing request of type CallToolRequest
2025-04-03 20:06:39,935 - __main__ - INFO - Received call_tool request for tool: get_tariff_reaction_news
2025-04-03 20:06:39,935 - __main__ - INFO - Parsed tool input: country='Canada' additional_keywords=None
2025-04-03 20:06:39,935 - tariff_news_server.tool - INFO - Executing search with query: 'reactions from Canada to US tariffs'
2025-04-03 20:06:40,189 - primp - INFO - response: https://duckduckgo.com/?q=reactions+from+Canada+to+US+tariffs 200
2025-04-03 20:06:41,407 - primp - INFO - response: https://duckduckgo.com/news.js?l=wt-wt&o=json&noamp=1&q=reactions+from+Canada+to+US+tariffs&vqd=4-290943568794945560942460956578934889745&p=-2&df=w 200
2025-04-03 20:06:41,408 - tariff_news_server.tool - INFO - Found 10 results.
2025-04-03 20:06:41,408 - __main__ - INFO - Tool execution result type: <class 'tariff_news_server.schemas.SearchSuccessOutput'>
2025-04-03 20:06:41,408 - __main__ - INFO - Tool succeeded, returning 10 results.
INFO:     127.0.0.1:33694 - "POST /tariff/get_tariff_reaction_news HTTP/1.1" 200 OK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

松下SMT贴片机选型与高效应用指南

内容概要 在电子制造领域&#xff0c;SMT贴片机作为核心生产设备&#xff0c;其选型与应用直接关系到企业产能与产品质量。本文聚焦松下SMT贴片机系列&#xff0c;通过系统性梳理设备选型逻辑与技术特性&#xff0c;为制造企业提供多维度的决策参考。重点涵盖主流机型性能参数…

计算机网络(1)——概述

1.计算机网络基本概念 1.1 什么是计算机网络 计算机网络的产生背景 在计算机网络出现之前&#xff0c;计算机之间都是相互独立的&#xff0c;每台计算机只能访问自身存储的数据&#xff0c;无法与其他计算机进行数据交换和资源共享。这种独立的计算机系统存在诸多局限性&#…

React学习(二)-变量

也是很无聊&#xff0c;竟然写这玩意&#xff0c;毕竟不是学术研究&#xff0c;普通工作没那么多概念性东西&#xff0c;会用就行╮(╯▽╰)╭ 在React中&#xff0c;变量是用于存储和管理数据的基本单位。根据其用途和生命周期&#xff0c;React中的变量可以分为以下几类&…

完整卸载 Fabric Manager 的方法

目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖&#xff08;可选&#xff09; 4️⃣ 检查是否卸载成功 ✅ 补充&#xff08;仅清除服务&#xff0c;不删包&#xff09; ✅ 完整卸载 Fabric Mana…

ABP vNext 多租户开发实战指南

&#x1f680; ABP vNext 多租户开发实战指南 &#x1f6e0;️ 环境&#xff1a;.NET 8.0 ABP vNext 8.1.5 (C# 11, EF Core 8) &#x1f4da; 目录 &#x1f680; ABP vNext 多租户开发实战指南&#x1f3e0; 一、什么是多租户&#xff1f;&#x1f4e6; 二、ABP 多租户的核…

【WIN】笔记本电脑忘记密码解决办法/笔记本电脑重装系统笔记/bitlocker忘记密码的解决办法

通过安全模式下的CMD命令找回 具体的步骤就是&#xff1a; 首先通过笔记本的对应的一个进入安全模式的一个方式 进入安全模式之后&#xff0c;一直点着这个诊断&#xff0c;然后高级选项进去就可以看到了。 但是这种方法应该是属于安全漏洞&#xff0c;所以只适合老版本。如果是…

人工智能100问☞第25问:什么是循环神经网络(RNN)?

目录 一、通俗解释 二、专业解析 三、权威参考 循环神经网络(RNN)是一种通过“记忆”序列中历史信息来处理时序数据的神经网络,可捕捉前后数据的关联性,擅长处理语言、语音等序列化任务。 一、通俗解释 想象你在和朋友聊天,每说一句话都会根据之前的对话内容调整语气…

实验八 基于Python的数字图像问题处理

一、实验目的  培养利用图像处理技术解决实际问题的能力。  培养利用图像处理技术综合设计实现的能力。  掌握在Python环境下解决实际问题的能力。  熟练掌握使用cv2库对图像进行处理  熟练掌握使用区域生长法提取图片中感兴趣的区域 二、实验内容 本次实验内容为…

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…

TCVectorDB 向量数据库简介

简介 尽管目前大多数开源向量数据库来自海外&#xff0c;配置简单且性能优异&#xff0c;但由于网络原因&#xff0c;如果向量数据库部署在海外&#xff0c;而产品面向国内市场&#xff0c;网络延迟将是必须考虑的问题。因此&#xff0c;选择国内服务提供商的云向量数据库往往是…

力扣-比特位计数(统计一个数二进制下1的个数)

下面是题面 1.用c的内置函数__builtin_popcount&#xff08;&#xff09; 语法&#xff1a;__builtin_popcount&#xff08;int x&#xff09;&#xff0c;函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法&#xff0c;写法也很简单 用一个while循环…

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块

青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块 一、包1. **什么是 Crate&#xff1f;**2. **Crate 的类型**3. **Crate 的结构**4. **使用 Crate**5. **创建和管理 Crate**6. **发布 Crate**7. **Crate 的优势**8. **示例**创建一个 library crate 二、单元…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

【大数据知识】今天聊聊Clickhouse部署方案

ClickHouse部署 一、ClickHouse部署一、单节点部署1. 安装准备2. 目录规划3. 核心配置4. 启动服务 二、集群部署方案1. 集群拓扑设计2. 分布式配置3. 表引擎选择 三、安全加固1. 认证配置2. SSL加密 四、性能优化1. 核心参数调优2. 资源隔离 五、监控与维护1. Prometheus 集成2…

打卡Day28

题目1&#xff1a;定义圆&#xff08;Circle&#xff09;类 要求&#xff1a; 1.包含属性&#xff1a;半径 radius。 2.包含方法&#xff1a; ●calculate_area()&#xff1a;计算圆的面积&#xff08;公式&#xff1a;πr&#xff09;。 ●calculate_circumference()&#xff…

BERT 进阶:Albert 模型详解与实战

目录 BERT 进阶&#xff1a;Albert 模型详解与实战 一、ALBERT 的优化策略 &#xff08;一&#xff09;Embedding 参数因式分解 &#xff08;二&#xff09;跨层参数共享 &#xff08;三&#xff09;巨剑连贯性损失 二、ALBERT 模型架构 &#xff08;一&#xff09;Tran…

使用 163 邮箱实现 Spring Boot 邮箱验证码登录

使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器&#xff0c;实现 Spring Boot 项目中的邮件验证码发送功能&#xff0c;并解决常见配置报错问题。 一、为什么需要邮箱授权码&#xff1f; 出于安全考虑&#xff0c;大…

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 在现代Web应用开发中&#xff0c;安全性是一个不可忽视的重要方面。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将结合Spring Boot&#xff0c;详细介绍如何集成Spring Se…

C#将1GB大图裁剪为8张图片

C#处理超大图片&#xff08;1GB&#xff09;需要特别注意内存管理和性能优化。以下是几种高效裁剪方案&#xff1a; 方法1&#xff1a;使用System.Drawing分块处理&#xff08;内存优化版&#xff09; using System; using System.Drawing; using System.Drawing.Imaging; us…

Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD

目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd&#xff08;Initial RAM Disk&#xff09; 2、initramfs&#xff08;Initial RAM Filesystem&#xff09; 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…