ラベル open-webui の投稿を表示しています。 すべての投稿を表示
ラベル open-webui の投稿を表示しています。 すべての投稿を表示

2025年5月21日水曜日

Windows11 で mcp server puppetter を使ってみた

Windows11 で mcp server puppetter を使ってみた

概要

mcpo で mcp-server-puppetter を動かす方法を紹介します

環境

  • Windows11 24H2 (26100.4061)
  • Python 3.12.10
  • node 22.15.1
    • puppetter 24.8.2
  • LLM (gpt4o-mini with open-webui

mcpo 環境構築

mcpo を動かすために Python 環境を構築します
Powershell で操作します

  • Set-ExecutionPolicy RemoteSigned -Scope Process
  • Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
  • pyenv install 3.12.10
  • mkdir python_work
  • cd python_work
  • pyenv local 3.12.10
  • pip install pipenv
  • pipenv install mcpo

puppetter のインストール

nvm を使ってインストールします
https://github.com/coreybutler/nvm-windows/releases から Windows 用の nvm をインストールします

  • cd python_work
  • nvm install 22.15.1
  • nvm use 22.15.1
  • $Env:PUPPETEER_SKIP_DOWNLOAD = "skip"
  • $Env:NODE_TLS_REJECT_UNAUTHORIZED = "0"
  • npm install -g puppeteer
  • npm install puppeteer
  • npx puppeteer browsers install chrome

mcpo の設定

  • vim config.json
{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

mcpo 起動

  • pipenv run mcpo --port 8000 --host 127.0.0.1 --config .\config.json --api-key "top-secret"
Starting MCP OpenAPI Proxy with config file: .\config.json
2025-05-19 14:35:08,611 - INFO - Starting MCPO Server...
2025-05-19 14:35:08,611 - INFO -   Name: MCP OpenAPI Proxy
2025-05-19 14:35:08,611 - INFO -   Version: 1.0
2025-05-19 14:35:08,611 - INFO -   Description: Automatically generated API from MCP Tool Schemas
2025-05-19 14:35:08,611 - INFO -   Hostname: fjct-1267
2025-05-19 14:35:08,611 - INFO -   Port: 8000
2025-05-19 14:35:08,611 - INFO -   API Key: Provided
2025-05-19 14:35:08,611 - INFO -   CORS Allowed Origins: ['*']
2025-05-19 14:35:08,611 - INFO -   Path Prefix: /
2025-05-19 14:35:08,611 - INFO - Loading MCP server configurations from: .\config.json
2025-05-19 14:35:08,621 - INFO - Configured MCP Servers:
2025-05-19 14:35:08,621 - INFO -   Configuring Stdio MCP Server 'puppeteer' with command: npx with args: ['-y', '@modelcontextprotocol/server-puppeteer']
2025-05-19 14:35:08,621 - INFO - Uvicorn server starting...
INFO:     Started server process [2896]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

Waiting for application startup. で止まる場合は puppetter がうまくインストールできておらず裏で動作していない可能性があります

open-webui の設定

http://127.0.0.1:8000/puppetter を接続に追加しましょう

動作確認

open-webui から質問します
これがかなり大変でした
アバウトな質問だとボタンやフォームが全く検索できないので結構しっかりとした質問にしなければ意図した動きをするのは難しいかなと思います

例えば Google で検索するだけでも以下のような質問が必要でした

puppeteer mcp を使ってブラウザを立ち上げてgoogle.comにアクセスしてhawksnowlogと検索してください、launchOptions で executablePath に "C:\Program Files\Google\Chrome\Application\chrome.exe" を使用してください、google.com にアクセス出来たら検索ボックスに hawksnowlog と入力し検索ボタンを押して下さい、検索ボックスの id は #APjFqb です

同じ質問でも動かないケースがあるのでかなり不安定でした

トラブルシューティング

  • Error: Could not find Chrome

なぜか puppetter からデフォルトの chrome.exe が見えないことがあるようです
puppetter 起動時に launchOptions で executablePath というオプションがあるので LLM の質問を使ってうまくこのオプションを指定するようにしましょう

最後に

Windows11 上に mcp-server-puppetter をインストールして試してみました
質問をかなり工夫しないと思ったように動かないのでまだまだ発展途中かなと思います

LLM を変えたり別の mcp-server を使うのもありですが現状てっとり早いのは puppetter のコードをチャットで書いてもらって自分で実行するのが一番確実で速いと思います

参考サイト

2025年5月12日月曜日

OpenWebUI で Filesystem MCP Server を使ってローカルにあるファイルなどを操作する

OpenWebUI で Filesystem MCP Server を使ってローカルにあるファイルなどを操作する

概要

各種設定などは前回のものを流用しています

環境

  • Ubuntu 24.04
  • OpenWebUI 0.6.7
  • LiteLLM Proxy 1.68.1
  • Python 3.12.9
    • mcpo 0.0.13
    • mcp 1.8.0
  • secure-filesystem-server - v0.2.0

config.json

{
  "mcpServers": {   
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/home/devops"
      ]
    }
  }
}

