Chattverktyg
Chatt kan låta modellen anropa verktyg. En tur med verktyg aktiverade kör en inbyggd flervarvsloop: modellen begär ett verktyg, Libre WebUI kör det under den anropande användarens identitet och behörigheter, resultatet skickas till modellen och loopen fortsätter tills modellen svarar. Högst åtta varv per tur och åtta anrop per varv tillåts. Stopp avbryter modellanropet, pågående verktygsanrop och väntande godkännanden.
Verktygsanrop registreras som normaliserade händelser (chat.tool-call.v1, chat.tool-result.v1, chat.approval.v1) som flödar likadant över den privata WebSocket-vägen och den beständiga händelseströmmen. En uppdatering eller återanslutning spelar därför upp samma tillstånd. Den slutförda turen lagrar anropen med begränsade resultatförhandsvisningar i assistentmeddelandet.
Aktivera verktyg
Verktyg är avstängda som standard. En administratör öppnar dem under Inställningar → Användarhantering → Åtkomst och policyer → Verktygsåtkomst för endast administratörer eller alla användare. Varje tur väljer sedan verktyg genom skiftnyckeln i redigeraren, som öppnar en huvudbrytare och en kryssruta per inbyggt verktyg och registrerad server. Väljaren kan begränsa profilens bindningar men aldrig utöka dem. Privata inkognitochattar erbjuder inga verktyg eftersom ett anrop är en utåtriktad åtgärd som kan lämna godkännanden och revisionsposter.
Brytaren Verktygsåtkomst sparar direkt. Klicka på den, eller använd Tab för att fokusera den och Space för att växla. Att ändra åtkomsten behåller inställningsfönstret och dess rullposition.
En assistentprofil (persona) kan avgränsa verktygen: bundna verktygsservrar, en delmängd av inbyggda verktyg, bundna färdigheter och kunskapssamlingar begränsar vad modellen ser.
Inbyggda verktyg
Chatt innehåller tretton förstapartsverktyg. Alla är skrivskyddade utom verktygen som ändrar anteckningar och kalendrar, vilka går genom godkännandeflödet för sidoeffekter:
web_search— den administratörskonfigurerade sökmotorn som följer åtkomstläget för webbsökning.search_documents— hybridsökning i användarens uppladdade dokument och kunskapssamlingar, inklusive delade samlingar; varje passage citeras med segment och källplats.list_documents— listar dokumenten i chattens omfång med ID, typ och storlek så modellen kan välja vad som ska läsas.read_document— läser ett begränsat fönster i ett tillgängligt dokument efter ID och offset, märkt med källplats, för filer som hämtning ensam inte kan besvara.load_skill— läser in fullständiga färdighetsinstruktioner efter slug; beskrivningen innehåller manifestet över aktiverade färdigheter så de förblir latenta tills modellen behöver dem. Medföljande filer listas sist.read_skill_file— läser en medföljande fil efter slug och relativ sökväg, så ett stort referensdokument använder ingen kontext förrän det öppnas.list_notes— listar användarens egna och delade anteckningar med ID.read_note— läser en antecknings fullständiga innehåll efter ID.create_note— skapar en anteckning och kräver godkännande av sidoeffekt.update_note— ersätter anteckningens innehåll och behåller föregående tillstånd som återställbar version; kräver godkännande.list_calendar_events— listar egna och delade kalenderhändelser inom ett intervall av epoch-millisekunder.create_calendar_event— skapar en kalenderhändelse och kräver godkännande.delete_calendar_event— tar bort en kalenderhändelse efter ID och kräver godkännande.
Verktygsservrar
Administratörer registrerar externa verktygsservrar under Inställningar → Verktyg. Startmallar förifyller formuläret, inklusive ett säkert offentligt demo-API:
- OpenAPI: en JSON OpenAPI 3.x-specifikation hämtas en gång och fästs med SHA-256-digest. Varje operation blir ett verktyg;
GETklassificeras skrivskyddat och övriga som sidoeffekt tills en administratör åsidosätter per verktyg. Körningen bygger anropet från den fästa operationen—modellargument väljer aldrig destination. - MCP (strömmande HTTP): serverns verktygslista hämtas över JSON-RPC och fästs likadant.
annotations.readOnlyHintmarkerar skrivskydd. stdio-MCP stöds avsiktligt inte; externa processer körs aldrig i webbprocessen.
En ändrad inventering gäller först när en administratör uppdaterar servern, vilket flyttar den fästa versionen och bevarar åsidosättningar per verktyg. Tillgängligheten per server kan vara endast administratörer, alla användare eller behörighetsbaserad genom den gemensamma resursmodellen.
Autentiseringsuppgifter
Servrar som kräver autentisering använder uppgifter per användare, bearer-token eller namngivet huvud. Varje hemlighet krypteras med ytterligare autentiserade data som binder den till exakt användare och server, anges under Inställningar → Verktyg och delas aldrig mellan konton.
Interaktiv OAuth (MCP)
En MCP-server kan också logga in varje person för sig själv. Registrera den med
autentiseringsläget Interaktiv OAuth, så läser Libre WebUI utmaningen
WWW-Authenticate som servern svarar med, följer den till metadatan för den
skyddade resursen, sedan till auktoriseringsserverns metadata, och registrerar
en klient dynamiskt (RFC 7591) när auktoriseringsservern erbjuder
registrering. Leverantörer som inte registrerar klienter automatiskt tar ett
administratörsangivet klient-id, och valfri hemlighet, på registreringsformuläret;
hemligheten krypteras tillsammans med de upptäckta endpointerna.
Varje person trycker sedan på Anslut på serverns kort och omdirigeras till leverantören. Flödet använder PKCE (S256) med CSRF-tillstånd och PKCE-verifieraren i en HttpOnly-cookie knuten till just den servern. Callbacken växlar in koden på servern, lagrar token krypterade med samma användar-och-server-bindning som en statisk hemlighet, och skickar webbläsaren tillbaka till appen med en statusflagga — åtkomst- och refresh-token når aldrig sidan. Åtkomsttoken förnyas automatiskt en minut före utgång, en gång per person och server även när flera verktygsanrop tävlar. När en förnyelse är omöjlig kommer verktygsanropet tillbaka och ber om ny anslutning i stället för att misslyckas anonymt. Koppla från tar bort personens token och lämnar registreringen kvar; att radera servern glömmer även den upptäckta konfigurationen.
En server som nekar en oautentiserad verktygslistning registreras ändå: dess inventering fästs vid första lyckade anslutningen (och vid varje administratörsuppdatering), så inget erbjuds en modell innan det är känt.
Policy för utgående trafik
Varje verktygsbegäran löser själv sin destination, nekar privata, loopback- och metadataadressrymder och fäster anslutningen vid löst adress så DNS-rebindning inte kan omdirigera. Omdirigeringar nekas. Svar storleksbegränsas och varje anrop har en strikt tidsgräns. Exakta interna värdnamn kan tillåtas med TOOLS_PRIVATE_NETWORK_ALLOWLIST; de förblir fästa och begränsade. Verktygsutdata återgår till modellen som obetrodd text.
Godkännanden
Skrivskyddade verktyg kör utan fråga. Ett verktyg med sidoeffekt pausar turen och frågar: tillåt en gång, för chatten, alltid på servern eller neka. Beslut är beständiga; "alltid" överlever omstarter och kan återkallas under Inställningar → Verktyg. En väntande begäran löper ut efter två minuter och ses som nekad. Nekanden och tidsgränser kör aldrig anropet. Varje beslut och anrop lämnar en maskerad säkerhetsrevisionshändelse.
Exempel
Slå först på skiftnyckeln i redigeraren; varje exempel nedan är ett vanligt chattmeddelande.
web_search — slå upp något
Vad ändrades i den senaste SQLite-utgåvan? Sök på webben innan du svarar.
Modellen anropar web_search med en fråga som {"query": "SQLite latest release changelog"}, anropskortet visar mottagna utdrag och svaret citerar fynden. Webbsökning måste vara konfigurerad och tillåten för kontot.
search_documents — fråga dina egna filer
Ladda upp en PDF eller lägg till dokument i en kunskapssamling och skriv:
Sök i mina dokument efter uppsägningsklausulen och citera den exakt.
Modellen anropar search_documents med {"query": "termination clause"} och får matchande passager märkta med källdokument, så svaret kan citera och ange källa.
load_skill — tillämpa en sparad färdighet
Skapa en färdighet under Inställningar → Färdigheter (exempelvis $release-notes, hur versionsinformation ska skrivas) och skriv:
Skriv ett utkast till versionsinformation för diffen med $release-notes.
Modellen ser färdigheten i manifestet, anropar load_skill {"slug": "release-notes"} för fullständiga instruktioner och följer dem. $ i redigeraren autokompletterar färdighetsslugs.
En OpenAPI-server — exempelvis ett väder-API
-
Inställningar → Verktyg → Registrera server: namn
Weather, typOpenAPI, bas-URLhttps://api.example-weather.dev, specifikations-URLhttps://api.example-weather.dev/openapi.json, autentiseringslägebearer. -
Specifikationen fästs och operationerna visas som verktyg, exempelvis
getForecast(GET, skrivskyddad) ochcreateAlert(POST, sidoeffekt). -
Varje användare sparar sin API-nyckel på serverkortet.
-
I chatten:
Hur blir vädret i Montreal i helgen?
Modellen anropar
weather__getForecast {"city": "Montreal"}och det körs direkt; skrivskyddade verktyg frågar aldrig.Varna mig om temperaturen sjunker under -20 i natt.
weather__createAlerthar en sidoeffekt, så turen pausas med valen Tillåt en gång, Tillåt för chatten, Tillåt alltid eller Neka. Inget skickas före valet.
Exa MCP — sök och hämta webben
Under Inställningar → Verktyg → Börja från en mall väljer du Exa för att förifylla en MCP-registrering med:
https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa
URL:en väljer web_search_exa och web_fetch_exa med Exas parameter för verktygsval. Mallen använder ingen autentisering och begränsar som standard åtkomsten till administratörer. Granska formuläret och välj Spara för att ansluta och fästa verktygslistan. Att öppna eller avbryta mallen kontaktar inte Exa. Sökfrågor och begärda URL:er skickas till Exa när verktygen körs.
En MCP-server — exempelvis en ärendespårare
-
Inställningar → Verktyg → Registrera server: namn
Issues, typMCP, bas-URLhttps://mcp.example-tracker.dev/mcp, autentiseringslägeheadermed huvudnamnetX-Api-Key. -
Verktygslistan fästs. Skrivskyddade verktyg som
search_issueskör fritt, övriga somcreate_issuefrågar först. -
I chatten:
Hitta öppna ärenden som nämner "database lock" och skapa ett nytt som sammanfattar mönstret.
issues__search_issueskör direkt;issues__create_issuevisar exakta argument i godkännandekortet så du kan läsa vad som lämnas in.
Miljövariabler
| Variabel | Effekt |
|---|---|
TOOLS_ACCESS_MODE | Fäst verktygsfunktionen till admins eller all-users och lås reglaget. |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | Exakta värdnamn som får lösas till privata adresser, kommaseparerade. |
Gränser
- Verktygsanrop körs på WebSocket-vägen (privat sessionstransport är avsiktligt utesluten) och den beständiga genereringsvägen för sparade chattar. Äldre REST-strömningsendpoint kör inte verktygsloopen.
- @model-omnämnanden i kanaler kör samma loop mot den omnämnande medlemmens katalog, med en skillnad: det finns ingen att fråga, så ett verktygsanrop med sidoeffekt utan ett stående godkännande avvisas direkt i stället för att vänta. Skrivskyddade verktyg körs som vanligt.
- Work-agenter anropar samma servrar via samma gateway: endast körningar med nätverk, servrar utan lagrade uppgifter filtreras bort redan när verktygen erbjuds, och verktyg med sidoeffekter styrs av Works godkännanden.
- Gemini- och agent-CLI-modeller får inga verktyg; Ollama-, OpenAI-kompatibla, Responses-API- och Anthropic-leverantörer får dem.
- Interaktiv OAuth gäller bara MCP: en OpenAPI-server använder fortfarande en statisk uppgift per användare. Flödet är auktoriseringskod-beviljandet med PKCE; enhetskod- och klientuppgiftsflöden erbjuds inte, och en auktoriseringsserver som inte publicerar metadata (eller ingen registreringsendpoint och inget administratörsangivet klient-id) kan inte anslutas.
- Upptäckta OAuth-endpoints måste vara https; oskyddad http accepteras bara för loopback, för en leverantör som körs på samma maskin under utveckling.
- Omdirigerings-URI:n härleds från
BASE_URL(eller den förstaCORS_ORIGIN), så det värdet måste vara adressen webbläsaren faktiskt når och måste registreras hos leverantörer som fäster omdirigerings-URI:er.