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

projects

Key:

KeyTypeDescriptionExample
projectsObjectSets the limits a single Chat Project may reach. Every field is optional; omitting the block keeps the defaults.

Subkeys:

KeyTypeDescriptionExample
maxFilesIntegerReference files that may be attached to one project. Maximum 500.50
maxInstructionsLengthIntegerCharacters of project instructions stored and sent as guidance. Maximum 200000.16000
maxDescriptionLengthIntegerCharacters of the project description shown in the workspace and sidebar. Maximum 10000.1000

See Projects. Unknown keys inside projects fail validation.

projects:
  maxFiles: 50
  maxInstructionsLength: 16000
  maxDescriptionLength: 1000

permissions

Controls retry behavior for concurrent access-control-list writes.

KeyTypeDescriptionExample
maxWriteAttemptsIntegerMaximum compare-and-swap attempts for each ACL document, including the initial write. Only write conflicts are retried.3
leaseTtlMsIntegerHow long, in milliseconds, a holder keeps the per-resource permission lease without renewing it. Valid values range from 1000 through 600000.30000
leaseWaitMsIntegerHow long, in milliseconds, a permission update waits for a contended per-resource lease before answering with a 409 conflict. Valid values range from 0 through 60000.3000

maxWriteAttempts ranges from 1 through 100.

permissions:
  maxWriteAttempts: 3
  leaseTtlMs: 30000
  leaseWaitMs: 3000

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

fileListLimit

KeyTypeDescriptionExample
fileListLimitIntegerMaximum rows the files list (GET /files) returns when a request passes an explicit limit. Must be a positive integer. Default: 100.fileListLimit: 100

Requests without a limit are not affected. The composer's recent files list (interface.composerRecentFiles) is capped at 100, this setting's default, so the palette never asks for more rows than a default deployment returns.

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 StringsRemoves specific built-in tools from the tool list available to Agents and Assistants.filteredTools: ["scholarai", "calculator"]
  • Notes:
    • If includedTools and filteredTools are both specified, only includedTools will be recognized.
    • Applies to the built-in tools loaded at startup, which Agents and Assistants use. The Ask User tool (ask_user_question) also honors these lists. MCP tools are configured separately.
    • You can find the names of the tools in api/app/clients/tools/manifest.json
      • Use the pluginKey value

includedTools

KeyTypeDescriptionExample
includedToolsArray of StringsLimits the built-in tools available to Agents and Assistants to the listed tools.includedTools: ["calculator"]
  • Notes:
    • If includedTools and filteredTools are both specified, only includedTools will be recognized.
    • Applies to the built-in tools loaded at startup, which Agents and Assistants use. The Ask User tool (ask_user_question) also honors these lists. MCP tools are configured separately.
    • You can find the names of the tools in api/app/clients/tools/manifest.json
      • Use the pluginKey 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"

conversationList

Key:

KeyTypeDescriptionExample
conversationListObjectValidation limits for the endpoint filter in the conversation list. Requests beyond these limits are rejected.

Subkeys:

KeyTypeDescriptionExample
maxEndpointFiltersIntegerHow many endpoint names one filter request may include. Range 1-1000.50
maxEndpointNameLengthIntegerMaximum length of one endpoint name in a filter request. Range 1-1024.128

See Navigation for the conversation list filters. Values outside these ranges fail config validation like any other invalid key. An invalid value set through an Admin Panel override is ignored with a warning, and the defaults apply.

conversationList:
  maxEndpointFilters: 50
  maxEndpointNameLength: 128

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.
skillsObjectSettings for Skill imports, such as the maximum upload size for `.md`, `.zip`, and `.skill` files.
fileTokenLimitNumberMaximum number of tokens from text files to include in prompts before truncation.fileTokenLimit: 100000
imageGenerationObjectOutput size of generated images, as a percentage or in pixels.
defaultLLMDeliveryPathObjectHow uploads without an explicit destination enter model context (provider, text, or none).
legacyFileUploadUXBooleanRestores the destination chooser and eager, user-selected upload behavior.
fileContextSizeLimitNumberMaximum aggregate size (in MB) of model-bound attachments in one Agent turn.
fileContextCharLimitNumberMaximum aggregate extracted-text characters in one Agent turn.