/home/devops の部分は MCP サーバにファイルやディレクトリの操作を許可するパスをフルパスで指定します

OpenWebUI から接続の追加

これは前回までと全く同じです
URL は適宜変更してください

設定 -> ツール -> 追加

  • URL -> http://192.168.0.100:8000/filesystem
  • Auth -> Bearer top-secret

動作確認

あとは質問するだけですがいろいろと工夫が必要だったのでポイントを紹介します

  • フルパスで指定すること
    • 相対パスでは MCP サーバが起動しているパスからの相対パスで検索しようとするのでフルパスで指定したほうがいい
  • 質問に工夫が必要なケースがある
    • OK /home/devops/api 配下のファイルでファイル名に py が含まれるファイルの一覧を表示してください
    • NG /home/devops/api 配下に py で終わる拡張子のファイルの一覧を表示してください
    • 以下のようなクエリとなる質問にしなければならない
    • 拡張子などを質問に含めると pattern が「.*\\.py」というマッチしない条件になったりする
curl -X POST \
     -H "Authorization: Bearer top-secret" \
     -H "Content-Type: application/json" \
     -d '{"path": "/home/devops/api", "pattern": "py", "excludePatterns": []}' \
     http://localhost:8000/filesystem/search_files
  • Filesystem MCP サーバが実装している機能を確認したほうがいいかも (参考サイトのURL参照)
  • 便利な使い方はいろいろあるがローカルにあるプログラムへのパスを指定して「このファイルが何をしているか説明して」というのは便利
    • 今までは自分でコピペしてコンソールなどに食わせていたのがそれをしなくて済む
    • ただそのあと直接ファイルを編集してなどはできなかった (質問の仕方なのかそういった機能がないのかは不明)

最後に

Filesystem MCP サーバを OpenWebUI に導入してみました
自然言語でローカルのファイルを操作できるようになるのは便利かなと思います
ただシェルが扱えればわざわざ MCP サーバを導入するレベルでもないかなとは思いました

参考サイト

2025年5月11日日曜日

OpenWebUI で mcp-server-mysql を使って自然言語で MySQL を操作してみる

OpenWebUI で mcp-server-mysql を使って自然言語で MySQL を操作してみる

概要

前回 open-webui から mcp サーバに接続する方法法を紹介しました
今回は localhost にある mysql サーバに接続しいろいろな操作を試してみます
なお INSERT,UPDATE,DELETE も行える設定なのでテスト用のテーブルなどに対して行いましょう

環境

  • Ubuntu 24.04
  • OpenWebUI 0.6.7
  • LiteLLM Proxy 1.68.1
  • Python 3.12.9
    • mcpo 0.0.13
    • mcp 1.8.0
  • @benborla29/mcp-server-mysql - v0.1.18

nodejs 環境準備

mcp-server-mysql は nodejs で動作するので nodejs が動作する環境を準備します
何でも OK ですが今回は nvm を使う方法を紹介します

  • nvm use --save 20.19.0

