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

Config Structure

Note: Fields not specifically mentioned as required are optional.

version

  • required
KeyTypeDescriptionExample
versionStringSpecifies the version of the configuration file.version: 1.3.15

cache

KeyTypeDescriptionExample
cacheBooleanToggles caching on or off. Set to `true` to enable caching (default).cache: true

langfuse

KeyTypeDescriptionExample
langfuseObjectConfigures the encrypted Langfuse connection and deployment-owned request headers.

Subkeys:

KeyTypeDescriptionExample
enabledBooleanEnables or disables Langfuse tracing for this config scope.
publicKeyStringLangfuse project public key.
secretKeyStringEncrypted Langfuse project secret key.
projectIdStringVerified Langfuse project identity.
secretKeyPreviewStringServer-generated masked preview of the stored secret key.
destinationStringSelects one deployment-approved Langfuse destination key.
headersObject/Map of StringsDeployment-owned headers sent to one configured Langfuse origin for proxy or gateway authentication. Supports `${ENV_VAR}` references.

Manage connection fields through Settings → Langfuse or an authorized administrator configuration client. The Settings flow verifies the connection and derives projectId; authorized administrator writes encrypt secretKey, generate secretKeyPreview, and redact the secret from reads. Plaintext secretKey values placed directly in librechat.yaml are not accepted by the runtime connection path. The legacy displaySecretKey and fanout.enabled fields are no longer part of the schema.

headers is different: it is deployment infrastructure and can only be set in librechat.yaml. Admin configuration writes reject both the whole map and individual header paths so gateway credentials are not stored or returned through Mongo-backed configuration. Values support ${ENV_VAR} interpolation; use environment references instead of literals. LibreChat drops unresolved variables, protected infrastructure-secret references, blank values, and invalid HTTP header names with a warning.

Custom headers are sent on trace and media export, feedback-score requests, project lookup, and admin credential verification only when the deployment resolves exactly one Langfuse origin. If central, tenant, or collector configuration produces multiple origins, LibreChat sends no custom headers and logs a warning because the map cannot safely identify a recipient. They cannot use per-user {{...}} placeholders, and the fanout collector forwards only Authorization upstream.

langfuse:
  headers:
    CF-Access-Client-Id: '${CF_ACCESS_CLIENT_ID}'
    CF-Access-Client-Secret: '${CF_ACCESS_CLIENT_SECRET}'

langfuse is a base-configuration-only section. Role, group, and user configuration overrides cannot replace or tombstone it.

See Langfuse Configuration for availability rules, authenticated proxy setup, environment-managed credentials, and optional fanout deployment.

skillSync

KeyTypeDescriptionExample
skillSyncObjectConfigures external Skill mirroring. In v1.3.13, GitHub Skill Sync is supported.

see: Skill Sync Object Structure

filters

KeyTypeDescriptionExample
filtersObjectConfigures source-aware content protection for messages, prompts, Agent instructions, conversation starters and titles, feedback, Skills, memories, files, tool arguments, model parameters, and Action metadata.

filters is a base-configuration-only policy. Role, group, user, and database overrides cannot add, replace, or tombstone it. In a multi-replica deployment, coordinate the config rollout or restart so every replica loads the same policy.

See: Content Filter Object Structure

messageFilter

KeyTypeDescriptionExample
messageFilterObjectConfigures the legacy message-only PII policy. Existing deployments can keep this block while migrating to `filters.messages`; when both are configured, both policies apply.

See: Legacy messageFilter

fileStrategy

  • Options: "local" | "firebase" | "s3" | "azure_blob" | "cloudfront"