See File Config Object Structure for the full reference, including textFallbackWithoutTools, codeEnvLivenessSafeWindowMs, and legacySearchProbeTimeoutMs.

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
twoFactorManagementObjectShared account budget for authenticated two-factor management requests. Always active.7 requests per 5 minutes
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
mcpAppsObjectPer-user limits for MCP App browser routes, in a fixed one-minute window.
emailChangeObjectLimits requests to change the registered email address, per signed-in user.
emailChangeConfirmObjectLimits openings of email change verification links, per IP and per account.

Precedence: at startup, LibreChat writes each value set under fileUploads, conversationsImport, tts, stt, agentEvents, emailChange, and emailChangeConfirm into the matching environment variable (prefixes FILE_UPLOAD, IMPORT, TTS, STT, AGENT_EVENT, EMAIL_CHANGE, and EMAIL_CHANGE_CONFIRM, with suffixes _IP_MAX, _IP_WINDOW, _USER_MAX, and _USER_WINDOW). A YAML value therefore overrides the environment variable, and a key you leave out keeps the environment value or the built-in default. twoFactorManagement and mcpApps have no environment equivalents.

twoFactorManagement Subkeys:

KeyTypeDescriptionExample
requestsPerFiveMinutesIntegerMaximum authenticated 2FA management requests per tenant and account in a fixed five-minute window. Minimum 3.7

This budget is always active, even when the block is omitted, and counts successful and failed requests across enable, verify, confirm, disable, and backup-code regeneration. The minimum of 3 permits the enable → verify → confirm setup sequence; 0 does not disable the limiter. All operations and login sessions for the account share the budget. An exhausted budget returns HTTP 429, Retry-After, and response code TWO_FACTOR_RATE_LIMITED before factor verification or mutation.

Configure this under deployment-level rateLimits in librechat.yaml. The limiter reads the YAML-derived base configuration, not role/group/user overrides. With Redis enabled, the account budget is shared across API replicas; otherwise each process has its own memory bucket. Use shared Redis for a deployment-wide limit in a multi-process deployment. The separate temporary-token 2FA login limiter is unchanged. See 2FA Management Attempt Limits.

rateLimits:
  twoFactorManagement:
    requestsPerFiveMinutes: 7

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.

mcpApps Subkeys:

KeyTypeDescriptionExample
resourcesPerMinuteIntegerMCP App resource requests allowed per user per minute.120
toolCallsPerMinuteIntegerMCP App tool calls allowed per user per minute.60

emailChange Subkeys:

KeyTypeDescriptionExample
userMaxNumberEmail change requests allowed per user per window.3
userWindowInMinutesNumberTime window in minutes for the per-user limit.2

emailChangeConfirm Subkeys:

KeyTypeDescriptionExample
ipMaxNumberVerification link openings allowed per IP address per window.20
ipWindowInMinutesNumberTime window in minutes for the IP-based limit.2
userMaxNumberVerification link openings allowed per IP and account per window. Falls back to VERIFY_EMAIL_MAX.2
userWindowInMinutesNumberTime window in minutes for the per-account limit. Falls back to VERIFY_EMAIL_WINDOW.2

The confirmation endpoint is unauthenticated, so it is bounded by source address as well as by the account the link names. See Email Address Change.

  • Example:
rateLimits:
  twoFactorManagement:
    requestsPerFiveMinutes: 7
  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
  mcpApps:
    resourcesPerMinute: 120
    toolCallsPerMinute: 60
  emailChange:
    userMax: 3
    userWindowInMinutes: 2
  emailChangeConfirm:
    ipMax: 20
    ipWindowInMinutes: 2
    userMax: 2
    userWindowInMinutes: 2

registration

Key:

KeyTypeDescriptionExample
registrationObjectConfigures registration-related settings for the application.

Subkeys:

KeyTypeDescriptionExample
socialLoginsSocial login configurations.
allowedDomainsSpecifies allowed email domains for registration. Optional: when omitted, any domain is allowed.
oauthStateTtlMsIntegerMilliseconds a started social login may take to reach its callback (60000 to 3600000, default 600000).
openidDiscoveryObjectOpenID discovery retries: startupAttempts (0 to 100, default 1) and retryDelayMs (100 to 3600000, default 5000). Overrides OPENID_DISCOVERY_RETRY_ATTEMPTS and OPENID_DISCOVERY_RETRY_DELAY_MS.

