概要
OpenWebUI 上でも MCP サーバと連携していろいろなエージェントや拡張ツールを動かすことができるので試してみました
今回は簡単な mcp/time サーバを使って LLM 経由で現在時刻が取得できるようにしてみます
環境
- Ubuntu 24.04
- OpenWebUI 0.6.7
- LiteLLM Proxy 1.68.1
- Python 3.12.9
- mcpo 0.0.13
- mcp 1.8.0
事前準備
litellm と open-webui は前回の記事を元に起動中とします
compose.yaml、litellm_config.yaml、.env を用意して起動しておきます
mcpo のインストール
mcpo は Python 制のツールなので pip でインストールできます
mcpo 経由でローカルホストにアクセスしたりするので可能な限り mcpo で操作させたいホストで直接起動しましょう
- pipenv install mcpo
で OK です
上記では pipenv を使って venv 上にインストールしていますが問題なければグローバルにインストールしても OK です
MCPO 用の config.json の準備
この config.json は一般的な MCP サーバ用の config.json と同じになります
起動したいコマンド (MCP サーバ) を羅列していけば OK です
- vim config.json
{
"mcpServers": {
"time": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/time"]
}
}
}
ここでローカルマシン上に mcp/time コンテナを起動する定義を記載します
MCPO の起動
先程も記載しましたが可能な限りコマンドなどを実行するホスト上で直接動かしましょう
-
pipenv run mcpo --port 8000 --host 0.0.0.0 --config ./config.json --api-key "top-secret"
ここで設定した api-key は open-webui から mcpo サーバに接続するときに使います
これで docker の状態は以下のようになります
- docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
385829c1f469 mcp/time "mcp-server-time" About a minute ago Up About a minute beautiful_bassi
26cb3f21bde5 ghcr.io/open-webui/open-webui:main "bash start.sh" 22 minutes ago Up 22 minutes (healthy) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp open-webui
e38fe5175159 ghcr.io/berriai/litellm:main-latest "docker/prod_entrypo…" 22 minutes ago Up 22 minutes 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp litellm
OpenWebUI 上で MCPO サーバと接続設定をする
あとは open-webui 上から MCPO サーバに接続する設定をすれば OK です
設定からツールで MCPO を新規ツールとして接続します
ブラウザから直接アクセスするので localhost や local IP ではなくブラウザからアクセスできる IP アドレスを指定しましょう
また Bearer トークンに先ほど設定したシークレット情報を入力します
くるくるマークを押すと接続テストができるのでここでちゃんと接続できるか確認しておきましょう
動作確認
あとはチャットに戻り MCPO 経由で質問できるか確認します
まずチャット画面上でツールが有効になっているか確認します
ツールの数が 1 になっていれば OK です
また詳細を確認すると実際に MCPO で使えるコマンドが表示されます
あとは質問してみましょう
こんな感じでちゃんと MCPO 経由で回答が来ていることが確認できます
MCPO 側にも以下のようなログがあることが確認できると思います
INFO: 192.168.100.2:30848 - "POST /time/get_current_time HTTP/1.1" 200 OK
最後に
OpenWebUI で MCP と連携する方法を紹介しました
過去に紹介した Claude などは
- Claude クライアント -> MCP サーバ
で直接通信していましたが OpenWebUI の場合は
- OpenWebUI -> MCPO -> MCP サーバ
という感じで真ん中に一つ中継プロセスが入るのでそこが違います
そこまで負荷に影響はないですが挙動が少し異なるので認識しておきましょう
MCP サーバを追加したい場合は config.json に追記すれば OK です
MCP サーバも基本的にはローカルホストで起動するので追加しすぎると負荷になるので注意しましょう
0 件のコメント:
コメントを投稿