KeyTypeDescriptionExample
fileStrategyStringDetermines where to save user uploaded/generated files. Defaults to `"local"` if omitted.fileStrategy: "firebase"
  • Notes:
    • "cloudfront" stores files in S3 and returns CloudFront URLs for stable media delivery, signed cookies, and signed downloads.
    • "firebase" serves files through Firebase Storage and Firebase Hosting edge locations.
    • S3 serves files via presigned URLs (temporary signed tokens) that expire. Once expired, any image or avatar referencing that URL will appear broken in the UI. This makes S3 unsuitable as a primary strategy for visual assets. See the related discussion for details.
    • For best performance of images and avatars, use "cloudfront" or "firebase", or configure fileStrategies to route avatar and image to a CDN-backed strategy.
    • Please refer to the File Storage & CDN documentation for setup details

fileStrategies

Allows granular control over file storage strategies for different file types.

  • Available Strategies: "local" | "firebase" | "s3" | "azure_blob" | "cloudfront"
KeyTypeDescriptionExample
fileStrategiesObjectConfigures different storage strategies for different file types. More flexible than the single fileStrategy option.

Sub-keys:

KeyTypeDescriptionExample
defaultStringFallback storage strategy when specific type is not defined. Defaults to "local".
avatarStringStorage strategy for user and agent avatar images. Recommended to use a CDN-backed strategy (`"cloudfront"` or `"firebase"`) for best performance.
imageStringStorage strategy for images uploaded in chats. Recommended to use a CDN-backed strategy (`"cloudfront"` or `"firebase"`) for best performance.
documentStringStorage strategy for document uploads (PDFs, text files, etc.).
skillsStringStorage strategy for files bundled with Skills.
  • Notes:
    • This setting takes precedence over the single fileStrategy option
    • If a specific file type is not configured, it falls back to default, then to fileStrategy, and finally to "local"
    • Images and avatars need persistent, stable URLs to render correctly across the UI. S3 presigned URLs expire (AWS cap: 7 days for IAM users, hours for STS/role-based credentials), causing broken images in the model selector and chat UI. See the related discussion for full context. Use "cloudfront" or "firebase" for avatar and image to avoid this.
    • S3 and Azure Blob Storage are well-suited for document storage, where short-lived presigned download URLs are appropriate.
    • Please refer to the File Storage & CDN documentation for setup details for each storage provider

Examples:

# Use a single strategy for all file types
fileStrategies:
  default: 's3'
# Route images and avatars to CDN, keep documents in object storage
fileStrategies:
  avatar: 'cloudfront' # CDN delivery for avatars
  image: 'cloudfront' # CDN delivery for generated/uploaded images
  document: 's3' # Object storage for documents
# Only configure specific types, others use default
fileStrategies:
  default: 'local'
  avatar: 'firebase' # Only avatars use Firebase CDN, everything else is local

cloudfront

Key:

KeyTypeDescriptionExample
cloudfrontObjectConfigures CloudFront delivery for files stored in S3.

Subkeys:

KeyTypeDescriptionExample
domainStringCloudFront distribution domain or CNAME. Required when any file strategy uses `"cloudfront"`.domain: "https://cdn.example.com"
distributionIdStringCloudFront distribution ID. Required when `invalidateOnDelete` is true.distributionId: "E1234ABCD"
invalidateOnDeleteBooleanCreates a CloudFront invalidation for deleted files. Default: false.invalidateOnDelete: false
imageSigningStringControls inline image/avatar access. Options: `"none"` or `"cookies"`. `"url"` is reserved and not implemented for images.imageSigning: "cookies"
cookieDomainStringShared parent cookie domain required for signed cookies. Must start with a dot.cookieDomain: ".example.com"
cookieExpiryNumberSigned cookie lifetime in seconds. Default: 1800, maximum: 604800.cookieExpiry: 1800
urlExpiryNumberSigned CloudFront download URL lifetime in seconds. Default: 3600.urlExpiry: 3600
storageRegionStringOptional region label used in generated object keys when region paths are enabled.storageRegion: "us-east-2"
includeRegionInPathBooleanIncludes the storage region in newly generated object keys. Default: false.includeRegionInPath: false
requireSignedAccessBooleanRefuses startup when signed-cookie CloudFront access cannot initialize. Default: false.requireSignedAccess: true