ここで保存された .nvmrc があるパスで MCPO を動かします

config.json

mcpServers に追記します
今回は INSERT,UPDATE,DELETE も試したいので ALLOW_INSERT_OPERATION などは true に設定しています

{
  "mcpServers": {
    "time": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "mcp/time"]
    },
    "mcp_server_mysql": {
      "command": "npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "test",
        "MYSQL_PASS": "xxx",
        "MYSQL_DB": "devops",
        "ALLOW_INSERT_OPERATION": "true",
        "ALLOW_UPDATE_OPERATION": "true",
        "ALLOW_DELETE_OPERATION": "true"
      }
    }
  }
}

localhost で mysql -u test-p devops -h 127.0.0.1 でアクセスできれば上記でもアクセスできます

MCPO 起動

先ほど作成した .nvmrc と config.json があるパスで実行します

  • pipenv run mcpo --port 8000 --host 0.0.0.0 --config ./config.json --api-key "top-secret"

MCP サーバの接続

open-webui から行います
uri の部分は config.json に定義した MCP サーバのキー情報を入力します
Bearer は api_key で指定した情報をしていします   接続テストもしておきましょう

動作確認

チャット上のツールが増えていることを確認します
あとはテーブル情報などを含めて質問することでいろいろな操作をしてくれます

MCPO のログを見ると実際に投げている SQL の情報なども確認できます

最後に

open-webui + mcp-server-mysql を試してみました
自然言語でデータベースを操作できる時代が本格的に到来したなと実感しました
以下は試してみた感想です
本番ではまだ使わないほうが安全かなと思います

命令を詳細にすれば実用レベルになる気はします

  • 雑なSQLを投げたりするので本番では更新削除追加系はやらないほうがよさそう
    • WHERE 句 id などのユニークキーを使わずに更新や削除を行ったりする
    • 命令をしっかりすれば id を使ってやってはくれそうだが雑な質問だとやらない
  • コンテキストがおかしくなる場合があるのでSQLを投げたい場合は新規のチャットを作成したほうがいい
  • 外部キー制約などがある場合はそれも伝えるとやってくれる
    • 「先にAテーブルの外部キーを削除してからBテーブルのレコードも削除して」など
  • データをINSERTするときは各カラムの情報を正確に伝えないとやってくれない
    • テーブルの各カラムに制約がある場合などはちゃんと伝えなければダメそう
    • 適当な値でお願いしますと命令もできるがその場合はテーブルのスキーマ情報から適当な数値や文字列を入れようとはする

参考サイト

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 サーバも基本的にはローカルホストで起動するので追加しすぎると負荷になるので注意しましょう

参考サイト

2025年5月9日金曜日

OpenWebUI で admin ユーザでログインする方法

OpenWebUI で admin ユーザでログインする方法

概要

WEBUI_AUTH=True にした際にデフォルトの admin ユーザでログインする方法を紹介します

環境

  • Ubuntu 24.04
  • docker 27.3.1
  • open-webui 0.6.7

一度 WEBUI_AUTH=False で立ち上げる

すると自動で admin ユーザが作成されます

admin ユーザにパスワードを設定する

WEBUI_AUTH=False 状態で起動したあとで管理者パネルからユーザの一覧を表示します

そして admin ユーザのパスワードを設定します

WEBUI_AUTH=True で再起動する

そしてメールアドレスに admin@localhost パスワードは先程設定した admin ユーザ用のパスワードでログインすることができます

最後に

OAUTH のサインアップ画面などを用意することもできるようなのですがメールサーバなどが必要になりそうだったのでてっとり早く admin ユーザを作成する方法を紹介しました

2025年5月8日木曜日

OpenWebUI で Gemini を使う方法

OpenWebUI で Gemini を使う方法

概要

Gemini を LiteLLM Proxy でコールし OpenWebUI は LiteLLM Proxy に対してコールします
Gemini のエンドポイントはカスタムエンドポイントとします
過去に Azure OpenAI でやったバージョンの Gemini 版になります

