# Interface Object Structure (/docs/configuration/librechat_yaml/object_structure/interface)

## Overview

The `interface` object allows for customization of various user interface elements within the application, including visibility and behavior settings for components such as menus, panels, and links. This section provides a detailed breakdown of the `interface` object structure.

These are fields under `interface`:

  - `endpointsMenu`
  - `mcpServers`
  - `privacyPolicy`
  - `termsOfService`
  - `modelSelect`
  - `parameters`
  - `sidePanel`
  - `presets`
  - `prompts`
  - `bookmarks`
  - `memories`
  - `multiConvo`
  - `agents`
  - `temporaryChat`
  - `temporaryChatRetention`
  - `customWelcome`
  - `runCode`
  - `webSearch`
  - `fileSearch`
  - `fileCitations`
  - `peoplePicker`
  - `marketplace`

**Notes:**

- The `interface` configurations are applied globally within the application.
- Default values are provided for most settings but can be overridden based on specific requirements or conditions.
- Conditional logic in the application can further modify these settings based on other configurations like model specifications.

## Example

```yaml filename="interface"
interface:
  mcpServers:
    placeholder: "MCP Servers"
    use: true
    create: true
    share: false
    public: false
    trustCheckbox:
      label: "I trust this server"
      subLabel: "Only enable servers you trust"
  privacyPolicy:
    externalUrl: "https://example.com/privacy"
    openNewTab: true
  termsOfService:
    externalUrl: "https://example.com/terms"
    openNewTab: true
    modalAcceptance: true
    modalTitle: "Terms of Service"
    modalContent: |
      # Terms of Service
      ## Introduction
      Welcome to LibreChat!
  modelSelect: false
  parameters: true
  sidePanel: true
  presets: false
  prompts:
    use: true
    create: true
    share: true
    public: false
  bookmarks: true
  multiConvo: true
  agents:
    use: true
    create: true
    share: true
    public: false
  customWelcome: "Hey {{user.name}}! Welcome to LibreChat"
  runCode: true
  webSearch: true
  fileSearch: true
  fileCitations: true
```

## endpointsMenu

Controls the visibility of the endpoints menu dropdown in the chat interface.