see: CloudFront Object Structure and CloudFront with S3

filteredTools

KeyTypeDescriptionExample
filteredToolsArray of StringsFilters out specific tools from both Plugins and OpenAI Assistants endpoints.filteredTools: ["scholarai", "calculator"]
  • Notes:
    • If includedTools and filteredTools are both specified, only includedTools will be recognized.
    • Affects both gptPlugins and assistants endpoints
    • You can find the names of the tools to filter in api/app/clients/tools/manifest.json
      • Use the pluginKey value
    • Also, any listed under the ".well-known" directory api/app/clients/tools/.well-known
      • Use the name_for_model value

includedTools

KeyTypeDescriptionExample
includedToolsArray of StringsIncludes specific tools from both Plugins and OpenAI Assistants endpoints.includedTools: ["calculator"]
  • Notes:
    • If includedTools and filteredTools are both specified, only includedTools will be recognized.
    • Affects both gptPlugins and assistants endpoints
    • You can find the names of the tools to filter in api/app/clients/tools/manifest.json
      • Use the pluginKey value
    • Also, any listed under the ".well-known" directory api/app/clients/tools/.well-known
      • Use the name_for_model value
KeyTypeDescriptionExample
secureImageLinksBooleanRequires authorization for image links hosted locally by the app. Default: true.secureImageLinks: true

Local images are protected when this field is omitted. Private conversation images require an active session and owner access. Stored user avatars require an authenticated viewer in the same tenant. Agent avatars follow the Agent's view ACL, including public visibility, while Assistant avatars require the same tenant plus the effective endpoint sharing or Assistant-management policy. Authorization and configuration lookup failures fail closed.

Set secureImageLinks: false only as a compatibility opt-out for deployments that intentionally expose local image URLs without authentication. Role and user configuration overrides are resolved from the image owner's effective configuration.

imageOutputType

  • Note: Case-sensitive. Google endpoint only supports "jpeg" and "png" output types.
  • Options: "png" | "webp" | "jpeg"
KeyTypeDescriptionExample
imageOutputTypeStringThe image output type for image responses. Defaults to "png" if omitted.imageOutputType: "webp"

ocr

Key:

KeyTypeDescriptionExample
ocrObjectConfigures Optical Character Recognition (OCR) settings for extracting text from images.

Subkeys:

KeyTypeDescriptionExample
apiKeyStringThe API key for the OCR service.
baseURLStringThe base URL for the OCR service API.
strategyStringThe OCR strategy to use. Options are "mistral_ocr", "azure_mistral_ocr", "vertexai_mistral_ocr", "document_parser", or "custom_ocr".
mistralModelStringThe Mistral model to use for OCR processing.
allowedAddressesArray of StringsTrusted private host:port exemptions for OCR connect-time SSRF checks. Public destinations remain available.

see: OCR Config Object Structure

webSearch

Key:

KeyTypeDescriptionExample
webSearchObjectConfigures web search functionality, including search providers, content scrapers, and result rerankers.

Subkeys:

