Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Structure de l'objet des serveurs MCP

Exemple

# Example MCP Servers Object Structure
mcpServers:
  everything:
    # type: sse # type can optionally be omitted
    url: http://localhost:3001/sse
  googlesheets:
    type: sse
    url: https://mcp.composio.dev/googlesheets/some-endpoint
    requiresOAuth: true
    headers:
      X-User-ID: '{{LIBRECHAT_USER_ID}}'
      X-API-Key: '${SOME_API_KEY}'
    serverInstructions: true # Use server-provided instructions
  puppeteer:
    type: stdio
    command: npx
    args:
      - -y
      - '@modelcontextprotocol/server-puppeteer'
    serverInstructions: 'Do not access any local files or local/internal IP addresses'
  filesystem:
    # type: stdio
    command: npx
    args:
      - -y
      - '@modelcontextprotocol/server-filesystem'
      - /home/user/LibreChat/
    iconPath: /home/user/LibreChat/client/public/assets/logo.svg
    # The “wrench” icon shows up if no icon is provided as it is the default rendering.
  mcp-obsidian:
    command: npx
    args:
      - -y
      - 'mcp-obsidian'
      - /path/to/obsidian/vault
  streamable-http-server:
    type: streamable-http
    url: https://example.com/api/
    proxy: '${MCP_PROXY_URL}'
  per-user-credentials-example:
    type: streamable-http
    url: 'https://example.com/api/'
    headers:
      X-Auth-Token: '{{MY_SERVICE_API_KEY}}'
    customUserVars:
      MY_SERVICE_API_KEY:
        title: 'My Service API Key'
        description: "Enter your personal API key for the service. You can generate one at <a href='https://myservice.example.com/developer/keys' target='_blank'>Service Developer Portal</a>."
        sensitive: true
      MY_SERVICE_PROJECT:
        title: 'Project ID'
        description: 'Enter the project ID used by this service.'
        sensitive: false
  oauth-example:
    type: streamable-http
    url: https://api.example.com/mcp/
    oauth:
      authorization_url: https://example.com/oauth/authorize
      token_url: https://example.com/oauth/token
      client_id: your_client_id
      client_secret: your_client_secret
      redirect_uri: http://localhost:3080/api/mcp/oauth-example/oauth/callback
      scope: 'read execute'
  obo-example:
    type: streamable-http
    url: https://api.example.com/mcp/
    obo:
      scopes: 'api://mcp-server-id/Mcp.Tools.ReadWrite'

<serverName>

Clé :

KeyTypeDescriptionExample
<serverName>ObjectChaque clé sous `mcpServers` représente une configuration de serveur MCP individuelle, identifiée par un nom unique. Ce nom est utilisé pour référencer la configuration du serveur au sein de l'application.

Sous-clés

KeyTypeDescriptionExample
titleString(Optionnel) Nom d'affichage personnalisé pour le serveur MCP dans l'interface utilisateur. S'il n'est pas spécifié, le nom de la clé du serveur est utilisé.title: "My Custom Server"
descriptionString(Facultatif) Description du serveur MCP, affichée dans l'interface utilisateur pour aider les utilisateurs à comprendre son objectif.description: "Provides file system access"
typeStringSpécifie le type de connexion au serveur MCP. Les options valides sont `"stdio"`, `"websocket"`, `"streamable-http"` ou `"sse"`. S'il est omis, il est défini par défaut en fonction de la présence et du format de `url` ou `command`.type: "stdio"
commandString(Pour le type `stdio`) La commande ou l'exécutable à exécuter pour démarrer le serveur MCP.command: "npx"
argsArray of Strings(Pour le type `stdio`) Arguments de ligne de commande Ă  transmettre Ă  la `command`.args: ["-y", "@modelcontextprotocol/server-puppeteer"]
urlString(Pour les types `websocket`, `streamable-http` ou `sse`) L'URL pour se connecter au serveur MCP.url: "http://localhost:3001/sse"
proxyString(Optionnel, pour les types `sse` et `streamable-http`) URL du proxy sortant pour ce serveur MCP distant. Prend en charge les URL `http://`, `https://`, `socks://` et `socks5://`.proxy: "${MCP_PROXY_URL}"
headersObject(Optionnel, pour les types `sse` et `streamable-http`) En-tĂȘtes personnalisĂ©s Ă  envoyer avec la requĂȘte. Prend en charge la substitution dynamique des champs utilisateur avec les espaces rĂ©servĂ©s `{{LIBRECHAT_USER_*}}` et les variables d'environnement avec `${ENV_VAR}`.headers: X-User-ID: "{{LIBRECHAT_USER_ID}}" X-API-Key: "${SOME_API_KEY}"
apiKeyObject(Optionnel, pour les types `sse` et `streamable-http`) Configuration de l'authentification par clé API pour le serveur MCP.See apiKey section below
iconPathString(Optionnel) Définit l'icÎne d'affichage de l'outil présentée dans la boßte de dialogue de sélection d'outils.iconPath: "/path/to/icon.svg"
chatMenuBoolean(Optionnel) Lorsqu'il est défini sur `false`, exclut le serveur MCP du menu déroulant de la zone de chat (MCPSelect) pour un accÚs rapide et facile. La valeur par défaut est `true`.chatMenu: false
serverInstructionsBoolean or String(Facultatif) ContrÎle la maniÚre dont les instructions du serveur MCP sont injectées dans le contexte de l'agent. Les instructions du serveur fournissent des conseils d'utilisation de haut niveau pour l'ensemble du serveur MCP, complétant les descriptions des outils individuels.serverInstructions: true # or serverInstructions: "Custom instructions"
timeoutInteger(Optionnel) DĂ©lai d'expiration en millisecondes pour les requĂȘtes du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif.timeout: 30000
initTimeoutInteger(Facultatif) DĂ©lai d'expiration en millisecondes pour l'initialisation du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif.initTimeout: 10000
envObject(Optionnel, type `stdio` uniquement) Variables d'environnement Ă  utiliser lors du lancement du processus.env: NODE_ENV: "production"
requiresOAuthBoolean(Optionnel, transports distants : `sse`, `streamable-http`, `websocket`) Indique si ce serveur nĂ©cessite une authentification OAuth. Si non spĂ©cifiĂ©, sera dĂ©tectĂ© automatiquement au dĂ©marrage du serveur. Bien qu'optionnel, il est prĂ©fĂ©rable de dĂ©finir explicitement cette valeur si vous savez si le serveur nĂ©cessite OAuth ou non. DĂ©finir `requiresOAuth: false` est utile pour les serveurs protĂ©gĂ©s par un en-tĂȘte `Authorization` statique, afin d'ignorer la dĂ©tection automatique qui les classerait autrement Ă  tort comme protĂ©gĂ©s par OAuth.requiresOAuth: false
stderrString or Integer(Optionnel, type `stdio` uniquement) Comment gérer `stderr` du processus enfant. Options : `"pipe"`, `"ignore"`, `"inherit"`, ou un entier non négatif (descripteur de fichier). La valeur par défaut est `"inherit"`.stderr: "inherit"
customUserVarsObject(Facultatif) DĂ©finit des variables personnalisĂ©es que les utilisateurs peuvent configurer pour ce serveur MCP, permettant des identifiants ou des configurations par utilisateur (par exemple, des clĂ©s API). Ces variables peuvent ensuite ĂȘtre rĂ©fĂ©rencĂ©es dans les champs `headers` ou `env`.customUserVars: API_KEY: title: "API Key" description: "Your personal API key."
oauthObject(Facultatif) Configuration OAuth2 pour l'authentification avec le serveur MCP. Lorsqu'elle est configurée, les utilisateurs seront invités à s'authentifier via un flux OAuth.oauth: authorization_url: "https://example.com/oauth/authorize" token_url: "https://example.com/oauth/token"
oauth_headersObject(Facultatif) Mappage des noms et valeurs d'en-tĂȘte utilisĂ©s uniquement pour les requĂȘtes de flux OAuth, telles que l'enregistrement dynamique de client ou l'Ă©change de jetons.oauth_headers: Authorization: "Bearer ${DCR_API_KEY}" X-Custom-Header: "custom_value"
oboObject(Optionnel, pour les types `sse` et `streamable-http`) Configuration de l'Ă©change de jeton On-Behalf-Of. Échange le jeton d'accĂšs OpenID de l'utilisateur actuel contre un jeton dĂ©lĂ©guĂ© en aval et le transmet en tant que jeton Bearer.obo: scopes: "api://mcp-server-id/Mcp.Tools.ReadWrite"
startupBoolean(Optionnel) Lorsqu'il est défini sur false, ce serveur MCP ne sera pas connecté au démarrage de l'application.startup: false

