---
title: list_pages, get_page, create_page, update_page, delete_page
description: Create, update, delete, and version pages via MCP.
section: MCP Reference
order: 2
---

# list_pages, get_page, create_page, update_page, delete_page

Create, update, delete, and manage versions of website pages.

## Actions

### list

List all pages for a website. Returns paths, titles, indexability, and version counts.

**Parameters:**
- `domain` — Website subdomain, domain, or UUID
- `limit` — Max results (default 50, max 100)
- `offset` — Items to skip (default 0)
- `path` — Directory prefix filter (e.g. `/blog`). Matches the prefix page itself plus all descendants recursively unless `recursive:false` (optional)
- `recursive` — Default `true` (all descendants). `false` lists only direct children and surfaces a `directories:` line of immediate subdirectory paths (optional)
- `pattern` — Glob matched against the full path (`/blog/*`, `/blog/**/*`). `*` does not cross a slash; `**/` recurses (optional)
- `content_query` — Case-insensitive regex (PostgreSQL ARE) matched against each page's **live** version `html_content`, `title`, and `additional_html_head_html`. Max 200 chars. 2.5 s timeout — narrow broad searches with `path` (optional)

All filters compose (all must match). With `recursive:false`, the `directories:` line is **structural** — derived from the path prefix only, unaffected by `pattern`/`content_query`.

### get

Get a specific page.

**Parameters:**
- `domain` — Website subdomain, domain, or UUID
- `path` — Page path (e.g., `/about`)
- `version_number` — Specific version (optional)
- `pinned` — Retrieve pinned version (optional)

### create

Create a new page.

**Parameters:**
- `domain` — Website subdomain, domain, or UUID
- `path` — Page path (e.g., `/about`, `/posts/:slug`)
- `html` — HTML content
- `title` — Page title (optional)
- `language` — BCP 47 tag (optional). See [Internationalization (i18n)](/docs/i18n) for multilingual setup.
- `indexable` — Whether search engines should index this page (default: `true`)
- `table_slug` — Table slug; makes page a dynamic row template. Path must contain `:slug`. Additional `:field_name` placeholders map to string/text schema fields (e.g. `/blog/:lang/:slug`). Template HTML gets `row` variable for table row data. (optional)

### update

Update an existing page.

**Parameters:**
- `website` — Website subdomain, domain, or UUID
- `path` — Page path
- `html` — Full HTML to overwrite the page body (optional)
- `additional_html_head_html` — Full HTML to overwrite the page-specific `<head>` block (optional)
- `replacements` — Array of `{old_html, new_html, mode}` objects for find-and-replace (optional)
  - `old_html` — HTML snippet to find
  - `new_html` — Replacement HTML
  - `mode` — Replace mode: `replace`, `replace_all`, `append` (default: `replace`)
- `dry_run` — When `true`, validate without creating a new version (optional)

`html` and `additional_html_head_html` may be provided together. `replacements` is mutually exclusive with both. Use `update_page_settings` to change `title`, `path`, `language`, `table_slug`, or `indexable`. See [Internationalization (i18n)](/docs/i18n) for multilingual page setup.

### delete

Delete a page and all its versions.

**Parameters:**
- `domain` — Website subdomain, domain, or UUID
- `path` — Page path

## Version Management

Use the unified version tools with `target: "/about"` (page path):

- `pin_version` — Pin a specific version
- `revert_version` — Revert to a previous version

## OAuth Scopes

| Action | Scope |
|--------|-------|
| list, get | `page:read` |
| create, update | `page:write` |
| delete | `page:delete` |
| pin_version | `version:pin` |
| revert_version | `version:revert` |