KeyTypeDescriptionExample
serperApiKeyStringEnvironment variable name for the Serper API key. If not set in .env, users will be prompted to provide it via UI.
searxngInstanceUrlStringEnvironment variable name for the SearXNG instance URL. If not set in .env, users will be prompted to provide it via UI.
searxngApiKeyStringEnvironment variable name for the SearXNG API key. If not set in .env, users will be prompted to provide it via UI.
tavilyApiKeyStringEnvironment variable name for the Tavily API key. Used for both search and scraper. If not set in .env, users will be prompted to provide it via UI.
tavilySearchUrlStringEnvironment variable name for a custom Tavily Search API URL. Optional; defaults to Tavily hosted search when unset.
tavilyExtractUrlStringEnvironment variable name for a custom Tavily Extract API URL. Optional; defaults to Tavily hosted extract when unset.
firecrawlApiKeyStringEnvironment variable name for the Firecrawl API key. If not set in .env, users will be prompted to provide it via UI.
firecrawlApiUrlStringEnvironment variable name for the Firecrawl API URL. If not set in .env, users will be prompted to provide it via UI.
jinaApiKeyStringEnvironment variable name for the Jina API key. If not set in .env, users will be prompted to provide it via UI.
cohereApiKeyStringEnvironment variable name for the Cohere API key. If not set in .env, users will be prompted to provide it via UI.
searchProviderStringSpecifies which search provider to use. Options: "serper", "searxng", "tavily".
scraperProviderStringSpecifies which scraper service to use. Options: "firecrawl", "serper", "tavily".
firecrawlVersionStringSpecifies Firecrawl API version (v0 or v1).
rerankerTypeStringSpecifies which reranker service to use. Set to "none" to skip reranking. Options: "jina", "cohere", "none".
scraperTimeoutIntegerTimeout in milliseconds for scraper requests. Must be a non-negative integer.
safeSearchNumberSafe search filtering level. 0 = OFF, 1 = MODERATE (default), 2 = STRICT.
allowedAddressesArray of StringsTrusted private host:port exemptions for web search, scrape, and rerank connect-time SSRF checks. Public destinations remain available.

see: Web Search Object Structure

fileConfig

Key:

KeyTypeDescriptionExample
fileConfigObjectConfigures file handling settings for the application, including size limits and MIME type restrictions.

Subkeys:

KeyTypeDescriptionExample
endpointsRecord/ObjectSpecifies file handling configurations for individual endpoints, allowing customization per endpoint basis.
serverFileSizeLimitNumberThe maximum file size (in MB) that the server will accept. Applies globally across all endpoints unless overridden by endpoint-specific settings.
avatarSizeLimitNumberMaximum size (in MB) for user avatar images.
clientImageResizeObjectConfigures client-side image resizing to optimize file uploads and prevent upload errors due to large image sizes.
ocrObjectSettings for Optical Character Recognition (OCR) file processing.
textObjectSettings for direct text file parsing.
sttObjectSettings for Speech-to-Text (STT) audio file processing.
fileTokenLimitNumberMaximum number of tokens from text files to include in prompts before truncation.fileTokenLimit: 100000

clientImageResize

Key:

KeyTypeDescriptionExample
clientImageResizeObjectConfigures client-side image resizing to optimize file uploads and prevent upload errors due to large image sizes.

Subkeys:

KeyTypeDescriptionExample
enabledBooleanWhen explicitly set, forces client-side resizing on or off for every user and locks the Settings toggle. Omit it to let each user choose in Settings > Chat; the user preference defaults to off.enabled: true
maxWidthNumberMaximum width in pixels for resized images. Must be at least 1. Default: 1900.maxWidth: 1900
maxHeightNumberMaximum height in pixels for resized images. Must be at least 1. Default: 1900.maxHeight: 1900
qualityNumberBrowser encoder quality from 0 to 1. Higher values usually preserve more detail and produce larger files. Default: 0.92.quality: 0.92

Description:

The clientImageResize configuration controls client-side downscaling before upload. This feature helps:

  • Prevent upload failures due to large image files exceeding server limits
  • Reduce bandwidth usage by compressing images before transmission
  • Improve upload performance with smaller file sizes
  • Maintain image quality while optimizing file size

When resizing is enabled, supported images that exceed maxWidth or maxHeight are downscaled in the browser before upload. LibreChat preserves the aspect ratio, never upscales smaller images, and keeps the original file when the encoded result would not be smaller.

If enabled is omitted, users can turn Resize images before upload on or off under Settings > Chat. The preference is stored in that browser and defaults to off. Setting enabled: true or enabled: false in librechat.yaml overrides every user's preference and disables the toggle.

Example:

fileConfig:
  clientImageResize:
    # Omit enabled so each user can choose under Settings > Chat.
    maxWidth: 1900
    maxHeight: 1900
    quality: 0.92

To enforce one behavior for the deployment, add either enabled: true or enabled: false to the same block.