title

  • Type : ChaĂźne (Optionnel)
  • Description : Nom d'affichage personnalisĂ© pour le serveur MCP dans l'interface utilisateur. S'il n'est pas spĂ©cifiĂ©, le nom de la clĂ© du serveur est utilisĂ©.
  • Exemple :
    my-server:
      title: 'File System Access'
      command: npx
      args: ['-y', '@modelcontextprotocol/server-filesystem']

description

  • Type : ChaĂźne (Optionnel)
  • Description : Description du serveur MCP, affichĂ©e dans l'interface utilisateur pour aider les utilisateurs Ă  comprendre son objectif et ses fonctionnalitĂ©s.
  • Exemple :
    my-server:
      title: 'File System Access'
      description: 'Provides read/write access to local files and directories'
      command: npx
      args: ['-y', '@modelcontextprotocol/server-filesystem']

type

  • Type : String
  • Description : SpĂ©cifie le type de connexion au serveur MCP. Les options valides sont "stdio", "websocket", "streamable-http" ou "sse".
  • Valeur par dĂ©faut : DĂ©terminĂ©e en fonction de la prĂ©sence et du format de url ou command.

command

  • Type : String
  • Description : (Pour le type stdio) La commande ou l'exĂ©cutable Ă  exĂ©cuter pour dĂ©marrer le serveur MCP.

args

  • Type : Tableau de chaĂźnes (Array of Strings)
  • Description : (Pour le type stdio) Arguments de ligne de commande Ă  transmettre Ă  la command.

url

  • Type : String
  • Description : (Pour les types websocket, streamable-http ou sse) L'URL pour se connecter au serveur MCP. Prend en charge les espaces rĂ©servĂ©s dynamiques pour les champs utilisateur ({{LIBRECHAT_USER_*}}) et la substitution de variables d'environnement (${ENV_VAR}).
  • Notes :
    • Pour le type sse, l'URL doit commencer par http:// ou https://.
    • Pour le type streamable-http, l'URL doit commencer par http:// ou https://.
    • Pour le type websocket, l'URL doit commencer par ws:// ou wss://.

proxy

  • Type : ChaĂźne (Optionnel, pour les types sse et streamable-http)
  • Description : URL du proxy sortant pour ce serveur MCP distant. La valeur peut faire rĂ©fĂ©rence Ă  des variables d'environnement avec ${ENV_VAR}.
  • Protocoles pris en charge : http://, https://, socks:// et socks5://
  • Note de sĂ©curitĂ© : proxy est contrĂŽlĂ© par l'administrateur. Il rĂ©sout les variables d'environnement, mais ne rĂ©sout pas les espaces rĂ©servĂ©s contrĂŽlĂ©s par l'utilisateur tels que {{LIBRECHAT_USER_ID}} ou customUserVars.
  • Exemple :
    mcpServers:
      remote-api:
        type: streamable-http
        url: https://api.example.com/mcp
        proxy: '${MCP_PROXY_URL}'

