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.pswp.cn/news/905921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905921.shtml
英文地址,請注明出處:http://en.pswp.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…