Notes:

  • The resize pipeline supports JPEG, PNG, and WebP in browsers with the required Canvas APIs.
  • Animated PNG and WebP files are sent unchanged so resizing does not discard animation.
  • The output keeps the source format. There is no compressFormat setting.
  • Browser encoders may ignore quality for lossless formats such as PNG.
  • A resize failure falls back to the original file; normal server upload limits still apply.

see: File Config Object Structure

rateLimits

Key:

KeyTypeDescriptionExample
rateLimitsObjectDefines rate limiting policies to prevent abuse by limiting the number of requests.

Subkeys:

KeyTypeDescriptionExample
fileUploadsObjectConfigures rate limits specifically for file upload operations.
conversationsImportObjectConfigures rate limits specifically for conversation import operations.
agentEventsObjectConfigures the API-key-principal admission limit for authenticated Agent event requests.
sttObjectConfigures rate limits specifically for speech-to-text (stt) requests
ttsObjectConfigures rate limits specifically for text-to-speech (tts) requests

fileUploads Subkeys:

KeyTypeDescriptionExample
ipMaxNumberMaximum number of uploads allowed per IP address per window.
ipWindowInMinutesNumberTime window in minutes for the IP-based upload limit.
userMaxNumberMaximum number of uploads allowed per user per window.
userWindowInMinutesNumberTime window in minutes for the user-based upload limit.

conversationsImport Subkeys:

KeyTypeDescriptionExample
ipMaxNumberMaximum number of imports allowed per IP address per window.
ipWindowInMinutesNumberTime window in minutes for the IP-based imports limit.
userMaxNumberMaximum number of imports per user per window.
userWindowInMinutesNumberTime window in minutes for the user-based imports limit.

agentEvents Subkeys:

KeyTypeDescriptionExample
userMaxNumberMaximum authenticated Agent event admissions per Remote Agents API key principal in one window.40
userWindowInMinutesNumberLength of the authenticated Agent event admission window in minutes.1

This admission bucket is separate from normal message execution limits. The durable worker consumes the normal message-user bucket when it executes a delivery, avoiding a double charge at admission time. Legacy AGENT_EVENT_USER_MAX and AGENT_EVENT_USER_WINDOW values remain fallbacks when the YAML fields are omitted; explicit YAML values take precedence.

tts Subkeys:

KeyTypeDescriptionExample
ipMaxNumberMaximum number of requests allowed per IP address per window.
ipWindowInMinutesNumberTime window in minutes for the IP-based requests limit.
userMaxNumberMaximum number of requests per user per window.
userWindowInMinutesNumberTime window in minutes for the user-based requests limit.

stt Subkeys:

KeyTypeDescriptionExample
ipMaxNumberMaximum number of requests allowed per IP address per window.
ipWindowInMinutesNumberTime window in minutes for the IP-based requests limit.
userMaxNumberMaximum number of requests per user per window.
userWindowInMinutesNumberTime window in minutes for the user-based requests limit.
  • Example:
rateLimits:
  agentEvents:
    userMax: 40
    userWindowInMinutes: 1
  fileUploads:
    ipMax: 100
    ipWindowInMinutes: 60
    userMax: 50
    userWindowInMinutes: 60
  conversationsImport:
    ipMax: 100
    ipWindowInMinutes: 60
    userMax: 50
    userWindowInMinutes: 60
  stt:
    ipMax: 100
    ipWindowInMinutes: 1
    userMax: 50
    userWindowInMinutes: 1
  tts:
    ipMax: 100
    ipWindowInMinutes: 1
    userMax: 50
    userWindowInMinutes: 1

registration

Key:

KeyTypeDescriptionExample
registrationObjectConfigures registration-related settings for the application.

Subkeys:

KeyTypeDescriptionExample
socialLoginsSocial login configurations.
allowedDomainsSpecifies allowed domains for registration.

see also:

memory

Key:

KeyTypeDescriptionExample
memoryObjectConfigures conversation memory and personalization features for the application.

