# Message Composer (https://www.librechat.ai/docs/features/composer)

The message composer is the box at the bottom of every chat. Besides the text field, it holds one **+** button that opens everything you can add to a message (files, tools, skills, MCP servers and files you uploaded before), the chips for the tools that are currently on, and the controls for reasoning, dictation and sending.

## What's on the composer

| Element | What it does |
|---|---|
| **+** (**Attach and tools**) | Opens the palette: upload options, tools, skills, MCP servers and your recent files, all searchable from one field. |
| Tool chips | One chip per tool or MCP server that is on, next to the **+** button. Remove a chip to turn that tool off. |
| Staged context | Files, quotes and skills attached to your next message, shown above the text field. |
| **Thinking** | Reasoning effort for models that support it. |
| Context usage | How much of the model's context window the conversation uses, when token usage is available. |
| **Use microphone** | Dictates your message with speech to text, when speech to text is enabled. |
| Send / Stop | Sends the message, or stops the response that is streaming. |

To see which keys apply right now, such as `/ for prompts`, `@ for models` or `Enter to send`, turn on **Show composer tips** in **Settings > General**. A one-line tip then appears under the text field. It is off by default.

![The composer with the + palette open, showing the Attach and Tools sections](/images/composer/composer-palette.png)

## Add files

Click **+** and choose an option in the **Attach** section. You can also drag files onto the composer or paste them.

By default, LibreChat uses the unified uploader: you pick only a source, and it decides how each file reaches the model (native provider upload, text extraction, or a tool such as File Search) from the file type and the endpoint.

| Option | When it appears |
|---|---|
| **From Local Computer** | Always, with the default uploader. |
| **From SharePoint** | When the [SharePoint file picker](/docs/configuration/sharepoint) is enabled. |