headers

  • Type : Objet (Optionnel, pour les types sse et streamable-http)
  • Description : En-tĂȘtes personnalisĂ©s Ă  envoyer avec la requĂȘte. Prend en charge divers types d'espaces rĂ©servĂ©s pour la substitution dynamique de valeurs.
  • Prise en charge des espaces rĂ©servĂ©s :
    • {{LIBRECHAT_USER_ID}} : Sera remplacĂ© par l'ID de l'utilisateur actuel, permettant la prise en charge multi-utilisateurs.
    • {{LIBRECHAT_USER_*}} : Espaces rĂ©servĂ©s dynamiques pour les champs utilisateur. Remplacez * par la version en MAJUSCULES de n'importe quel champ autorisĂ©.
    • {{LIBRECHAT_OPENID_*}} : espaces rĂ©servĂ©s pour les jetons/sessions OpenID pour les serveurs dĂ©finis dans le YAML.
    • {{LIBRECHAT_GRAPH_*}} : espaces rĂ©servĂ©s de jeton Microsoft Graph pour les serveurs dĂ©finis dans le fichier YAML.
    • {{LIBRECHAT_BODY_*}} : Espaces rĂ©servĂ©s du corps de la requĂȘte pour les serveurs dĂ©finis en YAML, tels que les conversationId, parentMessageId ou messageId actuels.
    • {{CUSTOM_VARIABLE_NAME}} : RemplacĂ© par la valeur fournie par l'utilisateur pour une variable dĂ©finie dans customUserVars (par exemple, {{MY_API_KEY}}).
    • ${ENV_VAR} : Sera remplacĂ© par la valeur de la variable d'environnement {{ENV_VAR}}.

Espaces réservés disponibles pour les champs utilisateur :

Espace réservéChamp utilisateurTypeDescription
{{LIBRECHAT_USER_NAME}}nameStringNom d'affichage de l'utilisateur
{{LIBRECHAT_USER_USERNAME}}usernameStringNom d'utilisateur
{{LIBRECHAT_USER_EMAIL}}emailStringAdresse e-mail de l'utilisateur
{{LIBRECHAT_USER_PROVIDER}}providerStringFournisseur d'authentification (ex: "email", "google", "github")
{{LIBRECHAT_USER_ROLE}}roleStringRĂŽle de l'utilisateur (ex: "user", "admin")
{{LIBRECHAT_USER_GOOGLEID}}googleIdStringID de compte Google
{{LIBRECHAT_USER_FACEBOOKID}}facebookIdStringID de compte Facebook
{{LIBRECHAT_USER_OPENIDID}}openidIdStringID de compte OpenID
{{LIBRECHAT_USER_SAMLID}}samlIdStringID de compte SAML
{{LIBRECHAT_USER_LDAPID}}ldapIdStringID de compte LDAP
{{LIBRECHAT_USER_GITHUBID}}githubIdStringID de compte GitHub
{{LIBRECHAT_USER_DISCORDID}}discordIdStringID de compte Discord
{{LIBRECHAT_USER_APPLEID}}appleIdStringID de compte Apple
{{LIBRECHAT_USER_EMAILVERIFIED}}emailVerifiedBoolean → StringStatut de vĂ©rification de l'e-mail ("true" ou "false")
{{LIBRECHAT_USER_TWOFACTORENABLED}}twoFactorEnabledBoolean → StringStatut de la double authentification (2FA) ("true" ou "false")
{{LIBRECHAT_USER_TERMSACCEPTED}}termsAcceptedBoolean → StringStatut d'acceptation des conditions d'utilisation ("true" ou "false")

Remarque : Les champs manquants seront remplacés par des chaßnes vides.

Les espaces rĂ©servĂ©s {{LIBRECHAT_BODY_*}} sont limitĂ©s Ă  la portĂ©e de la requĂȘte. LibreChat crĂ©e la connexion MCP pour l'exĂ©cution active, la rĂ©utilise lors des appels d'outils au cours de cette exĂ©cution, et la nettoie lorsque la requĂȘte se termine. Les serveurs limitĂ©s Ă  la portĂ©e de la requĂȘte sont exclus du cache d'outils persistant afin que les en-tĂȘtes et les URLs spĂ©cifiques Ă  la requĂȘte ne soient pas rĂ©utilisĂ©s en dehors de l'exĂ©cution active. Les espaces rĂ©servĂ©s {{LIBRECHAT_USER_*}}, {{LIBRECHAT_OPENID_*}} et {{LIBRECHAT_GRAPH_*}} rendent toujours le serveur limitĂ© Ă  la portĂ©e de l'utilisateur, mais les transports HTTP actualisent les en-tĂȘtes rĂ©solus avant chaque appel d'outil sans forcer eux-mĂȘmes une reconnexion.

  • Exemple :
    headers:
      X-User-ID: '{{LIBRECHAT_USER_ID}}'
      X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'
      X-User-Role: '{{LIBRECHAT_USER_ROLE}}'
      X-API-Key: '${SOME_API_KEY}'
      Authorization: 'Bearer ${SOME_AUTH_TOKEN}'

apiKey

  • Type : Objet (Optionnel, pour les types sse et streamable-http)

  • Description : Configuration de l'authentification par clĂ© API pour le serveur MCP. Fournit un moyen structurĂ© de configurer l'authentification basĂ©e sur une clĂ© API.

  • Sous-clĂ©s :

    • source : String - D'oĂč provient la clĂ© API. Options :
      • "admin" : la clĂ© API est configurĂ©e par l'administrateur (dans les variables d'environnement ou la configuration)
      • "user" : la clĂ© API est fournie par l'utilisateur via l'interface utilisateur
    • authorization_type : ChaĂźne de caractĂšres - Comment la clĂ© API est envoyĂ©e dans les requĂȘtes. Options :
      • "bearer" : EnvoyĂ© sous la forme Authorization: Bearer <key>
      • "basic" : EnvoyĂ© sous la forme Authorization: Basic <key>
      • "custom" : EnvoyĂ© dans un en-tĂȘte personnalisĂ© (nĂ©cessite custom_header)
    • custom_header: String - (Requis lorsque authorization_type est "custom") Le nom de l'en-tĂȘte Ă  utiliser pour la clĂ© API
  • Exemple :

    # Admin-provided API key with Bearer auth
    my-server:
      type: streamable-http
      url: https://api.example.com/mcp
      apiKey:
        source: 'admin'
        authorization_type: 'bearer'
    
    # User-provided API key with custom header
    another-server:
      type: sse
      url: https://api.example.com/sse
      apiKey:
        source: 'user'
        authorization_type: 'custom'
        custom_header: 'X-API-Key'

