PerspectPerspectDocs
Go to Admin
View as Markdown

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.