see also:

emailChange

Key:

KeyTypeDescriptionExample
emailChangeObjectControls whether local-account users can change their registered email address from Settings > Account, and how long verification links last.

Subkeys:

KeyTypeDescriptionExample
enabledBooleanAllows email address changes. Falls back to ALLOW_EMAIL_CHANGE, then true.true
tokenTTLSecondsIntegerLifetime of a verification link in seconds. Range 60-86400.900

Each field set here takes precedence over its environment fallback. Email delivery must be configured for the option to appear. See Email Address Change.

emailChange:
  enabled: true
  tokenTTLSeconds: 900

passkeys

Key:

KeyTypeDescriptionExample
passkeysObjectWebAuthn passkey enrollment limits.

Subkeys:

KeyTypeDescriptionExample
perUserMaxIntegerPasskeys each account may enroll. Range 1-100. Falls back to MAX_PASSKEYS_PER_USER, then 20.20

Passkeys themselves are enabled with ALLOW_PASSKEY_LOGIN in .env. See Passkeys.

passkeys:
  perUserMax: 20

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
enabledBooleanEnables or disables summarization.
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 to 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 tool in the composer palette
fileSearchBooleanEnables or disables the File Search tool in the composer palette
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.
openAIObjectOpenAI endpoint-specific configuration.
googleObjectGoogle endpoint-specific configuration.
anthropicObjectAnthropic endpoint-specific configuration.
bedrockObjectAWS Bedrock endpoint-specific 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: The openAI, google, anthropic, and bedrock keys are documented with their providers: OpenAI, Google, Anthropic, and AWS Bedrock.

Note: endpoints.agents.pullRequests configures the conversation pull request chip and sidebar mark. See pullRequests.

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.
catalogRecoveryObjectBounds passive MCP discovery, OAuth recovery, and cross-replica authorization fencing. See the MCP Settings reference for fields and defaults.
  • 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 (http is accepted as an alias)
    • 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

telemetry

Controls browser real user monitoring (RUM). This block rejects unknown keys.

KeyTypeDescriptionExample
rum.enabledBooleanEnables browser RUM. When omitted, the RUM_ENABLED environment variable decides.
rum.sessionReplay.enabledBooleanEnables session replay. Only takes effect when RUM itself is enabled. Defaults to false.
telemetry:
  rum:
    enabled: true
    sessionReplay:
      enabled: false

credentials

KeyTypeDescriptionExample
writeFormatStringFormat used to write new stored user credentials (tool, web search, and MCP custom user variable values). Either "v3" or "legacy". Both formats are always readable; "legacy" keeps writes readable by replicas on older releases during a rolling upgrade.v3
credentials:
  writeFormat: v3

toolCallPreviews

Bounds the tool call output and arguments sent when a conversation loads. The client receives the start and end of each long string and fetches a part in full only when the reader opens it. Set enabled: false to send every load in full.

KeyTypeDescriptionExample
enabledBooleanEnables bounded previews of settled tool calls.true
outputCharsIntegerCharacters of each tool call output kept, half from the start and half from the end (256 to 1000000).512
argsCharsIntegerCharacters of each serialized tool call arguments kept (256 to 1000000).512
toolCallPreviews:
  enabled: true
  outputChars: 512
  argsChars: 512

githubCompare

Controls the GitHub Compare tool, which compares commit ancestry in a public GitHub repository without a workspace. It is available to agents only and is off by default. This block rejects unknown keys.

KeyTypeDescriptionExample
enabledBooleanMakes the GitHub Compare tool available.false
timeoutMsIntegerRequest timeout in milliseconds (1 to 30000).10000
githubCompare:
  enabled: true
  timeoutMs: 10000

passwordHashing

Password and auth token hashing runs on worker threads, off the event loop.

KeyTypeDescriptionExample
maxWorkersIntegerMaximum number of hashing worker threads (1 to 32). Defaults to one less than the CPU count, at most 4.
passwordHashing:
  maxWorkers: 2

timeouts

Time budgets, in milliseconds, for outbound calls made inside a request. Each key is optional and takes a positive integer up to 2147483647. Exceeding a budget fails the call with an error naming the key.