iconPath

  • Type : ChaĂźne (Optionnel)
  • Description : DĂ©finit l'icĂŽne d'affichage de l'outil prĂ©sentĂ©e dans la boĂźte de dialogue de sĂ©lection d'outils.

chatMenu

  • Type : BoolĂ©en (Optionnel)
  • Description : Lorsqu'il est dĂ©fini sur false, exclut le serveur MCP du menu dĂ©roulant de la zone de chat (MCPSelect) pour un accĂšs rapide et facile.
  • Valeur par dĂ©faut : true (Le serveur MCP sera inclus dans le menu dĂ©roulant de la zone de chat)

serverInstructions

  • Type : BoolĂ©en ou ChaĂźne de caractĂšres (Optionnel)

  • Description : ContrĂŽle la maniĂšre dont les instructions du serveur MCP sont injectĂ©es dans le contexte de l'agent. Les instructions du serveur fournissent des conseils d'utilisation de haut niveau pour l'ensemble du serveur MCP, complĂ©tant ainsi les descriptions des outils individuels.

  • Options :

    • undefined (par dĂ©faut) : Aucune instruction n'est incluse
    • true : Utiliser les instructions fournies par le serveur (si disponibles) - idĂ©al pour les serveurs bien documentĂ©s avec des conseils complets
    • false : DĂ©sactive explicitement les instructions - utile pour Ă©conomiser des jetons de contexte ou lorsque les outils sont explicites.
    • string : Utilisez des instructions personnalisĂ©es (remplacent celles fournies par le serveur) - idĂ©al pour les flux de travail spĂ©cifiques Ă  une application ou lorsque les instructions du serveur sont insuffisantes
  • Valeur par dĂ©faut : undefined (aucune instruction incluse)

  • Notes :

    • Les instructions sont automatiquement injectĂ©es lorsque serverInstructions est configurĂ© et que les outils du serveur sont disponibles pour l'agent.
    • Plusieurs serveurs peuvent chacun contribuer des instructions au contexte de l'agent
  • Exemple :

    # Use server-provided instructions
    serverInstructions: true
    
    # Use custom instructions
    serverInstructions: |
      When using this filesystem server:
      1. Always use absolute paths for file operations
      2. Check file permissions before attempting write operations
    
    # Explicitly disable instructions
    serverInstructions: false

env

  • Type : Objet (Optionnel, type stdio uniquement)
  • Description : Variables d'environnement Ă  utiliser lors du lancement du processus.
  • Prise en charge des espaces rĂ©servĂ©s :
    • {{LIBRECHAT_USER_ID}} : RemplacĂ© par l'ID de l'utilisateur actuel.
    • {{LIBRECHAT_USER_*}} : Espaces rĂ©servĂ©s dynamiques pour les champs utilisateur (par ex. {{LIBRECHAT_USER_EMAIL}}).
    • {{CUSTOM_VARIABLE_NAME}} : RemplacĂ© par la valeur fournie par l'utilisateur pour une variable dĂ©finie dans customUserVars (par exemple, {{MY_API_KEY}}).
    • ${ENV_VAR} : RemplacĂ© par la valeur de la variable d'environnement cĂŽtĂ© serveur {{ENV_VAR}}.

timeout

  • Type : Entier (Optionnel)
  • Description : DĂ©lai d'attente en millisecondes pour les requĂȘtes du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif.
  • Valeur par dĂ©faut : 30000 (30 secondes)

initTimeout

  • Type : Entier (Optionnel)
  • Description : DĂ©lai d'attente en millisecondes pour l'initialisation du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif.
  • Valeur par dĂ©faut : 10000 (10 secondes)

requiresOAuth

  • Type : BoolĂ©en (Optionnel, transports distants uniquement : sse, streamable-http, websocket)
  • Description : Indique si ce serveur nĂ©cessite une authentification OAuth. Si elle n'est pas spĂ©cifiĂ©e, elle sera dĂ©tectĂ©e automatiquement lors du dĂ©marrage du serveur. Bien qu'elle soit facultative, il est prĂ©fĂ©rable de dĂ©finir explicitement cette valeur si vous savez si le serveur nĂ©cessite ou non OAuth.
  • Valeur par dĂ©faut : DĂ©tectĂ©e automatiquement si non spĂ©cifiĂ©e
  • Notes :
    • Applicable aux transports distants (basĂ©s sur une URL) : sse, streamable-http et websocket. Cela n'a aucun effet sur les serveurs stdio, qui n'ont pas d'URL pour l'authentification.
    • La dĂ©tection automatique se produit lors du dĂ©marrage du serveur, ce qui peut augmenter le temps d'initialisation.
    • La configuration explicite amĂ©liore les performances de dĂ©marrage en ignorant la dĂ©tection.
    • DĂ©finissez requiresOAuth: false pour les serveurs protĂ©gĂ©s uniquement par un en-tĂȘte Authorization statique (par exemple, une clĂ© API Bearer). La dĂ©tection automatique sonde le serveur sans vos en-tĂȘtes configurĂ©s, de sorte qu'un serveur rĂ©pondant par un 401 avec un dĂ©fi WWW-Authenticate: Bearer peut ĂȘtre classĂ© Ă  tort comme protĂ©gĂ© par OAuth ; cet indicateur contourne cette sonde et permet Ă  votre en-tĂȘte statique d'authentifier la connexion normalement.
    • Fonctionne avec les variables d'environnement MCP OAuth (MCP_OAUTH_ON_AUTH_ERROR, MCP_OAUTH_DETECTION_TIMEOUT, MCP_OAUTH_HANDLING_TIMEOUT, MCP_OAUTH_FLOW_TTL) pour une gestion amĂ©liorĂ©e des connexions