**Key:**
<OptionTable
  options={[
    ['endpointsMenu', 'Boolean', 'Controls whether the endpoints menu is visible in the UI.', 'When set to `false`, users will not see the endpoint selector dropdown.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / endpointsMenu"
interface:
  endpointsMenu: false
```

## mcpServers

**Key:**
<OptionTable
  options={[
    ['mcpServers', 'Object', 'Contains settings related to the MCP (Model Context Protocol) server selection interface and access control.', 'Allows for customization of the placeholder text, user permissions, and trust checkbox labels.'],
  ]}
/>

**Sub-keys:**
<OptionTable
  options={[
    ['placeholder', 'String', 'The placeholder text displayed in the MCP server selection dropdown when no server is selected.', 'MCP Servers'],
    ['use', 'Boolean', 'Controls whether users have permission to use existing MCP servers.', 'true'],
    ['create', 'Boolean', 'Controls whether users have permission to create new MCP servers.', 'true'],
    ['share', 'Boolean', 'Controls whether users have permission to share MCP servers with other users.', 'false'],
    ['public', 'Boolean', 'Controls whether users can share MCP servers publicly (visible to all users).', 'false'],
    ['trustCheckbox', 'Object', 'Customizable labels for the trust checkbox in the MCP server dialog. Supports simple strings or language-keyed objects for internationalization.', 'See below'],
  ]}
/>

**trustCheckbox Sub-keys:**
<OptionTable
  options={[
    ['label', 'String or Object', 'The main label for the trust checkbox. Can be a simple string or a language-keyed object (e.g., { en: "I trust this server", es: "Confío en este servidor" }).', ''],
    ['subLabel', 'String or Object', 'The sub-label (help text) for the trust checkbox. Can be a simple string or a language-keyed object for internationalization.', ''],
  ]}
/>

**Example:**
```yaml filename="interface / mcpServers"
interface:
  mcpServers:
    placeholder: "Select MCP Server"
    use: true
    create: true
    share: false
    trustCheckbox:
      label:
        en: "I trust this server"
        es: "Confío en este servidor"
      subLabel:
        en: "Only enable servers you trust"
        es: "Solo habilite servidores en los que confíe"
```

## privacyPolicy

**Key:**
<OptionTable
  options={[
    ['privacyPolicy', 'Object', 'Contains settings related to the privacy policy link provided in the user interface.', 'Allows for the specification of a custom URL and the option to open it in a new tab.'],
  ]}
/>

**Sub-keys:**
<OptionTable
  options={[
    ['externalUrl', 'String (URL)', 'The URL pointing to the privacy policy document.', ''],
    ['openNewTab', 'Boolean', 'Specifies whether the link should open in a new tab.', ''],
  ]}
/>

## termsOfService

**Key:**
<OptionTable
  options={[
    ['termsOfService', 'Object', 'Contains settings related to the terms of service link provided in the user interface.', 'Allows for the specification of a custom URL and the option to open it in a new tab, as well as a modal acceptance dialog for the terms of service.'],
  ]}
/>

**Sub-keys:**
<OptionTable
  options={[
    ['externalUrl', 'String (URL)', 'The URL pointing to the terms of service document.', 'https://librechat.ai/tos'],
    ['openNewTab', 'Boolean', 'Specifies whether the link should open in a new tab.', 'true'],
    ['modalAcceptance', 'Boolean', 'Specifies whether to show a modal terms and conditions dialog for users to accept in order to be able to use LibreChat.', 'true'],
    ['modalTitle', 'String', 'Specifies a custom title for the modal terms and conditions dialog (optional).', 'Terms of Service'],
    ['modalContent', 'String', 'Specifies the content of the modal terms and conditions dialog in MarkDown format.', 'See librechat.yaml.example for how to correctly format the multi-line parameter.'],
  ]}
/>

## modelSelect

**Key:**
<OptionTable
  options={[
    ['modelSelect', 'Boolean', 'Determines whether the model selection feature is available in the UI.', 'Enabling this feature allows users to select different models directly from the interface.'],
  ]}
/>

**Default:** `true`

**Notes:**
- This is required to be `true` if using [`modelSpecs.addedEndpoints`](/docs/configuration/librechat_yaml/object_structure/model_specs#addedendpoints).
- If `modelSpecs.addedEndpoints` is used and `interface.modelSelect` is not explicitly set, it defaults to `true`.

**Example:**
```yaml filename="interface / modelSelect"
interface:
  modelSelect: true
```

## parameters

**Key:**
<OptionTable
  options={[
    ['parameters', 'Boolean', 'Toggles the visibility of parameter configuration options within the interface.', 'This setting is crucial for users who need to adjust parameters for specific functionalities within the application.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / parameters"
interface:
  parameters: false
```

## sidePanel

**Key:**
<OptionTable
  options={[
    ['sidePanel', 'Boolean', 'Controls the visibility of the side panel in the application\'s interface.', 'The side panel typically contains additional navigation or information relevant to the application\'s context.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / sidePanel"
interface:
  sidePanel: true
```

## presets

**Key:**
<OptionTable
  options={[
    ['presets', 'Boolean', 'Enables or disables the use of presets in the application\'s UI.', 'Presets can simplify user interactions by providing pre-configured settings or operations, enhancing user experience and efficiency.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / presets"
interface:
  presets: true
```

## prompts

**Key:**
<OptionTable
  options={[
    ['prompts', 'Boolean or Object', 'Controls prompt-related features for all users. Can be a boolean for simple enable/disable, or an object for granular control over use, creation, sharing, and public visibility.', 'When set to `false`, users will not have access to create, edit, or use custom prompts.'],
  ]}
/>

**Default:** `true`

**Important: Boolean vs Object Configuration**

- **Boolean (`prompts: true`)**: Only updates the `use` permission. Existing `create`, `share`, and `public` permission values are **preserved** from the database. Use this as a simple feature toggle without affecting other settings configured through the admin panel.

- **Object**: Updates only the sub-permissions that are explicitly specified. Any permissions not included in the config are preserved from the database.

When using the object structure:

**Sub-keys:**
<OptionTable
  options={[
    ['use', 'Boolean', 'Controls whether users can use prompts.', 'true'],
    ['create', 'Boolean', 'Controls whether users can create new prompts.', 'true'],
    ['share', 'Boolean', 'Controls whether users can share prompts with specific users/groups.', 'false'],
    ['public', 'Boolean', 'Controls whether users can share prompts publicly (visible to all users).', 'false'],
  ]}
/>

**Example (boolean - simple feature toggle):**
```yaml filename="interface / prompts (boolean)"
interface:
  prompts: true  # Only updates USE; create/share/public remain unchanged
```

**Example (object - granular control):**
```yaml filename="interface / prompts (object)"
interface:
  prompts:
    use: true
    create: false  # Disable creation while allowing use
    # share and public not specified - preserves existing values
```

**Example (object - full control):**
```yaml filename="interface / prompts (object)"
interface:
  prompts:
    use: true
    create: true
    share: true
    public: false
```

## bookmarks

**Key:**
<OptionTable
  options={[
    ['bookmarks', 'Boolean', 'Enables or disables all bookmarks-related features for all users.', 'When disabled, users will not be able to create, manage, or access bookmarks within the application.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / bookmarks"
interface:
  bookmarks: true
```

## memories

**Key:**
<OptionTable
  options={[
    ['memories', 'Boolean', 'Enables or disables the memories feature for all users in the interface.', 'When disabled, users will not have access to the memories panel or memory-related features.'],
  ]}
/>

**Default:** `true`

**Note:** This controls the UI visibility of the memories feature. For detailed memory behavior configuration (token limits, personalization, agent settings), see the [Memory Configuration](/docs/configuration/librechat_yaml/object_structure/memory).

**Example:**
```yaml filename="interface / memories"
interface:
  memories: true
```

## multiConvo

**Key:**
<OptionTable
  options={[
    ['multiConvo', 'Boolean', 'Enables or disables all "multiConvo", AKA multiple response streaming, related features for all users.', 'When disabled, users will not be able to stream responses from 2 AI models at the same time.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / multiConvo"
interface:
  multiConvo: true
```

## agents

More info on [Agents](/docs/features/agents)

**Key:**
<OptionTable
  options={[
    ['agents', 'Boolean or Object', 'Controls agent-related features for all users. Can be a boolean for simple enable/disable, or an object for granular control over use, creation, sharing, and public visibility.', 'When set to `false`, users will not have access to agents.'],
  ]}
/>

**Default:** `true`

**Important: Boolean vs Object Configuration**

- **Boolean (`agents: true`)**: Only updates the `use` permission. Existing `create`, `share`, and `public` permission values are **preserved** from the database. Use this as a simple feature toggle without affecting other settings configured through the admin panel.

- **Object**: Updates only the sub-permissions that are explicitly specified. Any permissions not included in the config are preserved from the database.

When using the object structure:

**Sub-keys:**
<OptionTable
  options={[
    ['use', 'Boolean', 'Controls whether users can use agents.', 'true'],
    ['create', 'Boolean', 'Controls whether users can create new agents.', 'true'],
    ['share', 'Boolean', 'Controls whether users can share agents with specific users/groups.', 'false'],
    ['public', 'Boolean', 'Controls whether users can share agents publicly (visible to all users).', 'false'],
  ]}
/>

**Example (boolean - simple feature toggle):**
```yaml filename="interface / agents (boolean)"
interface:
  agents: true  # Only updates USE; create/share/public remain unchanged
```

**Example (object - granular control):**
```yaml filename="interface / agents (object)"
interface:
  agents:
    use: true
    create: false  # Disable creation while allowing use
    # share and public not specified - preserves existing values
```

**Example (object - full control):**
```yaml filename="interface / agents (object)"
interface:
  agents:
    use: true
    create: true
    share: true
    public: false
```

## remoteAgents

Controls access to the Agents API (OpenAI-compatible and Open Responses API endpoints), which allows external applications to interact with LibreChat agents programmatically via API keys.

**Key:**
<OptionTable
  options={[
    ['remoteAgents', 'Object', 'Configuration for remote agent API access control. All fields default to `false`.', ''],
  ]}
/>

**Sub-keys:**
<OptionTable
  options={[
    ['use', 'Boolean', 'Controls whether users can access the remote agents API.', 'false'],
    ['create', 'Boolean', 'Controls whether users can create API keys for remote agents.', 'false'],
    ['share', 'Boolean', 'Controls whether users can share remote agents.', 'false'],
    ['public', 'Boolean', 'Controls whether users can share remote agents publicly.', 'false'],
  ]}
/>

**Default:** All fields default to `false` (disabled).

**Example:**
```yaml filename="interface / remoteAgents"
interface:
  remoteAgents:
    use: true
    create: true
    share: false
    public: false
```

**Note:** Admin users have all remote agent permissions enabled by default regardless of this configuration.

## temporaryChat

Controls whether the temporary chat feature is available to users. Temporary chats are not saved to conversation history and are automatically deleted after a configurable retention period.

**Key:**
<OptionTable
  options={[
    ['temporaryChat', 'Boolean', 'Enables or disables the temporary chat feature.', 'When set to `false`, users will not see the option to start temporary chats.'],
  ]}
/>

**Default:** `true`

**Note:** The retention period for temporary chats can be configured using `temporaryChatRetention`.

**Example:**
```yaml filename="interface / temporaryChat"
interface:
  temporaryChat: true
```

## temporaryChatRetention

The `temporaryChatRetention` configuration allows you to customize how long temporary chats are retained before being automatically deleted.

**Key:**
<OptionTable
  options={[
    ['temporaryChatRetention', 'Number', 'Sets the retention period for temporary chats in hours.', 'temporaryChatRetention: 168'],
  ]}
/>

**Validation Rules:**
- **Minimum**: 1 hour (prevents immediate deletion)
- **Maximum**: 8760 hours (1 year maximum retention)
- **Default**: 720 hours (30 days)

**Configuration Methods:**
1. **LibreChat.yaml** (recommended): `interface.temporaryChatRetention: 168`
2. **Environment Variable** (deprecated): `TEMP_CHAT_RETENTION_HOURS=168`

> **Note:** The environment variable `TEMP_CHAT_RETENTION_HOURS` is deprecated. Please use the `interface.temporaryChatRetention` config option in `librechat.yaml` instead. The config file value takes precedence over the environment variable.

**Example:**
```yaml filename="interface / temporaryChatRetention"
interface:
  temporaryChatRetention: 168  # Retain temporary chats for 7 days
```

**Common Retention Periods:**
- **1 hour**: `temporaryChatRetention: 1` (minimal retention)
- **24 hours**: `temporaryChatRetention: 24` (1 day)
- **168 hours**: `temporaryChatRetention: 168` (1 week)
- **720 hours**: `temporaryChatRetention: 720` (30 days - default)
- **8760 hours**: `temporaryChatRetention: 8760` (1 year - maximum)

## customWelcome

**Key:**
<OptionTable
  options={[
    ['customWelcome', 'String', 'Allows administrators to define a custom welcome message for the chat interface, with the option to personalize it using the {{user.name}} parameter.'],
  ]}
/>

**Default:** _None (if not specified, a default greeting is used)_

**Example:**
```yaml filename="interface / customWelcome"
interface:
    customWelcome: "Hey {{user.name}}! Welcome to LibreChat"
```

**Note:** You can use `{{user.name}}` within the `customWelcome` message to dynamically insert the user's name for a personalized greeting experience.

## runCode

Enables/disables the "Run Code" button for Markdown Code Blocks. More info on the [LibreChat Code Interpreter API](/docs/features/code_interpreter)

**Note:** This setting does not disable the [Agents Code Interpreter Capability](/docs/features/agents#code-interpreter). To disable the Agents Capability, see the [Agents Endpoint configuration](/docs/configuration/librechat_yaml/object_structure/agents) instead.

**Key:**
<OptionTable
  options={[
    ['runCode', 'Boolean', 'Enables or disables the "Run Code" button for Markdown Code Blocks.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / runCode"
interface:
  runCode: true
```

## webSearch

Enables/disables the web search button in the chat interface. More info on [Web Search Configuration](/docs/configuration/librechat_yaml/object_structure/web_search)

**Note:** This setting does not disable the [Agents Web Search Capability](/docs/features/agents#web-search). To disable the Agents Capability, see the [Agents Endpoint configuration](/docs/configuration/librechat_yaml/object_structure/agents) instead.

**Key:**
<OptionTable
  options={[
    ['webSearch', 'Boolean', 'Enables or disables the web search button in the chat interface.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / webSearch"
interface:
  webSearch: true
```

## fileSearch

Enables/disables the file search (for RAG API usage via tool) button in the chat interface

**Note:** This setting does not disable the [Agents File Search Capability](/docs/features/agents#file-search). To disable the Agents Capability, see the [Agents Endpoint configuration](/docs/configuration/librechat_yaml/object_structure/agents) instead.

**Key:**
<OptionTable
  options={[
    ['fileSearch', 'Boolean', 'Enables or disables the file search button in the chat interface.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / fileSearch"
interface:
  fileSearch: true
```

## fileCitations

Controls the global availability of file citations functionality. When disabled, it effectively removes the `FILE_CITATIONS` permission for all users, preventing any file citations from being displayed when using file search, regardless of individual user permissions.

**Note:** 
- This setting acts as a global toggle for the `FILE_CITATIONS` permission system-wide.
- When set to `false`, no users will see file citations, even if they have been granted the permission through roles.
- File citations require the `fileSearch` feature to be enabled.
- When using agents with file search capability, citation behavior (quantity and quality) can be configured through the [Agents endpoint configuration](/docs/configuration/librechat_yaml/object_structure/agents#file-citation-configuration-examples).

**Key:**
<OptionTable
  options={[
    ['fileCitations', 'Boolean', 'Globally enables or disables the FILE_CITATIONS permission for all users, controlling whether file search results can include source citations.'],
  ]}
/>

**Default:** `true`

**Example:**
```yaml filename="interface / fileCitations"
interface:
  fileCitations: true
```

## peoplePicker

Controls which principal types (users, groups, roles) are available for selection in the people picker interface, typically used when sharing agents or managing access controls.

**Key:**
<OptionTable
  options={[
    ['peoplePicker', 'Object', 'Configuration for which principal types are available in the people picker interface.'],
  ]}
/>

**Sub-keys:**

<OptionTable
  options={[
    ['users', 'Boolean', 'Enables user search in the people picker. Default: true'],
    ['groups', 'Boolean', 'Enables group search in the people picker. Default: true'],
    ['roles', 'Boolean', 'Enables role search in the people picker. Default: true'],
  ]}
/>

**Default:**
```yaml
peoplePicker:
  users: true
  groups: true
  roles: true
```

**Example:**
```yaml filename="interface / peoplePicker"
interface:
  peoplePicker:
    users: true
    groups: true
    roles: false  # Disable role selection in people picker
```

## marketplace

Enables/disables access to the Agent Marketplace.

**Key:**
<OptionTable
  options={[
    ['marketplace', 'Object', 'Configuration for Agent Marketplace access control.'],
  ]}
/>

**Sub-keys:**

<OptionTable
  options={[
    ['use', 'Boolean', 'Enables or disables marketplace access. Default: false'],
  ]}
/>

**Default:**
```yaml
marketplace:
  use: false
```

**Example:**
```yaml filename="interface / marketplace"
interface:
  marketplace:
    use: true  # Enable marketplace access
```
