Skip to content

Commit b3318c1

Browse files
authored
🧾 docs: Document v0.8.6 Env, Config, And Changelog (#586)
* docs: Document Redis cluster-safe deletes * docs: document v0.8.6 env and config updates * docs: add v0.8.6 changelog
1 parent 3eb747b commit b3318c1

10 files changed

Lines changed: 973 additions & 235 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
date: 2026-05-25
3+
title: ⚙️ Config v1.3.12
4+
version: '1.3.12'
5+
---
6+
7+
- Added `interface.retentionMode`
8+
- `"temporary"` keeps retention limited to temporary chats
9+
- `"all"` applies configured retention to all supported retained data, including persistent agent resource files
10+
11+
- Added `mcpServers.<server>.proxy`
12+
- Allows `sse` and `streamable-http` MCP servers to use a per-server outbound proxy
13+
- Supports `http://`, `https://`, `socks://`, and `socks5://` proxy URLs
14+
15+
- Added `modelSpecs.list[].hideBadgeRow`
16+
- Allows a model spec to hide the tool badge row in the chat composer

content/changelog/v0.8.6.mdx

Lines changed: 200 additions & 0 deletions
Large diffs are not rendered by default.

content/docs/configuration/dotenv.mdx

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,12 @@ To configure LibreChat for local use or custom domain deployment, set the follow
258258
'Specifies the server-side domain.',
259259
'DOMAIN_SERVER=http://localhost:3080',
260260
],
261+
[
262+
'ADMIN_PANEL_URL',
263+
'string',
264+
'External admin panel base URL used for admin OAuth/SSO redirects when the admin panel is hosted separately. Do not include a trailing slash.',
265+
'ADMIN_PANEL_URL=https://admin.example.com/admin',
266+
],
261267
]}
262268
/>
263269

@@ -303,6 +309,12 @@ LibreChat has built-in central logging, see [Logging System](/docs/configuration
303309
'Enable verbose console/stdout logs in the same format as file debug logs.',
304310
'DEBUG_CONSOLE=false',
305311
],
312+
[
313+
'LOG_TO_FILE',
314+
'boolean',
315+
'Set to false to disable file-backed Winston transports while keeping console logging available.',
316+
'LOG_TO_FILE=true',
317+
],
306318
[
307319
'CONSOLE_JSON',
308320
'boolean',
@@ -356,6 +368,65 @@ Note: `DEBUG_CONSOLE` is not recommended, as the outputs can be quite verbose, a
356368
]}
357369
/>
358370

371+
### OpenTelemetry Tracing
372+
373+
LibreChat can emit backend OpenTelemetry traces for general API, HTTP, MongoDB, Mongoose, Redis, and outbound request visibility. Use Langfuse for GenAI-specific prompt/model observability.
374+
375+
<OptionTable
376+
options={[
377+
[
378+
'OTEL_TRACING_ENABLED',
379+
'boolean',
380+
'Enable backend OpenTelemetry tracing. Tracing remains disabled when OTEL_SDK_DISABLED=true.',
381+
'# OTEL_TRACING_ENABLED=false',
382+
],
383+
[
384+
'OTEL_SERVICE_NAME',
385+
'string',
386+
'Service name reported to OpenTelemetry. Default: librechat.',
387+
'# OTEL_SERVICE_NAME=librechat',
388+
],
389+
[
390+
'OTEL_SERVICE_VERSION',
391+
'string',
392+
'Service version reported to OpenTelemetry. Defaults to the package version when unset.',
393+
'# OTEL_SERVICE_VERSION=',
394+
],
395+
[
396+
'OTEL_EXPORTER_OTLP_ENDPOINT',
397+
'string',
398+
'Base OTLP exporter endpoint.',
399+
'# OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318',
400+
],
401+
[
402+
'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT',
403+
'string',
404+
'Trace-specific OTLP endpoint. Overrides the base endpoint for traces when set.',
405+
'# OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=',
406+
],
407+
[
408+
'OTEL_EXPORTER_OTLP_HEADERS',
409+
'string',
410+
'Comma-separated OTLP exporter headers, such as authorization metadata.',
411+
'# OTEL_EXPORTER_OTLP_HEADERS=',
412+
],
413+
['OTEL_TRACES_EXPORTER', 'string', 'Trace exporter selection.', '# OTEL_TRACES_EXPORTER=otlp'],
414+
[
415+
'OTEL_TRACES_SAMPLER',
416+
'string',
417+
'OpenTelemetry trace sampler. Default example: parentbased_always_on.',
418+
'# OTEL_TRACES_SAMPLER=parentbased_always_on',
419+
],
420+
['OTEL_LOG_LEVEL', 'string', 'OpenTelemetry SDK log level.', '# OTEL_LOG_LEVEL=INFO'],
421+
[
422+
'OTEL_SDK_DISABLED',
423+
'boolean',
424+
'Disable the OpenTelemetry SDK even if tracing is enabled.',
425+
'# OTEL_SDK_DISABLED=false',
426+
],
427+
]}
428+
/>
429+
359430
### Configuration Path - `librechat.yaml`
360431