Subkeys:

KeyTypeDescriptionExample
disabledBooleanDisables memory functionality when set to true.
validKeysArray of StringsSpecifies which keys are valid for memory storage.
tokenLimitNumberSets the maximum number of tokens for memory storage and processing.
charLimitNumberSets the maximum number of characters for memory storage. Default: 10000.
maxInputTokensNumberCaps the recent-chat tokens sent to the automatic memory agent before extraction. Default: 12000.
personalizeBooleanEnables or disables personalization features.
messageWindowSizeNumberSpecifies the number of recent messages to include in memory context.
agentObject | UnionConfigures the optional automatic memory agent. Set `agent.enabled: true` to run it.

see: Memory Object Structure

summarization

Key:

KeyTypeDescriptionExample
summarizationObjectConfigures conversation summarization and context pruning. Replaces the per-endpoint `summarize` and `summaryModel` fields.

Subkeys:

KeyTypeDescriptionExample
providerStringLLM provider for summarization calls. Defaults to the agent's own provider.
modelStringModel for summarization calls. Defaults to the agent's own model.
parametersObjectAdditional LLM parameters for summarization requests.
promptStringCustom prompt for initial summarization.
updatePromptStringCustom prompt for re-compaction when a prior summary exists.
triggerObjectDefines when summarization is triggered (by token ratio, remaining tokens, or message count).
maxSummaryTokensNumberMaximum output tokens for the summarization model response.
reserveRatioNumberFraction of token budget reserved as headroom (0–1). Default: 0.05.
contextPruningObjectConfigures position-based tool result degradation for older messages.
retainRecentObjectPreserves recent complete turns and/or tokens outside the generated summary.

see: Summarization Object Structure

actions

Key:

KeyTypeDescriptionExample
actionsObjectConfigures actions-related settings, used by Agents and Assistants

Subkeys:

KeyTypeDescriptionExample
allowedDomainsArray of StringsStrict whitelist of domains for actions. When set, only listed domains are reachable.
allowedAddressesArray of StringsSSRF exemption list (private IP space only). Permits specific private host:port services without restricting public destinations when `allowedDomains` is not configured.

see also:

interface

Key:

KeyTypeDescriptionExample
interfaceObjectConfigures user interface elements within the application, allowing for customization of visibility and behavior of various components.

Subkeys:

KeyTypeDescriptionExample
privacyPolicyObjectContains settings related to the privacy policy link provided.
termsOfServiceObjectContains settings related to the terms of service link provided.
modelSelectBooleanDetermines whether the model selection feature is available.
parametersBooleanToggles the visibility of parameter configuration options AKA conversation settings.
presetsBooleanEnables or disables the presets menu
promptsBoolean or ObjectEnables or disables all prompt-related features for all users
bookmarksBooleanEnables or disables all bookmarks-related features for all users
memoriesBooleanEnables or disables the memories feature for all users
multiConvoBooleanEnables or disables all "multi convo", AKA multiple response streaming, related features for all users
agentsBoolean or ObjectEnables or disables all agents features for all users
temporaryChatBooleanEnables or disables the temporary chat feature
temporaryChatRetentionNumberConfigures the retention period for temporary chats in hours. Min: 1, Max: 8760. Default: 720 (30 days).
autoSubmitFromUrlBooleanControls whether `/c/new?prompt=…&submit=true` auto-submits to the model. When `false`, the prompt is pre-filled but not submitted.
mcpServersObjectContains settings related to MCP server selection and access control.
customWelcomeStringCustom welcome message displayed in the chat interface.
runCodeBooleanEnables or disables the "Run Code" button for Markdown Code Blocks
webSearchBooleanEnables or disables the web search button in the chat interface
fileSearchBooleanEnables or disables the file search button in the chat interface
fileCitationsBooleanGlobally enables or disables file citations for all users
feedbackBooleanShows or hides the thumbs up/thumbs down feedback buttons on responses
peoplePickerObjectConfigures which principal types are available controls in the people picker interface
marketplaceObjectEnables or disables access to the Agent Marketplace

