Skip to content

MCPServer ​

Portée : namespaced · Modes : catalog (intégré, sous licence) · external (gratuit)

Un MCPServer définit un serveur Model Context Protocol unique qu'une ou plusieurs ChatUI peuvent utiliser. Définissez-le une fois et référencez-le depuis n'importe quelle ChatUI via spec.mcpRefs — l'opérateur le câble pour vous dans LibreChat (le point de terminaison Agents).

Spec ​

ChampTypeDescription
modeenum catalog | external (requis)Serveur intégré vs point de terminaison auto-hébergé
catalogstringClé du serveur intégré (mode=catalog), p. ex. websearch
externalobjectPoint de terminaison auto-hébergé (mode=external)
displayNamestringNom du serveur affiché dans LibreChat (par défaut : clé du catalogue ou nom du CR)
serverInstructionsstringRemplace les instructions d'outil destinées au modèle

external ​

ChampDescription
urlLe point de terminaison MCP (p. ex. http://host:8080/mcp)
typeTransport : streamable-http (par défaut) ou sse
inClusterForce le traitement par liste d'autorisation SSRF. Omettez pour une détection automatique d'après l'hôte (DNS de service / IP privée)
timeoutMsDélai par requête (par défaut 60000)
headersSecretRefSecret du même namespace dont les clés deviennent des en-têtes HTTP (injectés via env, jamais écrits dans la configuration rendue)
oauthAuthentification OAuth 2.0 vers un point de terminaison MCP protégé (sous licence : mcp-oauth) — voir Authentification OAuth

external.oauth (sous licence : mcp-oauth) ​

Définissez exactement un parmi interactive ou onBehalfOf (une règle de validation l'impose). Sans la licence mcp-oauth, le MCPServer est refusé (MCPOAuthUnlicensed) et une ChatUI qui le référence reste non câblée.

ChampDescription
interactiveFlux authorization-code + PKCE par utilisateur (chaque utilisateur s'autorise une fois auprès de l'IdP)
interactive.authorizationURLPoint de terminaison d'autorisation de l'IdP. Optionnel — omettez-le (avec tokenURL) pour laisser LibreChat le découvrir automatiquement à partir des métadonnées du serveur
interactive.tokenURLPoint de terminaison de jeton de l'IdP (optionnel, voir ci-dessus)
interactive.clientSecretRefSecret du même namespace contenant l'ID client (client-id) et, pour les clients confidentiels, le secret client (client-secret). Injecté via env, référencé comme ${…} — jamais en ligne. Omettez-le pour un client public/PKCE
interactive.scopesScopes demandés à l'IdP (séparés par des espaces)
interactive.tokenExchangeMethoddefault_post (secret client dans le corps) ou basic_auth
onBehalfOfÉchange de jeton on-behalf-of silencieux de la session SSO de l'utilisateur (aucune invite)
onBehalfOf.scopesScopes en aval à demander (requis, non vide), p. ex. api://<client-id>/<permission>

Modes ​

  • catalog (sous licence : bundled-mcp-catalog) — l'opérateur déploie le serveur intégré comme une seule version partagée et comptée par référence pour tout le cluster (dans navique-mcp-system) et câble chaque ChatUI qui le référence à son Service interne au cluster. Sans licence (Community), le MCPServer est refusé (aucun déploiement) ; une ChatUI qui le référence attend simplement. Le premier serveur intégré est websearch (recherche web d'entreprise : SearXNG + scraping + PII + reclassement). L'empreinte se règle au niveau du cluster via PlatformConfig.spec.mcp (full par défaut, ou minimal).
  • external (gratuit / Community) — pointe vers un point de terminaison MCP que vous hébergez vous-même. Les cibles internes au cluster sont détectées automatiquement et reçoivent la liste d'autorisation SSRF de LibreChat (mcpSettings) afin que les adresses privées soient accessibles.

Liste d'autorisation SSRF (automatique) ​

LibreChat bloque les appels MCP vers des adresses privées/internes au cluster sauf si elles sont autorisées. L'opérateur s'en charge : dès qu'un serveur référencé est interne au cluster, il rend un bloc mcpSettings de premier niveau dont allowedDomains liste chaque origine de serveur (une liste globale — les serveurs publics doivent aussi y figurer, sinon ils seraient bloqués) et dont allowedAddresses exempte les hôtes internes au cluster. Vous n'avez rien à configurer.

Exemple — recherche web intégrée ​

yaml
apiVersion: core.navique.com/v1alpha1
kind: MCPServer
metadata:
  name: websearch
  namespace: forge
spec:
  mode: catalog
  catalog: websearch
---
apiVersion: core.navique.com/v1alpha1
kind: ChatUI
metadata:
  name: forge-ui
  namespace: forge
spec:
  # … gateway/mongo/meili/secrets …
  mcpRefs:
    - { name: websearch }

Exemple — externe (interne au cluster, avec auth) ​

yaml
apiVersion: core.navique.com/v1alpha1
kind: MCPServer
metadata:
  name: internal-docs
  namespace: forge
spec:
  mode: external
  external:
    url: http://docs-mcp.team.svc.cluster.local:8080/mcp
    headersSecretRef: { name: docs-mcp-auth }   # clés → en-têtes HTTP

Authentification OAuth (sous licence) ​

Fonctionnalité sous licence : mcp-oauth. Connectez des ChatUI à des serveurs MCP qui exigent OAuth 2.0. Deux modes — choisissez-en un par serveur :

  • Interactif (authorization-code + PKCE). Chaque utilisateur s'autorise une fois auprès de l'IdP (une invite « OAuth Required » unique dans le menu du chat) ; les jetons sont stockés chiffrés et rafraîchis automatiquement. Fonctionne avec n'importe quel fournisseur. Les identifiants client proviennent d'un Secret et ne sont jamais écrits dans la configuration rendue. Comme l'IdP redirige le navigateur vers l'interface, la ChatUI doit être exposée via spec.ingress pour que le callback se résolve.
  • On-behalf-of (OBO). LibreChat échange silencieusement le jeton de session SSO existant de l'utilisateur contre un jeton en aval — aucune invite, aucun secret client. La ChatUI doit avoir spec.sso configuré (le jeton échangé est la connexion SSO). Idéal pour les serveurs basés sur Entra/OpenID.

Exemple — OAuth interactif ​

yaml
apiVersion: core.navique.com/v1alpha1
kind: MCPServer
metadata:
  name: salesforce
  namespace: forge
spec:
  mode: external
  external:
    url: https://api.salesforce.com/platform/mcp/v1/…
    oauth:
      interactive:
        authorizationURL: https://login.salesforce.com/services/oauth2/authorize
        tokenURL: https://login.salesforce.com/services/oauth2/token
        scopes: [mcp_api, refresh_token]
        clientSecretRef: { name: salesforce-mcp-oauth }  # clés : client-id, client-secret

Exemple — on-behalf-of (Entra) ​

yaml
apiVersion: core.navique.com/v1alpha1
kind: MCPServer
metadata:
  name: graph
  namespace: forge
spec:
  mode: external
  external:
    url: https://mcp.example.com
    oauth:
      onBehalfOf:
        scopes: ["api://<client-id>/Files.Read"]
# La ChatUI qui la référence doit avoir spec.sso configuré.

Remarques ​

  • Référencer un serveur MCP active automatiquement le point de terminaison Agents de LibreChat (les outils MCP ne sont utilisables que via Agents).
  • La recherche web native et l'interpréteur de code sont désactivés par l'opérateur, et les utilisateurs (administrateurs compris) ne peuvent pas ajouter ou désactiver de serveurs MCP depuis l'interface — seule la configuration de l'opérateur les définit.

Statut ​

{ phase, url (point de terminaison résolu), transport, inCluster, serverName, conditions, observedGeneration }. Nom court mcp.

Cœur open source sous AGPL-3.0. Les composants Enterprise sont propriétaires et soumis à licence.