diff --git a/content/docs/configuration/librechat_yaml/object_structure/interface.mdx b/content/docs/configuration/librechat_yaml/object_structure/interface.mdx
index 554453bd9..2654122c4 100644
--- a/content/docs/configuration/librechat_yaml/object_structure/interface.mdx
+++ b/content/docs/configuration/librechat_yaml/object_structure/interface.mdx
@@ -1212,20 +1212,25 @@ interface:
## marketplace
-Enables/disables access to the Agent Marketplace.
+Enables/disables access to the Agent Marketplace and, optionally, defines custom categories used to organize agents within it.
> **Deprecated for permission management.** Seeds the `MARKETPLACE` role permission at startup for the default `USER` role only. Prefer the [Admin Panel](/docs/features/admin_panel).
**Key:**
**Sub-keys:**
**Default:**
@@ -1242,3 +1247,90 @@ interface:
marketplace:
use: true # Enable marketplace access
```
+
+### categories
+
+Customizes the categories displayed in the Agent Marketplace. The list is synced to the database on startup: new entries are created, existing entries are updated, and custom entries removed from the YAML are deleted from the database. Categories are only synced when `marketplace.use` is `true`.
+
+**Key:**
+
+
+**Sub-keys:**
+
+
+
+**`list` item sub-keys:**
+
+
+
+**Example:**
+```yaml filename="interface / marketplace / categories"
+interface:
+ marketplace:
+ use: true
+ categories:
+ enableDefaultCategories: true # Built-in categories appear first
+ list: # Order here determines marketplace order
+ - value: "Education"
+ description: "Educational agents."
+ - value: "productivity"
+ label: "Productivity & Focus" # Optional, defaults to value
+ description: "Productivity agents."
+```
+
+#### Localized labels and descriptions
+
+`label` and `description` are displayed verbatim unless they start with `com_`, in which case the client resolves them as UI translation keys and renders the string for each user's own language. Omitting `label` displays `value` exactly as typed, in every locale.
+
+```yaml
+list:
+ - value: "support"
+ label: "com_agents_category_aftersales" # localized per user
+ description: "com_agents_category_aftersales_description"
+ - value: "Education" # shown as "Education" everywhere
+ description: "Educational agents."
+```
+
+
+ A `com_` key must already exist in LibreChat's bundled locale files. Unknown keys are rendered
+ literally, so a typo shows up in the UI as `com_agents_category_typo` rather than falling back to
+ the category name.
+
+
+#### Overriding built-in categories
+
+Declaring a `value` that matches a built-in category overrides that category's `label` and `description` instead of creating a new one. Fields you omit keep their existing values, so declaring only `value` changes nothing but visibility.
+
+An overridden category stays a built-in: it keeps its original position in the marketplace, is never deleted when removed from `list`, and remains active even when `enableDefaultCategories` is `false`. That last point is how you keep a subset of the built-in categories while hiding the rest.
+
+```yaml filename="interface / marketplace / categories"
+interface:
+ marketplace:
+ use: true
+ categories:
+ enableDefaultCategories: false # hide the built-in categories...
+ list:
+ - value: "aftersales" # ...except this one, renamed and kept visible
+ label: "Customer Success"
+ - value: "Education"
+ description: "Educational agents."
+```
+
+> **Note:** Removing a custom category from `list` deletes it from the database on the next startup. Built-in categories are never deleted, `enableDefaultCategories: false` only hides them.
+
+> **Note:** The `general` category stays active even when `enableDefaultCategories` is `false`, because it is the category assigned to agents created without one. Hiding it would leave those agents reachable only from the "All" tab. You can still rename it by declaring `general` in `list`.