🤝

Open WebUIでMCPを活用する手順 ~Microsoft Learn MCP Serverの導入・活用ガイド~

に公開

はじめに

Open WebUIは、ChatGPTのような対話型AIをブラウザから利用できるOSSです。
大きな特徴のひとつが MCP(Model Context Protocol) への対応で、これを利用することでAIが外部APIや独自ツールを自然に呼び出せるようになります。

本記事では、特に Microsoft Learn MCP Server をOpen WebUIに組み込む方法を、Docker Compose を使って初心者でも迷わないように解説します。

https://github.com/open-webui/open-webui

https://learn.microsoft.com/ja-jp/training/support/mcp


1. MCPとは?

MCP(Model Context Protocol)は、AIと外部ツールをつなぐための共通プロトコルです。
例えば:

  • Microsoft Learnの公式ドキュメントを検索
  • 現在時刻を取得
  • 独自APIを呼び出す

といった処理を、AIから自然に利用できるようにします。


2. システム構成イメージ

mcpoは、Open WebUI と連携して動作する「MCP(Model Context Protocol)→ OpenAPI プロキシサーバー」です。
mcpo を使って MCP ツールを OpenAPI 化することで、Open WebUI 上からMCPを利用できるようにしています。


3. 必要な準備

  • DockerDocker Compose をインストール
  • 作業用ディレクトリを作成し、以下のファイルを配置
.
├── docker-compose.yml
└── mcpo/
    ├── config.json
    ├── Dockerfile
    ├── requirements.txt
    └── mcpo-tools/
        └── mslearn_mcp.py

4. Docker Composeによるセットアップ

4.1. docker-compose.yml

version: "3.9"

services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "8080:8080"
    volumes:
      - open-webui:/app/backend/data
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: always
    environment:
      PORT: "8080"
      # Open WebUI が接続する MCP エンドポイント(mcpo)
      OPENWEBUI_MCP_URL: "http://mcpo:8000"
    networks:
      - mcp-network
    depends_on:
      - mcpo

  mcpo:
    build: ./mcpo
    container_name: mcpo
    ports:
      - "8000:8000"
    restart: always
    networks:
      - mcp-network
    volumes:
      # 実運用では config.json はマウントして差し替えやすく
      - ./mcpo/config.json:/opt/mcpo/config.json:ro
      # (必要に応じ)ツール群もマウントで差し替え可
      - ./mcpo/mcp-tools:/opt/mcpo/mcp-tools:ro
    command: ["--config", "/opt/mcpo/config.json"]

volumes:
  open-webui:
    external: true

networks:
  mcp-network:
    driver: bridge