If an administrator sets [`fileConfig.legacyFileUploadUX: true`](/docs/configuration/librechat_yaml/object_structure/file_config#legacyfileuploadux), you choose the destination yourself instead. The **Attach** section then shows the main option first and folds the rest behind **More upload options**:

| Option | When it appears |
|---|---|
| **Upload to Provider** | The provider accepts documents directly (for example OpenAI, Anthropic, Google, Bedrock, OpenRouter and custom endpoints, or Azure OpenAI with the Responses API on). |
| **Upload Image** | Shown instead of **Upload to Provider** when the provider only accepts images. |
| **Upload as Text** | The [context capability](/docs/features/upload_as_text) is enabled. |
| **Upload for File Search** | File Search is enabled and allowed for the current agent. Picking it also turns File Search on. |
| **Upload to Code Environment** | Code execution is enabled and allowed for the current agent. Picking it also turns **Run Code** on. |
| **Attach Files** | Assistants endpoints, which handle files with the assistant's own configuration. |

With SharePoint enabled in this mode, each option also has a SharePoint version, labeled for example **Upload to Provider (From SharePoint)**.

### Reuse a file you uploaded before

The **Your files** section of the palette lists your most recently used files. Select one to attach it again without uploading it. Typing in the search field searches all of your files by name.

Choose **Show all** on the section to browse every file in a dialog, with **All**, **Images** and **Documents** views, a search field, and a preview for images and PDFs.

The palette shows up to five recent files. Administrators can lower that number, or hide the list with `0`, using [`interface.composerRecentFiles`](/docs/configuration/librechat_yaml/object_structure/interface#composerrecentfiles).

## Turn on tools, skills and MCP servers

The palette lists everything you can turn on for the current conversation, grouped into sections:

- **Tools**: built-in tools such as **Web Search**, **Run Code**, **File Search**, **Skills**, **Memory** and **Artifacts**, each shown only when it is enabled and you have access to it.
- **Skills**: individual [skills](/docs/features/skills) you can attach to your next message.
- **MCP Servers**: the [MCP servers](/docs/features/mcp) available in chat.

Select a tool or MCP server to switch it on or off. The palette stays open, so you can switch several in one visit. Each tool that is on appears as a chip on the composer; remove the chip to switch it off. Some chips carry a mode menu, for example the **Artifacts** generation mode.

Selecting a skill stages it for your next message instead: it appears in the [staged context](#staged-context) rather than as a chip.

MCP server rows show each server's connection status. Selecting a server that is not connected starts its connection (including an OAuth sign-in, when the server needs one) or opens its configuration first if it needs your credentials. Once connected, servers that take user credentials also have a **Configure** control on the row, and **Web Search** has one for its API keys.

<Callout type="info" title="Agents bring their own tools">
  With an agent selected, the **Tools** and **MCP Servers** sections are hidden, because the agent's own configuration decides which tools it uses. On other endpoints, a [model spec](/docs/configuration/librechat_yaml/object_structure/model_specs#hidebadgerow) with `hideBadgeRow: true` hides the **Tools**, **Skills** and **MCP Servers** sections. **Attach** and **Your files** stay available in every case.
</Callout>

### Show all

The palette shows a handful of rows per section. Choose **Show all** on the **Skills**, **MCP Servers** or **Your files** header to open a dialog with the full list, a search field and filters. Skills and MCP servers have three views: **All**, **Made by you** and **Favorites**.

### Favorites and pinned tools

Star a row to add it to **Favorites**, which sits at the top of the palette. With a row highlighted, press <kbd>Ctrl</kbd>+<kbd>D</kbd> (<kbd>Cmd</kbd>+<kbd>D</kbd> on macOS) to star or unstar it. Favorites are saved to your account.

Administrators can pin built-in tools with [`interface.defaultPinnedTools`](/docs/configuration/librechat_yaml/object_structure/interface#defaultpinnedtools). A pinned tool keeps its chip on the composer even while it is off, so you can switch it on with one click. Removing the chip of a pinned tool that is off unpins it.

## Staged context

Everything attached to your next message appears above the text field before you send it:

- **Files**, with upload progress and a preview for images. Long pasted text can also land here as a file, which you can edit or move back into the message.
- **Quotes** you selected from earlier messages.
- **Skills** you picked from the palette or with the `$` command.

Remove any item with its remove button. Everything staged is sent with your next message.

## Thinking and effort

For models with a reasoning setting, the **Thinking** control opens a slider that runs from **Faster** to **Smarter**, plus the provider's separate modes such as **Auto** or off. It changes the same parameter as the Parameters panel, so it is hidden when the model has no reasoning setting or when the deployment turns parameters off with `interface.parameters`.

## Queue and steer while a response streams

You can keep typing while a response is streaming. Depending on the endpoint and your settings, pressing <kbd>Enter</kbd> either queues the message to send after the response, or steers an agent's current response. The composer tip names the action that <kbd>Enter</kbd> performs at that moment.

Queued messages appear in a **Queued messages** rail above the composer, where you can:

- **Edit message** to move it back into the text field.
- **Remove message** to take it out of the queue.
- **Send now** to send it right away instead of waiting.
- Reorder messages by dragging them, or by focusing one and pressing the up and down arrow keys.

For how steering works and when it is available, see [Steering and Queued Messages](/docs/features/agents#steering-and-queued-messages).

## Keyboard shortcuts

### In the text field

| Keys | Action |
|---|---|
| <kbd>Enter</kbd> | Send the message (queue or steer while a response streams). |
| <kbd>Shift</kbd>+<kbd>Enter</kbd> | New line. |
| <kbd>Ctrl</kbd>+<kbd>Enter</kbd> (<kbd>Cmd</kbd>+<kbd>Enter</kbd>) | While a response streams: the alternate action, **send now** when <kbd>Enter</kbd> queues, or **queue** when <kbd>Enter</kbd> steers. |
| <kbd>Alt</kbd>+<kbd>Enter</kbd> (<kbd>Option</kbd>+<kbd>Enter</kbd>) | While an agent responds: interrupt and send, when available. |
| <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd> (<kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>X</kbd>) | Stop the response. |
| `/` | Insert a saved prompt. |
| `@` | Switch to another model, preset or agent. |
| `+` | Add a model or preset for an additional response. |
| `$` | Pick a skill for the next message. |

If you turned off **Press Enter to send messages**, <kbd>Ctrl</kbd>+<kbd>Enter</kbd> (<kbd>Cmd</kbd>+<kbd>Enter</kbd>) sends and <kbd>Enter</kbd> adds a new line.

### In the palette

| Keys | Action |
|---|---|
| Type | Search tools, skills, servers, upload options and files. |
| <kbd>↑</kbd> / <kbd>↓</kbd> | Move through the rows. |
| <kbd>Enter</kbd> | Select the highlighted row. |
| <kbd>Ctrl</kbd>+<kbd>D</kbd> (<kbd>Cmd</kbd>+<kbd>D</kbd>) | Add the highlighted row to Favorites, or remove it. |
| <kbd>Backspace</kbd> on an empty search | Close the palette. |
| <kbd>Escape</kbd> | Close the palette. |
