---
title: MCP tools
description: The full catalogue of Quilium MCP server tools, grouped by domain, plus the wrapper and write-shape gotchas that produce most 422 errors.
updated: 2026-06-22
next: skills
---

The Quilium [MCP](/en/docs/ai-mcp-skills) server exposes the site as a set of tools; your client prefixes them with the name you gave the connector when you [connected it](/en/docs/connect-agent-mcp). An [AI agent](/en/docs/ai-mcp-skills) drives the same operations a developer runs through the [CLI](/en/docs/cli). Tools are grouped below by domain; read-only tools are the `get-*` family. To put these in motion, see [Drive the site with MCP tools](/en/docs/drive-site-with-mcp).

## Tool catalogue

### Pages

| Tool | Notes |
|---|---|
| `get-page-with-content` | Read a page and its content blocks. |
| `update-page` | FLAT root fields. `metas` and `custom` are JSON-stringified; no `data:` wrapper. |
| `delete-page` | Remove a page. |
| `publish-page` | Push a page live. |
| `add-page-to-navigation` | Creates hidden detail pages. |
| `get-navigations-with-pages` | Lightweight sitemap of every navigation and its pages. |
| `reorder-navigation` | Flat `[{id, order, parent_id}]`, partial: send only the moved pages. |
| `create-navigation`, `update-navigation`, `delete-navigation` | Navigation CRUD. Structural: refused for content-only profiles. |

### Content blocks

| Tool | Notes |
|---|---|
| `get-content` | Read a content block. |
| `add-content-to-page` | Drop a block into a page section. |
| `update-content` | Wrapper is **`custom:`**. |
| `delete-content` | Remove a block. |
| `update-content-state` | Set `draft` or `active`. |
| `order-contents` | Reorder blocks within a section. |

### Collection entries

| Tool | Notes |
|---|---|
| `get-itemset-items` | List entries in a collection. |
| `get-itemset-item-by-id` | Read one entry. |
| `create-itemset-item` | Create an entry. |
| `update-itemset-item` | Wrapper is **`data:`**, not `custom:`. One locale per write: `data` alone, OR one `translations.<locale>` alone. |
| `delete-itemset-item` | Remove an entry. |

### Media

| Tool | Notes |
|---|---|
| `get-media`, `get-media-list` | Read media. |
| `get-media-folders` | Read the folder tree. |
| `upload-media`, `request-upload-url` | Upload, or get a signed upload URL. |
| `update-media`, `replace-media`, `delete-media` | Edit, swap, remove. |
| `create-media-folder`, `update-media-folder`, `move-media-folder`, `delete-media-folder` | Folder operations. |
| `move-media-to-folder` | Move media between folders. |

### Types and settings

| Tool | Notes |
|---|---|
| `get-site-settings` | Param `type`: `page-types`, `item-set-types`, `global-fields`, `content-types`, `miscellaneous`. |
| `get-site-context` | Read the site's resolved context. |
| `get-me` | The authenticated account, and your profile on the site when `website` is passed. |
| `update-setting` | Whole-file write. **Destructive** — replaces the entire settings file. |
| `update-settings-partial` | Canonical. `target` = the top-level key of the YAML being written. |

### Translations and dictionary

| Tool | Notes |
|---|---|
| `get-dictionary` | Read static UI strings. |
| `update-dictionary-translations` | Write static UI `_()` strings. |

### Routes

| Tool | Notes |
|---|---|
| `get-routes` | Read routes. |
| `create-route`, `update-route`, `delete-route` | Route CRUD. |

### Global fields

| Tool | Notes |
|---|---|
| `get-global-fields-data` | Read [global fields](/en/docs/global-fields) values. |
| `update-global-fields-data` | `data` and `translations` are JSON-stringified. |

### Skills

| Tool | Notes |
|---|---|
| `get-skills` | The 3-level skill taxonomy. |
| `get-skill` | Read one skill by slug. |
| `get-documentation` | **Deprecated** — prefer `get-skills` and `get-skill`. |

### Feedback, images, AI

| Tool | Notes |
|---|---|
| `submit-feedback` | Send feedback. |
| `generate-image`, `edit-image`, `get-image-result` | AI image generation and retrieval. |
| `update-ai-instructions` | Write the site's agent instructions. |

## Key gotchas

The write shapes below are not interchangeable. A wrong wrapper, or a bare scalar where an array is expected, returns a 422.

| Rule | Detail |
|---|---|
| Wrapper differs per object | `update-content` writes under `custom:`; `update-itemset-item` writes under `data:`. Mixing them is the most common error. |
| References have two shapes | Media fields (`image`, `file`) write as `[{id: '<uuid>'}]`. Every id reference — `items`, `smartselect` with `source: items`, `page` — writes as a flat `['<uuid>']`. Never a bare id. See [custom fields](/en/docs/custom-fields). |
| `update-settings-partial` target | `target` MUST equal the top-level key of the `yamlContent` being sent. A mismatch fails silently with no warning. |
| `replace` is whole-block | A `replace` operation sends the WHOLE block. There is no merge with existing values. |
| One locale per translation write | `update-itemset-item` and translation writes accept at most one locale per call. |
| 422 diagnosis | A 422 is usually the wrong wrapper, or sending `translations` alone on a create. |

<div class="q-callout q-callout-warn"><i class="fa-solid fa-triangle-exclamation lead"></i>
  <div><b>Two settings tools, one safe choice.</b> <code>update-settings-partial</code> is canonical: it targets a single top-level key. <code>update-setting</code> rewrites the whole settings file and is destructive — reach for it only when you intend to replace everything.</div></div>

<div class="q-callout q-callout-note"><i class="fa-solid fa-circle-info lead"></i>
  <div><b><code>get-documentation</code> is deprecated.</b> It is treated as nonexistent. Use <code>get-skills</code> for the taxonomy and <code>get-skill</code> for one guide — they return live, modular content. See the <a href="/en/docs/skills">MCP skill library</a>.</div></div>

## Related

<div class="q-cards">
  <a class="q-card reco" href="/en/docs/skills"><span class="k">Recommended</span><span class="t">MCP skill library</span><span class="d">The agent-facing library these two tools resolve against.</span></a>
  <a class="q-card" href="/en/docs/ai-mcp-skills"><span class="t">AI, MCP and skills</span><span class="d">Why Quilium exposes an MCP server.</span></a>
  <a class="q-card" href="/en/docs/content-types"><span class="t">Content-type schema</span><span class="d">The `custom:` wrapper shape that `update-content` writes.</span></a>
  <a class="q-card" href="/en/docs/itemset-types"><span class="t">Collection-type schema</span><span class="d">The `data:` wrapper shape that `update-itemset-item` writes.</span></a>
  <a class="q-card" href="/en/docs/site-settings"><span class="t">Site settings</span><span class="d">The keys `update-settings-partial` targets.</span></a>
</div>