see: Interface Object Structure

modelSpecs

Key:

KeyTypeDescriptionExample
modelSpecsObjectConfigures model specifications, allowing for detailed setup and customization of AI models and their behaviors within the application.

Subkeys:

KeyTypeDescriptionExample
enforceBooleanDetermines whether the model specifications should strictly override other configuration settings.
prioritizeBooleanSpecifies if model specifications should take priority over the default configuration when both are applicable.
listArray of ObjectsContains a list of individual model specifications detailing various configurations and behaviors.

see: Model Specs Object Structure

endpoints

Key:

KeyTypeDescriptionExample
endpointsObjectDefines custom API endpoints for the application.

Subkeys:

KeyTypeDescriptionExample
customArray of ObjectsEach object in the array represents a unique endpoint configuration.
azureOpenAIObjectAzure OpenAI endpoint-specific configuration
assistantsObjectAssistants endpoint-specific configuration.
azureAssistantsObjectAzure Assistants endpoint-specific configuration.
agentsObjectAgents endpoint-specific configuration.
allObjectGlobal endpoint settings that apply to all endpoints. See Shared Endpoint Settings.
allowedAddressesArray of StringsSSRF exemption list (private IP space only). Permits user-provided baseURLs to point at specific private host:port services (e.g. self-hosted Ollama) without disabling SSRF protection for everything else.

Note: Endpoints support Shared Endpoint Settings such as streamRate, headers, titleModel, titleMethod, titlePrompt, titlePromptTemplate, titleEndpoint, and maxToolResultChars. These can be configured individually per endpoint or globally using the all key. headers are merged with endpoint-level values winning on key collisions. The all key does not accept baseURL.

Note: endpoints.allowedAddresses applies to user-provided baseURL values (when an admin configures a custom endpoint with apiKey: 'user_provided' and baseURL: 'user_provided'). Each user-supplied baseURL is validated against the SSRF block at request time; entries listed here are exempted. See mcpSettings.allowedAddresses for the field semantics — same rules apply (private IP space only, port required, no URLs/paths/CIDR/bare hosts/public IP literals).

mcpSettings

Key:

KeyTypeDescriptionExample
mcpSettingsObjectDefines global settings for Model Context Protocol (MCP) servers

Subkeys:

KeyTypeDescriptionExample
allowedDomainsArray of StringsStrict whitelist of domains for MCP server connections. When set, only listed entries are reachable.
allowedAddressesArray of StringsSSRF exemption list (private IP space only). Permits specific private host:port services without flipping `allowedDomains` into strict-whitelist mode.
  • Notes:
    • This is a security feature to protect against abuse / misuse of internal addresses via MCP servers
    • By default, LibreChat restricts MCP servers from connecting to internal, local, or private network addresses
    • MCP servers using local IP addresses or domains can either be added to the strict allowedDomains whitelist (which then becomes the only reachable set), or — to keep public destinations reachable — exempted as exact host:port services via allowedAddresses
    • As with all yaml configuration changes, a LibreChat restart is required to take effect
    • Supports domains, wildcard subdomains (*.example.com), docker domains, and IP addresses

Example:

mcpSettings:
  # Strict whitelist mode:
  # allowedDomains:
  #   - "example.com"           # Specific domain
  #   - "*.example.com"         # All subdomains
  #   - "http://mcp-server:3000" # Internal service, explicitly whitelisted

  # Default SSRF mode with private service exemptions:
  allowedAddresses:
    - 'host.docker.internal:8080' # Permit one private host on one port
    - '10.0.0.5:8000' # Permit one private IP on one port

see: MCP Settings Object Structure

mcpServers

Key:

KeyTypeDescriptionExample
mcpServersObjectDefines the configuration for Model Context Protocol (MCP) servers, allowing dynamic integration of MCP servers within the application.

Subkeys:

