2025年5月10日土曜日

OpenWebUI で MCP を使う方法

OpenWebUI で MCP を使う方法

概要

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 件のコメント:

コメントを投稿