チャットツール
Chat では、モデルによるツール呼び出しを許可できます。ツールを有効にしたターンでは、ネイティブの 複数ラウンドループが実行されます。モデルがツールを要求すると、Libre WebUI が呼び出し元ユーザーの ID と権限のもとで実行し、結果をモデルへ返します。このループはモデルが回答するまで続きますが、 1 ターンあたり最大 8 ラウンド、1 ラウンドあたり最大 8 回の呼び出しに制限されます。Stop を押すと、 モデル呼び出し、実行中のツール呼び出し、保留中の承認待ちがすべてキャンセルされます。
ツール呼び出しは正規化されたイベント(chat.tool-call.v1、chat.tool-result.v1、
chat.approval.v1)として記録され、非公開 WebSocket 経路と永続イベントストリームの両方を
同じように流れます。そのため、ページの再読み込みや再接続後も同じ状態が再現されます。
完了したターンでは、結果のプレビューを上限内に切り詰めたうえで、呼び出し内容をアシスタントメッセージに保存します。
ツールを有効にする
ツールは既定で無効です。管理者が設定 → User Management で、管理者のみ、または全ユーザーに対して有効にします。 その後、各ターンで入力欄のレンチアイコンを使って有効化します。レンチを押すと、マスタースイッチと、 組み込みツールおよび登録済みサーバーごとのチェックボックスを備えた選択画面が開き、選んだツールだけが そのターンで使用されます。選択画面ではプロファイルに紐付けられた範囲を狭められますが、広げることはできません。 プライベート(シークレット)チャットではツールを利用できません。ツール呼び出しは外部へ作用する操作であり、 承認記録や監査記録が残る可能性があるためです。
アシスタントプロファイル(Persona)では、提示するツールの範囲を設定できます。紐付けたツールサーバー、 組み込みツールの一部、紐付けたスキル、紐付けたナレッジコレクションによって、そのプロファイルを使う セッションでモデルに見える範囲が制限されます。
組み込みツール
Chat には 13 個のファーストパーティ製ツールが同梱されています(ノートとカレンダーの変更ツール以外は すべて読み取り専用です。変更ツールは副作用を伴う操作の承認フローを通ります)。
web_search— 管理者が設定した検索エンジン。Web 検索のアクセスモードに従います。search_documents— ユーザーがアップロードしたドキュメントとナレッジコレクションをハイブリッド検索します。 共有されたコレクションも対象です(プロファイルの紐付けによって対象コレクションを限定できます)。 各文章には、チャンクとソース位置が引用情報として付きます。list_documents— このチャットのスコープにあるドキュメントを ID、種類、サイズとともに一覧表示し、 モデルが読むべき内容を判断できるようにします。read_document— 利用可能な 1 件のドキュメントを ID と offset で指定し、上限付きの範囲を読み取ります。 ソース位置も示されるため、検索だけでは答えられないファイルを順に読み進められます。load_skill— slug を指定してスキルの完全な指示を読み込みます。ツールの description にはユーザーが 有効にしたスキルの manifest が含まれるため、モデルが必要とするまでスキルは遅延読み込みされます。 スキルに付属ファイルが含まれる場合、読み込まれた指示の末尾にファイル一覧が付きます。read_skill_file— スキルに同梱された付属ファイルを slug と相対パスで指定して読み取ります。 大きな参照ドキュメントがコンテキストを消費するのは、モデルが実際に開いたときだけです。list_notes— ユーザー自身および共有されたノートを ID とともに一覧表示します。read_note— 1 件のノートの全内容を ID で指定して読み取ります。create_note— ノートを作成します(副作用あり、承認が必要)。update_note— ノートの内容を置き換えます。以前の状態は復元可能なリビジョンとして保持されるため、 モデルによる編集は常に元に戻せます(副作用あり、承認が必要)。list_calendar_events— ユーザー自身および共有されたカレンダーイベントを、epoch millisecond の範囲で一覧表示します。create_calendar_event— カレンダーイベントを作成します(副作用あり、承認が必要)。delete_calendar_event— 1 件のカレンダーイベントを ID で指定して削除します(副作用あり、承認が必要)。
ツールサーバー
管理者は Settings → Tools で外部ツールサーバーを登録します(安全な公開デモ API を含む スターターテンプレートから、フォームへ事前入力できます)。
- OpenAPI:JSON 形式の OpenAPI 3.x 仕様を一度取得し、SHA-256 ダイジェストで固定します。
各 operation がツールになります。
GEToperation は読み取り専用、それ以外は副作用ありと分類されますが、 管理者はツールごとに分類を上書きできます。実行時には固定済みの operation から呼び出しを再構築するため、 モデルの引数によって送信先が選ばれることはありません。 - MCP(Streamable HTTP):サーバーのツール一覧を JSON-RPC 経由で取得し、同じ方法で固定します。
annotations.readOnlyHintはツールが読み取り専用であることを示します。stdio MCP サーバーは意図的に 対応していません。外部プロセスが Web プロセス内で実行されることはありません。
一覧の変更が反映されるのは、管理者がサーバーを更新したときだけです。この操作により固定済みの revision が進み、 ツール単位の上書き設定は維持されます。サーバーごとの利用範囲は、管理者のみ、全ユーザー、または共通の リソース付与モデルによる付与ベース(ツールサーバーに対するユーザー/グループの付与)から選べます。
認証情報
認証が必要なサーバーでは、ユーザー単位の認証情報(bearer token または名前付き header)を使用します。 各シークレットは、対象となる正確なユーザーとサーバーを additional authenticated data として紐付けて暗号化されます。 ユーザーごとに Settings → Tools で入力し、アカウント間で共有されることはありません。
外部通信ポリシー
すべてのツールリクエストは送信先を独自に名前解決し、private、loopback、metadata のアドレス空間を拒否します。
さらに、接続を解決済みアドレスへ固定するため、DNS rebinding によって呼び出し先を変えることはできません。
redirect レスポンスは拒否されます。レスポンスにはサイズ上限があり、すべての呼び出しに厳格な timeout が設定されます。
完全に一致する内部 hostname は TOOLS_PRIVATE_NETWORK_ALLOWLIST(カンマ区切り)で許可できます。
許可されたホストでも接続先の固定と上限は維持されます。ツール出力は、信頼できないテキストとしてモデルへ再入力されます。
承認
読み取り専用ツールは確認なしで実行されます。副作用を伴うツールではターンが一時停止し、ユーザーに 1 回のみ許可、このチャットで許可、このサーバーのこのツールを常に許可、拒否、のいずれかを求めます。 決定は永続化されます。「常に許可」の付与は再起動後も残り、Settings → Tools から取り消せます。 保留中のリクエストは 2 分後に期限切れとなり、モデルには拒否として伝わります。拒否またはタイムアウトした 呼び出しは実行されません。すべての決定と呼び出しは、内容をマスキングしたセキュリティ監査イベントを残します。
例
最初に入力欄のレンチ切り替えを有効にしてください。以下の例はいずれも通常のチャットメッセージです。
web_search — Web で調べる
SQLite の最新リリースでは何が変わりましたか?回答する前に Web を検索してください。
モデルは web_search を {"query": "SQLite latest release changelog"} のようなクエリで呼び出します。
呼び出しカードにはモデルが受け取った結果の抜粋が表示され、回答では見つかった内容が引用されます。
Web 検索が設定済みで、アカウントに許可されている必要があります。
search_documents — 自分のファイルについて質問する
PDF をアップロードするか、ナレッジコレクションへドキュメントを追加してから、次のように依頼します。
ドキュメントから解約条項を検索し、正確に引用してください。
モデルは search_documents を {"query": "termination clause"} で呼び出し、
ソースドキュメント名の付いた一致箇所を受け取るため、回答で引用と出典を示せます。
load_skill — 保存済みスキルを適用する
Settings → Skills でスキルを作成します(たとえば、リリースノートの書き方を定めた
$release-notes)。その後、次のように依頼します。
$release-notes を使って、この差分のリリースノートを作成してください。
モデルは manifest 内のスキルを認識し、load_skill {"slug": "release-notes"} を呼び出して
完全な指示を取得し、それに従います。入力欄で $ を入力すると、スキルの slug が自動補完されます。
OpenAPI サーバー — 天気 API の例
-
Settings → Tools → Register server:name は
Weather、kind はOpenAPI、 base URL はhttps://api.example-weather.dev、spec URL はhttps://api.example-weather.dev/openapi.json、auth mode はbearerとします。 -
spec が固定され、その operation がツールとして表示されます。たとえば
getForecast(GET、読み取り専用)とcreateAlert(POST、副作用あり)です。 -
利用する各ユーザーが、サーバーのカードに自分の API key を保存します。
-
チャットで次のように依頼します。
今週末のモントリオールの天気予報を教えてください。
モデルは
weather__getForecast {"city": "Montreal"}を呼び出し、すぐに実行されます。 読み取り専用ツールでは確認は表示されません。今夜 -20 度を下回る場合は通知してください。
weather__createAlertは副作用を伴うため、ターンが承認カードで一時停止します。 Allow once、Allow for this chat、Always allow、Deny のいずれかを選びます。 選択するまで何も送信されません。
MCP サーバー — 課題トラッカーの例
-
Settings → Tools → Register server:name は
Issues、kind はMCP、 base URL はhttps://mcp.example-tracker.dev/mcp、auth mode はheader、 header name はX-Api-Keyとします。 -
ツール一覧が固定されます。サーバーが読み取り専用と示したツール(
search_issuesなど)は 確認なしで実行され、それ以外(create_issueなど)は事前に確認を求めます。 -
チャットで次のように依頼します。
「database lock」に言及している未解決の課題を探し、傾向をまとめた新しい課題を登録してください。
issues__search_issuesはすぐに実行されます。issues__create_issueでは承認カードに 正確な引数が表示されるため、許可する前に登録される内容を確認できます。
環境変数
| 変数 | 効果 |
|---|---|
TOOLS_ACCESS_MODE | ツール機能を admins または all-users に固定し、管理者の切り替えをロックします。 |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | ツールサーバーが private address に解決できる正確な hostname(カンマ区切り)。 |
境界と制限
- ツール呼び出しは WebSocket 経路(private-session transport は設計上対象外)と、永続化チャットで使用される durable generation path で実行されます。従来の REST streaming endpoint ではツールループを実行しません。
- Work エージェントも、同じゲートウェイを介して同じ サーバーを呼び出します。ネットワークが有効な実行に限られ、認証情報のないサーバーは提示の時点で除外され、 副作用を伴うツールは Work の承認で制御されます。
- Gemini と agent CLI のモデルにはツールが渡されません。Ollama、OpenAI-compatible、Responses-API、 Anthropic の各プロバイダーには渡されます。
- MCP サーバーはユーザー単位の静的な認証情報で認証します。interactive OAuth のみに対応する MCP サーバーは、 現時点では登録できません。