KeyTypeDescriptionExample
<serverName>ObjectEach key under `mcpServers` represents an individual MCP server configuration, identified by a unique name.
  • Notes:
    • Initialization happens at startup, and the app must be restarted for changes to take effect.
    • The <serverName> is a unique identifier for each MCP server configuration.
    • Each MCP server can be configured using one of four connection types:
      • stdio
      • websocket
      • sse
      • streamable-http
    • The type field specifies the connection type to the MCP server.
    • If type is omitted, it defaults based on the presence and format of url or command:
      • If url is specified and starts with http or https, type defaults to sse.
      • If url is specified and starts with ws or wss, type defaults to websocket.
      • If command is specified, type defaults to stdio.
    • Additional configuration options include:
      • timeout: Timeout in milliseconds for MCP server requests. Determines how long to wait for a response for tool requests.
      • initTimeout: Timeout in milliseconds for MCP server initialization. Determines how long to wait for the server to initialize.
      • serverInstructions: Controls whether server instructions are included in agent context. Can be true (use server-provided), false (disabled), or a custom string (overrides server-provided).
      • customUserVars: (Optional) Defines custom variables (e.g., API keys, URLs) that individual users can set for an MCP server. These per-user values, provided through the UI, can then be referenced in the server's headers or env configurations using {{VARIABLE_NAME}} syntax. This allows for per-user authentication or customization for MCP tools.
    • see: MCP Servers Object Structure

Example:

mcpServers:
  everything:
    # type: sse # type can optionally be omitted
    url: http://localhost:3001/sse
    timeout: 30000
    initTimeout: 10000
    serverInstructions: true # Use server-provided instructions
  puppeteer:
    type: stdio
    command: npx
    args:
      - -y
      - '@modelcontextprotocol/server-puppeteer'
    timeout: 30000
    initTimeout: 10000
    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
  mcp-obsidian:
    command: npx
    args:
      - -y
      - 'mcp-obsidian'
      - /path/to/obsidian/vault
  streamable-http-example:
    type: streamable-http
    url: https://example.com/mcp
    headers:
      Authorization: 'Bearer ${API_TOKEN}'
    timeout: 30000
  per-user-crendentials-example:
    type: sse
    url: 'https//some.mcp/sse'
    headers:
      X-Custom-Auth-Token: '{{USER_API_KEY}}' # Placeholder for the user-provided API key, defined in `customUserVars` below.
    customUserVars:
      USER_API_KEY:
        title: 'Service API Key'
        description: "Your personal API key for this service. You can get it <a href='https://example.com/api-keys' target='_blank'>here</a>."
    serverInstructions: true

see: MCP Servers Object Structure

speech

Key:

KeyTypeDescriptionExample
speechObjectConfigures Text-to-Speech (TTS) and Speech-to-Text (STT) providers for the application.

Subkeys:

KeyTypeDescriptionExample
ttsObjectText-to-Speech provider configurations (OpenAI, Azure OpenAI, ElevenLabs, LocalAI).
sttObjectSpeech-to-Text provider configurations (OpenAI, Azure OpenAI).
speechTabObjectDefault UI settings for speech features.

Both speech.tts and speech.stt accept an allowedAddresses array of trusted private host:port exemptions. Speech requests enforce the default private-address block at connect time. See the detailed Speech reference for entry rules, proxy behavior, and examples.

see: Speech Object Structure

turnstile

Key:

KeyTypeDescriptionExample
turnstileObjectConfigures Cloudflare Turnstile for bot protection on registration and login forms.

Subkeys:

KeyTypeDescriptionExample
siteKeyStringYour Cloudflare Turnstile site key (required).
optionsObjectAdditional Turnstile widget options (optional).

see: Turnstile Object Structure

transactions

Key:

KeyTypeDescriptionExample
transactionsObjectControls transaction logging and visibility features.

Subkeys:

KeyTypeDescriptionExample
enabledBooleanEnables or disables transaction logging. Default: true.

see: Transactions Object Structure

How is this guide?