stderr

  • Type : ChaĂźne ou Entier (Optionnel, type stdio uniquement)
  • Description : Comment gĂ©rer stderr du processus enfant. Cela correspond Ă  la sĂ©mantique de child_process.spawn de Node. Les valeurs de chaĂźne valides sont : "pipe", "ignore", "inherit". Alternativement, un entier non nĂ©gatif peut ĂȘtre utilisĂ© comme descripteur de fichier.
  • Valeur par dĂ©faut : "inherit" (les messages envoyĂ©s Ă  stderr seront imprimĂ©s dans le stderr du processus parent).

customUserVars

  • Type : Objet (Optionnel)
  • Description : DĂ©finit des variables personnalisĂ©es que les utilisateurs peuvent configurer pour ce serveur MCP. Cela permet aux administrateurs de spĂ©cifier des variables (par exemple, des clĂ©s API, des URLs) que chaque utilisateur doit configurer individuellement. Ces valeurs fournies par l'utilisateur peuvent ensuite ĂȘtre utilisĂ©es dans les configurations headers ou env. Les serveurs avec customUserVars sont automatiquement exclus des connexions au niveau de l'application, garantissant que les identifiants par utilisateur sont toujours rĂ©solus au moment de l'exĂ©cution.
  • Structure :
    • L'objet customUserVars contient des clĂ©s, oĂč chaque clĂ© reprĂ©sente un nom de variable (par exemple, MY_API_KEY). Ce nom sera utilisĂ© dans des espaces rĂ©servĂ©s comme {{MY_API_KEY}}.
    • Chaque nom de variable est un objet avec les sous-clĂ©s suivantes :
      • title: String (Requis) - Un titre convivial pour la variable, affichĂ© dans l'interface utilisateur de configuration.
      • description: String (Optional) - A description or instructions for the variable, also displayed in the UI to guide the user. HTML can be used in this field (e.g., to create a link: <a href="https://example.com" target="_blank">More info</a>).
      • sensitive: BoolĂ©en (Optionnel) - ContrĂŽle si la valeur est traitĂ©e comme un secret et masquĂ©e dans l'interface utilisateur. Le comportement par dĂ©faut est masquĂ©/secret si omis ; dĂ©finissez sur false pour les champs non secrets tels que les IDs de projet ou les URLs de base.
  • Utilisation dans headers et env :
    • Une fois dĂ©finies sous customUserVars, ces variables peuvent ĂȘtre rĂ©fĂ©rencĂ©es dans les sections headers (pour les types sse et streamable-http) ou env (pour le type stdio) en utilisant la syntaxe {{VARIABLE_NAME}}.
    • Les utilisateurs fournissent ces valeurs via l'interface utilisateur. Ces paramĂštres sont accessibles de deux maniĂšres :
      • Depuis l'entrĂ©e de chat de l'assistant : Lors de la sĂ©lection d'outils MCP pour un assistant, une icĂŽne de paramĂštres apparaĂźtra Ă  cĂŽtĂ© des serveurs MCP configurables dans le menu dĂ©roulant de sĂ©lection des outils. Cliquer sur cette icĂŽne ouvre une boĂźte de dialogue permettant de gĂ©rer les identifiants pour ce serveur. Configuration des variables MCP par utilisateur - AccĂšs de l'assistant Configuration des variables MCP par utilisateur - BoĂźte de dialogue d'accĂšs de l'assistant
      • Depuis le panneau des paramĂštres : Une section dĂ©diĂ©e "MCP Settings" dans le panneau de droite liste tous les serveurs MCP avec des variables personnalisĂ©es dĂ©finissables. Les utilisateurs peuvent cliquer sur un serveur pour ouvrir la boĂźte de dialogue de configuration afin de dĂ©finir ou de mettre Ă  jour leurs identifiants pour ce serveur MCP spĂ©cifique. Configuration des variables MCP par utilisateur - AccĂšs au panneau des paramĂštres
    • Ces valeurs fournies par l'utilisateur sont stockĂ©es de maniĂšre sĂ©curisĂ©e, associĂ©es Ă  l'utilisateur individuel et au serveur MCP spĂ©cifique, puis substituĂ©es lors de l'exĂ©cution.
  • Exemple :
    customUserVars:
      MY_SERVICE_API_KEY:
        title: 'My Service API Key'
        description: "Your personal API access key for My Service. Find it at <a href='https://myservice.example.com/settings/api' target='_blank'>My Service API Settings</a>."
        sensitive: true
      SOME_OTHER_VAR:
        title: 'Some Other Variable'
        description: 'The specific value for some other configuration (e.g., a specific path or identifier).'
        sensitive: false
    Utilisation dans headers :
    headers:
      X-Auth-Token: '{{MY_SERVICE_API_KEY}}'
      X-Some-Other-Config: '{{SOME_OTHER_VAR}}'
    Usage in env (for stdio type):
    env:
      API_KEY: '{{MY_SERVICE_API_KEY}}'

