Pages and Content
This reference is auto-generated from the registered MCP tool providers in perspectapiworkers.
It reflects the tools exposed by the per-site Perspect MCP server.
Connection
Use the per-site MCP endpoint:
https://perspect.com/mcp/{siteName}
Authenticate with OAuth or an MCP API key using Authorization: Bearer sk_mcp_....
Tools
page_create
Title: Create Page/Post
Create a new content item (page, post, or block) with MCP page_* field naming. Content is markdown-only (HTML tags are rejected). To attach images: first call media_upload, then pass the returned media IDs in media_ids. To assign categories on create, pass category_ids (array of numeric IDs). New pages are draft by default — use page_publish to make them live.
Required permission: pages.create
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
page_title |
string | Yes | — | Title |
content_markdown |
string | Yes | — | Content body in Markdown format (HTML tags are rejected) |
excerpt |
string | No | — | Short summary/excerpt (optional) |
slug |
string | No | — | URL slug (auto-generated from title if omitted) |
slug_prefix |
string | No | — | URL prefix for organizing content |
page_status |
string | No | "draft" |
Publication status Allowed: draft, publish, private, trash, scheduled. |
page_type |
string | No | "post" |
Content type Allowed: post, page, block. |
page_date |
string | No | — | Optional publish timestamp (ISO datetime) |
scheduled_at |
string | No | — | Optional schedule timestamp (ISO datetime); use with status='scheduled' |
custom |
object | No | — | Custom fields |
media_ids |
string | No | — | Comma-separated media IDs to associate with the page/post. |
category_ids |
array<number> | No | — | Category IDs to assign to this page/post. |
Example call
{
"tool": "page_create",
"arguments": {
"page_title": "string",
"content_markdown": "string",
"page_status": "draft",
"page_type": "post"
}
}
Output schema
{
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
page_delete
Title: Delete Page/Post
Delete a content item (page, post, or block)
Required permission: pages.delete
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
number | Yes | — | Content ID |
Example call
{
"tool": "page_delete",
"arguments": {
"pageId": 1
}
}
Output schema
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
]
}
page_get
Title: Get Page/Post
Get a specific content item (page, post, or block) by ID or slug
Required permission: pages.read
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
number | No | — | Content ID (use either this or slug) |
slug |
string | No | — | Content slug (use either this or pageId) |
Example call
{
"tool": "page_get",
"arguments": {}
}
Output schema
{
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
page_list
Title: List Pages/Posts
List content (pages, posts, and blocks) for a site with optional filters. Returns all content types by default. Use page_type to filter (page, post, block). Set include_content=true to include full markdown body. To attach images, first upload via media_upload, then pass media_ids to page_create or page_update.
Required permission: pages.read
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
number | No | 20 |
Maximum number of results (1-100) |
offset |
number | No | 0 |
Number of results to skip |
page_type |
string | No | — | Content type filter (omit to list all types) Allowed: page, post, block. |
page_status |
string | No | — | Publication status filter Allowed: draft, publish, private, trash. |
search |
string | No | — | Search term for title or content |
slug_prefix |
string | No | — | Filter by slug prefix |
include_content |
boolean | No | false |
When true, include full page_content and other large fields |
Example call
{
"tool": "page_list",
"arguments": {
"limit": 20,
"offset": 0,
"include_content": false
}
}
Output schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"offset": {
"type": "number"
},
"total": {
"type": "number"
},
"pages": {
"type": "number"
}
},
"required": [
"limit",
"offset",
"total",
"pages"
]
}
},
"required": [
"items",
"pagination"
]
}
page_list_by_category
Title: List Pages by Category
List content (pages, posts, blocks) filtered by category slug. Required arg: category_slug. Returns empty items when the slug is not found.
Required permission: pages.read
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
category_slug |
string | Yes | — | Category slug to filter by (required) |
limit |
number | No | 20 |
Maximum number of results (1-100) |
offset |
number | No | 0 |
Number of results to skip |
page_type |
string | No | — | Content type filter (omit to list all types) Allowed: page, post, block. |
page_status |
string | No | — | Publication status filter Allowed: draft, publish, private, trash. |
search |
string | No | — | Search term for title or content |
slug_prefix |
string | No | — | Filter by slug prefix |
include_content |
boolean | No | false |
When true, include full page_content and other large fields |
Example call
{
"tool": "page_list_by_category",
"arguments": {
"category_slug": "string",
"limit": 20,
"offset": 0,
"include_content": false
}
}
Output schema
{
"type": "object",
"properties": {
"category": {
"type": "object",
"properties": {
"id": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string",
"nullable": true
},
"found": {
"type": "boolean"
}
},
"required": [
"slug",
"found"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"offset": {
"type": "number"
},
"total": {
"type": "number"
},
"pages": {
"type": "number"
}
},
"required": [
"limit",
"offset",
"total",
"pages"
]
}
},
"required": [
"category",
"items",
"pagination"
]
}
page_publish
Title: Publish/Unpublish Page
Publish or unpublish a content item (page, post, or block). Valid from: draft, private, scheduled.
Required permission: pages.publish
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
number | Yes | — | Content ID |
published |
boolean | Yes | — | true to publish, false to revert to draft |
Example call
{
"tool": "page_publish",
"arguments": {
"pageId": 1,
"published": true
}
}
Output schema
{
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
page_update
Title: Update Page/Post
Update an existing content item (page, post, or block). Only provided fields are updated. Content must be Markdown (HTML tags are rejected). If media_ids is provided, it replaces all existing attachments.
Required permission: pages.update
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pageId |
number | Yes | — | Content ID |
page_title |
string | No | — | Title |
content_markdown |
string | No | — | Content body in Markdown format (HTML tags are rejected) |
excerpt |
string | No | — | Short summary/excerpt |
slug |
string | No | — | URL slug |
slug_prefix |
string | No | — | URL prefix for organizing content |
page_status |
string | No | — | Publication status Allowed: draft, publish, private, trash. |
page_type |
string | No | — | Content type: 'post' for blog posts, 'page' for static pages, 'block' for reusable blocks Allowed: post, page, block. |
custom |
object | No | — | Custom fields |
media_ids |
string | No | — | Comma-separated media IDs to associate with the page/post. When provided, existing attachments are replaced. |
Example call
{
"tool": "page_update",
"arguments": {
"pageId": 1
}
}
Output schema
{
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
pages_list
Title: List Pages/Posts (Alias)
Alias of page_list — list content (pages, posts, and blocks) for a site
Required permission: pages.read
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
number | No | 20 |
Maximum number of results (1-100) |
offset |
number | No | 0 |
Number of results to skip |
page_type |
string | No | — | Content type filter (omit to list all types) Allowed: page, post, block. |
page_status |
string | No | — | Publication status filter Allowed: draft, publish, private, trash. |
search |
string | No | — | Search term for title or content |
slug_prefix |
string | No | — | Filter by slug prefix |
include_content |
boolean | No | false |
When true, include full page_content and other large fields |
Example call
{
"tool": "pages_list",
"arguments": {
"limit": 20,
"offset": 0,
"include_content": false
}
}
Output schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"media_id": {
"type": "string"
},
"link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"content_type": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"filesize": {
"type": "number"
},
"site_name": {
"type": "string"
},
"r2_key": {
"type": "string"
}
},
"required": [
"media_id"
]
}
}
}
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"offset": {
"type": "number"
},
"total": {
"type": "number"
},
"pages": {
"type": "number"
}
},
"required": [
"limit",
"offset",
"total",
"pages"
]
}
},
"required": [
"items",
"pagination"
]
}
This page is generated from the registered MCP tool providers. Do not edit it by hand.