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é :
| Key | Type | Description | Example |
|---|---|---|---|
| <serverName> | Object | Chaque 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
| Key | Type | Description | Example |
|---|---|---|---|
| title | String | (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" |
| description | String | (Facultatif) Description du serveur MCP, affichée dans l'interface utilisateur pour aider les utilisateurs à comprendre son objectif. | description: "Provides file system access" |
| type | String | Spé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" |
| command | String | (Pour le type `stdio`) La commande ou l'exécutable à exécuter pour démarrer le serveur MCP. | command: "npx" |
| args | Array of Strings | (Pour le type `stdio`) Arguments de ligne de commande Ă transmettre Ă la `command`. | args: ["-y", "@modelcontextprotocol/server-puppeteer"] |
| url | String | (Pour les types `websocket`, `streamable-http` ou `sse`) L'URL pour se connecter au serveur MCP. | url: "http://localhost:3001/sse" |
| proxy | String | (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}" |
| headers | Object | (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}" |
| apiKey | Object | (Optionnel, pour les types `sse` et `streamable-http`) Configuration de l'authentification par clé API pour le serveur MCP. | See apiKey section below |
| iconPath | String | (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" |
| chatMenu | Boolean | (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 |
| serverInstructions | Boolean 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" |
| timeout | Integer | (Optionnel) DĂ©lai d'expiration en millisecondes pour les requĂȘtes du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif. | timeout: 30000 |
| initTimeout | Integer | (Facultatif) DĂ©lai d'expiration en millisecondes pour l'initialisation du serveur MCP. Doit ĂȘtre un entier non nĂ©gatif. | initTimeout: 10000 |
| env | Object | (Optionnel, type `stdio` uniquement) Variables d'environnement Ă utiliser lors du lancement du processus. | env: NODE_ENV: "production" |
| requiresOAuth | Boolean | (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 |
| stderr | String 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" |
| customUserVars | Object | (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." |
| oauth | Object | (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_headers | Object | (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" |
| obo | Object | (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" |
| startup | Boolean | (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
urloucommand.
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 Ă lacommand.
url
- Type : String
- Description : (Pour les types
websocket,streamable-httpousse) 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 parhttp://ouhttps://. - Pour le type
streamable-http, l'URL doit commencer parhttp://ouhttps://. - Pour le type
websocket, l'URL doit commencer parws://ouwss://.
- Pour le type
proxy
- Type : ChaĂźne (Optionnel, pour les types
sseetstreamable-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://etsocks5:// - Note de sécurité :
proxyest 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}}oucustomUserVars. - Exemple :
mcpServers: remote-api: type: streamable-http url: https://api.example.com/mcp proxy: '${MCP_PROXY_URL}'
headers
- Type : Objet (Optionnel, pour les types
sseetstreamable-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 lesconversationId,parentMessageIdoumessageIdactuels.{{CUSTOM_VARIABLE_NAME}}: RemplacĂ© par la valeur fournie par l'utilisateur pour une variable dĂ©finie danscustomUserVars(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 utilisateur | Type | Description |
|---|---|---|---|
{{LIBRECHAT_USER_NAME}} | name | String | Nom d'affichage de l'utilisateur |
{{LIBRECHAT_USER_USERNAME}} | username | String | Nom d'utilisateur |
{{LIBRECHAT_USER_EMAIL}} | email | String | Adresse e-mail de l'utilisateur |
{{LIBRECHAT_USER_PROVIDER}} | provider | String | Fournisseur d'authentification (ex: "email", "google", "github") |
{{LIBRECHAT_USER_ROLE}} | role | String | RĂŽle de l'utilisateur (ex: "user", "admin") |
{{LIBRECHAT_USER_GOOGLEID}} | googleId | String | ID de compte Google |
{{LIBRECHAT_USER_FACEBOOKID}} | facebookId | String | ID de compte Facebook |
{{LIBRECHAT_USER_OPENIDID}} | openidId | String | ID de compte OpenID |
{{LIBRECHAT_USER_SAMLID}} | samlId | String | ID de compte SAML |
{{LIBRECHAT_USER_LDAPID}} | ldapId | String | ID de compte LDAP |
{{LIBRECHAT_USER_GITHUBID}} | githubId | String | ID de compte GitHub |
{{LIBRECHAT_USER_DISCORDID}} | discordId | String | ID de compte Discord |
{{LIBRECHAT_USER_APPLEID}} | appleId | String | ID de compte Apple |
{{LIBRECHAT_USER_EMAILVERIFIED}} | emailVerified | Boolean â String | Statut de vĂ©rification de l'e-mail ("true" ou "false") |
{{LIBRECHAT_USER_TWOFACTORENABLED}} | twoFactorEnabled | Boolean â String | Statut de la double authentification (2FA) ("true" ou "false") |
{{LIBRECHAT_USER_TERMSACCEPTED}} | termsAccepted | Boolean â String | Statut 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
sseetstreamable-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 formeAuthorization: Bearer <key>"basic": EnvoyĂ© sous la formeAuthorization: Basic <key>"custom": EnvoyĂ© dans un en-tĂȘte personnalisĂ© (nĂ©cessitecustom_header)
custom_header: String - (Requis lorsqueauthorization_typeest"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 inclusetrue: Utiliser les instructions fournies par le serveur (si disponibles) - idéal pour les serveurs bien documentés avec des conseils completsfalse: 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
serverInstructionsest configuré et que les outils du serveur sont disponibles pour l'agent. - Plusieurs serveurs peuvent chacun contribuer des instructions au contexte de l'agent
- Les instructions sont automatiquement injectées lorsque
-
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
stdiouniquement) - 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 danscustomUserVars(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-httpetwebsocket. Cela n'a aucun effet sur les serveursstdio, 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: falsepour les serveurs protĂ©gĂ©s uniquement par un en-tĂȘteAuthorizationstatique (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 un401avec un dĂ©fiWWW-Authenticate: Bearerpeut ĂȘ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
- Applicable aux transports distants (basés sur une URL) :
stderr
- Type : ChaĂźne ou Entier (Optionnel, type
stdiouniquement) - Description : Comment gérer
stderrdu processus enfant. Cela correspond Ă la sĂ©mantique dechild_process.spawnde 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 Ăstderrseront imprimĂ©s dans lestderrdu 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
headersouenv. Les serveurs aveccustomUserVarssont 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
customUserVarscontient 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 surfalsepour les champs non secrets tels que les IDs de projet ou les URLs de base.
- L'objet
- Utilisation dans
headersetenv:- Une fois définies sous
customUserVars, ces variables peuvent ĂȘtre rĂ©fĂ©rencĂ©es dans les sectionsheaders(pour les typessseetstreamable-http) ouenv(pour le typestdio) 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.
- 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.
- 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.
- 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.
- Une fois définies sous
- Exemple :
Utilisation danscustomUserVars: 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: falseheaders: Usage inheaders: X-Auth-Token: '{{MY_SERVICE_API_KEY}}' X-Some-Other-Config: '{{SOME_OTHER_VAR}}'env(forstdiotype):env: API_KEY: '{{MY_SERVICE_API_KEY}}'
obo
- Type : Objet (Optionnel, pour les types
sseetstreamable-httpuniquement) - 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 :
oboest uniquement valide pour les serveurs MCPsseetstreamable-http.oboest rejeté pour les serveursstdioetwebsocket.- Les utilisateurs ont besoin de l'autorisation de rÎle
MCP_SERVERS.CONFIGURE_OBOpour configurer ce champ. Initialisez-le avecinterface.mcpServers.configureOboou 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 OAuthtoken_url: String - L'URL de l'endpoint de jeton OAuthclient_id: Chaßne de caractÚres - Identifiant client OAuthclient_secret: Chaßne de caractÚres - Secret client OAuthredirect_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. Utilisezdefault_postpour 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_urietrevocation_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
- Ajout de l'authentification aux endpoints d'enregistrement dynamique de client, tels que
- Principales diffĂ©rences par rapport Ă
headers:headers: EnvoyĂ©s avec les requĂȘtes rĂ©guliĂšres du serveur MCP une fois l'authentification terminĂ©eoauth_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
typeest omis :- Si
urlest spécifié et commence parhttp://ouhttps://,typeest défini par défaut sursse. - Si
urlest spécifié et commence parws://ouwss://,typeprendwebsocketcomme valeur par défaut. - Si
commandest spécifié,typeest défini par défaut surstdio.
- Si
- Si
- 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. UtilisezmcpSettings.allowedAddressespour des services hĂŽte:port privĂ©s spĂ©cifiques lorsque vous souhaitez que les destinations publiques restent accessibles, oumcpSettings.allowedDomainslorsque vous souhaitez une liste blanche stricte. - Voir MCP Settings pour les dĂ©tails de configuration.
- Important : Les serveurs MCP utilisant des adresses IP internes (par exemple,
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: 120000Serveur 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: inheritServeur 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:8080Serveur 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 inputREMARQUE 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 dropdownServeur 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 troubleshootingServeur 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: 15000Variables 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_hereImportation 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
urletcommandsont tous deux spĂ©cifiĂ©s, letypedoit ĂȘ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 typestdio) : Utile pour configurer des environnements d'exécution spécifiques ou des configurations requises par le processus du serveur MCP. - Dans
headers(pour les typessseetstreamable-http) : Utilisez la syntaxe${ENV_VAR}pour rĂ©fĂ©rencer des variables d'environnement dans les valeurs d'en-tĂȘte.
- Dans
- 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
stderrvous 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 lestderrdu processus parent.
- La configuration de
- 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
- Documentation du Model Context Protocol (MCP)
- Spécification des transports MCP
- Node.js child_process.spawn
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 ?