KeyTypeDescriptionExample
ragMsIntegerRAG API queries for file search and message context.30000
ocrMsIntegerEach OCR provider call (upload, signed URL, OCR, delete).300000
actionsMsIntegerEach action (OpenAPI tool) HTTP call.300000
moderationMsIntegerThe OpenAI moderation check that runs before a chat turn.10000
imageFetchMsIntegerFetching a stored image by URL to encode it for a provider.30000
toolsMsIntegerEach call a built-in tool makes to its API (weather, Wolfram, web search).60000
speechMsIntegerEach text-to-speech or speech-to-text provider request.300000
imageGenerationMsIntegerEach Stable Diffusion image generation request.300000
timeouts:
  ragMs: 30000
  ocrMs: 300000

violationLog

KeyTypeDescriptionExample
maxEntriesIntegerNewest entries kept per user in the general violation log. Older entries are dropped on the next append. Must be a positive integer.100
violationLog:
  maxEntries: 100

messages

KeyTypeDescriptionExample
maxPageSizeIntegerLargest `pageSize` accepted when reading a conversation's messages (`GET /api/messages`). Accepts 1 to 10000.1000
messages:
  maxPageSize: 1000

concurrency

Upper bounds on independent lookups a request runs at once. Each key is optional and takes an integer from 1 to 32. Setting a key to 1 restores serial lookups.

KeyTypeDescriptionExample
connectedAgentLoadsIntegerConnected agents initialized together per level while discovering a handoff graph.4
mcpCatalogLookupsIntegerMCP tool catalog reads when assembling an ephemeral or added agent.4
skillNameLookupsIntegerModel spec skill name resolutions.8
skillFileInspectionsIntegerBundled skill file inspections before a skill is primed.4
resumeAgentLoadsIntegerAgent reads while building the resume snapshot of a paused run.4
concurrency:
  connectedAgentLoads: 4
  skillNameLookups: 8

clientLimits

Request deadlines for the browser client, in milliseconds, and upload concurrency. Every key is optional; omitting the block keeps the defaults. Raise a deadline when your infrastructure legitimately needs longer. Deadlines accept positive integers up to 3600000, and unknown keys are rejected.

KeyTypeDescriptionExample
refreshMsIntegerToken refresh request. When it expires, the user is sent to login.30000
ttsMsIntegerTime for the text-to-speech endpoint to start responding.60000
sharepointMsIntegerDownload of one SharePoint file.300000
cloudfrontMsIntegerCloudFront signed-cookie refresh.15000
uploadConcurrencyIntegerProject files uploaded at once. Accepts 1 to 10.3
clientLimits:
  refreshMs: 30000
  uploadConcurrency: 3

openapi

KeyTypeDescriptionExample
enabledBooleanServes the OpenAPI spec and docs for the public Agents API.false
openapi:
  enabled: true

skillDeletion

Controls how deleted Skills are finalized and cleaned up in the background. See Skill Deletion for the keys.

mcpAppSandbox

Configures the sandbox host, size limits, and rate limits for MCP Apps rendered in chat. See MCP App Sandbox Object Structure.

balance

Configures token credit balances, including starting balance, automatic refills, refill mode, and how the balance is displayed. See Balance Object Structure.

Langfuse Prompt Synchronization

langfuse.promptSync configures prompt catalog synchronization. The operator must first offer it with LANGFUSE_PROMPT_SYNC_AVAILABLE=true, and an authorized administrator must enable the stored Base switch in Settings → Langfuse. A YAML value alone does not replace that active stored setting.

FieldDefaultAccepted values
enabledOff until enabled in SettingsBoolean; deployment availability and a usable connection are also required
lockLeaseMs300000Integer 60000–3600000, milliseconds for the per-tenant sync lease
maxPages50Integer 1–1000, with up to 100 text prompts per page

Synchronization is append-only. A page-capped run starts from page 1 again on retry; increase maxPages to reach prompts beyond the same cap. See the Langfuse guide.

Admin Catalog Model Cache

endpoints.catalogModelsTtlMs defaults to 120000 milliseconds and accepts integers 0–3600000. Only deployment librechat.yaml sets it. The admin scope catalog reuses model lists for that period while endpoint configuration is unchanged. 0 resolves models on every catalog read, but a fetched list may still come from the separate two-minute provider model-list cache.

How is this guide?