361432
Specify an alternative location for the LibreChat configuration file.
@@ -431,7 +502,12 @@ Uncomment `ENDPOINTS` to customize the available endpoints in LibreChat.
431502
'Comma-separated list of available endpoints.',
432503
'# ENDPOINTS=openAI,agents,assistants,gptPlugins,azureOpenAI,google,anthropic,bingAI,custom',
433504
],
434-
['PROXY', 'string', 'Proxy setting for all endpoints.', 'PROXY='],
505+
[
506+
'PROXY',
507+
'string',
508+
'Outbound proxy for server-side requests, including endpoint calls and remote MCP HTTP/SSE transports. Remote MCP transports also honor HTTP_PROXY, HTTPS_PROXY, and NO_PROXY when PROXY is unset.',
509+
'PROXY=',
510+
],
435511
['TITLE_CONVO', 'boolean', 'Enable titling for all endpoints.', 'TITLE_CONVO=true'],
436512
]}
437513
/>
@@ -1766,6 +1842,12 @@ see: **[Authentication System](/docs/configuration/authentication)**
17661842
'Refresh token expiry time.',
17671843
'REFRESH_TOKEN_EXPIRY=(1000 * 60 * 60 * 24) * 7',
17681844
],
1845+
[
1846+
'SESSION_COOKIE_SECURE',
1847+
'boolean',
1848+
'Overrides the Secure attribute for session/auth cookies. Leave unset to use the default NODE_ENV/DOMAIN_SERVER heuristic.',
1849+
'# SESSION_COOKIE_SECURE=false',
1850+
],
17691851
]}
17701852
/>
17711853

@@ -2007,7 +2089,7 @@ For more information:
20072089
[
20082090
'OPENID_USE_PKCE',
20092091
'boolean',
2010-
'Use PKCE (Proof Key for Code Exchange) for OpenID authentication.',
2092+
'Use PKCE (Proof Key for Code Exchange) for OpenID authentication. For public clients without a client secret, leave OPENID_CLIENT_SECRET empty and set this to true.',
20112093
'# OPENID_USE_PKCE=true',
20122094
],
20132095
[
@@ -2706,6 +2788,18 @@ Configure Model Context Protocol settings for enhanced server management and OAu
27062788
'Skip code challenge method validation. When set to true, forces S256 code challenge even if not advertised in .well-known/openid-configuration',
27072789
'MCP_SKIP_CODE_CHALLENGE_CHECK=false',
27082790
],
2791+
[
2792+
'MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES',
2793+
'number',
2794+
'Maximum bytes allowed in a non-GET streamable HTTP MCP response before rejecting it. Set to 0 to disable. Default: 16777216 (16 MiB).',
2795+
'# MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES=16777216',
2796+
],
2797+
[
2798+
'MCP_STREAMABLE_HTTP_MAX_LINE_BYTES',
2799+
'number',
2800+
'Maximum bytes allowed in one SSE line for non-GET streamable HTTP MCP responses. Set to 0 to disable. Default: 5242880 (5 MiB).',
2801+
'# MCP_STREAMABLE_HTTP_MAX_LINE_BYTES=5242880',
2802+
],
27092803
]}
27102804
/>
27112805