obo

  • Type : Objet (Optionnel, pour les types sse et streamable-http uniquement)
  • Description : Configure l'Ă©change de jetons OAuth 2.0 On-Behalf-Of pour un serveur MCP. LibreChat Ă©change le jeton d'accĂšs OpenID de l'utilisateur connectĂ© contre un jeton dĂ©lĂ©guĂ© en aval avec les portĂ©es (scopes) configurĂ©es, puis transmet ce jeton au serveur MCP sous la forme d'un en-tĂȘte Authorization: Bearer ....
  • Sous-clĂ©s requises :
    • scopes : String - Scopes non vides demandĂ©s pour l'Ă©change de jetons en aval.
  • Validation :
    • obo est uniquement valide pour les serveurs MCP sse et streamable-http.
    • obo est rejetĂ© pour les serveurs stdio et websocket.
    • Les utilisateurs ont besoin de l'autorisation de rĂŽle MCP_SERVERS.CONFIGURE_OBO pour configurer ce champ. Initialisez-le avec interface.mcpServers.configureObo ou gĂ©rez-le depuis le panneau d'administration.
  • PrĂ©requis :
    • L'authentification OpenID doit ĂȘtre configurĂ©e avec des jetons d'accĂšs rĂ©utilisables.
    • Votre fournisseur d'identitĂ© et votre application en aval doivent autoriser la portĂ©e dĂ©lĂ©guĂ©e demandĂ©e.
  • Exemple :
    mcpServers:
      enterprise-tools:
        type: streamable-http
        url: https://api.example.com/mcp/
        obo:
          scopes: 'api://mcp-server-id/Mcp.Tools.ReadWrite'

Consultez OpenID Connect Token Reuse et SharePoint Integration pour la configuration associée à la réutilisation des jetons et aux jetons délégués.