環境

  • Ubuntu 24.04
  • OpenWebUI 0.6.7
  • LiteLLM Proxy 1.68.0

ポイント

OpenWebUI が起動できたらモデルの設定を開き高度な設定から「Stream Chat Response」をオフにしましょう

compose.yaml

services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - WEBUI_AUTH=False
      # - OPENAI_API_KEY=${MASTER_KEY}
      - OPENAI_API_BASE_URL=http://host.docker.internal:4000/v1
    restart: always

  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm
    ports:
        - "4000:4000"
    volumes:
        - ./litellm_config.yaml:/app/config.yaml
    environment:
      - GEMINI_API_BASE=${GEMINI_API_BASE}
      - GEMINI_API_KEY=${GEMINI_API_KEY}
    command: --config /app/config.yaml --port 4000 --detailed_debug
    restart: always

volumes:
  open-webui:

litellm_config.yaml

model_list:
  - model_name: gemini/gemini-2.0-flash
    litellm_params:
      model: gemini/gemini-2.0-flash
      api_base: os.environ/GEMINI_API_BASE # runs os.getenv("GEMINI_API_BASE")
      api_key: os.environ/GEMINI_API_KEY # runs os.getenv("GEMINI_API_KEY")
      api_version: ""

.env

GEMINI_API_KEY=xxx
GEMINI_API_BASE=https://your-api-endpoint/ai/chat-ai/flash

動作確認

  • docker compose up -d

で 3000 ポートにアクセスしコンソールから質問できることを確認しましょう

最後に

どうやら OpenWebUI からだとストリーム API のレスポンス形式は想定しておらず generateContent のレスポンスを使っているっぽいのでオフにしてあげる必要がありました

Gemini のカスタムエンドポイントを使う場合には設定してみるといいかなと思います

OpenWebUI で Gemini を使う場合には Pipeline を使うのが王道ですが LiteLLM Proxy でも動作するようです

参考サイト

2025年4月30日水曜日

OpenWebUI に Pipeline を追加する方法

OpenWebUI に Pipeline を追加する方法

概要

Pipeline は簡単に言えば Web アプリで Web アプリ経由で好きな Python スクリプトを実行できるという機能です
今回は Pipeline の初期設定とスクリプトの追加まで紹介します

環境

  • docker 27.3.1
  • Ubuntu 24.04
  • open-webui 0.6.5

open-webui 起動

  • vim compose.yaml
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - WEBUI_AUTH=False
    volumes:
      - open-webui:/app/backend/data
      - ./pipelines:/app/backend/storage/pipelines
    restart: unless-stopped

volumes:
  open-webui:

Pipeline 起動

  • docker run -d -p 9099:9099 -v pipelines:/app/pipelines --name pipelines --restart always ghcr.io/open-webui/pipelines:main

open-webui の画面から pipeline の追加

管理者パネル -> 設定 -> 接続 -> OpenAI API

で起動した Pipeline を追加します
UI から見えるエンドポイントでなければいけないので docker で動かしている場合はホスト側の IP などを指定しましょう

Pipeline のエンドポイントにはデフォルトで認証がありパスワードは 0p3n-w3bu! です

open-webui の画面から pipeline の設定

管理者パネル -> 設定 -> パイプライン

を表示し先ほど追加してエンドポイントがあることを確認します

open-webui の画面から pipeline のスクリプト追加

あとは Github やローカルから Python スクリプトを追加するだけです
例えば Gemini であれば https://github.com/open-webui/pipelines/blob/main/examples/pipelines/providers/google_manifold_pipeline.py を追加します

追加できるスクリプトにはルールがあるので詳細は上記のスクリプトなどを参照してください
入力などは Pydantic 形式で記載したりしなければいけないなどのルールがあります

最後に

open-webui に Pipeline を追加する方法を紹介しました
ここで追加した Pipeline を使ってチャット経由で質問したりすることができます

参考サイト