Servere MCP în Open WebUI (Streamable HTTP și mcpo) în Open WebUI & RAG Local

Instrumente & Extensii Nivel: avansat

Open WebUI suportă nativ MCP din v0.6.31, doar prin transportul Streamable HTTP și doar pentru servere adăugate de administrator; serverele stdio sau SSE se conectează prin proxy-ul mcpo, care le expune ca OpenAPI.

Configurare & comandă
Settings > Admin > Integrations > Tools > External Tool Servers > Add Connection > Type: MCP (Streamable HTTP)

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: Bearer gol, pe care multe servere îl resping. Fără token, folosești None.
  • Scrii localhost pentru un server de pe gazdă când Open WebUI e în Docker; adresa corectă este host.docker.internal.

Noțiuni și module înrudite