oauth

  • Type : Objet (Optionnel)
  • Description : Configuration OAuth2 pour l'authentification avec le serveur MCP. Lorsqu'elle est configurĂ©e, les utilisateurs seront invitĂ©s Ă  s'authentifier via un flux OAuth avant que le serveur MCP puisse ĂȘtre utilisĂ©. Si aucun client id ni client secret n'est fourni, l'enregistrement dynamique de client (DCR) sera utilisĂ©.
  • Sous-clĂ©s requises :
    • authorization_url: String - L'URL du endpoint d'autorisation OAuth
    • token_url : String - L'URL de l'endpoint de jeton OAuth
    • client_id : ChaĂźne de caractĂšres - Identifiant client OAuth
    • client_secret : ChaĂźne de caractĂšres - Secret client OAuth
    • redirect_uri : ChaĂźne de caractĂšres - URI de redirection OAuth (ex. http://localhost:3080/api/mcp/${serverName}/oauth/callback)
    • scope : String - Scopes OAuth (sĂ©parĂ©s par des espaces)
  • Sous-clĂ©s optionnelles :
    • grant_types_supported : Tableau de chaĂźnes - Types d'octroi pris en charge (par dĂ©faut ["authorization_code", "refresh_token"])
    • token_endpoint_auth_methods_supported : Tableau de chaĂźnes - MĂ©thodes d'authentification du point de terminaison de jeton prises en charge (par dĂ©faut ["client_secret_basic", "client_secret_post"])
    • token_exchange_method : String - MĂ©thode de requĂȘte d'Ă©change de jeton. Utilisez default_post pour les fournisseurs qui attendent les identifiants client OAuth dans le corps de la requĂȘte POST.
    • response_types_supported : Tableau de chaĂźnes - Types de rĂ©ponse pris en charge (par dĂ©faut ["code"])
    • code_challenge_methods_supported : Tableau de chaĂźnes - MĂ©thodes de dĂ©fi de code PKCE prises en charge (par dĂ©faut ["S256", "plain"])
    • skip_code_challenge_check : BoolĂ©en - Ignore la vĂ©rification de la prise en charge de PKCE par le fournisseur OAuth. Utile pour les fournisseurs comme AWS Cognito qui prennent en charge S256 mais ne l'annoncent pas dans leurs mĂ©tadonnĂ©es. (par dĂ©faut : false)
  • Variables d'environnement : Les champs d'URL OAuth dĂ©finis dans le YAML, y compris authorization_url, token_url, redirect_uri et revocation_endpoint, peuvent utiliser des rĂ©fĂ©rences ${ENV_VAR}. LibreChat rĂ©sout la valeur de l'environnement avant la validation de l'URL. Les URL de point de terminaison OAuth gĂ©rĂ©es par l'utilisateur et soumises via l'interface utilisateur doivent ĂȘtre des URL littĂ©rales et rejeter les espaces rĂ©servĂ©s ${ENV_VAR}.
  • Exemple :
    oauth-api-server:
      authorization_url: https://api.example.com/oauth/authorize
      token_url: https://api.example.com/oauth/token
      client_id: your_client_id
      client_secret: your_client_secret
      redirect_uri: http://localhost:3080/api/mcp/oauth-api-server/oauth/callback
      scope: 'read execute'
      grant_types_supported: ['authorization_code', 'refresh_token']
      token_endpoint_auth_methods_supported: ['client_secret_post']
      token_exchange_method: default_post
      response_types_supported: ['code']
      code_challenge_methods_supported: ['S256', 'plain']

oauth_headers

  • Type : Objet (Optionnel)
  • Description : En-tĂȘtes utilisĂ©s spĂ©cifiquement pour les requĂȘtes de flux OAuth. Ces en-tĂȘtes sont utilisĂ©s lors de l'authentification OAuth, telle que l'enregistrement dynamique de client et l'Ă©change de jetons, et ne sont pas envoyĂ©s lors de la communication habituelle avec le serveur MCP.
  • Cas d'utilisation courants :
    • Ajout de l'authentification aux endpoints d'enregistrement dynamique de client, tels que Authorization: Bearer ${DCR_API_KEY}
    • Inclure des en-tĂȘtes personnalisĂ©s spĂ©cifiques au fournisseur requis pour les flux OAuth
    • Configuration des en-tĂȘtes requis par les points de terminaison de jeton OAuth
  • Principales diffĂ©rences par rapport Ă  headers :
    • headers : EnvoyĂ©s avec les requĂȘtes rĂ©guliĂšres du serveur MCP une fois l'authentification terminĂ©e
    • oauth_headers : EnvoyĂ© uniquement lors des flux d'authentification OAuth
  • Exemple :
    oauth_headers:
      Authorization: "Bearer ${DCR_API_KEY}"
      X-Custom-Header: "custom_value"

startup

  • Type : BoolĂ©en (Optionnel)
  • Description : Lorsqu'il est dĂ©fini sur false, ce serveur MCP ne sera pas connectĂ© au dĂ©marrage de l'application. Ceci est utile pour les serveurs qui nĂ©cessitent une saisie utilisateur ou une configuration avant la connexion, ou pour les cas oĂč vous souhaitez contrĂŽler le moment oĂč le serveur est initialisĂ©.
  • Valeur par dĂ©faut : true
  • Exemple :
    mcpServers:
      my-mcp-server:
        type: streamable-http
        url: 'https://api.example.com/mcp/'
        startup: false

Notes

  • InfĂ©rence de type :
    • Si type est omis :
      • Si url est spĂ©cifiĂ© et commence par http:// ou https://, type est dĂ©fini par dĂ©faut sur sse.
      • Si url est spĂ©cifiĂ© et commence par ws:// ou wss://, type prend websocket comme valeur par dĂ©faut.
      • Si command est spĂ©cifiĂ©, type est dĂ©fini par dĂ©faut sur stdio.
  • Types de connexion :
    • stdio : DĂ©marre un serveur MCP en tant que processus enfant et communique via l'entrĂ©e/sortie standard.
    • websocket : Se connecte Ă  un serveur MCP externe via WebSocket.
    • sse: Se connecte Ă  un serveur MCP externe via Server-Sent Events (SSE).
    • streamable-http : Se connecte Ă  un serveur MCP externe via HTTP avec prise en charge des rĂ©ponses en streaming.
  • Adresses internes/locales :
    • Important : Les serveurs MCP utilisant des adresses IP internes (par exemple, 172.24.1.165, 192.168.1.100) ou des domaines locaux (par exemple, mcp-server, host.docker.internal) doivent ĂȘtre explicitement autorisĂ©s. Utilisez mcpSettings.allowedAddresses pour des services hĂŽte:port privĂ©s spĂ©cifiques lorsque vous souhaitez que les destinations publiques restent accessibles, ou mcpSettings.allowedDomains lorsque vous souhaitez une liste blanche stricte.
    • Voir MCP Settings pour les dĂ©tails de configuration.

Exemples

Configuration avec des adresses internes

Lorsque vous utilisez des serveurs MCP internes/locaux et qu'aucune liste blanche de domaines stricte n'est nécessaire, configurez mcpSettings.allowedAddresses avec l'hÎte et le port exacts :

# MCP Settings - Required for internal/local addresses
mcpSettings:
  allowedAddresses:
    - '172.24.1.165:8000' # Internal IP and port
    - 'mcp-prod:8001' # Docker container and port
    - 'host.docker.internal:8080' # Docker host and port

# MCP Servers - Individual configurations
mcpServers:
  prod-mcp:
    type: streamable-http
    url: http://172.24.1.165:8000/mcp
    timeout: 120000

  test-mcp:
    type: streamable-http
    url: http://mcp-prod:8001/mcp
    timeout: 120000

Serveur MCP stdio

puppeteer:
  type: stdio
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-puppeteer'
  timeout: 30000
  initTimeout: 10000
  env:
    NODE_ENV: 'production'
    USER_EMAIL: '{{LIBRECHAT_USER_EMAIL}}'
    USER_ROLE: '{{LIBRECHAT_USER_ROLE}}'
  stderr: inherit

Serveur MCP sse

everything:
  url: http://localhost:3001/sse
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${SOME_API_KEY}'

Serveur MCP websocket

myWebSocketServer:
  url: ws://localhost:8080

Serveur MCP streamable-http

streamable-http-server:
  type: streamable-http
  url: https://example.com/api/
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${SOME_API_KEY}'

Serveur MCP avec champs utilisateur dynamiques

user-aware-server:
  type: sse
  url: https://api.example.com/users/{{LIBRECHAT_USER_USERNAME}}/stream
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'
    X-User-Role: '{{LIBRECHAT_USER_ROLE}}'
    X-Email-Verified: '{{LIBRECHAT_USER_EMAILVERIFIED}}'
    Authorization: 'Bearer ${API_TOKEN}'

Serveur MCP avec identifiants par utilisateur via customUserVars

my-mcp-server:
  type: streamable-http
  url: 'https://api.example-service.com/api/' # Example URL
  headers:
    X-Auth-Token: '{{API_KEY}}' # Uses the API_KEY defined below
  customUserVars:
    API_KEY: # This key will be used as {{API_KEY}} in headers/url
      title: 'API Key' # This is the label shown above the input field
      description: "Get your API key <a href='https://example.com/api-keys' target='_blank'>here</a>." # This description appears below the input

REMARQUE Voir MCP Server Initialization pour plus d'informations sur l'initialisation du serveur basée sur l'interface utilisateur.

Serveur MCP avec icÎne personnalisée

filesystem:
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-filesystem'
    - /home/user/LibreChat/
  iconPath: /home/user/LibreChat/client/public/assets/logo.svg
  chatMenu: false # Exclude from chatarea dropdown

Serveur MCP avec authentification OAuth

oauth-api-server:
  type: streamable-http
  url: https://api.example.com/mcp/
  oauth:
    authorization_url: https://api.example.com/oauth/authorize
    token_url: https://api.example.com/oauth/token
    client_id: your_client_id
    client_secret: your_client_secret
    redirect_uri: http://localhost:3080/api/mcp/oauth-api-server/oauth/callback
    scope: 'read execute'
  oauth_headers:
    X-Custom-Header: 'custom_value'

Serveur MCP avec instructions de serveur

# Server that uses its own provided instructions
web-search:
  type: streamable-http
  url: https://example.com/mcp/search
  serverInstructions: true

# Server with instructions explicitly disabled
filesystem:
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-filesystem'
    - /home/user/documents/
  serverInstructions: false

# Server with custom instructions
puppeteer:
  type: stdio
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-puppeteer'
  serverInstructions: |
    Browser automation security and best practices:
    1. Be cautious with local file access and internal IP addresses
    2. Take screenshots to verify successful page interactions
    3. Wait for page elements to load before interacting with them
    4. Use specific CSS selectors for reliable element targeting
    5. Check console logs for JavaScript errors when troubleshooting

Serveur MCP avec OAuth activé (Legacy requiresOAuth)

composio-googlesheets:
  type: sse
  url: https://mcp.composio.dev/googlesheets/sse-endpoint
  requiresOAuth: true
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${COMPOSIO_API_KEY}'
  timeout: 45000
  initTimeout: 15000

Variables d'environnement associées (Optionnel) :

# OAuth configuration for MCP servers
MCP_OAUTH_ON_AUTH_ERROR=true
MCP_OAUTH_DETECTION_TIMEOUT=10000
MCP_OAUTH_HANDLING_TIMEOUT=600000
MCP_OAUTH_FLOW_TTL=900000

# API key for the service
COMPOSIO_API_KEY=your_composio_api_key_here

Importation des configurations de serveur MCP

Les configurations mcpServers permettent à LibreChat d'interagir dynamiquement avec divers serveurs MCP, lesquels peuvent effectuer des tùches spécialisées ou fournir des fonctionnalités spécifiques au sein de l'application. Cette approche modulaire facilite l'extension des capacités de l'application en ajoutant ou en modifiant simplement les configurations des serveurs.


Informations complémentaires

  • Comportement par dĂ©faut :
    • L'initialisation se produit au dĂ©marrage, et l'application doit ĂȘtre redĂ©marrĂ©e pour que les modifications prennent effet.
    • Si url et command sont tous deux spĂ©cifiĂ©s, le type doit ĂȘtre explicitement dĂ©fini pour Ă©viter toute ambiguĂŻtĂ©.
  • Support multi-utilisateur :
    • Le MCPManager prend dĂ©sormais en charge des connexions distinctes au niveau de l'utilisateur et au niveau de l'application, permettant une gestion appropriĂ©e des connexions par utilisateur.
    • Les connexions des utilisateurs sont suivies et gĂ©rĂ©es sĂ©parĂ©ment, avec un Ă©tablissement et un nettoyage appropriĂ©s.
    • Utilisez des espaces rĂ©servĂ©s dynamiques pour les champs utilisateur dans les en-tĂȘtes, les URLs et les variables d'environnement :
      • {{LIBRECHAT_USER_ID}} - Identifiant unique de l'utilisateur
      • {{LIBRECHAT_USER_EMAIL}} - Adresse e-mail de l'utilisateur
      • {{LIBRECHAT_USER_USERNAME}} - Nom d'utilisateur de l'utilisateur
      • {{LIBRECHAT_USER_ROLE}} - RĂŽle de l'utilisateur (par ex. "user", "admin")
      • Et bien d'autres champs (voir la section headers pour la liste complĂšte)
  • Gestion de l'inactivitĂ© de l'utilisateur :
    • Les connexions des utilisateurs sont surveillĂ©es pour dĂ©tecter toute activitĂ© et seront dĂ©connectĂ©es aprĂšs 15 minutes d'inactivitĂ©.
  • Variables d'environnement :
    • Dans env (pour le type stdio) : Utile pour configurer des environnements d'exĂ©cution spĂ©cifiques ou des configurations requises par le processus du serveur MCP.
    • Dans headers (pour les types sse et streamable-http) : Utilisez la syntaxe ${ENV_VAR} pour rĂ©fĂ©rencer des variables d'environnement dans les valeurs d'en-tĂȘte.
  • Champs utilisateur dynamiques :
    • Les espaces rĂ©servĂ©s des champs utilisateur sont remplacĂ©s lors de l'exĂ©cution par les informations de l'utilisateur authentifiĂ©.
    • Seuls les champs non sensibles sont disponibles (les mots de passe et autres donnĂ©es sensibles sont exclus)
    • Les champs manquants sont dĂ©finis par dĂ©faut comme des chaĂźnes vides
    • Les champs boolĂ©ens sont convertis en reprĂ©sentations textuelles ("true" ou "false")
  • Gestion des erreurs (stderr) :
    • La configuration de stderr vous permet de gĂ©rer la maniĂšre dont les messages d'erreur provenant du processus du serveur MCP sont traitĂ©s. La valeur par dĂ©faut "inherit" signifie que les erreurs seront imprimĂ©es dans le stderr du processus parent.
  • Instructions du serveur :
    • Les instructions sont automatiquement injectĂ©es dans le message systĂšme de l'agent lorsque les outils du serveur MCP sont utilisĂ©s.
    • Les instructions personnalisĂ©es (valeurs de type string) prĂ©valent sur les instructions fournies par le serveur
    • Plusieurs serveurs MCP peuvent chacun contribuer leurs propres instructions au contexte de l'agent
    • Les instructions ne sont incluses que lorsque les outils du serveur MCP correspondant sont rĂ©ellement disponibles pour l'agent.
  • Authentification OAuth :
    • Le flux OAuth2 est pris en charge pour une authentification sĂ©curisĂ©e avec les serveurs MCP.
    • Les utilisateurs seront invitĂ©s Ă  s'authentifier via OAuth avant que le serveur MCP puisse ĂȘtre utilisĂ©

Références


En configurant correctement les mcpServers dans votre librechat.yaml, vous pouvez améliorer les fonctionnalités de LibreChat et intégrer des outils et services personnalisés de maniÚre transparente.

Que pensez-vous de ce guide ?