Sites and pages
Generated MCP reference for sites and pages.
This page is generated from mcp-catalog.json. Do not edit it by hand.
Source: paper3 local extraction on 2026-05-29. Generated: 2026-05-29T11:34:45.044Z.
create_page
Create page
Creates a new page in the site. Pass a unique slug (e.g. '/about' or '/blog/[slug]' for dynamic pages) and a human title. The page ships with THREE breakpoint artboards by default — desktop (1280), tablet (834), mobile (390) — laid out side-by-side on the canvas. Tablet inherits visually from desktop, mobile inherits from tablet, until you author divergent content into them. ALWAYS author desktop first; the inheritance handles the smaller breakpoints automatically. Set withDefaultArtboard: false only if you intend to drop in custom artboards via add_artboard_breakpoint. Returns the new page id and the desktop artboard id.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | |
title | string | Yes | |
meta | object | No | |
withDefaultArtboard | boolean | No | |
isHome | boolean | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"meta": {
"type": "object",
"properties": {
"metaTitle": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"canonicalUrl": {
"type": "string"
},
"noIndex": {
"type": "boolean"
},
"noFollow": {
"type": "boolean"
},
"locale": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"alternates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"locale": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"locale",
"url"
],
"additionalProperties": false
}
},
"ogTitle": {
"type": "string"
},
"ogDescription": {
"type": "string"
},
"ogImage": {
"type": "string"
},
"twitterCard": {
"type": "string",
"enum": [
"summary",
"summary_large_image"
]
},
"twitterSite": {
"type": "string"
},
"quickAnswer": {
"type": "string"
},
"publishedAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"jobTitle": {
"type": "string"
},
"sameAs": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"aiCrawlers": {
"type": "object",
"properties": {
"gptbot": {
"type": "boolean"
},
"googleExtended": {
"type": "boolean"
},
"claudeWeb": {
"type": "boolean"
},
"perplexityBot": {
"type": "boolean"
},
"ccBot": {
"type": "boolean"
},
"bytespider": {
"type": "boolean"
},
"applebot": {
"type": "boolean"
}
},
"additionalProperties": false
},
"speakable": {
"type": "object",
"properties": {
"cssSelectors": {
"type": "array",
"items": {
"type": "string"
}
},
"xpath": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"schemas": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"additionalProperties": false
},
"withDefaultArtboard": {
"type": "boolean"
},
"isHome": {
"type": "boolean"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"slug",
"title"
],
"additionalProperties": false
}delete_page
Delete page
Removes a page from the site. The site must always retain at least one page; deleting the only page is a no-op.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pageId | string | Yes | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"pageId": {
"type": "string"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"pageId"
],
"additionalProperties": false
}duplicate_page
Duplicate page
Clones a page with a fresh id and slug. Useful when iterating on variations or when an existing page is the right starting point for a new one.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pageId | string | Yes | |
title | string | No | |
slug | string | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"pageId": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"pageId"
],
"additionalProperties": false
}list_pages
List pages
Returns the full sitemap: every page with its slug, title, meta, isHome, hidden, and the list of artboards it owns. Call this before edits to know the page ids.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"additionalProperties": false
}regenerate_sitemap
Regenerate sitemap
Triggers a fresh emit of /sitemap.xml. paper3 generates the sitemap on every request from the live doc.pages (no static cache), so this tool is effectively a confirmation hook: call it after a batch of page mutations to fetch the resulting URL set, validate the structure, and confirm to the user that the published sitemap reflects the latest changes. Returns the absolute sitemap URL.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"additionalProperties": false
}set_page_collection_binding
Bind page to a CMS collection
Turns a page into a CMS-driven page. mode: 'listing' makes it the feed page (typically /<collection-slug>) — drop a <div data-paper-type="repeater" data-collection-id="…"> inside it via write_html to render the items. mode: 'single' makes it a dynamic per-item template — give the page slug a [slug] segment (e.g. '/posts/[slug]') and the public router substitutes the matched item's slug in the URL, then renders the page with \{\{field\}\} tokens resolved against that item. Pass binding: null to disconnect.
The single-template route is wired: a published item with slug 'my-post' will render at '/posts/my-post'. Use \{\{title\}\}, \{\{coverImage\}\}, \{\{@url\}\}, etc. anywhere in the authored HTML to bind to the current item's data.
For any new collection ship the pair: ONE listing page (e.g. /posts) + ONE single template (e.g. /posts/[slug]). See get_guide(\{ topic: 'collections' \}) for the full flow.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pageId | string | Yes | |
binding | unknown | Yes | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"pageId": {
"type": "string"
},
"binding": {},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"pageId",
"binding"
],
"additionalProperties": false
}update_page
Update page (title / slug / status / meta / home — pick fields)
One-stop page mutator. Pass pageId plus ANY subset of fields you want to change — the rest stay untouched.
Fields:
• title — human-readable title shown in the editor sidebar + default nav label. Separate from meta.metaTitle (the SEO title).
• slug — URL slug. Normalised to lowercase + dashes + leading /. Use [name] segments for dynamic pages bound to a collection.
• status — published | draft | hidden. Default published. Mirrors status === 'hidden' onto the legacy hidden flag automatically.
• hidden — boolean shortcut for status=hidden vs status=published. Kept for back-compat with the old set_page_hidden tool; prefer status.
• isHome — true makes this page the site's home page (slug becomes /). Other pages are demoted automatically.
• meta — patch the page's SEO/GEO/social meta bag (metaTitle / metaDescription / ogImage / quickAnswer / aiCrawlers / schemas / …). Combined with metaReplace: true to overwrite instead of patch-merge.
• metaReplace — paired with meta. When true the existing meta is wiped and replaced wholesale.
Recipes:
• Rename : \{ pageId, title: 'About us' \}
• Slug : \{ pageId, slug: '/about' \}
• Publish: \{ pageId, status: 'published' \}
• Hide : \{ pageId, status: 'hidden' \}
• Home : \{ pageId, isHome: true \}
• Meta : \{ pageId, meta: \{ metaTitle: 'About — Acme', metaDescription: '...' \} \}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
pageId | string | Yes | |
title | string | No | |
slug | string | No | |
status | string | No | |
hidden | boolean | No | |
isHome | boolean | No | |
meta | object | No | |
metaReplace | boolean | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"pageId": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"published",
"draft",
"hidden"
]
},
"hidden": {
"type": "boolean"
},
"isHome": {
"type": "boolean"
},
"meta": {
"type": "object",
"properties": {
"metaTitle": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"canonicalUrl": {
"type": "string"
},
"noIndex": {
"type": "boolean"
},
"noFollow": {
"type": "boolean"
},
"locale": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"alternates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"locale": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"locale",
"url"
],
"additionalProperties": false
}
},
"ogTitle": {
"type": "string"
},
"ogDescription": {
"type": "string"
},
"ogImage": {
"type": "string"
},
"twitterCard": {
"type": "string",
"enum": [
"summary",
"summary_large_image"
]
},
"twitterSite": {
"type": "string"
},
"quickAnswer": {
"type": "string"
},
"publishedAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"jobTitle": {
"type": "string"
},
"sameAs": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"aiCrawlers": {
"type": "object",
"properties": {
"gptbot": {
"type": "boolean"
},
"googleExtended": {
"type": "boolean"
},
"claudeWeb": {
"type": "boolean"
},
"perplexityBot": {
"type": "boolean"
},
"ccBot": {
"type": "boolean"
},
"bytespider": {
"type": "boolean"
},
"applebot": {
"type": "boolean"
}
},
"additionalProperties": false
},
"speakable": {
"type": "object",
"properties": {
"cssSelectors": {
"type": "array",
"items": {
"type": "string"
}
},
"xpath": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"schemas": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"additionalProperties": false
},
"metaReplace": {
"type": "boolean"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"pageId"
],
"additionalProperties": false
}update_site_settings
Update site settings
Patches every site-wide knob in doc.settings. Each field is optional — pass only what you want to change. Supported fields: brandName, baseUrl (production URL — drives canonical / OG / sitemap), faviconUrl, defaultLocale, locales (hreflang set), defaultMeta (inherits into every page's PageMeta — title template, description, og*, jsonLd[], aiCrawlers, …), defaultAiCrawlers (per-bot allow/block defaults — also serialised into /robots.txt), organization (publisher Organization JSON-LD: name, url, logoUrl, sameAs[], description), and robotsTxt (manual override served verbatim at /robots.txt — set to empty / undefined to fall back to the auto-generated content). The organization block + AI crawlers + a clean robots.txt are the highest-impact GEO levers: LLMs weigh publisher authority when picking citations and only crawl what the bot directives let them through.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
settings | object | Yes | |
replace | boolean | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"settings": {
"type": "object",
"properties": {
"brandName": {
"type": "string"
},
"baseUrl": {
"type": "string"
},
"faviconUrl": {
"type": "string"
},
"defaultLocale": {
"type": "string"
},
"locales": {
"type": "array",
"items": {
"type": "string"
}
},
"defaultMeta": {
"type": "object",
"properties": {
"metaTitle": {
"type": "string"
},
"metaDescription": {
"type": "string"
},
"canonicalUrl": {
"type": "string"
},
"noIndex": {
"type": "boolean"
},
"noFollow": {
"type": "boolean"
},
"locale": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"alternates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"locale": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"locale",
"url"
],
"additionalProperties": false
}
},
"ogTitle": {
"type": "string"
},
"ogDescription": {
"type": "string"
},
"ogImage": {
"type": "string"
},
"twitterCard": {
"type": "string",
"enum": [
"summary",
"summary_large_image"
]
},
"twitterSite": {
"type": "string"
},
"quickAnswer": {
"type": "string"
},
"publishedAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"jobTitle": {
"type": "string"
},
"sameAs": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"aiCrawlers": {
"type": "object",
"properties": {
"gptbot": {
"type": "boolean"
},
"googleExtended": {
"type": "boolean"
},
"claudeWeb": {
"type": "boolean"
},
"perplexityBot": {
"type": "boolean"
},
"ccBot": {
"type": "boolean"
},
"bytespider": {
"type": "boolean"
},
"applebot": {
"type": "boolean"
}
},
"additionalProperties": false
},
"speakable": {
"type": "object",
"properties": {
"cssSelectors": {
"type": "array",
"items": {
"type": "string"
}
},
"xpath": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"schemas": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
}
}
},
"additionalProperties": false
},
"defaultAiCrawlers": {
"type": "object",
"properties": {
"gptbot": {
"type": "boolean"
},
"googleExtended": {
"type": "boolean"
},
"claudeWeb": {
"type": "boolean"
},
"perplexityBot": {
"type": "boolean"
},
"ccBot": {
"type": "boolean"
},
"bytespider": {
"type": "boolean"
},
"applebot": {
"type": "boolean"
}
},
"additionalProperties": false
},
"organization": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"logoUrl": {
"type": "string"
},
"sameAs": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"robotsTxt": {
"type": "string"
}
},
"additionalProperties": false
},
"replace": {
"type": "boolean"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"settings"
],
"additionalProperties": false
}