@@ -2747,6 +2841,12 @@ For detailed configuration and examples, see: **[Redis Configuration Guide](/doc
27472841
'Enable Redis cluster mode when using a single URI',
27482842
'# USE_REDIS_CLUSTER="true"',
27492843
],
2844+
[
2845+
'REDIS_CLUSTER_SAFE_DELETE',
2846+
'boolean',
2847+
'Delete Redis cache keys individually to avoid CROSSSLOT errors on single-endpoint managed Redis services that shard keys internally.',
2848+
'# REDIS_CLUSTER_SAFE_DELETE=true',
2849+
],
27502850
[
27512851
'REDIS_USERNAME',
27522852
'string',
@@ -2808,6 +2908,7 @@ Notes:
28082908

28092909
- When `USE_REDIS=true`, you must provide `REDIS_URI` or the application will throw an error.
28102910
- For Redis Cluster mode, provide multiple URIs: `redis://node1:7001,redis://node2:7002,redis://node3:7003` (cluster mode is auto-detected).
2911+
- For single-endpoint managed Redis services that shard keys internally, keep `USE_REDIS_CLUSTER=false` and set `REDIS_CLUSTER_SAFE_DELETE=true` if cache clears fail with `CROSSSLOT` errors.
28112912
- Use `rediss://` protocol for TLS connections and set `REDIS_CA` if your CA is not publicly trusted.
28122913
- `REDIS_KEY_PREFIX_VAR` and `REDIS_KEY_PREFIX` are mutually exclusive.
28132914
- **AWS Elasticache with TLS**: Elasticache may need to use an alternate dnsLookup for TLS connections. Set `REDIS_USE_ALTERNATIVE_DNS_LOOKUP=true` if using Elasticache with TLS. See [ioredis documentation](https://www.npmjs.com/package/ioredis) for more details.

content/docs/configuration/librechat_yaml/example.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ icon: FileCode
1010
This example config includes all documented endpoints (Except Azure, LiteLLM, MLX, and Ollama, which all require additional configurations)
1111

1212
```yaml filename="librechat.yaml"
13-
version: 1.3.11
13+
version: 1.3.12
1414

1515
cache: true
1616

@@ -273,7 +273,7 @@ This example configuration file sets up LibreChat with detailed options across s
273273
# https://www.librechat.ai/docs/configuration/librechat_yaml
274274

275275
# Configuration version (required)
276-
version: 1.3.11
276+
version: 1.3.12
277277

278278
# Cache settings: Set to true to enable caching
279279
cache: true

content/docs/configuration/librechat_yaml/object_structure/interface.mdx

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ These are fields under `interface`:
2222
- `agents`
2323
- `temporaryChat`
2424
- `temporaryChatRetention`
25+
- `retentionMode`
2526
- `autoSubmitFromUrl`
2627
- `customWelcome`
2728
- `runCode`
@@ -491,6 +492,7 @@ The `temporaryChatRetention` configuration allows you to customize how long temp
491492
```yaml filename="interface / temporaryChatRetention"
492493
interface:
493494
temporaryChatRetention: 168 # Retain temporary chats for 7 days
495+
retentionMode: "temporary"
494496
```
495497

496498
**Common Retention Periods:**
@@ -500,6 +502,30 @@ interface:
500502
- **720 hours**: `temporaryChatRetention: 720` (30 days - default)
501503
- **8760 hours**: `temporaryChatRetention: 8760` (1 year - maximum)
502504

505+
## retentionMode
506+
507+
Controls which data receives retention deadlines.
508+
509+
**Key:**
510+
<OptionTable
511+
options={[
512+
['retentionMode', 'String', 'Set to "temporary" to apply retention only to temporary chats, or "all" to apply retention to all supported retained data, including persistent agent resource files.', 'retentionMode: "temporary"'],
513+
]}
514+
/>
515+
516+
**Default:** `temporary`
517+
518+
<Callout type="warning">
519+
`retentionMode: "all"` applies retention deadlines beyond temporary chats, including persistent agent resource files. Confirm your retention policy before enabling it.
520+
</Callout>
521+
522+
**Example:**
523+
```yaml filename="interface / retentionMode"
524+
interface:
525+
temporaryChatRetention: 168
526+
retentionMode: "all"
527+
```
528+
503529
## autoSubmitFromUrl
504530
505531
Controls whether a prompt supplied via URL query parameters on `/c/new` is auto-submitted to the model.
@@ -622,7 +648,7 @@ Controls the global availability of file citations functionality. When disabled,
622648

623649
> **Deprecated for permission management.** Seeds/globally gates the `FILE_CITATIONS` role permission at startup. Prefer the [Admin Panel](/docs/features/admin_panel) for managing citations permissions per role/group/user.
624650

625-
**Note:**
651+
**Note:**
626652
- This setting acts as a global toggle for the `FILE_CITATIONS` permission system-wide.
627653
- When set to `false`, no users will see file citations, even if they have been granted the permission through roles.
628654
- File citations require the `fileSearch` feature to be enabled.

content/docs/configuration/librechat_yaml/object_structure/mcp_servers.mdx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ mcpServers:
4444
streamable-http-server:
4545
type: streamable-http
4646
url: https://example.com/api/
47+
proxy: "${MCP_PROXY_URL}"
4748
per-user-credentials-example:
4849
type: streamable-http
4950
url: "https://example.com/api/"
@@ -84,6 +85,7 @@ mcpServers:
8485
['command', 'String', '(For `stdio` type) The command or executable to run to start the MCP server.', 'command: "npx"'],
8586
['args', 'Array of Strings', '(For `stdio` type) Command line arguments to pass to the `command`.', 'args: ["-y", "@modelcontextprotocol/server-puppeteer"]'],
8687
['url', 'String', '(For `websocket`, `streamable-http`, or `sse` type) The URL to connect to the MCP server.', 'url: "http://localhost:3001/sse"'],
88+
['proxy', 'String', '(Optional, for `sse` and `streamable-http` types) Outbound proxy URL for this remote MCP server. Supports `http://`, `https://`, `socks://`, and `socks5://` URLs.', 'proxy: "${MCP_PROXY_URL}"'],
8789
['headers', 'Object', '(Optional, for `sse` and `streamable-http` types) Custom headers to send with the request. Supports dynamic user field substitution with `{{LIBRECHAT_USER_*}}` placeholders and environment variables with `${ENV_VAR}`.', 'headers:\n X-User-ID: "{{LIBRECHAT_USER_ID}}"\n X-API-Key: "${SOME_API_KEY}"'],
8890
['apiKey', 'Object', '(Optional, for `sse` and `streamable-http` types) API key authentication configuration for the MCP server.', 'See apiKey section below'],
8991
['iconPath', 'String', '(Optional) Defines the tool\'s display icon shown in the tool selection dialog.', 'iconPath: "/path/to/icon.svg"'],
@@ -150,6 +152,21 @@ mcpServers:
150152
- For `streamable-http` type, the URL must start with `http://` or `https://`.
151153
- For `websocket` type, the URL must start with `ws://` or `wss://`.
152154

155+
#### `proxy`
156+
157+
- **Type:** String (Optional, for `sse` and `streamable-http` types)
158+
- **Description:** Outbound proxy URL for this remote MCP server. The value can reference environment variables with `${ENV_VAR}`.
159+
- **Supported protocols:** `http://`, `https://`, `socks://`, and `socks5://`
160+
- **Security note:** `proxy` is admin-controlled. It resolves environment variables, but does not resolve user-controlled placeholders such as `{{LIBRECHAT_USER_ID}}` or `customUserVars`.
161+
- **Example:**
162+
```yaml
163+
mcpServers:
164+
remote-api:
165+
type: streamable-http
166+
url: https://api.example.com/mcp
167+
proxy: "${MCP_PROXY_URL}"
168+
```
169+
153170
#### `headers`
154171

155172
- **Type:** Object (Optional, for `sse` and `streamable-http` types)
@@ -254,13 +271,13 @@ mcpServers:
254271
```yaml
255272
# Use server-provided instructions
256273
serverInstructions: true
257-
274+
258275
# Use custom instructions
259276
serverInstructions: |
260277
When using this filesystem server:
261278
1. Always use absolute paths for file operations
262279
2. Check file permissions before attempting write operations
263-
280+
264281
# Explicitly disable instructions
265282
serverInstructions: false
266283
```
@@ -351,7 +368,7 @@ mcpServers:
351368
- **Description:** OAuth2 configuration for authenticating with the MCP server. When configured, users will be prompted to authenticate via OAuth flow before the MCP server can be used. If no client id & client secret is provided, Dynamic Client Registration (DCR) will be used.
352369
- **Required Subkeys:**
353370
- `authorization_url`: String - The OAuth authorization endpoint URL
354-
- `token_url`: String - The OAuth token endpoint URL
371+
- `token_url`: String - The OAuth token endpoint URL
355372
- `client_id`: String - OAuth client identifier
356373
- `client_secret`: String - OAuth client secret
357374
- `redirect_uri`: String - [OAuth redirect URI](/docs/features/mcp#oauth-callback-url) (eg. `http://localhost:3080/api/mcp/${serverName}/oauth/callback`)
@@ -427,7 +444,7 @@ mcpServers:
427444
type: streamable-http
428445
url: http://172.24.1.165:8000/mcp
429446
timeout: 120000
430-
447+
431448
test-mcp:
432449
type: streamable-http
433450
url: http://mcp-prod:8001/mcp

0 commit comments

Comments
 (0)