??open-webui前幾天發布了0.6版本,我立即進行了升級。新版本中一個重要功能是通過mcpo方式支持了mcp server。本文將介紹mcpo是什么,以及如何在open-webui中使用它。同時,我也會分享幾個在接入過程中遇到的問題及解決方案。
??首先來介紹mcpo,這是open-webui最新開源的項目。它能將任何MCP工具轉換為OpenAPI兼容的HTTP服務器。作為open-webui的子項目,mcpo成功打通了當前火熱的mcp生態,讓open-webui能夠使用各種現有的mcp server。接下來,讓我們看看具體使用方法。
安裝
??使用也很簡單,有兩種方式,一種是直接通過uvx啟動,另外一種是使用pip安裝mcpo的命令行工具,然后直接啟動。
??先說第一種方法,也是官方推薦的方法,直接通過下面的命令就可以將指定的mcp服務在8000端口啟動起來。這種方式的好處是不需要額外安裝其他工具,直接通過uvx就可以完成啟動。
uvx mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
接下來看看第二種啟動方式,先安裝mcpo命令行工具,然后直接用命令行工具啟動:
pip install mcpo
mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
??兩種啟動方式參數都是一樣的,需要注意的是,這里的api-key參數不是必須的,它用于后續open-webui訪問mcpo服務時的認證,這里推薦填寫,防止其他人未經授權訪問服務。當然如果是在內網環境,也可以不設置api-key。 另外一個your_mcp_server_command是指mcp具體的指令,我們拿一個mcp官方時間轉換的工具為例,其啟動配置如下:
uvx mcpo --port 8000 --api-key "top-secret" -- uvx mcp-server-time --local-timezone=Asia/Shanghai
最后提醒下大家,不管使用哪種方式,uvx都是必須要安裝的,因為大量的mcp server都是使用uvx啟動的,不安裝uvx就無法使用大部分mcp server。
配置
??當需要啟動多個mcp服務時,使用命令行拼接參數的方式比較繁瑣且容易出錯。好在mcpo支持使用配置文件來啟動多個服務。你可以將所有配置信息集中在一個json文件中(使用通用mcp json格式),這樣更清晰也更容易管理。讓我們來看看如何使用配置文件來啟動mcpo服務。
??啟動方式很簡單,只需要通過—config參數指定json文件路徑即可,這里我拿我服務上的配置為例,首先我服務器上安裝了兩個mcp server,分別是抓取網頁的fetch和時間轉換的time,具體配置如下:
{"mcpServers": {"fetch": {"command": "uvx","args": ["mcp-server-fetch"]},"time": {"command": "uvx","args": ["mcp-server-time", "--local-timezone=Asia/Shanghai"]}}
}
??這部分內容被我放在~/.mcp/config.json下,所以整體的啟動命令就是:
uvx mcpo --port 8000 --api-key "top-secret" --config .mcp/config.json
??如需添加新的 mcp server,只需修改上述 json 文件并重啟 mcpo。這個 mcp.json 是一個通用格式,可以在所有支持 mcp 的軟件中使用,但請注意區分 Windows 和非 Windows 環境的配置差異。
使用
??mcpo啟動后,可以直接訪問8000端口來測試是否啟動成功,不同的mcp服務有不同的path,這里我拿time為例, 訪問http://localhost:8000/time 如果看到如下界面,說明mcpo是正常工作的。
??在這個頁面中,可以看到這個mcp server提供了兩個方法,這里也可以對其做簡單測試。
??由于我們使用mcpo的目的是在open-webui中使用,因此只需要在open-webui的settings/tools中配置http://localhost:8000/time(請根據實際情況更換域名和端口)即可。密碼部分需要填寫啟動服務時指定的api-key。
??配置成功后我們就可以對話窗口看到這兩個工具。
??我們來測試下這兩個工具好不好用。
踩坑
遇到了幾個坑,也和大家分享下,大家提前規避。
- open-webui的bug,請求工具時沒有將api-key帶過去,所以導致401。 所以這里暫時mcpo不能設置api-key,只能通過無key的方式在open-webui中使用。不過官方也早已發現了這個bug,承諾會在0.6.1版本中修復。 https://github.com/open-webui/open-webui/issues/12379
- 工具調用是端側發起,所以要求接口請求支持cors,其實mcpo本身是支持的,但我開始沒調通,發現是因為open-webui頁面用的是https,而mcpo我隨便開了個http接口,這導致瀏覽器出于安全考慮阻止了請求。解決方案也很簡單,將mcpo服務配置成https,完美解決了這個問題。
結語
??總的來說,mcpo提供了一種簡單方便的方式來將mcp工具轉換為OpenAPI兼容的HTTP服務器,讓其融入open-webui中使用。雖然目前還存在一些小問題,但這些都不影響其在open-webui中的使用。隨著open-webui的持續更新和完善,相信這些問題很快就會得到解決,讓我們能夠更好地利用mcp生態中的各種工具。