Narzędzia chatu
Włączona tura działa wielorundowo: model żąda, Libre WebUI wykonuje jako użytkownik, wynik wraca, aż do odpowiedzi — maks. 8 rund i 8 wywołań na rundę. Stop anuluje model, narzędzie i zgodę.
Zdarzenia chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1 płyną przez prywatny WebSocket i trwały stream, więc odświeżenie odtwarza stan.
Włączanie
Domyślnie wyłączone. Administrator otwiera w Settings → Zarządzanie użytkownikami → Dostęp i zasady → Dostęp do narzędzi; każda tura wybiera kluczem francuskim dokładne narzędzia i serwery. Profil może zawęzić, nie rozszerzyć. Prywatny chat nie ma narzędzi.
Przełącznik Dostęp do narzędzi zapisuje się natychmiast. Kliknij go albo ustaw fokus klawiszem Tab i przełącz klawiszem Space. Zmiana dostępu zachowuje okno Settings i pozycję przewijania.
Wbudowane
web_searchsearch_documentslist_documentsread_documentload_skillread_skill_filelist_notesread_notecreate_note(zgoda)update_note(zgoda, rewizja)list_calendar_eventscreate_calendar_event(zgoda)delete_calendar_event(zgoda)
Wyszukiwanie cytuje źródła; umiejętności są lazy; operacje zmian wymagają standardowej zgody.
Serwery
- OpenAPI: JSON 3.x pobrany raz i przypięty SHA-256.
GETodczyt, inne efekt do override. Argumenty nie wybierają celu. - MCP (Streamable HTTP): lista JSON-RPC przypięta.
annotations.readOnlyHintoznacza odczyt. stdio celowo niewspierane.
Zmiany po refresh admina; dostęp admin/wszyscy/grant.
Poświadczenia
Per użytkownik (Bearer/header), szyfrowane i związane z dokładnym użytkownikiem/serwerem.
Interaktywny OAuth (MCP)
Serwer MCP może też logować każdą osobę osobno. Zarejestruj go w trybie
Interaktywny OAuth: Libre WebUI czyta wyzwanie WWW-Authenticate
serwera, podąża do metadanych zasobu chronionego, potem do metadanych
serwera autoryzacji i rejestruje klienta dynamicznie (RFC 7591), gdy serwer
autoryzacji na to pozwala. Dostawcy bez automatycznej rejestracji przyjmują
identyfikator klienta (i opcjonalny sekret) podany przez administratora w
formularzu; sekret jest szyfrowany razem z odkrytymi punktami końcowymi.
Każda osoba naciska Połącz na karcie serwera i trafia do dostawcy. Przepływ używa PKCE (S256) ze stanem CSRF, a weryfikator PKCE trzyma ciasteczko HttpOnly ograniczone do tego serwera. Callback wymienia kod na serwerze, zapisuje tokeny zaszyfrowane z tym samym wiązaniem użytkownik–serwer co sekret statyczny i odsyła przeglądarkę z flagą stanu — tokeny dostępu i odświeżania nigdy nie trafiają na stronę. Tokeny dostępu odświeżają się automatycznie minutę przed wygaśnięciem, raz na osobę i serwer, nawet gdy kilka wywołań narzędzi ściga się jednocześnie. Gdy odświeżenie jest niemożliwe, wywołanie narzędzia wraca z prośbą o ponowne połączenie zamiast zawodzić po cichu. Rozłącz usuwa tokeny tej osoby, zostawiając rejestrację; usunięcie serwera zapomina też odkrytą konfigurację.
Serwer, który odmawia wylistowania narzędzi bez uwierzytelnienia, i tak zostaje zarejestrowany: jego lista jest przypinana przy pierwszym udanym połączeniu (i przy każdym odświeżeniu przez administratora), więc modelowi nic nie jest oferowane, zanim nie jest znane.
Wyjście
Rozwiązuje i przypina adres, odrzuca private/loopback/metadata, redirects, ogranicza rozmiar/timeout. TOOLS_PRIVATE_NETWORK_ALLOWLIST pozwala dokładne hosty. Wynik jest niezaufanym tekstem.
Zgody
Odczyt bez pytania. Efekt: raz, ten chat, zawsze dla narzędzia/serwera, odmowa. "Zawsze" trwa i można cofnąć. Wygasa po dwóch minutach jako odmowa. Wszystko audytowane.
Przykłady
web_search z {"query": "SQLite latest release changelog"}; search_documents z {"query": "termination clause"}; load_skill {"slug": "release-notes"} dla $release-notes.
OpenAPI: Weather, https://api.example-weather.dev, https://api.example-weather.dev/openapi.json, bearer, narzędzia getForecast, createAlert, wywołanie weather__getForecast {"city": "Montreal"}.
MCP: Issues, https://mcp.example-tracker.dev/mcp, header, X-Api-Key; search_issues odczyt, create_issue efekt; issues__search_issues, issues__create_issue.
web_search — wyszukiwanie
Model wyszukuje informacje w sieci.
search_documents — własne pliki
Model przeszukuje dokumenty użytkownika.
load_skill — zapisana umiejętność
Wpisanie $ otwiera umiejętności.
Serwer OpenAPI
Wywołanie weather__createAlert wymaga zgody.
Exa MCP — wyszukiwanie i pobieranie z sieci
W Settings → Narzędzia → Zacznij od szablonu wybierz Exa, aby wstępnie wypełnić rejestrację MCP wartością:
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa
Adres wybiera web_search_exa i web_fetch_exa przez parametr wyboru narzędzi Exa. Szablon nie używa uwierzytelniania i domyślnie ogranicza dostęp do administratorów. Sprawdź formularz i wybierz Zapisz, aby połączyć się i przypiąć listę narzędzi. Otwarcie lub anulowanie szablonu nie kontaktuje się z Exa. Zapytania i żądane adresy trafiają do Exa dopiero przy uruchomieniu tych narzędzi.
Serwer MCP
Serwer MCP udostępnia przypięte narzędzia.
Zmienne
| TOOLS_ACCESS_MODE | admins/all-users |
| TOOLS_PRIVATE_NETWORK_ALLOWLIST | dokładne hosty |
Granice
WebSocket i trwały path, nie legacy REST. Wzmianki @model w kanałach uruchamiają tę samą pętlę na katalogu wspominającego członka, z jedną różnicą: nikt nie może odpowiedzieć na pytanie o zgodę, więc narzędzie ze skutkiem ubocznym bez stałej zgody jest od razu odrzucane zamiast czekać; narzędzia tylko do odczytu działają normalnie. Agenci Work używają tych samych serwerów przez tę samą bramę: tylko uruchomienia z siecią, serwery bez poświadczeń odfiltrowane przy ofercie, narzędzia ze skutkami ubocznymi pod zatwierdzeniami Work. Gemini/agent CLI bez tools; Ollama/OpenAI/Responses/Anthropic z tools. Interaktywny OAuth działa tylko dla MCP — serwer OpenAPI nadal używa statycznego poświadczenia per użytkownik. Przepływ to authorization-code z PKCE; device-code i client-credentials nie są oferowane, a serwera autoryzacji bez publikowanych metadanych (albo bez punktu rejestracji i bez identyfikatora klienta od administratora) nie da się połączyć. Odkryte punkty OAuth muszą być https; zwykłe http jest akceptowane tylko dla loopback, dla dostawcy uruchomionego na tej samej maszynie podczas developmentu. Adres przekierowania pochodzi z BASE_URL (albo pierwszego CORS_ORIGIN), więc ta wartość musi być adresem, który faktycznie osiąga przeglądarka, i musi być zarejestrowana u dostawców przypinających adresy przekierowania.