Open WebUIにFirecrawlをセルフホストして、MCP経由でローカルLLMから使う

投稿日: 更新日:

Open WebUIでは、Webページを取得するローダーとしてFirecrawlを利用できます。

Firecrawlをセルフホストし、

  1. Open WebUIのWeb LoaderとしてFirecrawlを利用する
  2. Firecrawl MCP Serverを導入し、ローカルLLMからScrapeMapCrawlを直接使えるようにする

ところまで構築します。

環境 💻

今回使用した環境は以下です。

OS: Windows 11
Open WebUI: v0.11.0
Docker Desktop
Ollama

Open WebUIはDocker Composeで構築済みであることを前提とします。

Firecrawlをセルフホストする

まずFirecrawl本体を構築します。

公式のセルフホスト手順に従い、リポジトリをcloneして使用するバージョンへcheckoutします。

参考:https://docs.firecrawl.dev/ja/contributing/self-host

git clone https://github.com/firecrawl/firecrawl.git
cd firecrawl
git checkout v2.11.162

次に、Firecrawlのルートディレクトリに.envを作成します。

USE_DB_AUTHENTICATION=false

POSTGRES_USER=postgres
POSTGRES_PASSWORD=RANDOM_TEXT_RANDOM_TEXT_RANDOM_TEXT
POSTGRES_DB=postgres

POSTGRES_PASSWORDには適当なランダム文字列を設定してください。

作成できたらFirecrawlを起動します。

docker compose up --build -d

Firecrawlの動作確認

まずHealth Checkを確認します。

WindowsのPowerShellではcurlが別コマンドのaliasになっている場合があるため、curl.exeと書くのが確実です。

curl.exe http://localhost:3002/v0/health/readiness

以下のように返ればFirecrawl API自体は起動しています。

{"status":"ok"}

実際にWebページを取得できるかも確認しておきましょう。

curl.exe `
  --max-time 75 `
  -X POST `
  http://localhost:3002/v2/scrape `
  -H "Content-Type: application/json" `
  -d '{\"url\":\"https://example.com\",\"formats\":[\"markdown\"],\"timeout\":60000}'

成功すると、以下のようにMarkdown化されたページ内容が返ってきます。

{
  "success": true,
  "data": {
    "markdown": "...",
    "metadata": {
      "statusCode": 200
    }
  }
}

これでFirecrawl本体の構築は完了です。

Open WebUIのWeb LoaderとしてFirecrawlを使う

単にOpen WebUIのWeb LoaderとしてFirecrawlを使用するだけであれば、Open WebUIの

設定 → ウェブ検索 → ローダー

から以下のように設定します。

  • ローダー: firecrawl
  • Firecrawl APIベースURL: http://host.docker.internal:3002
  • Firecrawl APIキー: selfhosted

Open WebUIのFirecrawl設定画面

今回はFirecrawl側で、

USE_DB_AUTHENTICATION=false

としてAPI認証を無効にしています。

そのため、ここで指定しているselfhostedは実際の認証キーではなくダミー値です。

この状態でもOpen WebUIのfetch_urlからFirecrawlを経由してWebページを取得できるようになります。

FirecrawlをLLMにより活用させる

ここまででもFirecrawlは利用できます。

ただし、この構成ではFirecrawlはあくまでOpen WebUIのWebローダーとして使われています。

モデルから見ると基本的には、

fetch_url(url)

というツールしか見えません。

一方、Firecrawlには単純なURL取得以外にも、例えば以下の機能があります。

機能内容
Scrape1つのURLから本文などを取得
Mapサイト内のURLを探索
Crawlリンクを辿って複数ページを取得
SearchWeb検索とページ取得

こういった機能をLLMに使わせるにはMCP経由で使わせる必要があります。

Firecrawl MCP Serverを導入する

Open WebUIを構築しているcompose.ymlに、Firecrawl MCP Serverを追加します。

portsenvironmentvolumesは既存の設定をつかってください。重要なのはextra_hostsです。ここは同じにしてください。

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main

    ports:
      # 既存の設定
    volumes:
      - open-webui:/app/backend/data

    extra_hosts:
      - "host.docker.internal:host-gateway"

    environment:
      # 既存の設定
      # ...

    restart: unless-stopped

  firecrawl-mcp-server:
    image: node:24-bookworm-slim

    command: >
      sh -c "npx -y firecrawl-mcp"

    environment:
      HTTP_STREAMABLE_SERVER: "true"
      FIRECRAWL_API_URL: "http://host.docker.internal:3002"
      HOST: "0.0.0.0"

    extra_hosts:
      - "host.docker.internal:host-gateway"

    restart: unless-stopped

volumes:
  open-webui:
    external: true

追加したら起動します。

docker compose up -d

HOST=0.0.0.0について

私の環境では、HOSTを指定しない状態だとFirecrawl MCP Serverが、

http://localhost:3000/mcp

で待ち受けていました。

このlocalhostはFirecrawl MCP Serverコンテナ自身のlocalhostですから、別コンテナであるOpen WebUIから、

http://firecrawl-mcp-server:3000/mcp

へ接続できませんでした。

そこで、

HOST: "0.0.0.0"

を指定し、Dockerネットワーク側からもアクセスできるようにしています。

今回はOpen WebUIとFirecrawl MCP Serverのコンテナ間通信だけでよいため、

ports:
  - "13000:3000"

のようにWindows側へMCP Serverのポートを公開する必要もありません。

Open WebUIにFirecrawl MCP Serverを登録する

次にOpen WebUI側でMCP Serverを登録します。

設定 → 連携 → External Tool Servers → +

と進みます。

以下のように設定します。

名前:
Firecrawl MCP

ID:
fc

URL:
http://firecrawl-mcp-server:3000/mcp

認証:
なし

そして今回、Function Name Filter Listには以下を設定しました。

firecrawl_scrape,firecrawl_map,firecrawl_crawl,firecrawl_check_crawl_status

Firecrawl MCPの設定画面

保存したら設定完了です。

Function Name Filter Listについて

Firecrawl MCP Serverは非常に多くのツールを公開しています。

私の環境では27個のツールが公開されていました。

しかし、すべてのツールをそのままOllama側へ渡したところ、

Failed to initialize samplers: failed to parse grammar

というエラーが発生しました。

そこで、Open WebUIのFunction Name Filter Listを使い、今回使用したいツールだけをLLMへ公開しています。

使用している4つは以下です。

Tool用途
firecrawl_scrape1ページを取得
firecrawl_mapサイト内のURLを探索
firecrawl_crawl複数ページをクロール
firecrawl_check_crawl_statusCrawlジョブの進捗・結果を確認

なお、Firecrawlにはfirecrawl_searchもありますが、Open WebUIには既にsearch_webがあるため今回は公開していません。

検索はOpen WebUI、

search_web

ページ取得やサイト探索はFirecrawl、

fc_firecrawl_scrape
fc_firecrawl_map
fc_firecrawl_crawl

と役割を分けています。

チャットからFirecrawlを使う

チャットで使用する場合は、入力欄のIntegrationsからFirecrawl MCPをONにします。

チャット画面でFirecrawl MCPを有効化

MCP ServerのIDをfcとしているため、LLMからは例えば、

fc_firecrawl_scrape

のような名前でツールが見えます。

試しに以下のようなメッセージを送ります。

firecrawl_scrape を使って https://example.com を読み、
内容を1〜2文で要約してください。
fetch_url は使わないでください。

すると、実際にfc_firecrawl_scrapeが呼び出されてWebページを取得していることを確認できます。

Firecrawl MCPを実際に使用しているチャット画面

よきローカルLLMライフを。

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人