👉 openwebuimcpo の2つのコンテナを立てます。

  • openwebui: WebUI本体( http://localhost:8080
  • mcpo: MCPサーバーをまとめて管理(ポート8000で待機)

4.2. MCPサーバーの設定(mcpo/config.json

{
  "mcpServers": {
    "mslearn": {
      "type": "stdio",
      "command": "/opt/mcpo/.venv/bin/python",
      "args": ["/opt/mcpo/mcp-tools/mslearn_mcp.py"]
    },
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}
  • mslearn サーバーを登録し、Microsoft Learn APIに接続できるようにします。

  • ここでは、Webで公開されているfetch MCPサーバーも組み込んでいます。


5. MCP用Dockerfile

次に、mcpo/Dockerfile の中身を見てみましょう。

FROM python:3.12-slim-bookworm

# Pythonのパッケージ管理ツール uv (from official binary) をインストール
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 作業ディレクトリを /opt にし、GitHubからmcpoの最新版をクローン
WORKDIR /opt
RUN git clone --depth 1 https://github.com/open-webui/mcpo.git
WORKDIR /opt/mcpo

# 依存パッケージリストとconfig.jsonをコピー
COPY requirements.txt /opt/mcpo/
COPY config.json /opt/mcpo/

# 仮想環境作成と依存インストール
RUN uv venv /opt/mcpo/.venv
RUN uv pip install pip
RUN uv pip install . && rm -rf ~/.cache
RUN /opt/mcpo/.venv/bin/pip install -r /opt/mcpo/requirements.txt

# MCPツールを配置
COPY mcp-tools/ /opt/mcpo/mcp-tools/

# mcpoインストール確認
RUN /opt/mcpo/.venv/bin/mcpo --help

# ポート公開・起動設定
EXPOSE 8000

WORKDIR /opt/mcpo
ENV PYTHONPATH=/opt/mcpo
ENTRYPOINT ["/opt/mcpo/.venv/bin/mcpo"]
CMD ["--help"]

👉 ポイント

  • python:3.12-slim-bookworm をベースに最小限の環境を構築
  • 必要なLinuxツール(git, curl など)を追加
    • curlはデバッグ用としてインストール
  • Open WebUI公式の mcpo リポジトリをクローン
  • requirements.txtconfig.json をコピー

これで「独自のMCPサーバー」を含めた環境がDocker上に整います。

requirements.txtは、requests だけを指定。

requests

別のパッケージも使うなら、requirements.txtに追記する。


6. Microsoft Learn MCP 中継ツール

Microsoft Learn APIと通信する中継役のPythonプログラムです。

概要

  • 標準入力(stdin)で受け取ったリクエスト(JSON形式)を
  • Microsoft LearnのMCPサーバー(https://learn.microsoft.com/api/mcp) にHTTPで転送し
  • サーバーからのレスポンスを標準出力(stdout)にそのまま返す
mslearn_mcp.py
#!/usr/bin/env python3
import sys
import json
import requests

# Microsoft Learn MCP サーバーのエンドポイント
LEARN_MCP_URL = "https://learn.microsoft.com/api/mcp"

def send_to_learn_mcp(payload):
    """Microsoft Learn MCP サーバーにリクエストを転送"""
    response = requests.post(
        LEARN_MCP_URL,
        json=payload,
        headers={"Content-Type": "application/json"}
    )
    try:
        response.raise_for_status()
        # レスポンス内容をログに出力
        with open("/tmp/mslearn_mcp_proxy.log", "a", encoding="utf-8") as f:
            f.write(response.text + "\n")
        return response.json()
    except Exception as e:
        return {"error": str(e)}

def main():
    for line in sys.stdin:
        try:
            request = json.loads(line)
            response = send_to_learn_mcp(request)
            print(json.dumps(response), flush=True)
        except Exception as e:
            print(json.dumps({"error": str(e)}), flush=True)

if __name__ == "__main__":
    main()

👉 仕組み

  1. メイン処理
  • main() 関数がエントリーポイント
  • 標準入力から1行ずつJSONリクエストを受け取る
  • それを send_to_learn_mcp() でMicrosoft Learn MCPサーバーにPOST送信
  • サーバーのレスポンスをそのまま標準出力に返す
  1. サーバーへのリクエスト
  • send_to_learn_mcp() 関数で
  • 受け取ったJSONをAPIにPOST
  • レスポンス内容やリクエスト内容を /tmp/mslearn_mcp_proxy.log に記録(ログ出力)
  • レスポンスが「SSE形式(data: ...)」ならその部分だけ抽出してJSONとして返す
  • それ以外は普通のJSONとして返す
  1. エラー処理
  • もしエラーが起きたら
  • エラー内容やレスポンステキストをログに記録
  • エラー情報をJSON形式で標準出力に返す(これは必要ないかも)

イメージ図


7. 起動手順

  1. ファイルを配置

  2. ビルド & 起動

    docker compose up -d --build
    

8. Open WebUI側の設定

8.1 管理者パネルでツールに接続

  1. 「設定」ー「ツール」を開く

  2. +マークをクリック

  3. 以下を入力
    URL:http:mcpo:8000/mslearn
    openapi.json URL or Path: openapi.json
    名前: mcp.mslearn (任意)
    Visibility: 公開

  4. 保存ボタンをクリック

8.2 管理者パネルでモデルに紐づける

  1. 「設定」ー「モデル」を開く
    すでにモデルの設定は済んでいるものとする

  2. MCPサーバーを有効にしたいモデルを選ぶ
    モデルによっては、MCPに対応していないものもあるので注意
    例えば、gpt-5-miniは非対応

  3. 開いたページのツール欄で、Mcp.Mslearnにチェック

  4. 「保存して更新」をクリック

8.3 チャット画面(利用者側)

  1. チャット画面を開く

  2. +ボタンをクリック

  3. mcp.mslearnをONにする
    8.2の設定をしていれば、ONになっているはず。


9. 利用例

Open WebUIのチャット欄で

Azureの公式ドキュメントを検索して、Entra IDのユーザー管理についてまとめて

と入力すると、裏で mslearn MCPサーバーがMicrosoft Learn APIに問い合わせ、最新の公式情報を返してくれます。


10. 応用

  • mcpo/config.json に他のツールを追加可能
  • mcpo/mcpo-tools/ にPythonスクリプトを置けば、社内APIや独自サービスも統合可能

11. まとめ

  • MCPはAIに外部APIを使わせる仕組み
  • Docker Composeで構築できる
  • mslearn_mcp.py を使えばAIがMicrosoft Learn公式ドキュメントを直接参照可能
  • 独自MCPサーバーを作れば、社内APIとも連携できる

参考リンク

GitHubで編集を提案
株式会社ジード テックブログ

Discussion