Adăugarea: Settings > Admin > Integrations, secțiunea Tools, External Tool Servers > Add Connection, tipul comutat pe MCP (Streamable HTTP), apoi URL-ul și autentificarea: None, Bearer (cu cheie), Session (tokenul de sesiune Open WebUI), OAuth (tokenul SSO al utilizatorului), OAuth 2.1 (cu înregistrare dinamică a clientului) sau OAuth 2.1 (Static) (client ID și secret existente). Cu OAuth 2.1, fiecare utilizator își autorizează contul prima dată când pornește unealta din meniul Integrations al chatului; asemenea unelte nu se pun implicit pe un model. WEBUI_SECRET_KEY fix este obligatoriu: tokenurile OAuth sunt criptate cu el.
Doar administratorii adaugă servere MCP; accesul se dă apoi pe utilizatori sau grupuri. Utilizatorii pot adăuga doar servere OpenAPI personale, dacă administratorul pornește Direct Integrations și le dă permisiunea Direct Tool Servers. Modelul vede uneltele ca <server ID>_<nume unealtă>, iar Function Name Filter List restrânge lista. Documentația spune că pentru majoritatea instalărilor OpenAPI rămâne calea preferată, iar interfața notează că suportul MCP este experimental.
Pentru serverele MCP stdio, cele mai multe din comunitate, sau pentru cele SSE există mcpo (github.com/open-webui/mcpo): pornește serverul MCP și expune fiecare unealtă ca endpoint REST, cu schemă OpenAPI și documentație la /docs. În Open WebUI se adaugă ca server de tip OpenAPI. Cu un fișier de configurare cu mai multe servere, fiecare are propria cale (de exemplu /time, /memory) și se adaugă separat. Uneltele MCP sunt folosite bine doar de modele cu apelare nativă a funcțiilor de încredere.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
Type: MCP (Streamable HTTP) |
Singurul transport MCP nativ; pentru un server MCP nu se alege OpenAPI. |
Auth: None / Bearer / Session / OAuth |
Fără token, cheie fixă, sesiunea Open WebUI sau tokenul SSO. |
Auth: OAuth 2.1 / OAuth 2.1 (Static) |
Autorizare per utilizator; Register Client este obligatoriu în ambele variante. |
Headers |
Antete JSON adăugate la fiecare cerere; acceptă {{USER_ID}}, {{USER_EMAIL}}, {{USER_GROUPS}}, {{CHAT_ID}} și altele. |
Function Name Filter List |
Restrânge uneltele expuse modelului; goală înseamnă toate. |
ENABLE_TOOL_SERVERS |
Implicit True; False oprește toate serverele externe de unelte. |
MCP_INITIALIZE_TIMEOUT |
Timpul pentru conectare și listarea uneltelor; implicit 10 secunde. |
mcpo --port --api-key |
Portul proxy-ului și cheia cerută clienților. |
mcpo --server-type |
sse sau streamable-http pentru servere MCP la distanță; fără el, comanda de după -- este pornită ca server stdio. |
Exemple practice și scenarii reale
Exemplul 1: Server MCP stdio prin mcpo
Serverul Time din depozitul modelcontextprotocol/servers, expus ca OpenAPI; schema se vede la http://localhost:8000/docs.
uvx mcpo --port 8000 --api-key "top-secret" -- uvx mcp-server-time --local-timezone=Europe/Bucharest
Settings > Admin > Integrations > External Tool Servers > Add Connection
Type: OpenAPI
URL: http://host.docker.internal:8000
Auth: Bearer, cheia top-secret
Exemplul 2: Server MCP HTTP adăugat nativ
Type: MCP (Streamable HTTP)
URL: http://mcp-intern:8000/mcp
Auth: None
Headers: {"X-User-Id": "{{USER_ID}}"}
Exemplul 3: Server MCP SSE prin mcpo
mcpo --port 8000 --api-key "top-secret" --server-type "sse" -- http://127.0.0.1:8001/sse
Greșeli frecvente și capcane
- Adaugi un server MCP cu tipul OpenAPI sau lipești JSON cu
mcpServersîntr-o conexiune OpenAPI: interfața rămâne în încărcare. Dezactivezi conexiunea și o refaci cu tipul MCP. - Alegi Bearer fără cheie: se trimite un antet
Authorization: Bearergol, pe care multe servere îl resping. Fără token, folosești None. - Scrii
localhostpentru un server de pe gazdă când Open WebUI e în Docker; adresa corectă estehost.docker.internal.