This is the registry, not a brochure. Every entry below is read from the WordPress Abilities API on this site — the same registry AI agents hit over MCP — with its permission annotations and JSON schemas. Register a new ability and it appears here; deactivate its plugin and it disappears. Nobody edits this page.
The ability registry, live
164 abilities in 34 categories, enumerated live from this site's registry on every change. Nothing on this page is hand-maintained.
AI ai-experiments
ai/image-generation — Image Generation and Editing
writes
Generate and edit images using AI. Requires an AI connector that includes support for image generation models.
Input schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Prompt used to generate an image."
},
"reference": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Optional base64-encoded image to use as a reference image for edits."
}
},
"required": [
"prompt"
]
}Output schema
{
"type": "object",
"properties": {
"image": {
"type": "object",
"description": "Generated image data.",
"properties": {
"data": {
"type": "string",
"description": "The base64 encoded image data."
},
"provider_metadata": {
"type": "object",
"description": "Information about the provider that generated the image.",
"properties": {
"id": {
"type": "string",
"description": "The provider ID."
},
"name": {
"type": "string",
"description": "The provider name."
},
"type": {
"type": "string",
"description": "The provider type."
}
}
},
"model_metadata": {
"type": "object",
"description": "Information about the model that generated the image.",
"properties": {
"id": {
"type": "string",
"description": "The model ID."
},
"name": {
"type": "string",
"description": "The model name."
}
}
}
}
}
}
}ai/image-import — Base64 Image Import
writes
Imports a base64 encoded image into the media library
Input schema
{
"type": "object",
"properties": {
"data": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The base64 encoded image data to import into the media library."
},
"filename": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The filename of the image."
},
"title": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The title of the image."
},
"description": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The description of the image."
},
"alt_text": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The alt text of the image."
},
"mime_type": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The MIME type of the image."
},
"ai_generated": {
"type": "boolean",
"sanitize_callback": "rest_sanitize_boolean",
"description": "Whether the image was generated by AI."
}
},
"required": [
"data"
]
}Output schema
{
"type": "object",
"properties": {
"image": {
"type": "object",
"description": "Imported image data.",
"properties": {
"id": {
"type": "integer",
"description": "Attachment ID."
},
"url": {
"type": "string",
"description": "Attachment URL."
},
"filename": {
"type": "string",
"description": "Attachment filename."
},
"title": {
"type": "string",
"description": "Attachment title."
},
"description": {
"type": "string",
"description": "Attachment description."
},
"alt_text": {
"type": "string",
"description": "Attachment alt text."
}
}
}
}
}ai/image-prompt-generation — Image Prompt Generation
writes · MCP public
Generates a prompt from post content that can be used to generate an image
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The content to use as inspiration for the generated image."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Any additional context to help generate the prompt. This can either be a string of additional context or can be a post ID that will then be used to get context from that post (if it exists)."
},
"style": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Any additional style instructions to apply to the generated image."
}
},
"required": [
"content"
]
}Output schema
{
"type": "string",
"description": "The image generation prompt."
}ai/content-classification — Content Classification
writes
AI-powered suggestions for post tags and categories based on content analysis. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Content to generate taxonomy suggestions for."
},
"post_id": {
"type": "integer",
"description": "Content from this post will be used to generate taxonomy suggestions. This overrides the content parameter if both are provided."
},
"taxonomy": {
"type": "string",
"default": "post_tag",
"description": "The taxonomy to generate suggestions for (e.g., post_tag, category)."
},
"strategy": {
"type": "string",
"default": "existing_only",
"description": "The suggestion strategy: existing_only or allow_new."
},
"max_suggestions": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5,
"description": "Maximum number of suggestions to generate."
}
}
}Output schema
{
"type": "object",
"properties": {
"suggestions": {
"type": "array",
"description": "Generated taxonomy term suggestions.",
"items": {
"type": "object",
"properties": {
"term": {
"type": "string",
"description": "The suggested term name."
},
"confidence": {
"type": "number",
"description": "Confidence score between 0 and 1."
},
"is_new": {
"type": "boolean",
"description": "Whether this is a new term or an existing one."
},
"parent": {
"type": "string",
"description": "Parent term name for hierarchical taxonomies."
}
}
}
}
}
}ai/content-resizing — Content Resizing
writes
Shorten, expand, or rephrase selected block content. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to resize content for."
},
"content": {
"type": "string",
"description": "The block content to resize."
},
"action": {
"type": "string",
"enum": [
"shorten",
"expand",
"rephrase"
],
"default": "rephrase",
"description": "The resizing action to perform."
}
}
}Output schema
{
"type": "string",
"description": "The resized content."
}ai/excerpt-generation — Excerpt Generation
writes
Generates excerpt suggestions from content. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Content to generate an excerpt suggestion for."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Additional context to use when generating an excerpt suggestion for the content. This can either be a string of additional context or can be a post ID that will then be used to get context from that post (if it exists). If no content is provided but a valid post ID is used here, the content from that post will be used."
}
}
}Output schema
{
"type": "string",
"description": "Generated excerpt."
}ai/alt-text-generation — Alt Text Generation
writes · MCP public
Generates accessible alternative (alt) text for images using AI vision models, following common web accessibility guidance. Requires an AI connector that includes support for vision-based image analysis models.
Input schema
{
"type": "object",
"properties": {
"attachment_id": {
"type": "integer",
"sanitize_callback": "absint",
"description": "The attachment ID of the image to generate alt text for."
},
"image_url": {
"type": "string",
"description": "URL or data URI of the image to generate alt text for. Used if attachment_id is not provided."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_textarea_field",
"description": "Optional context about the image or surrounding content to improve alt text relevance."
},
"image_meta": {
"type": "string",
"description": "Structured metadata about how the image block is used, such as whether it is linked."
}
}
}Output schema
{
"type": "object",
"properties": {
"alt_text": {
"type": "string",
"description": "Generated alternative text for the image; may be empty when alt="" is correct."
},
"is_decorative": {
"type": "boolean",
"description": "Whether the image was determined to be decorative."
}
}
}ai/meta-description — Meta Description Generation
writes
Generates meta description suggestions and integrates those with various SEO plugins. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Post content to generate a meta description for."
},
"title": {
"type": "string",
"description": "The post title, used to avoid duplication in the generated description."
},
"post_id": {
"type": "integer",
"description": "The post ID to generate a meta description for. If provided without content, the post content will be used."
}
}
}Output schema
{
"type": "object",
"description": "Generated meta description suggestion.",
"properties": {
"description": {
"type": "object",
"description": "The meta description suggestion.",
"properties": {
"text": {
"type": "string",
"description": "The meta description text."
},
"character_count": {
"type": "integer",
"description": "The character count of the description."
}
}
}
}
}ai/editorial-notes — Editorial Notes
writes
Adds editorial suggestions to posts block-by-block, covering Accessibility, Readability, Grammar, and SEO. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"block_type": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The block type, e.g. core/paragraph, core/heading."
},
"block_content": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "The plain-text content of the block to review."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Surrounding content to improve review relevance."
},
"post_id": {
"type": "integer",
"sanitize_callback": "absint",
"description": "ID of the post being reviewed."
},
"existing_notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Existing Note texts for this block from prior review runs, used to avoid repeating suggestions."
},
"review_types": {
"type": "array",
"items": {
"type": "string",
"enum": [
"accessibility",
"readability",
"grammar",
"seo",
"guidelines"
]
},
"description": "Review types to perform."
}
},
"required": [
"block_type",
"block_content"
]
}Output schema
{
"type": "object",
"properties": {
"suggestions": {
"type": "array",
"description": "Review suggestions for the block.",
"items": {
"type": "object",
"properties": {
"review_type": {
"type": "string",
"description": "The review type."
},
"text": {
"type": "string",
"description": "The suggestion text."
}
}
}
}
}
}ai/editorial-updates — Editorial Updates
writes
Applies pending editorial Notes to your content automatically. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"block_type": {
"type": "string",
"description": "The block type, e.g. core/paragraph, core/heading."
},
"block_content": {
"type": "string",
"description": "The content of the block to refine."
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The feedback Notes to apply to the block."
},
"context": {
"type": "string",
"description": "Optional surrounding content for context."
},
"post_id": {
"type": "integer",
"description": "ID of the post being modified."
}
},
"required": [
"block_type",
"block_content",
"notes"
]
}Output schema
{
"type": "string",
"description": "The updated block content after applying feedback."
}ai/summarization — Content Summarization
writes
Summarizes long-form content into digestible overviews. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Content to summarize."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Additional context to use when summarizing the content. This can either be a string of additional context or can be a post ID that will then be used to get context from that post (if it exists). If no content is provided but a valid post ID is used here, the content from that post will be used."
},
"length": {
"type": "string",
"enum": [
"short",
"medium",
"long"
],
"default": "medium",
"description": "The length of the summary."
}
}
}Output schema
{
"type": "string",
"description": "The summary of the content."
}ai/title-generation — Title Generation
writes
Generates title suggestions from content. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Content to generate title suggestions for."
},
"context": {
"type": "string",
"sanitize_callback": "sanitize_text_field",
"description": "Additional context to use when generating title suggestions. This can either be a string of additional context or can be a post ID that will then be used to get context from that post (if it exists). If no content is provided but a valid post ID is used here, the content from that post will be used."
}
}
}Output schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Generated title suggestion."
}
}
}ai/type-ahead — Type-ahead Text
writes
Ghost text suggestions while writing paragraphs in the block editor. Requires an AI connector that includes support for text generation models.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID used to gather additional context."
},
"block_content": {
"type": "string",
"description": "Full text content of the active block."
},
"preceding_text": {
"type": "string",
"description": "Text that appears before the caret within the block."
},
"following_text": {
"type": "string",
"description": "Text after the caret within the block."
},
"surrounding_context": {
"type": "string",
"description": "Neighboring block content for additional context."
},
"cursor_position": {
"type": "integer",
"description": "Caret offset within the block plain text."
},
"mode": {
"type": "string",
"enum": [
"word",
"sentence",
"paragraph",
"smart"
]
},
"max_words": {
"type": "integer",
"description": "Maximum number of words in the suggestion."
},
"manual_trigger": {
"type": "boolean"
}
},
"required": [
"block_content"
]
}Output schema
{
"type": "object",
"properties": {
"suggestion": {
"type": "string",
"description": "Suggested continuation."
},
"confidence": {
"type": "number",
"description": "Confidence score between 0 and 1."
},
"cursor_position": {
"type": "integer"
}
}
}ai/comment-analysis — Comment Analysis
writes
Analyzes a comment for toxicity and sentiment.
Input schema
{
"type": "object",
"properties": {
"comment_id": {
"type": "integer",
"description": "The ID of the comment to analyze."
}
},
"required": [
"comment_id"
]
}Output schema
{
"type": "object",
"properties": {
"comment_id": {
"type": "integer",
"description": "The analyzed comment ID."
},
"toxicity_score": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Toxicity score from 0 (not toxic) to 1 (highly toxic)."
},
"sentiment": {
"type": "string",
"enum": [
"positive",
"neutral",
"negative"
],
"description": "The sentiment of the comment."
}
}
}ai/suggest-reply — Reply Suggestion
writes
Generates reply suggestions to a comment.
Input schema
{
"type": "object",
"properties": {
"comment_id": {
"type": "integer",
"description": "The ID of the comment to generate a reply suggestion for."
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"casual"
],
"default": "friendly",
"description": "The tone for the reply suggestion."
}
},
"required": [
"comment_id"
]
}Output schema
{
"type": "string",
"description": "The generated reply suggestion."
}ai/get-post-details — Get post details
writes · destructive · MCP public
Get the details of a post based on the post ID. Optionally, limit the details to specific fields.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to get the details of."
},
"fields": {
"type": "array",
"description": "The fields to get the details of. Will default to all fields if not provided.",
"items": {
"type": "string",
"enum": [
"content",
"title",
"slug",
"author",
"type",
"excerpt"
]
}
}
},
"required": [
"post_id"
]
}Output schema
{
"type": "object",
"description": "The details of the post.",
"properties": {
"content": {
"type": "string",
"description": "The content of the post."
},
"title": {
"type": "string",
"description": "The title of the post."
},
"slug": {
"type": "string",
"description": "The slug of the post."
},
"author": {
"type": "string",
"description": "The author of the post."
},
"type": {
"type": "string",
"description": "The type of the post."
},
"excerpt": {
"type": "string",
"description": "The excerpt of the post."
}
}
}ai/get-post-terms — Get the post terms
writes · destructive · MCP public
Get the terms of a post based on the post ID and optionally filter by taxonomy.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to get the terms of."
},
"taxonomy": {
"type": "string",
"description": "The taxonomy to filter the terms by."
}
},
"required": [
"post_id"
]
}Output schema
{
"type": "array",
"description": "An array of WP_Term objects assigned to the post.",
"items": {
"type": "object",
"properties": {
"term_id": {
"type": "integer",
"description": "The ID of the term."
},
"name": {
"type": "string",
"description": "The name of the term."
},
"slug": {
"type": "string",
"description": "The slug of the term."
},
"term_group": {
"type": "integer",
"description": "The group ID of the term."
},
"term_taxonomy_id": {
"type": "integer",
"description": "The taxonomy ID of the term."
},
"taxonomy": {
"type": "string",
"description": "The taxonomy name of the term."
},
"description": {
"type": "string",
"description": "The description of the term."
},
"parent": {
"type": "integer",
"description": "The parent ID of the term."
},
"count": {
"type": "integer",
"description": "How many times the term is used."
},
"filter": {
"type": "string",
"description": "How the term should be filtered."
}
}
}
}Content content
core/read-content — Read Content
read-only · idempotent · MCP public
Reads content from post types exposed to abilities. Single-post lookups by ID or by post type and slug return the post object directly. Query mode returns readable posts filtered by post type, status, author, parent, or included IDs. Requires an authenticated user. Lookups and filters are exact-match only; the ability does not perform full-text search.
Input schema
{
"type": "object",
"oneOf": [
{
"title": "Get a single readable post by ID",
"required": [
"id"
],
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "Retrieve a single readable post by ID."
},
"post_type": {
"type": "string",
"enum": [
"post",
"page"
],
"description": "Optional. Restrict the lookup to this post type; the post is returned only if it matches and the current user can read it."
},
"fields": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"id",
"post_type",
"status",
"date",
"date_gmt",
"modified",
"modified_gmt",
"slug",
"link",
"title_raw",
"title_rendered",
"excerpt_raw",
"excerpt_rendered",
"excerpt_protected",
"content_raw",
"content_rendered",
"content_protected",
"author",
"parent"
]
},
"description": "Limit each returned post to these fields. If omitted, a lean set of common read fields is returned. Explicit raw field requests require edit access."
}
}
},
{
"title": "Get a single readable post by slug",
"required": [
"post_type",
"slug"
],
"additionalProperties": false,
"properties": {
"post_type": {
"type": "string",
"enum": [
"post",
"page"
],
"description": "Post type containing the slug. Slugs are not unique across post types."
},
"slug": {
"type": "string",
"minLength": 1,
"description": "Retrieve a single readable post by slug. Resolves to the newest readable match, preferring published posts."
},
"fields": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"id",
"post_type",
"status",
"date",
"date_gmt",
"modified",
"modified_gmt",
"slug",
"link",
"title_raw",
"title_rendered",
"excerpt_raw",
"excerpt_rendered",
"excerpt_protected",
"content_raw",
"content_rendered",
"content_protected",
"author",
"parent"
]
},
"description": "Limit each returned post to these fields. If omitted, a lean set of common read fields is returned. Explicit raw field requests require edit access."
}
}
},
{
"title": "Query readable posts by post type and filters",
"required": [
"post_type"
],
"additionalProperties": false,
"properties": {
"post_type": {
"type": "string",
"enum": [
"post",
"page"
],
"description": "Post type to query for readable posts."
},
"status": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"publish",
"future",
"draft",
"pending",
"private"
]
},
"description": "Filter readable posts by one or more post statuses. Defaults to publish. Non-published statuses require the appropriate capabilities."
},
"author": {
"type": "integer",
"minimum": 1,
"description": "Filter by author user ID. Only supported for post types that support authors."
},
"parent": {
"type": "integer",
"minimum": 0,
"description": "Filter by parent post ID. Only supported for hierarchical post types. Use 0 for top-level posts."
},
"include": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"uniqueItems": true,
"items": {
"type": "integer",
"minimum": 1
},
"description": "Limit the query to these post IDs. The order of the IDs does not affect the order of the results. If `per_page` is omitted, the page size defaults to the number of included IDs, capped at the maximum."
},
"fields": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"id",
"post_type",
"status",
"date",
"date_gmt",
"modified",
"modified_gmt",
"slug",
"link",
"title_raw",
"title_rendered",
"excerpt_raw",
"excerpt_rendered",
"excerpt_protected",
"content_raw",
"content_rendered",
"content_protected",
"author",
"parent"
]
},
"description": "Limit each returned post to these fields. If omitted, a lean set of common read fields is returned. Explicit raw field requests require edit access."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of results to return. Requesting a page beyond the last one is an error. Check `total_pages` before requesting later pages."
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Maximum number of posts to return per page."
}
}
}
]
}Output schema
{
"type": "object",
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The post ID."
},
"post_type": {
"type": "string",
"description": "The post type."
},
"status": {
"type": "string",
"description": "The post status."
},
"date": {
"type": "string",
"description": "The publication date, in ISO 8601 format using the site's timezone. Empty string when the date cannot be resolved."
},
"date_gmt": {
"type": "string",
"description": "The publication date, in ISO 8601 format as GMT. Empty string when the date cannot be resolved."
},
"modified": {
"type": "string",
"description": "The last modified date, in ISO 8601 format using the site's timezone. Empty string when the date cannot be resolved."
},
"modified_gmt": {
"type": "string",
"description": "The last modified date, in ISO 8601 format as GMT. Empty string when the date cannot be resolved."
},
"slug": {
"type": "string",
"description": "The post slug."
},
"link": {
"type": "string",
"description": "The permalink URL."
},
"title_raw": {
"type": "string",
"description": "The raw post title. Present when the post type supports titles and the current user can edit the post."
},
"title_rendered": {
"type": "string",
"description": "The rendered post title. Present when the post type supports titles."
},
"excerpt_raw": {
"type": "string",
"description": "The raw post excerpt. Present when the post type supports excerpts and the current user can edit the post."
},
"excerpt_rendered": {
"type": "string",
"description": "The rendered post excerpt (HTML). Present when the post type supports excerpts. Empty when withheld for a password-protected post."
},
"excerpt_protected": {
"type": "boolean",
"description": "Whether the excerpt is protected with a password. Present when the post type supports excerpts."
},
"content_raw": {
"type": "string",
"description": "The raw, unfiltered post content (block markup). Present when the post type supports the editor and the current user can edit the post."
},
"content_rendered": {
"type": "string",
"description": "The rendered post content. Present when the post type supports the editor. Empty when withheld for a password-protected post."
},
"content_protected": {
"type": "boolean",
"description": "Whether the content is protected with a password. Present when the post type supports the editor."
},
"author": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The author user ID."
},
"name": {
"type": "string",
"description": "The author display name."
}
},
"description": "The post author. Present when the post type supports authors."
},
"parent": {
"type": "integer",
"description": "The parent post ID. Present for hierarchical post types."
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"posts",
"total",
"total_pages"
],
"properties": {
"posts": {
"type": "array",
"description": "The readable posts matching the query, ordered by post date, newest first.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The post ID."
},
"post_type": {
"type": "string",
"description": "The post type."
},
"status": {
"type": "string",
"description": "The post status."
},
"date": {
"type": "string",
"description": "The publication date, in ISO 8601 format using the site's timezone. Empty string when the date cannot be resolved."
},
"date_gmt": {
"type": "string",
"description": "The publication date, in ISO 8601 format as GMT. Empty string when the date cannot be resolved."
},
"modified": {
"type": "string",
"description": "The last modified date, in ISO 8601 format using the site's timezone. Empty string when the date cannot be resolved."
},
"modified_gmt": {
"type": "string",
"description": "The last modified date, in ISO 8601 format as GMT. Empty string when the date cannot be resolved."
},
"slug": {
"type": "string",
"description": "The post slug."
},
"link": {
"type": "string",
"description": "The permalink URL."
},
"title_raw": {
"type": "string",
"description": "The raw post title. Present when the post type supports titles and the current user can edit the post."
},
"title_rendered": {
"type": "string",
"description": "The rendered post title. Present when the post type supports titles."
},
"excerpt_raw": {
"type": "string",
"description": "The raw post excerpt. Present when the post type supports excerpts and the current user can edit the post."
},
"excerpt_rendered": {
"type": "string",
"description": "The rendered post excerpt (HTML). Present when the post type supports excerpts. Empty when withheld for a password-protected post."
},
"excerpt_protected": {
"type": "boolean",
"description": "Whether the excerpt is protected with a password. Present when the post type supports excerpts."
},
"content_raw": {
"type": "string",
"description": "The raw, unfiltered post content (block markup). Present when the post type supports the editor and the current user can edit the post."
},
"content_rendered": {
"type": "string",
"description": "The rendered post content. Present when the post type supports the editor. Empty when withheld for a password-protected post."
},
"content_protected": {
"type": "boolean",
"description": "Whether the content is protected with a password. Present when the post type supports the editor."
},
"author": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The author user ID."
},
"name": {
"type": "string",
"description": "The author display name."
}
},
"description": "The post author. Present when the post type supports authors."
},
"parent": {
"type": "integer",
"description": "The parent post ID. Present for hierarchical post types."
}
}
}
},
"total": {
"type": "integer",
"description": "Total number of posts matching the underlying query, across all pages. May exceed the number of returned posts when row-level permission checks withhold some of them."
},
"total_pages": {
"type": "integer",
"description": "Total number of query result pages available for the underlying query. May include pages whose rows are withheld by row-level permission checks."
}
}
}
]
}AI Visibility rank-math-ai-visibility
rank-math/get-ai-visibility-overview — Get AI Visibility overview
read-only · idempotent · MCP public
Returns the site-level AI Visibility summary and the full list of tracked brands with their current scores, ranks, sentiment, and analysis status.
Input schema
{
"type": "object",
"default": [],
"properties": {
"refresh": {
"type": "boolean",
"description": "Pass true to bypass the 12-hour dashboard cache and return a stale-flagged response. Use the REST endpoint to trigger a fresh upstream fetch.",
"default": false
},
"search": {
"type": "string",
"description": "Filter brands by name or URL (case-insensitive substring match).",
"default": ""
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"summary": {
"type": "object",
"description": "Site-level AI Visibility summary metrics."
},
"brands": {
"type": "array",
"description": "List of tracked brands with their current AI Visibility data.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Brand UUID."
},
"name": {
"type": "string",
"description": "Brand name."
},
"url": {
"type": "string",
"format": "uri",
"description": "Brand website URL."
},
"locale": {
"type": [
"string",
"null"
],
"description": "ISO 3166-1 alpha-2 country code (e.g. \"US\")."
},
"status": {
"type": "string",
"enum": [
"active",
"inactive"
],
"description": "Whether the brand is actively tracked."
},
"score": {
"type": [
"number",
"null"
],
"description": "AI Visibility score for this brand."
},
"rank": {
"type": [
"number",
"null"
],
"description": "Brand ranking position."
},
"avg_sentiment": {
"type": [
"number",
"null"
],
"description": "Average sentiment score across mentions."
},
"mentions": {
"type": [
"number",
"null"
],
"description": "Total number of AI mentions."
},
"citations": {
"type": [
"number",
"null"
],
"description": "Total number of AI citations."
},
"analysis_status": {
"type": [
"string",
"null"
],
"description": "Current analysis status (e.g. pending, processing, success, error)."
},
"last_analyzed": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime of the last completed analysis."
}
}
}
}
}
}rank-math/get-ai-visibility-brand-insights — Get AI Visibility brand insights
read-only · idempotent · MCP public
Returns the full analysis results for a single brand — AI Visibility score, rank, sentiment, mention and citation counts, per-competitor breakdown, and per-query results including the raw AI model responses.
Input schema
{
"type": "object",
"default": [],
"required": [
"brand_id"
],
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Obtain from get-ai-visibility-overview."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"pending": {
"type": "boolean",
"description": "True when no completed analysis exists yet (e.g. brand was just added). All other fields are absent in this case."
},
"score": {
"type": [
"number",
"null"
],
"description": "AI Visibility score for this brand."
},
"rank": {
"type": [
"number",
"null"
],
"description": "Brand ranking position among competitors."
},
"avg_sentiment": {
"type": [
"number",
"null"
],
"description": "Average sentiment score across all mentions."
},
"mentions": {
"type": [
"number",
"null"
],
"description": "Total number of AI mentions."
},
"citations": {
"type": [
"number",
"null"
],
"description": "Total number of AI citations."
},
"analysis": {
"type": [
"object",
"null"
],
"description": "Metadata about the latest analysis run.",
"properties": {
"id": {
"type": [
"string",
"null"
],
"description": "Analysis UUID."
},
"status": {
"type": [
"string",
"null"
],
"description": "Analysis status (e.g. done, processing, error)."
},
"started_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime when the analysis started."
},
"finished_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime when the analysis completed."
},
"duration_seconds": {
"type": [
"number",
"null"
],
"description": "How long the analysis took in seconds."
}
}
},
"competitors": {
"type": "array",
"description": "Per-competitor breakdown for this brand.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Competitor brand name."
},
"url": {
"type": [
"string",
"null"
],
"format": "uri",
"description": "Competitor website URL."
},
"mentions": {
"type": [
"number",
"null"
],
"description": "Number of AI mentions for this competitor."
},
"avg_sentiment": {
"type": [
"number",
"null"
],
"description": "Average sentiment score for this competitor."
}
}
}
},
"query_results": {
"type": "array",
"description": "Per-query analysis results including raw AI model responses.",
"items": {
"type": "object",
"properties": {
"query_id": {
"type": [
"string",
"null"
],
"description": "Query UUID."
},
"query_text": {
"type": "string",
"description": "The query that was submitted to the AI model."
},
"found": {
"type": "boolean",
"description": "Whether the brand was mentioned in the AI response."
},
"rank": {
"type": [
"number",
"null"
],
"description": "Brand rank among competitors for this query."
},
"sentiment": {
"type": [
"number",
"null"
],
"description": "Sentiment score for the brand mention in this query."
},
"citations": {
"type": [
"number",
"null"
],
"description": "Number of citations in the AI response for this query."
},
"response": {
"type": "string",
"description": "Raw text response returned by the AI model for this query."
},
"extraction_data": {
"type": "string",
"description": "Raw extraction data used to derive the structured results."
}
}
}
}
}
}rank-math/get-ai-visibility-brand-queries — Get AI Visibility brand queries
read-only · idempotent · MCP public
Returns the list of search queries being monitored for a brand, including which are currently enabled and which were auto-generated as baselines.
Input schema
{
"type": "object",
"default": [],
"required": [
"brand_id"
],
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Obtain from get-ai-visibility-overview or get-ai-visibility-brand-insights."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The brand UUID the queries belong to."
},
"queries": {
"type": "array",
"description": "List of monitored queries for this brand.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Query UUID."
},
"text": {
"type": "string",
"description": "The query text submitted to AI models."
},
"enabled": {
"type": "boolean",
"description": "Whether this query is currently active for analysis."
},
"is_baseline": {
"type": "boolean",
"description": "True when this query was auto-generated as a baseline by Rank Math."
},
"created_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime when the query was created."
},
"updated_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime when the query was last updated."
}
}
}
},
"total": {
"type": "integer",
"description": "Total number of queries returned."
}
}
}rank-math/create-ai-visibility-brand — Create AI Visibility brand
writes · MCP public
Creates a new brand for AI Visibility monitoring, triggering an initial analysis automatically.
Input schema
{
"type": "object",
"default": [],
"required": [
"name",
"url"
],
"properties": {
"name": {
"type": "string",
"description": "Brand name."
},
"url": {
"type": "string",
"format": "uri",
"description": "Brand website URL."
},
"description": {
"type": "string",
"description": "Short description of the brand or product.",
"default": ""
},
"locale": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. "US", "HU"). Defaults to no country filter.",
"default": ""
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "UUID of the newly created brand. Use this as brand_id in subsequent ability calls."
},
"name": {
"type": "string",
"description": "Brand name."
},
"url": {
"type": "string",
"format": "uri",
"description": "Brand website URL."
},
"analysis_status": {
"type": "string",
"enum": [
"pending"
],
"description": "Always \"pending\" on creation \u2014 the initial analysis is seeded automatically and will complete asynchronously."
},
"created_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "ISO 8601 datetime when the brand was created."
},
"error": {
"type": "string",
"description": "Present only on failure \u2014 human-readable error from the upstream API."
}
}
}Analytics rank-math-analytics
rank-math/get-top-keywords — Get top keywords
read-only · idempotent · MCP public
Returns the top-performing keywords by clicks from Google Search Console, with impressions, CTR, and average position for the selected date range.
Input schema
{
"type": "object",
"default": [],
"properties": {
"date_range": {
"type": "string",
"enum": [
"last_7_days",
"last_30_days",
"last_3_months",
"last_6_months",
"last_12_months"
],
"default": "last_30_days",
"description": "Date range for which to fetch keyword data."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of keywords to return."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"keywords": {
"type": "array",
"items": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
"description": "The search query keyword."
},
"clicks": {
"type": "integer",
"description": "Total clicks from Google Search Console."
},
"impressions": {
"type": "integer",
"description": "Total impressions from Google Search Console."
},
"ctr": {
"type": "number",
"description": "Click-through rate as a percentage (0\u2013100)."
},
"position": {
"type": "number",
"description": "Average position in Google Search results."
},
"trend": {
"type": "string",
"enum": [
"winning",
"losing",
"stable"
],
"description": "Position trend vs. the previous period. Provided by Rank Math PRO for tracked keywords."
},
"is_tracked": {
"type": "boolean",
"description": "Whether this keyword is tracked in Rank Math PRO Rank Tracker."
},
"ranking_posts": {
"type": "array",
"description": "Pages on your site that rank for this keyword. Provided by Rank Math PRO.",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID."
},
"title": {
"type": "string",
"description": "Post title."
},
"slug": {
"type": "string",
"description": "Relative URL path of the page."
}
}
}
}
}
}
},
"date_range": {
"type": "string",
"enum": [
"last_7_days",
"last_30_days",
"last_3_months",
"last_6_months",
"last_12_months"
]
},
"connected": {
"type": "boolean",
"description": "Whether Google Search Console is connected."
}
}
}Content Analysis rank-math-content-analysis
rank-math/get-seo-scores — Get SEO scores
read-only · idempotent · MCP public
Returns SEO scores and grades for posts. Before running, ask the user which posts they want to review: posts needing improvement (bad score), posts with no focus keyword, unscored posts, or simply the most recently modified posts. Use this to surface which posts need SEO attention without needing to know post IDs in advance.
Input schema
{
"type": "object",
"default": [],
"properties": {
"number_of_posts": {
"type": "integer",
"description": "Number of recently modified posts to retrieve. Defaults to 10, maximum 100.",
"minimum": 1,
"maximum": 100,
"default": 10
},
"post_type": {
"type": "string",
"description": "Post type to filter by (e.g. "post", "page"). Defaults to all public post types."
},
"seo_filter": {
"type": "string",
"description": "Ask the user which posts they want to review before running this ability. Available options: "bad" (score \u2264 50, needs improvement), "good" (score 51\u201380, ok), "great" (score > 80), "empty-fk" (no focus keyword set), "unscored" (never analyzed). If the user does not specify, omit this parameter to return the most recently modified posts.",
"enum": [
"bad",
"good",
"great",
"empty-fk",
"unscored"
]
}
},
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"keyword": {
"type": [
"string",
"null"
],
"description": "Primary focus keyword, or null if not set."
},
"score": {
"type": [
"integer",
"null"
],
"minimum": 0,
"maximum": 100
},
"grade": {
"type": "string",
"enum": [
"good",
"ok",
"bad",
"na"
]
},
"label": {
"type": "string",
"description": "Human-readable grade label."
},
"last_updated": {
"type": "integer"
}
}
}
}rank-math/analyze-post-content — Analyze post content
read-only · idempotent · MCP public
Gathers the raw content, metadata, and list of on-page SEO tests for a saved post so an AI agent can run Rank Math's full on-page analysis itself, since the scoring engine only runs client-side. Use tests_to_run and content together with kb_link (the scoring rubric for all 24 tests) to evaluate each test and produce a per-test score, status, and fix message.
Input schema
{
"type": "object",
"required": [
"post_id"
],
"properties": {
"post_id": {
"type": "integer",
"description": "ID of the post to analyze."
},
"keyword": {
"type": "string",
"description": "Optional focus keyword to analyze against, overriding the post's saved focus keyword."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"keyword": {
"type": "string",
"description": "Focus keyword used for analysis (input override, or the post's saved keyword)."
},
"tests_to_run": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of the on-page SEO tests registered for this post, to be evaluated by the caller."
},
"content": {
"type": "object",
"description": "Raw content and metadata needed to evaluate each test in tests_to_run.",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"permalink": {
"type": "string"
},
"focus_keyword": {
"type": "string"
},
"body": {
"type": "string"
},
"word_count": {
"type": "integer"
},
"excerpt_10pct": {
"type": "string",
"description": "First 10% of the content body, used by the keywordIn10Percent test."
},
"headings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"level": {
"type": "string"
},
"text": {
"type": "string"
}
}
}
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"alt": {
"type": "string"
}
}
}
},
"links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"external": {
"type": "boolean"
}
}
}
}
}
},
"kb_link": {
"type": "string",
"description": "KB article covering all 24 on-page SEO tests and how each is scored."
},
"instructions": {
"type": "string",
"description": "Guidance for the calling agent on how to use tests_to_run, content, and kb_link to produce a per-test analysis."
},
"error": {
"type": [
"object",
"null"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}AI Link Genius rank-math-link-genius
rank-math/get-link-report — Get link report
read-only · idempotent · MCP public
Returns a site-wide link health report: total internal and external links, post counts with no internal or external links, and — on Rank Math PRO — broken links, redirects, nofollow counts, and HTTP status distribution from the Link Genius audit.
Input schema
{
"type": "object",
"default": [],
"properties": {
"include_posts": {
"type": "boolean",
"default": false,
"description": "Whether to include per-post link counts in the response."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"stats": {
"type": "object",
"properties": {
"total_internal": {
"type": "integer",
"minimum": 0
},
"total_external": {
"type": "integer",
"minimum": 0
},
"posts_no_internal": {
"type": "integer",
"minimum": 0
},
"posts_no_external": {
"type": "integer",
"minimum": 0
},
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"minimum": 0
},
"post_title": {
"type": "string"
},
"counts": {
"type": "object",
"properties": {
"internal": {
"type": "integer",
"minimum": 0
},
"external": {
"type": "integer",
"minimum": 0
}
}
}
}
}
}
}
},
"audit": {
"type": [
"object",
"null"
],
"properties": {
"has_run_before": {
"type": "boolean"
},
"total_links": {
"type": "integer",
"minimum": 0
},
"broken": {
"type": "integer",
"minimum": 0
},
"redirects": {
"type": "integer",
"minimum": 0
},
"nofollow": {
"type": "integer",
"minimum": 0
},
"http_status_distribution": {
"type": "object",
"properties": {
"status_2xx": {
"type": "integer",
"minimum": 0
},
"status_3xx": {
"type": "integer",
"minimum": 0
},
"status_4xx": {
"type": "integer",
"minimum": 0
},
"status_5xx": {
"type": "integer",
"minimum": 0
},
"timeout": {
"type": "integer",
"minimum": 0
},
"error": {
"type": "integer",
"minimum": 0
}
}
}
}
},
"upgrade": {
"type": [
"object",
"null"
],
"description": "When non-null, always surface this message and URL to the user \u2014 it highlights PRO features unavailable on the current plan.",
"properties": {
"message": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
}
}
}
}rank-math/get-post-links — Get post links
read-only · idempotent · MCP public
Returns a paginated list of internal and external links stored for a given post, including the URL, link type, and target post details for internal links.
Input schema
{
"type": "object",
"required": [
"post_id"
],
"properties": {
"post_id": {
"type": "integer",
"description": "ID of the post whose links to retrieve.",
"minimum": 1
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID of the source post."
},
"internal": {
"type": "array",
"description": "Internal links found in the post.",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Full URL of the link."
},
"anchor": {
"type": [
"string",
"null"
],
"description": "Anchor text of the link. Null when anchor data is unavailable (FREE plugin)."
},
"dofollow": {
"type": [
"boolean",
"null"
],
"description": "True when the link is dofollow. Null when rel data is unavailable."
},
"target_post_id": {
"type": "integer",
"description": "WordPress post ID of the link target."
}
}
}
},
"external": {
"type": "array",
"description": "External links found in the post.",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Full URL of the link."
},
"anchor": {
"type": [
"string",
"null"
],
"description": "Anchor text of the link. Null when anchor data is unavailable (FREE plugin)."
},
"dofollow": {
"type": [
"boolean",
"null"
],
"description": "True when the link is dofollow. Null when rel data is unavailable."
}
}
}
},
"counts": {
"type": "object",
"description": "Count of links returned per type.",
"properties": {
"internal": {
"type": "integer",
"description": "Number of internal links returned."
},
"external": {
"type": "integer",
"description": "Number of external links returned."
}
}
}
}
}Post SEO rank-math-post-seo
rank-math/get-post-seo-meta — Get post SEO metadata
read-only · idempotent · MCP public
Returns the full SEO metadata for a post: title, description, focus keyword, robots settings, canonical URL, Open Graph and Twitter overrides, and the current SEO score.
Input schema
{
"type": "object",
"default": [],
"required": [
"post_id"
],
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to retrieve SEO metadata for."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"focus_keyword": {
"type": "string"
},
"robots": {
"type": "array",
"items": {
"type": "string"
}
},
"canonical": {
"type": "string"
},
"og_title": {
"type": "string"
},
"og_description": {
"type": "string"
},
"twitter_title": {
"type": "string"
},
"twitter_description": {
"type": "string"
},
"seo_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
}Schema rank-math-schema
rank-math/get-post-schema — Get post schema
read-only · idempotent · MCP public
Returns the schema markup attached to a post and the schema types available on this install. Use this after rank-math/get-post-seo-meta to check what schema is already set and what types are supported before making a recommendation. If the schema type you want to recommend is not in available_types.types and upgrade_message is present, show upgrade_message verbatim to the user and do not suggest adding the schema type directly.
Input schema
{
"type": "object",
"default": [],
"required": [
"post_id"
],
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to retrieve schema markup for."
},
"include_available_types": {
"type": "boolean",
"description": "When true (default), includes the schema types available on this install. Always pass true when evaluating which schema to add.",
"default": true
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"schema_types": {
"type": "array",
"items": {
"type": "string"
}
},
"schemas": {
"type": "array",
"items": {
"type": "object"
}
},
"available_types": {
"type": "object",
"properties": {
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Schema type keys available on this install. FREE types always present; PRO named types added when PRO is active."
},
"upgrade_message": {
"type": "string",
"description": "Only present when PRO is not active. Show this verbatim to the user when the recommended schema type is not in types."
}
}
},
"error": {
"type": "string"
}
}
}SEO Analysis rank-math-seo-analysis
rank-math/audit-site-seo — Audit site SEO
read-only · idempotent · MCP public
Runs Rank Math's site-wide SEO audit and returns a structured score plus per-test findings with fix hints. Combines local checks with the remote rankmath.com API tests.
Input schema
{
"type": "object",
"default": [],
"properties": {
"refresh": {
"type": "boolean",
"description": "Re-run the audit. Defaults to true (always fresh when called by an AI host).",
"default": true
},
"url": {
"type": "string",
"format": "uri",
"description": "Optional URL to audit. Defaults to this site's home URL. When provided, only remote API tests run (local checks are site-wide)."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"grade": {
"type": "string",
"enum": [
"good",
"average",
"bad"
]
},
"statuses": {
"type": "object",
"properties": {
"ok": {
"type": "integer"
},
"fail": {
"type": "integer"
},
"warning": {
"type": "integer"
},
"info": {
"type": "integer"
}
}
},
"total_tests": {
"type": "integer"
},
"last_run_at": {
"type": "integer"
},
"remote_api_status": {
"type": "string",
"enum": [
"ok",
"unavailable",
"skipped"
]
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"test_id": {
"type": "string"
},
"category": {
"type": "string",
"enum": [
"priority",
"basic",
"advanced",
"performance",
"security"
]
},
"status": {
"type": "string",
"enum": [
"ok",
"fail",
"warning",
"info"
]
},
"score": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"fix_text": {
"type": "string"
},
"fix_html": {
"type": "string"
},
"fix_hint": {
"type": [
"object",
"null"
]
},
"kb_link": {
"type": "string"
},
"data": {
"type": [
"object",
"array",
"null"
]
}
}
}
},
"error": {
"type": [
"object",
"null"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}rank-math/fix-site-seo — Fix site SEO
writes · MCP public
Applies an automatic fix for a single failing Rank Math SEO test. Pass the test_id from an audit-site-seo finding. Some fixes require additional input (e.g. value for site_description). Bulk fixes accept an optional post_limit.
Input schema
{
"type": "object",
"default": [],
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "string",
"enum": [
"blog_public",
"permalink_structure",
"site_description",
"sitemaps",
"schema",
"noindex",
"opengraph",
"robots_txt",
"focus_keywords",
"post_titles"
],
"description": "The SEO test identifier to fix (from audit-site-seo findings)."
},
"value": {
"type": "string",
"description": "Required for site_description: the new tagline to set."
},
"post_limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "For bulk post fixes (focus_keywords, post_titles): max posts to update in one call. Default 100."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"fixed": {
"type": "boolean"
},
"summary": {
"type": "string"
},
"details": {
"type": "object"
}
}
}Site site
core/get-site-info — Get Site Information
read-only · idempotent · MCP public
Returns site information configured in WordPress. By default returns all fields, or optionally a filtered subset.
Input schema
{
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"name",
"description",
"url",
"wpurl",
"admin_email",
"charset",
"language",
"version"
]
},
"description": "Optional: Limit response to specific fields. If omitted, all fields are returned."
}
},
"additionalProperties": false,
"default": []
}Output schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"title": "Site Title",
"description": "The site title."
},
"description": {
"type": "string",
"title": "Tagline",
"description": "The site tagline."
},
"url": {
"type": "string",
"title": "Site Address (URL)",
"description": "The public URL where visitors access the site. May differ from the WordPress installation URL."
},
"wpurl": {
"type": "string",
"title": "WordPress Address (URL)",
"description": "The URL where WordPress core files are served. May differ from the public site URL."
},
"admin_email": {
"type": "string",
"title": "Administration Email Address",
"description": "The site administrator email address."
},
"charset": {
"type": "string",
"title": "Site Charset",
"description": "The site character encoding."
},
"language": {
"type": "string",
"title": "Site Language",
"description": "The site locale in dash form (e.g. en-US)."
},
"version": {
"type": "string",
"title": "WordPress Version",
"description": "The WordPress core version running on this site."
}
},
"additionalProperties": false
}core/get-environment-info — Get Environment Info
read-only · idempotent · MCP public
Returns core details about the site's runtime context for diagnostics and compatibility (environment, PHP runtime, database server info, WordPress version). By default returns all fields, or optionally a filtered subset.
Input schema
{
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"environment",
"php_version",
"db_server_info",
"wp_version"
]
},
"description": "Optional: Limit response to specific fields. If omitted, all fields are returned."
}
},
"additionalProperties": false,
"default": []
}Output schema
{
"type": "object",
"properties": {
"environment": {
"type": "string",
"title": "Environment Type",
"description": "The site's runtime environment classification.",
"enum": [
"production",
"staging",
"development",
"local"
]
},
"php_version": {
"type": "string",
"title": "PHP Version",
"description": "The PHP runtime version executing WordPress."
},
"db_server_info": {
"type": "string",
"title": "Database Server Info",
"description": "The database server vendor and version string reported by the driver."
},
"wp_version": {
"type": "string",
"title": "WordPress Version",
"description": "The WordPress core version running on this site."
}
},
"additionalProperties": false
}core/read-settings — Read Settings
read-only · idempotent · MCP public
Returns WordPress settings as a flat map of setting name to value. By default returns all settings exposed to abilities, or optionally a subset filtered by settings group, by setting name, or both.
Input schema
{
"type": "object",
"default": {},
"properties": {
"group": {
"type": "string",
"enum": [
"general",
"writing",
"reading",
"discussion"
],
"description": "Return only settings that belong to this settings group."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"blogname",
"blogdescription",
"siteurl",
"admin_email",
"timezone_string",
"date_format",
"time_format",
"start_of_week",
"WPLANG",
"use_smilies",
"default_category",
"default_post_format",
"posts_per_page",
"show_on_front",
"page_on_front",
"page_for_posts",
"default_ping_status",
"default_comment_status"
]
},
"description": "Return only the settings with these names."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"description": "A map of setting name to its current value.",
"properties": {
"blogname": {
"type": "string",
"title": "Title",
"description": "Site title."
},
"blogdescription": {
"type": "string",
"title": "Tagline",
"description": "Site tagline."
},
"siteurl": {
"type": "string",
"description": "Site URL."
},
"admin_email": {
"type": "string",
"description": "This address is used for admin purposes, like new user notification.",
"format": "email"
},
"timezone_string": {
"type": "string",
"description": "A city in the same timezone as you."
},
"date_format": {
"type": "string",
"description": "A date format for all date strings."
},
"time_format": {
"type": "string",
"description": "A time format for all time strings."
},
"start_of_week": {
"type": "integer",
"description": "A day number of the week that the week should start on."
},
"WPLANG": {
"type": "string",
"description": "WordPress locale code."
},
"use_smilies": {
"type": "boolean",
"description": "Convert emoticons like :-) and :-P to graphics on display."
},
"default_category": {
"type": "integer",
"description": "Default post category."
},
"default_post_format": {
"type": "string",
"description": "Default post format."
},
"posts_per_page": {
"type": "integer",
"title": "Maximum posts per page",
"description": "Blog pages show at most."
},
"show_on_front": {
"type": "string",
"title": "Show on front",
"description": "What to show on the front page"
},
"page_on_front": {
"type": "integer",
"title": "Page on front",
"description": "The ID of the page that should be displayed on the front page"
},
"page_for_posts": {
"type": "integer",
"description": "The ID of the page that should display the latest posts"
},
"default_ping_status": {
"type": "string",
"description": "Allow link notifications from other blogs (pingbacks and trackbacks) on new articles.",
"enum": [
"open",
"closed"
]
},
"default_comment_status": {
"type": "string",
"title": "Allow comments on new posts",
"description": "Allow people to submit comments on new posts.",
"enum": [
"open",
"closed"
]
}
},
"additionalProperties": false
}User user
core/get-user-info — Get User Information
read-only · idempotent · MCP public
Returns profile details for the current authenticated user to support personalization, auditing, and access-aware behavior. By default returns all fields, or optionally a filtered subset.
Input schema
{
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "string",
"enum": [
"id",
"display_name",
"user_nicename",
"user_login",
"roles",
"locale",
"first_name",
"last_name",
"nickname",
"description",
"user_url"
]
},
"description": "Optional: Limit response to specific fields. If omitted, all fields are returned."
}
},
"additionalProperties": false,
"default": []
}Output schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"title": "User ID",
"description": "Unique identifier for the user."
},
"display_name": {
"type": "string",
"title": "Display Name",
"description": "Public-facing name selected by the user."
},
"user_nicename": {
"type": "string",
"title": "User Nicename",
"description": "URL-friendly slug for the user. Defaults to the username."
},
"user_login": {
"type": "string",
"title": "Username",
"description": "Login identifier for the user. Cannot be changed once set."
},
"roles": {
"type": "array",
"title": "Roles",
"description": "Roles assigned to the user, such as administrator, editor, author, contributor, or subscriber.",
"items": {
"type": "string"
}
},
"locale": {
"type": "string",
"title": "Language",
"description": "Locale code for the user, such as en_US."
},
"first_name": {
"type": "string",
"title": "First Name",
"description": "Given name."
},
"last_name": {
"type": "string",
"title": "Last Name",
"description": "Family name."
},
"nickname": {
"type": "string",
"title": "Nickname",
"description": "Informal name. Defaults to the username."
},
"description": {
"type": "string",
"title": "Biographical Info",
"description": "User-authored biography. May be empty."
},
"user_url": {
"type": "string",
"title": "Website",
"description": "Personal website URL."
}
},
"additionalProperties": false
}core/read-users — Read Users
read-only · idempotent · MCP public
Retrieves one or more readable WordPress users. Fetch a single readable user by ID, email, username, or slug, or query a paginated collection optionally filtered by roles, published-post authorship, or included IDs.
Input schema
{
"type": "object",
"default": {},
"oneOf": [
{
"title": "Get a single readable user by ID",
"required": [
"id"
],
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "Retrieve a single readable user by ID."
},
"fields": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"id",
"name",
"description",
"url",
"link",
"slug",
"avatar_urls",
"username",
"email",
"first_name",
"last_name",
"nickname",
"locale",
"registered_date",
"roles"
]
},
"description": "Limit each returned user to these fields. If omitted, a lean set of common read fields is returned."
}
}
},
{
"title": "Get a single readable user by email address",
"required": [
"email"
],
"additionalProperties": false,
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Retrieve a single readable user by email address. Resolving another user by email requires permission to list or edit users."
},
"fields": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"id",
"name",
"description",
"url",
"link",
"slug",
"avatar_urls",
"username",
"email",
"first_name",
"last_name",
"nickname",
"locale",
"registered_date",
"roles"
]
},
"description": "Limit each returned user to these fields. If omitted, a lean set of common read fields is returned."
}
}
},
{
"title": "Get a single readable user by username",
"required": [
"username"
],
"additionalProperties": false,
"properties": {
"username": {
"type": "string",
"description": "Retrieve a single readable user by username. Resolving another user by username requires permission to list or edit users."
},
"fields": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"id",
"name",
"description",
"url",
"link",
"slug",
"avatar_urls",
"username",
"email",
"first_name",
"last_name",
"nickname",
"locale",
"registered_date",
"roles"
]
},
"description": "Limit each returned user to these fields. If omitted, a lean set of common read fields is returned."
}
}
},
{
"title": "Get a single readable user by slug",
"required": [
"slug"
],
"additionalProperties": false,
"properties": {
"slug": {
"type": "string",
"description": "Retrieve a single readable user by slug."
},
"fields": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"id",
"name",
"description",
"url",
"link",
"slug",
"avatar_urls",
"username",
"email",
"first_name",
"last_name",
"nickname",
"locale",
"registered_date",
"roles"
]
},
"description": "Limit each returned user to these fields. If omitted, a lean set of common read fields is returned."
}
}
},
{
"title": "Query readable users",
"additionalProperties": false,
"properties": {
"roles": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"administrator",
"editor",
"author",
"contributor",
"subscriber"
]
},
"description": "Filter users by one or more roles. Requires permission to list users."
},
"has_published_posts": {
"oneOf": [
{
"type": "boolean",
"enum": [
true
]
},
{
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"post",
"page",
"attachment",
"notion_page",
"vd_showcase"
]
}
}
],
"description": "Limit results to users with published posts. Use true for all publicly viewable post types, or provide post type names."
},
"include": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "integer",
"minimum": 1
},
"description": "Limit the query to these user IDs. Collection results are limited to users the caller can read, which for callers without permission to list users means only public authors. To read your own account, use a single-user lookup by ID."
},
"fields": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"items": {
"type": "string",
"enum": [
"id",
"name",
"description",
"url",
"link",
"slug",
"avatar_urls",
"username",
"email",
"first_name",
"last_name",
"nickname",
"locale",
"registered_date",
"roles"
]
},
"description": "Limit each returned user to these fields. If omitted, a lean set of common read fields is returned."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of results to return."
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Maximum number of users to return per page."
}
}
}
]
}Output schema
{
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The user ID."
},
"name": {
"type": "string",
"description": "The display name for the user."
},
"description": {
"type": "string",
"description": "Description of the user."
},
"url": {
"type": "string",
"description": "URL of the user."
},
"link": {
"type": "string",
"description": "Author archive URL for the user."
},
"slug": {
"type": "string",
"description": "An alphanumeric identifier for the user."
},
"avatar_urls": {
"type": "object",
"description": "Avatar URLs for the user, keyed by image size in pixels. A size is null when no avatar URL can be resolved for it. Present when the show_avatars option is enabled.",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"username": {
"type": "string",
"description": "Login name for the user. Present when the current user can view it."
},
"email": {
"type": [
"string",
"null"
],
"format": "email",
"description": "The email address for the user. Null when the user has no stored address, or when the stored address is not a valid email. Present when the current user can view it."
},
"first_name": {
"type": "string",
"description": "First name for the user. Present when the current user can view it."
},
"last_name": {
"type": "string",
"description": "Last name for the user. Present when the current user can view it."
},
"nickname": {
"type": "string",
"description": "The nickname for the user. Present when the current user can view it."
},
"locale": {
"type": "string",
"description": "Locale for the user. Present when the current user can view it."
},
"registered_date": {
"type": "string",
"format": "date-time",
"description": "Registration date for the user. Present when the current user can view it."
},
"roles": {
"type": "array",
"description": "Roles assigned to the user. Present when the current user can view them.",
"items": {
"type": "string"
}
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"users",
"total",
"total_pages"
],
"properties": {
"users": {
"type": "array",
"description": "The readable users matching the collection request.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "integer",
"description": "The user ID."
},
"name": {
"type": "string",
"description": "The display name for the user."
},
"description": {
"type": "string",
"description": "Description of the user."
},
"url": {
"type": "string",
"description": "URL of the user."
},
"link": {
"type": "string",
"description": "Author archive URL for the user."
},
"slug": {
"type": "string",
"description": "An alphanumeric identifier for the user."
},
"avatar_urls": {
"type": "object",
"description": "Avatar URLs for the user, keyed by image size in pixels. A size is null when no avatar URL can be resolved for it. Present when the show_avatars option is enabled.",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"username": {
"type": "string",
"description": "Login name for the user. Present when the current user can view it."
},
"email": {
"type": [
"string",
"null"
],
"format": "email",
"description": "The email address for the user. Null when the user has no stored address, or when the stored address is not a valid email. Present when the current user can view it."
},
"first_name": {
"type": "string",
"description": "First name for the user. Present when the current user can view it."
},
"last_name": {
"type": "string",
"description": "Last name for the user. Present when the current user can view it."
},
"nickname": {
"type": "string",
"description": "The nickname for the user. Present when the current user can view it."
},
"locale": {
"type": "string",
"description": "Locale for the user. Present when the current user can view it."
},
"registered_date": {
"type": "string",
"format": "date-time",
"description": "Registration date for the user. Present when the current user can view it."
},
"roles": {
"type": "array",
"description": "Roles assigned to the user. Present when the current user can view them.",
"items": {
"type": "string"
}
}
}
}
},
"total": {
"type": "integer",
"description": "Total number of users matching the query, across all pages."
},
"total_pages": {
"type": "integer",
"description": "Total number of result pages available for the query."
}
}
}
]
}Voyager Activity Tracking voyager-activity
voyager-orbit/get-activities — Get Activities
read-only · idempotent · MCP public
Retrieve WordPress admin activity timeline. Tracks content changes, plugin updates, media uploads, menu edits, and system events. Supports filtering by event type, category, user, and date range.
Input schema
{
"type": "object",
"properties": {
"per_page": {
"type": "integer",
"default": 20,
"minimum": 1,
"maximum": 100
},
"page": {
"type": "integer",
"default": 1
},
"event_category": {
"type": "string",
"enum": [
"content",
"plugin",
"system",
"menu",
"media",
"update"
]
},
"user_id": {
"type": "integer",
"description": "Filter by WordPress user ID"
},
"from": {
"type": "string",
"description": "Start date YYYY-MM-DD"
},
"to": {
"type": "string",
"description": "End date YYYY-MM-DD"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "array"
},
"total": {
"type": "integer"
}
}
}voyager-orbit/get-activity-stats — Get Activity Statistics
read-only · idempotent · MCP public
Get aggregated activity statistics — counts by category, user, and time period. Useful for understanding how actively the site is being maintained.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object"
}
}
}Voyager Analytics voyager-analytics
voyager-orbit/get-lead-stats — Get Lead Statistics
read-only · idempotent · MCP public
Retrieve lead statistics including totals, conversions by traffic source, device type breakdown, and lead type distribution. Supports date range filtering. Results are cached for 5 minutes.
Input schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date (YYYY-MM-DD)"
},
"to": {
"type": "string",
"description": "End date (YYYY-MM-DD)"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object"
}
}
}voyager-orbit/get-monthly-report — Get Monthly Report
read-only · idempotent · MCP public
Generate a comprehensive monthly lead report with growth percentages, top landing pages, top referrers, daily breakdown, traffic source analysis, and device breakdown. Perfect for client reporting.
Input schema
{
"type": "object",
"properties": {
"month": {
"type": "string",
"description": "Month in YYYY-MM format (e.g. 2026-03). Defaults to current month."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object"
}
}
}voyager-orbit/get-insights — Get Insights
read-only · idempotent · MCP public
Retrieve AI-generated and rule-based insights about the site performance, lead trends, and actionable recommendations. Includes both local insights (generated hourly) and Portal AI insights (fetched daily).
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"sentiment": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}voyager-orbit/get-ga4-data — Get GA4 Analytics
read-only · idempotent · MCP public
Fetch Google Analytics 4 data for this site from the Voyager Portal. Returns pageviews, sessions, bounce rate, traffic sources, device breakdown, and landing pages for the requested date range.
Input schema
{
"type": "object",
"properties": {
"date_range": {
"type": "string",
"description": "Preset date range: last7days, last30days, last90days, thisMonth, lastMonth.",
"enum": [
"last7days",
"last30days",
"last90days",
"thisMonth",
"lastMonth"
],
"default": "last30days"
},
"start_date": {
"type": "string",
"description": "Custom start date (YYYY-MM-DD). Overrides date_range if both start_date and end_date are set."
},
"end_date": {
"type": "string",
"description": "Custom end date (YYYY-MM-DD)."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"date_range": {
"type": "string"
},
"cached": {
"type": "boolean"
},
"metrics": {
"type": "object"
},
"top_pages": {
"type": "array",
"items": {
"type": "object"
}
},
"traffic_sources": {
"type": "array",
"items": {
"type": "object"
}
},
"devices": {
"type": "array",
"items": {
"type": "object"
}
},
"error": {
"type": "string"
}
}
}voyager-orbit/get-gsc-data — Get Search Console Data
read-only · idempotent · MCP public
Fetch Google Search Console data for this site from the Voyager Portal. Returns clicks, impressions, CTR, average position, top queries, and top pages for the requested date range.
Input schema
{
"type": "object",
"properties": {
"date_range": {
"type": "string",
"description": "Preset date range: last7days, last30days, last90days, thisMonth, lastMonth.",
"enum": [
"last7days",
"last30days",
"last90days",
"thisMonth",
"lastMonth"
],
"default": "last30days"
},
"start_date": {
"type": "string",
"description": "Custom start date (YYYY-MM-DD). Overrides date_range if both set."
},
"end_date": {
"type": "string",
"description": "Custom end date (YYYY-MM-DD)."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"date_range": {
"type": "string"
},
"cached": {
"type": "boolean"
},
"metrics": {
"type": "object"
},
"top_queries": {
"type": "array",
"items": {
"type": "object"
}
},
"top_pages": {
"type": "array",
"items": {
"type": "object"
}
},
"error": {
"type": "string"
}
}
}Voyager Blocks Analytics voyager-blocks-analytics
voyager-blocks/get-binding-stats — Get Binding Stats
read-only · MCP public
Retrieve aggregated block binding resolution statistics for the past N days.
Input schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Number of days to aggregate (1-90). Default 7. Data beyond 2 days is read from persistent history.",
"minimum": 1,
"maximum": 90
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_resolutions": {
"type": "integer"
},
"fallback_count": {
"type": "integer"
},
"by_source": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"pages_rendered": {
"type": "integer"
},
"days_with_data": {
"type": "integer"
},
"period_days": {
"type": "integer"
}
}
}voyager-blocks/get-airtable-tables — Get Airtable Tables
read-only · destructive · idempotent · MCP public
List all connected Airtable tables with their configuration and status.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"tables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"base_id": {
"type": "string"
},
"table_id": {
"type": "string"
},
"alias": {
"type": "string"
},
"label": {
"type": "string"
},
"status": {
"type": "string"
},
"filter_property": {
"type": "string"
},
"added": {
"type": "string"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
}
},
"additionalProperties": false
}voyager-blocks/get-airtable-schema — Get Airtable Schema
read-only · destructive · idempotent · MCP public
Get the schema (field names and types) for a connected Airtable table.
Input schema
{
"type": "object",
"required": [
"table"
],
"properties": {
"table": {
"type": "string",
"description": "Airtable table alias or ID."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"base_id": {
"type": "string"
},
"table_id": {
"type": "string"
},
"name": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"id": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-blocks/preview-airtable-binding — Preview Airtable Binding
read-only · destructive · idempotent · MCP public
Preview how an Airtable field resolves for a specific record.
Input schema
{
"type": "object",
"required": [
"table",
"key",
"filter_value"
],
"properties": {
"table": {
"type": "string",
"description": "Airtable table alias or ID."
},
"key": {
"type": "string",
"description": "Airtable field name to resolve."
},
"filter_key": {
"type": "string",
"description": "Field to filter on. Defaults to Slug.",
"default": "Slug"
},
"filter_value": {
"type": "string",
"description": "Value to match against the filter field."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"resolved_value": {
"type": "string"
},
"cached": {
"type": "boolean"
},
"base_id": {
"type": "string"
},
"table_id": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/flush-airtable-cache — Flush Airtable Cache
writes · MCP public
Flush all Airtable binding caches.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"flushed_count": {
"type": "integer"
}
},
"additionalProperties": false
}voyager-blocks/get-notion-databases — Get Notion Databases
read-only · destructive · idempotent · MCP public
List all connected Notion databases with their configuration and status.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"databases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"alias": {
"type": "string"
},
"label": {
"type": "string"
},
"status": {
"type": "string"
},
"filter_property": {
"type": "string"
},
"added": {
"type": "string"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
}
},
"additionalProperties": false
}voyager-blocks/preview-notion-binding — Preview Notion Binding
read-only · destructive · idempotent · MCP public
Preview how a Notion property resolves for a specific database row.
Input schema
{
"type": "object",
"required": [
"database",
"key",
"filter_value"
],
"properties": {
"database": {
"type": "string",
"description": "Notion database alias or ID."
},
"key": {
"type": "string",
"description": "Notion property name to resolve."
},
"filter_key": {
"type": "string",
"description": "Property to filter on. Defaults to Slug.",
"default": "Slug"
},
"filter_value": {
"type": "string",
"description": "Value to match against the filter property."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"raw_type": {
"type": "string"
},
"resolved_value": {
"type": "string"
},
"cached": {
"type": "boolean"
},
"database_id": {
"type": "string"
},
"error": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/flush-notion-cache — Flush Notion Cache
writes · MCP public
Flush Notion binding caches — all or for a specific database.
Input schema
{
"type": "object",
"properties": {
"database": {
"type": "string",
"description": "Notion database alias or ID. Omit to flush all caches."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"flushed_count": {
"type": "integer"
},
"scope": {
"type": "string"
},
"error": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/get-notion-schema — Get Notion Schema
read-only · destructive · idempotent · MCP public
Get the schema (property names and types) for a connected Notion database.
Input schema
{
"type": "object",
"required": [
"database"
],
"properties": {
"database": {
"type": "string",
"description": "Notion database alias or ID."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"database_id": {
"type": "string"
},
"title": {
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"id": {
"type": "string"
}
},
"additionalProperties": false
}
},
"error": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/create-notion-page — Create Notion Page
writes · destructive · MCP public
Create a page in a Notion database and a WordPress notion_page CPT post with data bindings.
Input schema
{
"type": "object",
"required": [
"database",
"name"
],
"properties": {
"database": {
"type": "string",
"description": "Notion database alias (e.g. \"content\")."
},
"pattern": {
"type": "string",
"description": "Pattern slug for rendering (default: voyager/notion-submission).",
"default": "voyager/notion-submission"
},
"name": {
"type": "string",
"description": "Page title (maps to Notion \"Name\" title property)."
},
"keyword": {
"type": "string",
"description": "Keyword or topic (maps to Notion \"Keyword\" property)."
},
"content": {
"type": "string",
"description": "Body content (maps to Notion \"HTML\" property)."
},
"fields": {
"type": "object",
"description": "Additional Notion properties as key-value pairs.",
"additionalProperties": false
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"post_id": {
"type": "integer"
},
"notion_page_id": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"error": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/get-block-usage — Get Block Usage
read-only · MCP public
Retrieve usage statistics for Voyager blocks across published posts.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"block_name": {
"type": "string"
},
"usage_count": {
"type": "integer"
}
}
}
}voyager-blocks/get-binding-sources — Get Binding Sources
read-only · destructive · idempotent · MCP public
List all registered block binding sources in the Voyager ecosystem.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"plugin": {
"type": "string"
},
"uses_context": {
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
}
},
"additionalProperties": false
}voyager-blocks/get-bindable-fields — Get Bindable Fields
read-only · destructive · idempotent · MCP public
Return bindable fields for a given post type, including global and type-specific fields.
Input schema
{
"type": "object",
"required": [
"post_type"
],
"properties": {
"post_type": {
"type": "string",
"description": "Post type slug to retrieve bindable fields for."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"type": {
"type": "string"
},
"post_type": {
"type": "string"
}
},
"additionalProperties": false
}
},
"total": {
"type": "integer"
},
"global_fields": {
"type": "integer"
},
"specific_fields": {
"type": "integer"
}
},
"additionalProperties": false
}voyager-blocks/audit-binding-health — Audit Binding Health
read-only · destructive · idempotent · MCP public
Audit binding field coverage across published posts for a given post type.
Input schema
{
"type": "object",
"properties": {
"post_type": {
"type": "string",
"description": "Post type to audit. Defaults to service_area.",
"default": "service_area"
},
"limit": {
"type": "integer",
"description": "Max posts to audit. Defaults to 50.",
"default": 50
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_type": {
"type": "string"
},
"total_posts": {
"type": "integer"
},
"total_fields": {
"type": "integer"
},
"coverage": {
"type": "object",
"properties": {
"fully_populated": {
"type": "integer"
},
"partially_populated": {
"type": "integer"
},
"empty": {
"type": "integer"
}
},
"additionalProperties": false
},
"field_coverage": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"populated": {
"type": "integer"
},
"empty": {
"type": "integer"
},
"percentage": {
"type": "string"
}
},
"additionalProperties": false
}
},
"worst_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"empty_count": {
"type": "integer"
}
},
"additionalProperties": false
}
},
"worst_posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"empty_fields": {
"type": "integer"
}
},
"additionalProperties": false
}
},
"cache_status": {
"type": "object",
"properties": {
"pulse_ttl": {
"type": "string"
},
"orbit_ttl": {
"type": "string"
},
"geo_ttl": {
"type": "string"
},
"ai_content_ttl": {
"type": "string"
}
},
"additionalProperties": false
},
"registry_compliance": {
"type": "object",
"properties": {
"compliant": {
"type": "boolean"
},
"registry_sources": {
"type": "integer"
},
"registered_sources": {
"type": "integer"
},
"bypassing_registry": {
"type": "array",
"items": {
"type": "string"
}
},
"unavailable": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}voyager-blocks/check-notion-health — Check Notion Health
read-only · MCP public
Test Notion API connectivity, cache status, and binding health. Returns API reachability, configured databases, cache hit rates, and any errors.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"api_reachable": {
"type": "boolean"
},
"api_response_ms": {
"type": "integer"
},
"token_configured": {
"type": "boolean"
},
"databases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"alias": {
"type": "string"
},
"id": {
"type": "string"
},
"status": {
"type": "string"
}
}
}
},
"cache_stats": {
"type": "object",
"properties": {
"total_cached_rows": {
"type": "integer"
},
"cache_ttl": {
"type": "integer"
},
"error_ttl": {
"type": "integer"
}
}
},
"bound_posts": {
"type": "integer",
"description": "Posts with Notion bindings"
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-blocks/export-patterns — Export Pattern Library
read-only · MCP public
Export the full Voyager pattern library as a JSON manifest. Used by the Pattern Cloud to serve patterns to client sites.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"version": {
"type": "string"
},
"generated": {
"type": "string"
},
"count": {
"type": "integer"
},
"patterns": {
"type": "array"
}
}
}voyager-blocks/sync-patterns — Sync Pattern Library
writes · MCP public
Force-refresh the Pattern Cloud cache on this site. Clears the transient and re-fetches patterns from the configured source URL.
Input schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"refresh",
"clear"
],
"description": "Action: \"refresh\" clears cache and re-fetches, \"clear\" just clears.",
"default": "refresh"
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"pattern_count": {
"type": "integer"
},
"source_url": {
"type": "string"
},
"synced_at": {
"type": "string"
}
},
"additionalProperties": false
}voyager-blocks/generate-pattern — Generate Block Pattern
writes · MCP public
AI-generate a WordPress block pattern from a text description. Returns valid block markup using the site's design tokens and Voyager block library. Optionally saves to the pattern library.
Input schema
{
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Description of the pattern to generate (e.g. \"hero section with video background, bold headline, two CTA buttons, and a stats counter row\")."
},
"category": {
"type": "string",
"description": "Pattern category (e.g. \"voyager/hero\", \"voyager/features\", \"voyager/call-to-action\").",
"default": "voyager/content"
},
"style": {
"type": "string",
"enum": [
"minimal",
"bold",
"dark",
"colorful"
],
"description": "Visual style preset.",
"default": "minimal"
},
"save": {
"type": "boolean",
"description": "If true, saves the pattern to wp_options for persistent registration. Default false (preview only).",
"default": false
},
"slug": {
"type": "string",
"description": "Pattern slug (required if save=true). Will be prefixed with \"voyager/\".",
"default": ""
},
"title": {
"type": "string",
"description": "Pattern display title (required if save=true).",
"default": ""
}
},
"required": [
"description"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"content": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"category": {
"type": "string"
},
"saved": {
"type": "boolean"
}
},
"additionalProperties": false
}Voyager Chat Tools voyager-chat
voyager-chat/get-page-content — Get Page Content
read-only · idempotent · MCP public
Retrieve the full content, title, status, and SEO meta for a post or page by ID.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The WordPress post/page ID."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"content": {
"type": "string"
},
"excerpt": {
"type": "string"
},
"status": {
"type": "string"
},
"type": {
"type": "string"
},
"url": {
"type": "string"
},
"modified": {
"type": "string"
},
"word_count": {
"type": "integer"
},
"seo_title": {
"type": "string"
},
"seo_description": {
"type": "string"
},
"focus_keyword": {
"type": "string"
},
"seo_score": {
"type": "string"
}
}
}voyager-chat/quick-edit-post — Quick Edit Post
writes · idempotent · MCP public
Update a post or page title, content, excerpt, or status. Lighter than build-page for simple edits.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The WordPress post/page ID to edit."
},
"title": {
"type": "string",
"description": "New post title. Omit to keep current."
},
"content": {
"type": "string",
"description": "New post content (HTML/block markup). Omit to keep current."
},
"excerpt": {
"type": "string",
"description": "New post excerpt. Omit to keep current."
},
"status": {
"type": "string",
"enum": [
"publish",
"draft",
"pending",
"private"
],
"description": "New post status. Omit to keep current."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"url": {
"type": "string"
},
"modified": {
"type": "string"
}
}
}Voyager Blocks Content voyager-content
voyager-content/generate-testimonials — Generate Testimonials
read-only · MCP public
Generate realistic client testimonials for use in testimonial blocks.
Input schema
{
"type": "object",
"properties": {
"company_name": {
"type": "string",
"description": "The company name to generate testimonials for."
},
"industry": {
"type": "string",
"description": "The industry the company operates in."
},
"count": {
"type": "integer",
"description": "Number of testimonials to generate.",
"default": 3
}
},
"required": [
"company_name"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"quote": {
"type": "string"
},
"author": {
"type": "string"
},
"company": {
"type": "string"
},
"role": {
"type": "string"
},
"rating": {
"type": "integer"
}
}
}
}voyager-content/generate-service-content — Generate Service Content
read-only · MCP public
Generate service page content including headline, description, features, and CTA.
Input schema
{
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "The name of the service."
},
"business_type": {
"type": "string",
"description": "The type of business offering the service."
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"description": "The tone of the generated content."
}
},
"required": [
"service_name"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"headline": {
"type": "string"
},
"description": {
"type": "string"
},
"features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"cta_text": {
"type": "string"
}
}
}voyager-content/generate-hero-content — Generate Hero Content
read-only · MCP public
Generate hero section content variants with headlines, subtext, and CTAs.
Input schema
{
"type": "object",
"properties": {
"page_purpose": {
"type": "string",
"description": "The purpose or goal of the page."
},
"business_name": {
"type": "string",
"description": "The name of the business."
},
"target_audience": {
"type": "string",
"description": "The target audience for the content."
},
"variants": {
"type": "integer",
"description": "Number of hero content variants to generate.",
"default": 3
}
},
"required": [
"page_purpose"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"headline": {
"type": "string"
},
"subtext": {
"type": "string"
},
"cta_text": {
"type": "string"
},
"secondary_cta_text": {
"type": "string"
}
}
}
}voyager-content/generate-team-bio — Generate Team Bio
read-only · MCP public
Generate short and long bio text with expertise keywords for a team member.
Input schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The team member's name."
},
"role": {
"type": "string",
"description": "The team member's role or job title."
},
"department": {
"type": "string",
"description": "The department the team member belongs to."
},
"tone": {
"type": "string",
"enum": [
"professional",
"casual",
"creative"
],
"description": "The tone for the bio."
}
},
"required": [
"name",
"role"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"bio_short": {
"type": "string"
},
"bio_long": {
"type": "string"
},
"expertise_keywords": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-content/generate-stats-content — Generate Stats Content
read-only · MCP public
Generate impressive statistics content for stats/counter blocks.
Input schema
{
"type": "object",
"properties": {
"business_type": {
"type": "string",
"description": "The type of business to generate stats for."
},
"stats_count": {
"type": "integer",
"description": "Number of stats to generate.",
"default": 4
}
},
"required": [
"business_type"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"suffix": {
"type": "string"
},
"label": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}voyager-content/generate-service-area — Generate Service Area Content
read-only · MCP public
AI-generate all content fields for a programmatic SEO service area page. Provide city, state, and service — returns hero copy, body content, CTA, SEO meta, and local stats ready to populate post meta.
Input schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name (e.g. \"Denver\")."
},
"state": {
"type": "string",
"description": "State or province (e.g. \"Colorado\")."
},
"service": {
"type": "string",
"description": "Primary service offering (e.g. \"Web Design\").",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"description": "Content tone.",
"default": "professional"
},
"phone": {
"type": "string",
"description": "Local phone number to display.",
"default": ""
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"sa_city": {
"type": "string"
},
"sa_state": {
"type": "string"
},
"sa_hero_headline": {
"type": "string"
},
"sa_hero_subhead": {
"type": "string"
},
"sa_body_intro": {
"type": "string"
},
"sa_body_main": {
"type": "string"
},
"sa_cta_text": {
"type": "string"
},
"sa_cta_url": {
"type": "string"
},
"sa_local_phone": {
"type": "string"
},
"sa_focus_keyword": {
"type": "string"
},
"sa_meta_title": {
"type": "string"
},
"sa_meta_desc": {
"type": "string"
}
}
}voyager-content/create-service-area — Create Service Area Page
writes · MCP public
End-to-end pSEO page creation: AI-generates content for a city, creates the service_area post, populates all meta fields, and inserts the bound landing page pattern. Returns the post ID and permalink.
Input schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name."
},
"state": {
"type": "string",
"description": "State or province."
},
"service": {
"type": "string",
"description": "Primary service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"default": "professional"
},
"phone": {
"type": "string",
"description": "Local phone number.",
"default": ""
},
"region": {
"type": "string",
"description": "Region taxonomy term to assign (e.g. \"Front Range\").",
"default": ""
},
"status": {
"type": "string",
"enum": [
"draft",
"publish",
"future"
],
"description": "Post status. Defaults to draft for review.",
"default": "draft"
},
"layout": {
"type": "string",
"enum": [
"landing",
"bold",
"showcase",
"random"
],
"description": "Page layout variant. \"landing\" = clean minimal, \"bold\" = animated with stats + flip cards, \"showcase\" = testimonials + social proof. \"random\" picks one.",
"default": "landing"
},
"skip_existing": {
"type": "boolean",
"description": "If true, return a \"skipped\" response instead of an error when a matching service area already exists (by slug or city+state meta). Useful for batch/idempotent operations.",
"default": false
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"permalink": {
"type": "string"
},
"status": {
"type": "string"
},
"meta_fields": {
"type": "integer",
"description": "Number of meta fields populated"
},
"ai_generated": {
"type": "boolean"
}
}
}Voyager Agent Workflows voyager-content-agents
voyager-content/build-page — Build Page
writes · MCP public
Build a complete page by chaining layout suggestion and content generation abilities.
Input schema
{
"type": "object",
"properties": {
"page_type": {
"type": "string",
"enum": [
"landing",
"service",
"about",
"portfolio",
"contact",
"faq"
],
"description": "The type of page to build."
},
"post_type": {
"type": "string",
"description": "Target post type. For pSEO CPTs (service_area, industry_page, neighborhood), uses bound patterns instead of raw blocks.",
"default": "page"
},
"post_id": {
"type": "integer",
"description": "Existing post ID to populate (for pSEO binding flow). If omitted with create_draft, a new post is created."
},
"page_title": {
"type": "string",
"description": "Title for the new draft post (used when create_draft is true and no post_id)."
},
"business_name": {
"type": "string",
"description": "The company or business name."
},
"business_description": {
"type": "string",
"description": "What the business does."
},
"target_audience": {
"type": "string",
"description": "Who the page targets."
},
"create_draft": {
"type": "boolean",
"description": "Whether to create a WordPress draft page.",
"default": false
}
},
"required": [
"page_type",
"business_name",
"business_description"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"blocks_used": {
"type": "array",
"items": {
"type": "string"
}
},
"block_markup": {
"type": "string"
},
"post_id": {
"type": "integer"
},
"post_url": {
"type": "string"
},
"pattern": {
"type": "string",
"description": "Pattern slug used (pSEO binding flow only)."
},
"meta_populated": {
"type": "array",
"items": {
"type": "string"
},
"description": "Meta fields populated (pSEO binding flow only)."
}
}
}voyager-content/audit-content — Audit Content
read-only · idempotent · MCP public
Scan published posts for content quality issues — missing alt text, stale content, weak CTAs, heading hierarchy problems.
Input schema
{
"type": "object",
"properties": {
"post_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Post types to audit.",
"default": [
"post",
"page"
]
},
"limit": {
"type": "integer",
"description": "Maximum number of posts to audit.",
"default": 50
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_posts": {
"type": "integer"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"post_title": {
"type": "string"
},
"issue_type": {
"type": "string"
},
"details": {
"type": "string"
},
"severity": {
"type": "string"
}
}
}
},
"summary": {
"type": "object",
"properties": {
"missing_alt": {
"type": "integer"
},
"stale_content": {
"type": "integer"
},
"weak_ctas": {
"type": "integer"
},
"heading_issues": {
"type": "integer"
},
"total_issues": {
"type": "integer"
}
}
}
}
}voyager-content/optimize-seo — Optimize SEO
read-only · MCP public
Analyze a post's content for SEO optimization opportunities against target keywords.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The ID of the post to analyze."
},
"target_keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Target keywords to optimize for."
}
},
"required": [
"post_id",
"target_keywords"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"score": {
"type": "integer"
},
"keyword_analysis": {
"type": "object",
"properties": {
"in_title": {
"type": "boolean"
},
"in_headings": {
"type": "boolean"
},
"in_first_paragraph": {
"type": "boolean"
},
"in_alt_text": {
"type": "boolean"
},
"keyword_density": {
"type": "number"
}
}
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
}
},
"optimized_meta_description": {
"type": "string"
}
}
}Voyager Block Utilities voyager-content-utilities
voyager-content/suggest-block-layout — Suggest Block Layout
read-only · MCP public
Given a page purpose and business context, suggests an ordered list of Voyager blocks to build the page.
Input schema
{
"type": "object",
"properties": {
"page_purpose": {
"type": "string",
"description": "The purpose of the page (e.g., \"services page for a plumbing company\")."
},
"business_type": {
"type": "string",
"description": "The type of business."
},
"sections": {
"type": "integer",
"description": "Approximate number of sections desired.",
"default": 6
}
},
"required": [
"page_purpose"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"block": {
"type": "string"
},
"reason": {
"type": "string"
}
}
}
}voyager-content/rewrite-content — Rewrite Content
read-only · MCP public
Rewrites text content for a different tone, length, or audience.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The text content to rewrite."
},
"tone": {
"type": "string",
"enum": [
"professional",
"casual",
"friendly",
"bold",
"formal",
"playful"
],
"description": "Target tone for the rewrite."
},
"length": {
"type": "string",
"enum": [
"shorter",
"same",
"longer"
],
"description": "Desired length relative to original.",
"default": "same"
},
"audience": {
"type": "string",
"description": "Target audience (e.g., \"small business owners\", \"tech professionals\")."
}
},
"required": [
"content",
"tone"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"rewritten": {
"type": "string"
},
"changes": {
"type": "string"
}
}
}voyager-content/generate-faq — Generate FAQ
read-only · MCP public
Generates FAQ questions and answers from a service or topic description.
Input schema
{
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "The service or topic to generate FAQ for."
},
"context": {
"type": "string",
"description": "Additional context about the business or service."
},
"count": {
"type": "integer",
"description": "Number of FAQ items to generate.",
"default": 5
}
},
"required": [
"topic"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
}
}
}voyager-content/alt-text-generator — Generate Alt Text
read-only · MCP public
Generates descriptive alt text for an image given its URL or context.
Input schema
{
"type": "object",
"properties": {
"image_url": {
"type": "string",
"description": "URL of the image."
},
"page_context": {
"type": "string",
"description": "Context about the page where the image appears."
},
"image_filename": {
"type": "string",
"description": "Original filename of the image (often descriptive)."
}
},
"required": [
"image_url"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"alt_text": {
"type": "string"
},
"title_text": {
"type": "string"
},
"description": {
"type": "string"
}
}
}voyager-content/cta-optimizer — Optimize CTA
read-only · MCP public
Suggests improved call-to-action copy based on page context and conversion goals.
Input schema
{
"type": "object",
"properties": {
"current_cta": {
"type": "string",
"description": "The current CTA text."
},
"page_context": {
"type": "string",
"description": "What the page is about."
},
"goal": {
"type": "string",
"enum": [
"lead_generation",
"sales",
"signup",
"contact",
"download",
"learn_more"
],
"description": "The conversion goal."
},
"variants": {
"type": "integer",
"description": "Number of CTA variants to suggest.",
"default": 3
}
},
"required": [
"current_cta",
"goal"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"cta_text": {
"type": "string"
},
"reasoning": {
"type": "string"
}
}
}
}voyager-content/translate-block — Translate Block Content
read-only · MCP public
Translates block text content to another language while preserving tone and meaning.
Input schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The text content to translate."
},
"target_language": {
"type": "string",
"description": "Target language (e.g., \"Spanish\", \"French\", \"German\", \"es\", \"fr\", \"de\")."
},
"preserve_tone": {
"type": "boolean",
"description": "Whether to preserve the original tone and style.",
"default": true
}
},
"required": [
"content",
"target_language"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"translated": {
"type": "string"
},
"source_language": {
"type": "string"
},
"target_language": {
"type": "string"
}
}
}Voyager Diagnostics voyager-diagnostics
voyager-orbit/site-dna — Get Site DNA
read-only · idempotent · MCP public
Returns the site technical fingerprint: WordPress/PHP versions, active theme and parent, all active plugins with builder detection, content counts by post type, custom taxonomies, database size, and hosting signals (object cache, SSL, multisite).
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"environment": {
"type": "object"
},
"theme": {
"type": "object"
},
"plugins": {
"type": "object"
},
"content": {
"type": "object"
},
"taxonomies": {
"type": "array"
}
}
}
}
}voyager-orbit/accessibility-check — Accessibility Check
read-only · idempotent · MCP public
Run WCAG 2.1 AA accessibility checks on a post. Checks heading structure (skipped levels), image alt text (missing or empty), link text quality (non-descriptive like "click here"), and empty interactive elements (buttons/links without text or aria-label). Returns a score and list of issues with WCAG criterion references.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "ID of the post to check for accessibility issues",
"minimum": 1
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"post_title": {
"type": "string"
},
"score": {
"type": "integer"
},
"issues": {
"type": "array"
},
"passes": {
"type": "array"
},
"summary": {
"type": "string"
}
}
}
}
}voyager-orbit/suite-health — Suite Health
read-only · idempotent · MCP public
Check whether the Voyager plugin suite is correctly assembled on this site. Returns one structured result per check (suite versions, plugin basename, feature flags per provider, bindable fields, block binding sources, shared style-handle ownership, Notion token decryptability, scheduled jobs with last run and last error, database tables, REST reachability, permalinks, SEO plugin, site identity options, and a capability report) with a status, a plain-language reason, and a remedy. Read-only.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"generated_at": {
"type": "string",
"description": "ISO-8601 UTC timestamp of collection."
},
"overall": {
"type": "string",
"description": "ok | warn | fail"
},
"counts": {
"type": "object",
"properties": {
"ok": {
"type": "integer"
},
"warn": {
"type": "integer"
},
"fail": {
"type": "integer"
},
"info": {
"type": "integer"
}
}
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"group": {
"type": "string",
"description": "assembly | connectivity | capabilities"
},
"status": {
"type": "string",
"description": "ok | warn | fail | info"
},
"summary": {
"type": "string"
},
"reason": {
"type": "string",
"description": "Why the check is not green. Empty when it is."
},
"remedy": {
"type": "string",
"description": "What to do about it. Empty when there is nothing to do."
},
"fix_action": {
"type": "string",
"description": "Names a one-click fix offered by the Diagnostics panel. This ability never performs it."
},
"meta": {
"type": "object"
}
}
}
},
"capabilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"available": {
"type": "boolean"
},
"reason": {
"type": "string"
}
}
}
}
}
}voyager-orbit/suite-update-health — Suite Update Health
read-only · idempotent · MCP public
Report, per Voyager suite plugin (Orbit, Blocks, Core), whether this site can actually receive its updates. Each plugin auto-updates from its own private GitHub repository using its own credential, so a site can be healthy for one and blind for another. This checks the credential directly — where it resolves from, and whether GitHub accepts it against that repository's latest-release endpoint — because a version comparison cannot tell "up to date" from "cannot see any release", and a forced update check reports no updates in both cases. Verdicts are healthy, blocked, stalled, not_installed or unknown: blocked means the credential is missing or rejected, stalled means the credential works but the plugin's own updater does not, in either of two ways: its scheduler has not started a run in over a day, or a recent run stored no result at all, which PUC does only when its own request fails. Note lastCheck is written before the request, so it never evidences a completed run. A check that could not reach an answer returns unknown. None of them ever defaults to healthy. Read-only: it never installs, repairs or writes a credential, and never returns a token value, only a short fingerprint.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"generated_at": {
"type": "string",
"description": "ISO-8601 UTC timestamp of collection."
},
"overall": {
"type": "string",
"description": "blocked | stalled | unknown | healthy | not_installed. Worst verdict wins; a measured defect outranks an absence of evidence, and neither ever reports as healthy."
},
"counts": {
"type": "object",
"properties": {
"healthy": {
"type": "integer"
},
"blocked": {
"type": "integer"
},
"stalled": {
"type": "integer"
},
"not_installed": {
"type": "integer"
},
"unknown": {
"type": "integer"
}
}
},
"plugins": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"label": {
"type": "string"
},
"repo": {
"type": "string"
},
"installed": {
"type": "boolean"
},
"active": {
"type": "boolean",
"description": "Deactivated is not absent \u2014 the credential is still present."
},
"version": {
"type": [
"string",
"null"
]
},
"token_source": {
"type": "string",
"description": "constant | option | file | none \u2014 mirrors the plugin's own resolution order."
},
"token_fingerprint": {
"type": "string",
"description": "First and last four characters only. Enough to tell whether two plugins share one credential; never a usable secret."
},
"api_status": {
"type": "string",
"description": "ok | unauthorized | not_found | rate_limited | network_error | no_token | http_NNN."
},
"latest_version": {
"type": [
"string",
"null"
]
},
"update_available": {
"type": "boolean"
},
"last_check": {
"type": [
"string",
"null"
],
"description": "When this plugin's own update checker last STARTED a run. PUC writes this before issuing the request, so it proves the scheduler fired, not that the check succeeded."
},
"checker_saw_update": {
"type": [
"string",
"null"
],
"description": "The release the plugin's own checker recorded on its last run. Null while this check can see a release means PUC is running and failing."
},
"last_check_age_h": {
"type": [
"number",
"null"
],
"description": "Hours since that run. A working credential attached to a checker that stopped running is reported as stalled, not healthy."
},
"updater_library": {
"type": "string",
"description": "present | absent | unknown. Absent means this install has no Plugin Update Checker library, so it registers no update check at all and cannot update regardless of its credential."
},
"verdict": {
"type": "string",
"description": "healthy | blocked | stalled | not_installed | unknown."
},
"reason": {
"type": "string"
},
"remedy": {
"type": "string"
}
}
}
}
}
}Voyager GSC Analytics voyager-gsc
voyager-gsc/analyze-performance — Analyze GSC Performance
read-only · idempotent · MCP public
Analyze Google Search Console performance data for service_area pages. Accepts CSV data or pulls from Site Kit if available. Returns per-page metrics with optimization recommendations.
Input schema
{
"type": "object",
"properties": {
"csv_data": {
"type": "string",
"description": "Raw CSV data from GSC Performance export (Pages tab). Columns: page, clicks, impressions, ctr, position. If empty, attempts to pull from Site Kit.",
"default": ""
},
"days": {
"type": "integer",
"description": "Number of days to analyze (for Site Kit pull, default: 28).",
"default": 28
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"source": {
"type": "string"
},
"total_pages": {
"type": "integer"
},
"total_clicks": {
"type": "integer"
},
"total_impressions": {
"type": "integer"
},
"avg_position": {
"type": "number"
},
"avg_ctr": {
"type": "number"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"post_id": {
"type": "integer"
},
"city": {
"type": "string"
},
"clicks": {
"type": "integer"
},
"impressions": {
"type": "integer"
},
"ctr": {
"type": "number"
},
"position": {
"type": "number"
},
"opportunity": {
"type": "string"
},
"recommendation": {
"type": "string"
}
},
"additionalProperties": false
}
},
"opportunities": {
"type": "object",
"properties": {
"title_rewrites": {
"type": "integer"
},
"content_enrichment": {
"type": "integer"
},
"quick_wins": {
"type": "integer"
},
"noindex_candidates": {
"type": "integer"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}voyager-gsc/optimization-queue — GSC Optimization Queue
read-only · idempotent · MCP public
Generate a prioritized optimization queue based on GSC data. Identifies which service_area pages to enrich, rewrite, or noindex for maximum ranking improvement.
Input schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"enrich",
"rewrite_meta",
"noindex",
"all"
],
"description": "Which optimization to run. \"all\" returns the queue without acting.",
"default": "all"
},
"limit": {
"type": "integer",
"description": "Max pages to process (default: 10).",
"default": 10
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"action": {
"type": "string"
},
"processed": {
"type": "integer"
},
"queue": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"city": {
"type": "string"
},
"opportunity": {
"type": "string"
},
"recommendation": {
"type": "string"
},
"actioned": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}Voyager Industry Pages voyager-industry
voyager-content/generate-industry-page — Generate Industry Page Content
writes · MCP public
AI-generate all content fields for a programmatic SEO industry landing page. Provide industry and service — returns hero copy, body content, pain points, solutions, case study, CTA, and SEO meta.
Input schema
{
"type": "object",
"properties": {
"industry": {
"type": "string",
"description": "Target industry (e.g. \"Healthcare\", \"Real Estate\", \"Legal\")."
},
"service": {
"type": "string",
"description": "Primary service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"description": "Content tone.",
"default": "professional"
},
"phone": {
"type": "string",
"description": "Phone number to display.",
"default": ""
}
},
"required": [
"industry"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"ip_industry": {
"type": "string"
},
"ip_hero_headline": {
"type": "string"
},
"ip_hero_subhead": {
"type": "string"
},
"ip_body_intro": {
"type": "string"
},
"ip_body_main": {
"type": "string"
},
"ip_pain_points": {
"type": "string"
},
"ip_solutions": {
"type": "string"
},
"ip_case_study": {
"type": "string"
},
"ip_cta_text": {
"type": "string"
},
"ip_cta_url": {
"type": "string"
},
"ip_focus_keyword": {
"type": "string"
},
"ip_meta_title": {
"type": "string"
},
"ip_meta_desc": {
"type": "string"
}
},
"additionalProperties": false
}voyager-content/create-industry-page — Create Industry Page
writes · MCP public
End-to-end industry page creation: AI-generates content for an industry, creates the industry_page post, populates all meta fields, and inserts the bound landing page pattern. Returns the post ID and permalink.
Input schema
{
"type": "object",
"properties": {
"industry": {
"type": "string",
"description": "Target industry (e.g. \"Healthcare\", \"Real Estate\")."
},
"service": {
"type": "string",
"description": "Primary service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"default": "professional"
},
"phone": {
"type": "string",
"description": "Phone number.",
"default": ""
},
"status": {
"type": "string",
"enum": [
"draft",
"publish"
],
"description": "Post status. Defaults to draft for review.",
"default": "draft"
},
"layout": {
"type": "string",
"enum": [
"landing",
"bold",
"showcase",
"random"
],
"description": "Page layout variant. \"random\" picks one.",
"default": "landing"
},
"category": {
"type": "string",
"description": "Industry category taxonomy term to assign.",
"default": ""
}
},
"required": [
"industry"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"permalink": {
"type": "string"
},
"status": {
"type": "string"
},
"meta_fields": {
"type": "integer",
"description": "Number of meta fields populated"
},
"ai_generated": {
"type": "boolean"
}
},
"additionalProperties": false
}Voyager Lead Tracking voyager-leads
voyager-orbit/get-leads — Get Leads
read-only · idempotent · MCP public
Retrieve paginated leads tracked by Voyager Orbit. Supports filtering by type (phone_click, form_submit), traffic source, date range, and search. Returns lead data including contact info, UTM attribution, device type, traffic source, and quality score.
Input schema
{
"type": "object",
"properties": {
"per_page": {
"type": "integer",
"description": "Number of leads per page (1-100)",
"default": 20,
"minimum": 1,
"maximum": 100
},
"page": {
"type": "integer",
"description": "Page number",
"default": 1,
"minimum": 1
},
"type": {
"type": "string",
"description": "Filter by lead type",
"enum": [
"phone_click",
"form_submit",
"chat",
"email",
"other"
]
},
"source": {
"type": "string",
"description": "Filter by traffic source",
"enum": [
"organic_search",
"paid_search",
"social",
"email",
"referral",
"direct"
]
},
"search": {
"type": "string",
"description": "Search leads by name, email, or phone"
},
"from": {
"type": "string",
"description": "Start date (YYYY-MM-DD)"
},
"to": {
"type": "string",
"description": "End date (YYYY-MM-DD)"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"lead_type": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"source": {
"type": "string"
},
"traffic_source": {
"type": "string"
},
"score": {
"type": "integer"
},
"created_at": {
"type": "string"
}
}
}
},
"total": {
"type": "integer"
}
}
}voyager-orbit/get-lead — Get Single Lead
read-only · idempotent · MCP public
Retrieve detailed information about a single lead by ID, including full contact info, UTM attribution, device/browser data, traffic analysis, quality score breakdown, and form submission details.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "The lead ID"
}
},
"required": [
"id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object"
}
}
}voyager-orbit/leads-resync — Resync Leads to Portal
writes · idempotent · MCP public
Resync local voyager_lead_events rows to the Voyager Portal via LeadSync. Portal dedupes on idempotency_key so re-running is safe. Used to verify the dispatch chain and to backfill leads captured during an outage. Returns a summary of attempted/synced/failed.
Input schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max rows per call (1-500). Default 50.",
"default": 50,
"minimum": 1,
"maximum": 500
},
"since": {
"type": "string",
"description": "Resync rows with created_at >= this datetime (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)."
},
"before": {
"type": "string",
"description": "Resync rows with created_at <= this datetime (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS)."
},
"dry_run": {
"type": "boolean",
"description": "If true, return candidate count without dispatching. Default false.",
"default": false
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_candidates": {
"type": "integer"
},
"attempted": {
"type": "integer"
},
"synced": {
"type": "integer"
},
"failed": {
"type": "integer"
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
},
"dry_run": {
"type": "boolean"
},
"sample_ids": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}Voyager Media voyager-media
voyager-orbit/upload-media — Upload Media
writes · idempotent · MCP public
Download an image from a URL and upload it to the WordPress media library. Returns the attachment ID, local URL, and metadata.
Input schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL of the image to download."
},
"title": {
"type": "string",
"description": "Title for the attachment (defaults to filename)."
},
"alt_text": {
"type": "string",
"description": "Alt text for the image (important for SEO)."
},
"caption": {
"type": "string",
"description": "Image caption."
}
},
"required": [
"url"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"attachment_id": {
"type": "integer"
},
"url": {
"type": "string"
},
"width": {
"type": "integer"
},
"height": {
"type": "integer"
},
"mime_type": {
"type": "string"
}
}
}voyager-orbit/set-featured-image — Set Featured Image
writes · idempotent · MCP public
Set a post's featured image (thumbnail). Can accept an existing attachment_id OR a URL to download first.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID."
},
"attachment_id": {
"type": "integer",
"description": "Existing media library attachment ID."
},
"url": {
"type": "string",
"description": "Image URL to download (if no attachment_id provided)."
},
"alt_text": {
"type": "string",
"description": "Alt text for the image."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"post_id": {
"type": "integer"
},
"attachment_id": {
"type": "integer"
},
"thumbnail_url": {
"type": "string"
}
}
}Voyager Neighborhoods voyager-neighborhood
voyager-content/generate-neighborhood — Generate Neighborhood Content
writes · MCP public
AI-generate all content fields for a programmatic SEO neighborhood landing page. Provide neighborhood, city, and state — returns hero copy, body content, CTA, and SEO meta.
Input schema
{
"type": "object",
"properties": {
"neighborhood": {
"type": "string",
"description": "Neighborhood name (e.g. \"Capitol Hill\", \"Buckhead\")."
},
"city": {
"type": "string",
"description": "City the neighborhood is in (e.g. \"Denver\")."
},
"state": {
"type": "string",
"description": "State or province (e.g. \"Colorado\")."
},
"service": {
"type": "string",
"description": "Primary service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"description": "Content tone.",
"default": "professional"
}
},
"required": [
"neighborhood",
"city",
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"nb_neighborhood": {
"type": "string"
},
"nb_city": {
"type": "string"
},
"nb_state": {
"type": "string"
},
"nb_hero_headline": {
"type": "string"
},
"nb_hero_subhead": {
"type": "string"
},
"nb_body_intro": {
"type": "string"
},
"nb_body_main": {
"type": "string"
},
"nb_cta_text": {
"type": "string"
},
"nb_focus_keyword": {
"type": "string"
},
"nb_meta_title": {
"type": "string"
},
"nb_meta_desc": {
"type": "string"
}
},
"additionalProperties": false
}voyager-content/create-neighborhood — Create Neighborhood Page
writes · MCP public
End-to-end neighborhood page creation: AI-generates content for a neighborhood, creates the neighborhood post, populates all meta fields, and inserts the bound landing page pattern. Returns the post ID and permalink.
Input schema
{
"type": "object",
"properties": {
"neighborhood": {
"type": "string",
"description": "Neighborhood name."
},
"city": {
"type": "string",
"description": "City the neighborhood is in."
},
"state": {
"type": "string",
"description": "State or province."
},
"service": {
"type": "string",
"description": "Primary service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"default": "professional"
},
"status": {
"type": "string",
"enum": [
"draft",
"publish"
],
"description": "Post status. Defaults to draft for review.",
"default": "draft"
},
"layout": {
"type": "string",
"enum": [
"landing",
"showcase",
"random"
],
"description": "Page layout variant. \"random\" picks one.",
"default": "landing"
}
},
"required": [
"neighborhood",
"city",
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"permalink": {
"type": "string"
},
"status": {
"type": "string"
},
"meta_fields": {
"type": "integer",
"description": "Number of meta fields populated"
},
"ai_generated": {
"type": "boolean"
},
"parent_service_area": {
"type": "integer",
"description": "Linked service area post ID, or 0"
}
},
"additionalProperties": false
}Voyager Provisioning voyager-provisioning
voyager-orbit/validate-license — Validate License Key
writes · idempotent · MCP public
Validate a Voyager license key against the Portal. Returns license status, tier, expiry date, and feature flags. Used for agency licensing (Tier 4) and feature gating.
Input schema
{
"type": "object",
"properties": {
"license_key": {
"type": "string",
"description": "License key to validate (format: VOY-XXXX-XXXX-XXXX)."
},
"activate": {
"type": "boolean",
"description": "If true, activate the license on this site. If false, just check validity.",
"default": false
}
},
"required": [
"license_key"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"tier": {
"type": "string"
},
"status": {
"type": "string",
"description": "active | expired | revoked | invalid"
},
"expires_at": {
"type": "string"
},
"site_limit": {
"type": "integer",
"description": "Max sites allowed on this license"
},
"sites_activated": {
"type": "integer",
"description": "Current active sites"
},
"features": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-orbit/create-checkout-session — Create Checkout Session
writes · idempotent · MCP public
Create a Stripe Checkout session for a Voyager tier subscription. Returns a checkout URL that the client can use to start their subscription. Supports Tier 1-4 pricing.
Input schema
{
"type": "object",
"properties": {
"tier": {
"type": "string",
"enum": [
"tier-1",
"tier-2",
"tier-3",
"tier-4"
],
"description": "Subscription tier."
},
"customer_email": {
"type": "string",
"description": "Customer email for the checkout session."
},
"customer_name": {
"type": "string",
"description": "Customer/company name.",
"default": ""
},
"success_url": {
"type": "string",
"description": "URL to redirect after successful payment.",
"default": ""
},
"cancel_url": {
"type": "string",
"description": "URL to redirect if payment is cancelled.",
"default": ""
}
},
"required": [
"tier",
"customer_email"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"checkout_url": {
"type": "string"
},
"session_id": {
"type": "string"
},
"tier": {
"type": "string"
},
"amount": {
"type": "integer",
"description": "Monthly amount in cents"
}
}
}voyager-orbit/detect-google-properties — Detect Google Properties
read-only · idempotent · MCP public
Auto-detect GA4 Property ID and GSC Property from Site Kit, Google Tag Manager, or inline analytics code. Returns property IDs that can be stored in the Notion Websites DB for Portal GA4/GSC integration.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"ga4_property_id": {
"type": "string",
"description": "GA4 property ID (numbers only)"
},
"ga4_measurement_id": {
"type": "string",
"description": "GA4 measurement ID (G-XXXXXXXXXX)"
},
"gsc_property": {
"type": "string",
"description": "GSC property domain"
},
"detection_source": {
"type": "string",
"description": "How properties were detected"
},
"site_kit_available": {
"type": "boolean"
},
"site_kit_modules": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-orbit/fleet-site-status — Fleet Site Status
read-only · idempotent · MCP public
Get comprehensive status of a Voyager client site: plugin versions, binding sources, pattern cloud sync, Portal registration, CPTs, abilities count, and binding health. Use for fleet-wide health monitoring.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"site_url": {
"type": "string"
},
"site_name": {
"type": "string"
},
"wordpress_version": {
"type": "string"
},
"php_version": {
"type": "string"
},
"plugins": {
"type": "object",
"properties": {
"orbit_version": {
"type": "string"
},
"blocks_version": {
"type": "string"
},
"core_version": {
"type": "string"
}
}
},
"portal_registered": {
"type": "boolean"
},
"binding_sources": {
"type": "integer"
},
"abilities_count": {
"type": "integer"
},
"pattern_cloud": {
"type": "object",
"properties": {
"configured": {
"type": "boolean"
},
"url": {
"type": "string"
}
}
},
"site_data_populated": {
"type": "boolean"
},
"cpts": {
"type": "array",
"items": {
"type": "string"
}
},
"tier": {
"type": "string",
"description": "Detected tier: tier-1 | tier-2 | tier-3 | unconfigured"
}
}
}voyager-orbit/notion-sync — Sync Notion Pages
writes · idempotent · MCP public
Sync pages from a Notion database to the notion_page CPT. Creates or updates WordPress routing shell posts that display Notion content via block bindings. Idempotent — safe to re-run.
Input schema
{
"type": "object",
"properties": {
"database_alias": {
"type": "string",
"description": "Notion database alias (must be configured in Voyager Blocks > Notion settings)."
},
"status": {
"type": "string",
"enum": [
"draft",
"publish"
],
"default": "draft",
"description": "WordPress post status for new pages."
},
"limit": {
"type": "integer",
"default": 50,
"description": "Max pages to sync per run (1-100)."
}
},
"required": [
"database_alias"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"created": {
"type": "integer"
},
"updated": {
"type": "integer"
},
"skipped": {
"type": "integer"
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"notion_id": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"post_id": {
"type": "integer"
},
"action": {
"type": "string",
"description": "created | updated | skipped"
}
}
}
}
}
}voyager-orbit/provision-site-data — Provision Site Data
writes · idempotent · MCP public
Bulk-set site data options used by the voyager/site-data block binding source. Accepts a JSON object of site fields (phone, email, address, hours, social links) and writes each as a WordPress option. Existing values are overwritten only for keys included in the input; omitted keys are left unchanged.
Input schema
{
"type": "object",
"properties": {
"phone": {
"type": "string",
"description": "Business phone number"
},
"email": {
"type": "string",
"description": "Business email address"
},
"hours": {
"type": "string",
"description": "Business hours (e.g. Mon-Fri 9am-5pm EST)"
},
"address": {
"type": "string",
"description": "Street address"
},
"address_city": {
"type": "string",
"description": "City"
},
"address_state": {
"type": "string",
"description": "State code (e.g. IL)"
},
"address_zip": {
"type": "string",
"description": "ZIP code"
},
"social_facebook": {
"type": "string",
"description": "Facebook page URL"
},
"social_instagram": {
"type": "string",
"description": "Instagram profile URL"
},
"social_linkedin": {
"type": "string",
"description": "LinkedIn company URL"
},
"social_x": {
"type": "string",
"description": "X (Twitter) profile URL"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"updated": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of option keys that were updated."
},
"skipped": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of option keys skipped (not in input)."
},
"changed": {
"type": "array",
"items": {
"type": "string"
},
"description": "Subset of \"updated\" whose stored value actually changed. Empty on a re-provision with identical data."
},
"site_name": {
"type": "string"
},
"site_url": {
"type": "string"
},
"bound_at": {
"type": [
"integer",
"null"
],
"description": "Unix timestamp when site identity was bound, or null if nothing was written."
}
}
}voyager-orbit/set-notion-sync-filter — Set Notion Sync Filter
writes · idempotent · MCP public
Write the client-isolation sync filter into the voyager_notion_databases option. Used during onboarding so a site only syncs its own client's Notion content. Returns the updated filter config for verification.
Input schema
{
"type": "object",
"properties": {
"database_alias": {
"type": "string",
"description": "Alias of the database whose filter should be set (e.g. \"content\")."
},
"property": {
"type": "string",
"description": "Notion property name to filter on (typically \"Client\")."
},
"value": {
"type": "string",
"description": "Value to match \u2014 for relation filters, the Notion page ID of the client."
},
"type": {
"type": "string",
"description": "Filter type.",
"enum": [
"relation",
"select",
"multi_select",
"text"
],
"default": "relation"
}
},
"required": [
"database_alias",
"property",
"value"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"database_alias": {
"type": "string"
},
"previous_filter": {
"type": "object"
},
"new_filter": {
"type": "object"
},
"error": {
"type": "string"
}
}
}voyager-orbit/scaffold-core-pages — Scaffold Core Pages
writes · idempotent · MCP public
Create the minimum set of pages a client site needs (Home, About, Services, Contact, Privacy, Terms, Blog) as drafts. Idempotent: existing pages matching the target slug are skipped. Optionally sets the Home page as the front page and Blog as the posts page.
Input schema
{
"type": "object",
"properties": {
"pages": {
"type": "array",
"description": "Which pages to scaffold. Defaults to the full set.",
"items": {
"type": "string",
"enum": [
"home",
"about",
"services",
"contact",
"privacy",
"terms",
"blog"
]
},
"default": [
"home",
"about",
"services",
"contact",
"privacy",
"terms",
"blog"
]
},
"set_front_page": {
"type": "boolean",
"description": "If true, set the new Home page as the site front page and Blog as posts page.",
"default": true
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"created": {
"type": "array",
"items": {
"type": "object"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"front_page_id": {
"type": "integer"
},
"posts_page_id": {
"type": "integer"
}
}
}voyager-orbit/set-site-branding — Set Site Branding
writes · idempotent · MCP public
Apply client branding to the site: custom logo, site icon (favicon), and active parent-theme style variation. Accepts existing media library attachment IDs for logo/icon. Writes WordPress core options only — does not modify theme files.
Input schema
{
"type": "object",
"properties": {
"logo_id": {
"type": "integer",
"description": "Attachment ID of the logo in the media library."
},
"site_icon_id": {
"type": "integer",
"description": "Attachment ID for the favicon / site icon."
},
"style_variation": {
"type": "string",
"description": "Slug of the parent-theme style variation to activate (e.g. \"default\", \"minimal\", \"bold\", \"warm\", \"dark\")."
},
"site_title": {
"type": "string",
"description": "Optional site title override."
},
"site_tagline": {
"type": "string",
"description": "Optional tagline override."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"updated": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-orbit/set-portal-credentials — Set Portal Credentials
writes · idempotent
Store the Voyager Portal site ID and API key as WordPress options. Used during onboarding after the site is registered with Portal.
Input schema
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"description": "Portal-issued site ID."
},
"api_key": {
"type": "string",
"description": "Portal-issued API key scoped to this site."
}
},
"required": [
"site_id",
"api_key"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"site_id": {
"type": "string"
}
}
}voyager-orbit/configure-rank-math — Configure Rank Math Baseline
writes · idempotent · MCP public
Apply a sensible baseline Rank Math configuration for a new client site: schema type (LocalBusiness), GA4 measurement ID, Google Search Console verification code. Requires Rank Math to be active. Leaves settings the caller did not provide unchanged.
Input schema
{
"type": "object",
"properties": {
"schema_type": {
"type": "string",
"description": "Default schema type for pages.",
"enum": [
"LocalBusiness",
"Organization",
"Person",
"None"
],
"default": "LocalBusiness"
},
"ga4_measurement_id": {
"type": "string",
"description": "GA4 measurement ID (e.g. G-XXXXXXXXXX). Also written to voyager_site_ga4_id for binding use."
},
"gsc_verification": {
"type": "string",
"description": "Google Search Console HTML-tag verification code (content attribute only)."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"rank_math_active": {
"type": "boolean"
},
"updated": {
"type": "array",
"items": {
"type": "string"
}
},
"error": {
"type": "string"
}
}
}Voyager pSEO voyager-pseo
voyager-content/enrich-local-data — Enrich Local Data
writes · MCP public
Add demographics, landmarks, and local context data to an existing service area page. AI generates location-specific enrichment data and updates post meta.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Service area post ID to enrich."
},
"data_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Types of data to add: demographics, landmarks, neighborhoods, economy, education. Defaults to all.",
"default": [
"demographics",
"landmarks",
"neighborhoods",
"economy"
]
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"enriched": {
"type": "boolean"
},
"data_added": {
"type": "array",
"items": {
"type": "string"
}
},
"data_verified": {
"type": "string",
"description": "Whether the data has been human-verified (no by default)."
},
"data_source": {
"type": "string",
"description": "Source of the data (ai-generated)."
}
},
"additionalProperties": false
}voyager-content/generate-local-stats — Generate Local Stats
writes · MCP public
Generate professional service highlights for a service area page. Produces verifiable, honest descriptors rather than fabricated numbers. Updates the sa_local_stats JSON meta field with label/value pairs for the stats section.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Service area post ID."
},
"stat_count": {
"type": "integer",
"description": "Number of stats to generate (default: 3).",
"default": 3
},
"business_name": {
"type": "string",
"description": "Business name for context.",
"default": "Voyager Marketing"
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"stats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/generate-faq-local — Generate Local FAQ
read-only · MCP public
Generate location-specific FAQ content for a service area. Returns Q&A pairs tailored to the city, ready for FAQ schema markup.
Input schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name."
},
"state": {
"type": "string",
"description": "State or province."
},
"service": {
"type": "string",
"description": "Service offering.",
"default": "Web Design & Digital Marketing"
},
"count": {
"type": "integer",
"description": "Number of FAQs (default: 5).",
"default": 5
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"faqs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/audit-pseo-quality — Audit pSEO Quality
read-only · idempotent · MCP public
Score pSEO service area pages for content uniqueness, word count, keyword density, internal links, and meta completeness. Returns per-page and aggregate scores.
Input schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max pages to audit (default: 20).",
"default": 20
},
"region": {
"type": "string",
"description": "Filter by region taxonomy term.",
"default": ""
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_pages": {
"type": "integer"
},
"average_score": {
"type": "number"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"score": {
"type": "integer"
},
"word_count": {
"type": "integer"
},
"has_meta_title": {
"type": "boolean"
},
"has_meta_desc": {
"type": "boolean"
},
"has_keyword": {
"type": "boolean"
},
"has_phone": {
"type": "boolean"
},
"has_stats": {
"type": "boolean"
},
"has_review": {
"type": "boolean"
},
"data_verified": {
"type": "boolean"
},
"has_city_cta": {
"type": "boolean"
},
"issues": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/suggest-pseo-cities — Suggest pSEO Cities
read-only · MCP public
Suggest high-value cities for pSEO expansion in a state or region. Considers population, competition, and existing coverage to recommend the best targets.
Input schema
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "State to suggest cities for."
},
"count": {
"type": "integer",
"description": "Number of cities to suggest (default: 10).",
"default": 10
},
"service": {
"type": "string",
"description": "Service context for relevance.",
"default": "Web Design & Digital Marketing"
}
},
"required": [
"state"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"state": {
"type": "string"
},
"existing_cities": {
"type": "integer"
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"priority": {
"type": "string"
},
"reason": {
"type": "string"
},
"already_exists": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/drip-publish — Drip Publish Queue
writes · MCP public
Publish draft service_area pages on a staggered schedule. Avoids batch-publishing spam signals by spacing pages across days. Returns scheduled post IDs and publish dates.
Input schema
{
"type": "object",
"properties": {
"batch_size": {
"type": "integer",
"description": "Max pages to schedule per run (default: 5).",
"default": 5
},
"interval_hours": {
"type": "integer",
"description": "Hours between each publish (default: 12).",
"default": 12
},
"min_score": {
"type": "integer",
"description": "Minimum quality score to publish (default: 50). Pages below this stay as drafts.",
"default": 50
},
"region": {
"type": "string",
"description": "Optional: only publish from this region.",
"default": ""
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"scheduled": {
"type": "integer"
},
"skipped_low": {
"type": "integer"
},
"remaining": {
"type": "integer"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"publish_date": {
"type": "string"
},
"score": {
"type": "integer"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/freshness-scan — Content Freshness Scan
writes · idempotent · MCP public
Identify stale service_area pages that need content refresh. Flags pages older than threshold and optionally triggers re-enrichment for the stalest pages.
Input schema
{
"type": "object",
"properties": {
"stale_days": {
"type": "integer",
"description": "Days since last modification to consider stale (default: 180).",
"default": 180
},
"limit": {
"type": "integer",
"description": "Max pages to scan (default: 50).",
"default": 50
},
"auto_enrich": {
"type": "boolean",
"description": "Automatically re-enrich the top N stalest pages (default: false).",
"default": false
},
"enrich_count": {
"type": "integer",
"description": "Number of pages to auto-enrich if auto_enrich is true (default: 5).",
"default": 5
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_scanned": {
"type": "integer"
},
"stale_count": {
"type": "integer"
},
"fresh_count": {
"type": "integer"
},
"enriched": {
"type": "integer"
},
"binding_gaps": {
"type": "integer",
"description": "Posts with empty required binding fields."
},
"binding_enriched": {
"type": "integer",
"description": "Posts auto-enriched for empty binding fields."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"days_since_update": {
"type": "integer"
},
"last_modified": {
"type": "string"
},
"status": {
"type": "string"
},
"re_enriched": {
"type": "boolean"
},
"empty_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"empty_field_count": {
"type": "integer"
},
"binding_enriched": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/generate-deep-content — Generate Deep Content
writes · MCP public
Generate rich, in-depth content for a service area page — service features, process steps, local market analysis, why-us, pricing context, and results summary. Brings page content from ~200 words to 800+.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Existing service area post ID to enrich with deep content."
},
"city": {
"type": "string",
"description": "City name (used if no post_id, or to override).",
"default": ""
},
"state": {
"type": "string",
"description": "State (used if no post_id).",
"default": ""
},
"service": {
"type": "string",
"description": "Service offering.",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"description": "Business name for branding.",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"default": "professional"
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"fields_updated": {
"type": "integer"
},
"estimated_words": {
"type": "integer"
},
"sa_body_intro": {
"type": "string"
},
"sa_body_main": {
"type": "string"
},
"sa_service_features": {
"type": "string"
},
"sa_process_steps": {
"type": "string"
},
"sa_local_market": {
"type": "string"
},
"sa_why_us": {
"type": "string"
},
"sa_pricing_range": {
"type": "string"
},
"sa_results_summary": {
"type": "string"
}
},
"additionalProperties": false
}voyager-content/bulk-upgrade — Bulk Content Upgrade
writes · MCP public
Upgrade thin service_area pages with deep content. Identifies pages below a word count threshold and runs generate-deep-content on each. Processes in batches to avoid timeouts.
Input schema
{
"type": "object",
"properties": {
"min_word_count": {
"type": "integer",
"description": "Only upgrade pages with fewer words than this (default: 400).",
"default": 400
},
"batch_size": {
"type": "integer",
"description": "Max pages to upgrade per run (default: 5, max: 10).",
"default": 5
},
"region": {
"type": "string",
"description": "Optional: only upgrade pages in this region.",
"default": ""
},
"dry_run": {
"type": "boolean",
"description": "If true, only identify pages \u2014 don't generate content.",
"default": false
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_scanned": {
"type": "integer"
},
"thin_count": {
"type": "integer"
},
"upgraded": {
"type": "integer"
},
"failed": {
"type": "integer"
},
"dry_run": {
"type": "boolean"
},
"pages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"city": {
"type": "string"
},
"word_count_before": {
"type": "integer"
},
"word_count_after": {
"type": "integer"
},
"status": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-pseo/enrich-binding-fields — Enrich Binding Fields
writes · destructive
Populate empty binding meta fields on a pSEO post (service_area, industry_page, neighborhood). Uses AI when available, template fallback otherwise. Specify fields to enrich or leave empty to fill all empty required fields.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to enrich."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specific meta field keys to enrich. Empty array or omitted = all empty required fields.",
"default": []
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"enriched": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
},
"method": {
"type": "string"
}
},
"required": [
"key",
"value",
"method"
],
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
}
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}voyager-content/batch-create-service-areas — Batch Create Service Area Pages
writes · MCP public
Create multiple service area pages in one call. Skips cities that already have pages (idempotent). Returns per-city results with created/skipped/failed counts.
Input schema
{
"type": "object",
"properties": {
"cities": {
"type": "array",
"description": "List of cities to create. Each item needs at minimum city and state.",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name."
},
"state": {
"type": "string",
"description": "State code."
},
"phone": {
"type": "string",
"description": "Local phone number.",
"default": ""
}
},
"required": [
"city",
"state"
],
"additionalProperties": false
},
"maxItems": 50
},
"service": {
"type": "string",
"description": "Primary service offering (applied to all cities).",
"default": "Web Design & Digital Marketing"
},
"business_name": {
"type": "string",
"default": "Voyager Marketing"
},
"tone": {
"type": "string",
"enum": [
"professional",
"friendly",
"bold"
],
"default": "professional"
},
"region": {
"type": "string",
"description": "Region taxonomy term to assign to all created pages.",
"default": ""
},
"status": {
"type": "string",
"enum": [
"draft",
"publish",
"future"
],
"default": "draft"
},
"layout": {
"type": "string",
"enum": [
"landing",
"bold",
"showcase",
"random"
],
"default": "landing"
}
},
"required": [
"cities"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"created_count": {
"type": "integer"
},
"skipped_count": {
"type": "integer"
},
"failed_count": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"status": {
"type": "string",
"description": "created | skipped | failed"
},
"post_id": {
"type": "integer"
},
"reason": {
"type": "string"
}
}
}
}
}
}Voyager Publishing voyager-publishing
voyager-orbit/detect-seo-plugin — Detect SEO Plugin
read-only · idempotent · MCP public
Detect which SEO plugin is active on this WordPress site. Returns rankmath, yoast, aioseo, seopress, seoframework, or none.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"seo_plugin": {
"type": "string",
"description": "Active SEO plugin slug",
"enum": [
"rankmath",
"yoast",
"aioseo",
"seopress",
"seoframework",
"none"
]
},
"version": {
"type": "string",
"description": "Plugin version if detected"
}
}
}voyager-orbit/upsert-post — Upsert Post
writes · idempotent · MCP public
Create a new WordPress post/page or update an existing one. If post_id is provided, updates that post. Otherwise creates new. Defaults to "future" (scheduled), which requires publish_datetime; pass status explicitly to publish, draft, or hold for review.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Existing WP post ID to update. Omit to create new."
},
"post_type": {
"type": "string",
"description": "Any registered post type (post, page, or custom). Omit when updating an existing post to keep that post's current type \u2014 an omitted post_type NEVER converts a custom post type. Defaults to \"post\" only when creating. Passing a type that differs from the existing post converts it, which breaks CPT permalinks, bindings and schema."
},
"title": {
"type": "string",
"description": "Post title."
},
"html": {
"type": "string",
"description": "Post content as HTML."
},
"slug": {
"type": "string",
"description": "URL slug. Auto-generated from title if omitted."
},
"publish_datetime": {
"type": "string",
"description": "Schedule date/time in ISO-8601 format. Required when status is \"future\" (the default); the post auto-publishes at this time. Optional otherwise, where it sets the post date."
},
"status": {
"type": "string",
"enum": [
"future",
"publish",
"draft",
"pending"
],
"description": "Post status. Defaults to \"future\" (scheduled). Use \"publish\" to go live immediately, \"draft\" to park it, \"pending\" to queue it for review. Publishing is a deliberate choice a caller has to name."
},
"notion_id": {
"type": "string",
"description": "Notion page ID for idempotency tracking. Stored in _voyager_notion_id postmeta."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Category names or slugs to assign."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag names or slugs to assign."
},
"featured_image_url": {
"type": "string",
"description": "URL of image to sideload as the featured image."
}
},
"required": [
"title",
"html"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"permalink": {
"type": "string"
},
"status": {
"type": "string"
},
"created": {
"type": "boolean",
"description": "True if new post, false if updated"
}
}
}voyager-orbit/manage-post-status — Manage Post Status
writes · destructive · idempotent
Change a post's status (draft, publish, future, private, pending, trash) or permanently delete it. Use action "delete" to bypass trash.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID."
},
"status": {
"type": "string",
"description": "Target post status.",
"enum": [
"draft",
"publish",
"future",
"private",
"pending",
"trash"
]
},
"action": {
"type": "string",
"description": "Special action: \"delete\" permanently deletes (skips trash). Omit to change status only.",
"enum": [
"delete"
]
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"previous_status": {
"type": "string"
},
"new_status": {
"type": "string"
},
"deleted": {
"type": "boolean"
}
}
}voyager-orbit/set-seo-meta — Set SEO Meta
writes · idempotent · MCP public
Set SEO metadata on a WordPress post. Detects RankMath or Yoast and maps to the correct meta keys. Returns the plugin used and confirmation.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID."
},
"focus_keyword": {
"type": "string",
"description": "Primary SEO keyword."
},
"meta_title": {
"type": "string",
"description": "SEO title tag."
},
"meta_description": {
"type": "string",
"description": "SEO meta description."
},
"canonical_url": {
"type": "string",
"description": "Canonical URL override (optional)."
},
"schema_type": {
"type": "string",
"description": "Schema.org type for RankMath (e.g., Article, WebPage). Optional."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"seo_plugin": {
"type": "string"
},
"fields_set": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-orbit/get-post — Get Post
read-only · idempotent · MCP public
Get WordPress post details by post_id or by Notion ID (stored in _voyager_notion_id meta). Returns title, slug, status, permalink, and SEO meta. Pass include_meta=true or meta_keys to also return arbitrary post meta (custom fields, _voyager_*, ACF, etc.).
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "WordPress post ID."
},
"notion_id": {
"type": "string",
"description": "Notion page ID to look up by _voyager_notion_id meta."
},
"slug": {
"type": "string",
"description": "Post slug to look up."
},
"include_meta": {
"type": "boolean",
"description": "When true, include all post meta in the response under the meta key. Defaults to false."
},
"meta_keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specific meta keys to return. Implies include_meta=true. If omitted with include_meta=true, all keys are returned."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"status": {
"type": "string"
},
"permalink": {
"type": "string"
},
"post_type": {
"type": "string"
},
"seo": {
"type": "object",
"properties": {
"meta_title": {
"type": "string"
},
"meta_description": {
"type": "string"
},
"focus_keyword": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"description": "Post meta values. Present only when include_meta=true or meta_keys is supplied. Single-value keys return a scalar; multi-value keys return an array. Serialized values are unserialized.",
"additionalProperties": true
}
}
}voyager-orbit/score-seo — Score SEO
read-only · idempotent · MCP public
Analyze a post against RankMath SEO criteria and return a score (0-100) with specific pass/fail checks. Works on existing posts or on raw content before publishing.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Existing WordPress post ID to analyze."
},
"title": {
"type": "string",
"description": "Post title (used if no post_id, or to override)."
},
"html": {
"type": "string",
"description": "HTML content (used if no post_id, or to override)."
},
"slug": {
"type": "string",
"description": "Post slug (used if no post_id)."
},
"focus_keyword": {
"type": "string",
"description": "Focus keyword to score against."
},
"meta_title": {
"type": "string",
"description": "SEO meta title."
},
"meta_description": {
"type": "string",
"description": "SEO meta description."
}
},
"additionalProperties": false
}voyager-orbit/optimize-seo-content — Optimize SEO Content
writes · idempotent · MCP public
Auto-optimize content for SEO before publishing. Fixes slug, ensures keyword placement in title/meta/headings, and adds missing elements. Returns optimized versions of all fields.
Input schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Post title."
},
"html": {
"type": "string",
"description": "Post HTML content."
},
"slug": {
"type": "string",
"description": "Current slug (empty to auto-generate)."
},
"focus_keyword": {
"type": "string",
"description": "Focus keyword."
},
"meta_title": {
"type": "string",
"description": "Current SEO meta title."
},
"meta_description": {
"type": "string",
"description": "Current SEO meta description."
},
"site_name": {
"type": "string",
"description": "Site/brand name for meta title suffix.",
"default": ""
}
},
"required": [
"title",
"html",
"focus_keyword"
],
"additionalProperties": false
}Content Quality voyager-quality
voyager-orbit/pre-publish-gate — Pre-Publish Quality Gate
writes · idempotent · MCP public
Evaluates content quality across readability, SEO, brand voice, internal links, and image alt text before publishing.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to evaluate."
},
"checks": {
"type": "array",
"items": {
"type": "string",
"enum": [
"readability",
"seo",
"brand_voice",
"internal_links",
"image_alt"
]
},
"description": "Which checks to run. Defaults to all."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"pass": {
"type": "boolean"
},
"overall_score": {
"type": "integer"
},
"checks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"pass": {
"type": "boolean"
},
"score": {
"type": "integer"
},
"details": {
"type": "string"
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"pass",
"score"
],
"additionalProperties": false
}
},
"blocking_issues": {
"type": "integer"
}
},
"required": [
"pass",
"overall_score",
"checks"
],
"additionalProperties": false
}voyager-orbit/generate-content-summary — Content Summary & Topics
writes · MCP public
Generates a keyword-dense 50-word summary and 3-5 topic tags for content matching and related posts.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post to summarize"
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"summary": {
"type": "string",
"description": "50-word keyword-dense summary"
},
"topics": {
"type": "array",
"items": {
"type": "string"
},
"description": "3-5 topic tags for matching"
},
"primary_topic": {
"type": "string",
"description": "Single main topic"
}
},
"required": [
"summary",
"topics",
"primary_topic"
],
"additionalProperties": false
}voyager-orbit/generate-page-faq — Smart FAQ Generator
writes · MCP public
Auto-generates FAQs from page content and outputs FAQ structured data (JSON-LD).
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to generate FAQs for"
},
"count": {
"type": "integer",
"description": "Number of FAQs to generate (default 5, max 8)",
"default": 5
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"faqs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"required": [
"question",
"answer"
],
"additionalProperties": false
}
}
},
"required": [
"faqs"
],
"additionalProperties": false
}voyager-orbit/generate-contextual-cta — Generate Contextual CTA
writes · MCP public
Generates a page-specific call-to-action based on post content and context.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to generate CTA for."
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"headline": {
"type": "string",
"description": "CTA headline, max 80 chars."
},
"subtext": {
"type": "string",
"description": "Supporting text, max 120 chars."
},
"button_text": {
"type": "string",
"description": "Button label, max 25 chars."
}
},
"required": [
"headline",
"subtext",
"button_text"
],
"additionalProperties": false
}Voyager Reporting voyager-reporting
voyager-orbit/generate-client-report — Generate Client Report
read-only · idempotent · MCP public
Generate structured data for a monthly client report, combining lead performance, activity stats, and insights.
Input schema
{
"type": "object",
"properties": {
"month": {
"type": "string",
"description": "Month in YYYY-MM format (e.g. \"2026-03\")"
},
"include_blocks": {
"type": "boolean",
"description": "Include block usage analytics if voyager-blocks is active",
"default": false
}
},
"required": [
"month"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"month": {
"type": "string"
},
"generated_at": {
"type": "string"
},
"executive_summary": {
"type": "object"
},
"lead_performance": {
"type": "object"
},
"activity_summary": {
"type": "object"
},
"insights": {
"type": "array"
},
"block_usage": {
"type": [
"array",
"null"
]
},
"binding_coverage": {
"type": [
"object",
"null"
]
}
}
}Voyager Safe Edit voyager-safe-edit
voyager-orbit/safe-edit — Safe Edit Post
writes · idempotent · MCP public
Create a draft duplicate of a post before applying changes. Returns the draft ID and preview URL. Changes are not applied to the original until approved.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "ID of the post to duplicate and edit",
"minimum": 1
},
"agent": {
"type": "string",
"description": "Name of the agent making the edit",
"default": "unknown"
},
"changes": {
"type": "object",
"description": "Optional changes to apply to the draft",
"properties": {
"title": {
"type": "string",
"description": "New post title"
},
"content": {
"type": "string",
"description": "New post content (HTML)"
},
"excerpt": {
"type": "string",
"description": "New post excerpt"
}
},
"additionalProperties": false
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"draft_id": {
"type": "integer"
},
"original_id": {
"type": "integer"
},
"status": {
"type": "string"
},
"edit_url": {
"type": "string"
},
"preview_url": {
"type": "string"
}
}
}
}
}voyager-orbit/approve-draft — Approve Safe Edit Draft
writes · destructive · idempotent
Approve a safe-edit draft, applying its content to the original post and deleting the draft.
Input schema
{
"type": "object",
"properties": {
"draft_id": {
"type": "integer",
"description": "ID of the safe-edit draft to approve",
"minimum": 1
}
},
"required": [
"draft_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"original_id": {
"type": "integer"
},
"draft_id": {
"type": "integer"
},
"status": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
}
}Voyager SEO voyager-seo
voyager-content/audit-content-freshness — Audit Content Freshness
read-only · idempotent · MCP public
Scan published posts older than a specified threshold and flag stale content that needs updating. Returns a prioritized list of posts with age, traffic signals, and recommended actions.
Input schema
{
"type": "object",
"properties": {
"months_threshold": {
"type": "integer",
"description": "Flag posts older than this many months (default: 6).",
"default": 6
},
"post_type": {
"type": "string",
"description": "Post type to audit (default: post).",
"default": "post"
},
"limit": {
"type": "integer",
"description": "Maximum posts to return (default: 20).",
"default": 20
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_scanned": {
"type": "integer"
},
"stale_count": {
"type": "integer"
},
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"permalink": {
"type": "string"
},
"last_modified": {
"type": "string"
},
"age_months": {
"type": "integer"
},
"word_count": {
"type": "integer"
},
"recommendation": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/suggest-internal-links — Suggest Internal Links
read-only · MCP public
Analyze a post and suggest internal links to other published content on the site. Uses AI to match content themes and suggest natural anchor text.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to analyze for linking opportunities."
},
"max_suggestions": {
"type": "integer",
"description": "Maximum suggestions to return (default: 10).",
"default": 10
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"existing_links": {
"type": "integer"
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"target_post_id": {
"type": "integer"
},
"target_title": {
"type": "string"
},
"target_url": {
"type": "string"
},
"anchor_text": {
"type": "string"
},
"relevance": {
"type": "string"
},
"context": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/generate-schema-markup — Generate Schema Markup
read-only · MCP public
Generate JSON-LD structured data markup for a post. Supports FAQ, HowTo, LocalBusiness, Article, Service, and Product schemas.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to generate schema for."
},
"schema_type": {
"type": "string",
"enum": [
"auto",
"FAQ",
"HowTo",
"LocalBusiness",
"Article",
"Service",
"Product"
],
"description": "Schema type to generate. \"auto\" detects from content.",
"default": "auto"
},
"business_name": {
"type": "string",
"description": "Business name for LocalBusiness schema.",
"default": ""
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"schema_type": {
"type": "string"
},
"json_ld": {
"type": "string"
}
},
"additionalProperties": false
}voyager-content/analyze-content-gaps — Analyze Content Gaps
read-only · MCP public
Given a target keyword or topic, analyze existing site content and identify gaps — missing subtopics, thin content areas, and opportunities for new pages.
Input schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string",
"description": "Target keyword or topic to analyze."
},
"post_type": {
"type": "string",
"description": "Post type to search (default: any).",
"default": "any"
}
},
"required": [
"keyword"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string"
},
"existing_content": {
"type": "integer"
},
"gaps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"topic": {
"type": "string"
},
"description": {
"type": "string"
},
"priority": {
"type": "string"
},
"content_type": {
"type": "string"
}
},
"additionalProperties": false
}
},
"thin_content": {
"type": "array",
"items": {
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"word_count": {
"type": "integer"
},
"issue": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/audit-image-seo — Audit Image SEO
read-only · idempotent · MCP public
Batch audit images for missing alt text, oversized file sizes, and missing title attributes. Optionally scopes to a specific post.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Scope to images attached to this post. Omit for site-wide audit.",
"default": 0
},
"limit": {
"type": "integer",
"description": "Maximum images to audit (default: 50).",
"default": 50
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"total_audited": {
"type": "integer"
},
"missing_alt": {
"type": "integer"
},
"oversized": {
"type": "integer"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"attachment_id": {
"type": "integer"
},
"url": {
"type": "string"
},
"filename": {
"type": "string"
},
"issues": {
"type": "array",
"items": {
"type": "string"
}
},
"filesize_kb": {
"type": "integer"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/plan-content-cluster — Plan Content Cluster
read-only · MCP public
Plan a hub-and-spoke content cluster around a pillar topic. Returns the pillar page concept and supporting spoke articles with titles, angles, and internal linking strategy.
Input schema
{
"type": "object",
"properties": {
"pillar_topic": {
"type": "string",
"description": "The main pillar topic (e.g. \"WordPress SEO\")."
},
"spokes": {
"type": "integer",
"description": "Number of spoke articles to plan (default: 8).",
"default": 8
},
"business_context": {
"type": "string",
"description": "Brief business context for relevance.",
"default": "Digital marketing agency"
}
},
"required": [
"pillar_topic"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"pillar": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"target_keyword": {
"type": "string"
},
"word_count_target": {
"type": "integer"
}
},
"additionalProperties": false
},
"spokes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"target_keyword": {
"type": "string"
},
"angle": {
"type": "string"
},
"links_to_pillar": {
"type": "string"
},
"word_count_target": {
"type": "integer"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/generate-ab-variants — Generate A/B Variants
read-only · MCP public
Generate A/B test variants for headlines, CTAs, or meta descriptions. Returns multiple alternatives optimized for different audience segments or intents.
Input schema
{
"type": "object",
"properties": {
"original": {
"type": "string",
"description": "The original text to create variants for."
},
"element_type": {
"type": "string",
"enum": [
"headline",
"cta",
"meta_title",
"meta_description",
"subheadline"
],
"description": "Type of element being tested."
},
"variants": {
"type": "integer",
"description": "Number of variants to generate (default: 3).",
"default": 3
},
"context": {
"type": "string",
"description": "Page context or target audience.",
"default": ""
}
},
"required": [
"original",
"element_type"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"original": {
"type": "string"
},
"variants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"approach": {
"type": "string"
},
"target": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}voyager-content/predict-content-performance — Predict Content Performance
read-only · MCP public
Pre-publish quality scoring — analyzes readability, keyword density, content structure, and SEO signals to predict how well content will perform.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to analyze. Provide either post_id or content.",
"default": 0
},
"content": {
"type": "string",
"description": "Raw content to analyze (if no post_id).",
"default": ""
},
"target_keyword": {
"type": "string",
"description": "Target keyword to check density for.",
"default": ""
}
},
"required": [],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"overall_score": {
"type": "integer"
},
"word_count": {
"type": "integer"
},
"heading_count": {
"type": "integer"
},
"paragraph_count": {
"type": "integer"
},
"keyword_density": {
"type": "number"
},
"readability": {
"type": "string"
},
"scores": {
"type": "object",
"properties": {
"length": {
"type": "integer"
},
"structure": {
"type": "integer"
},
"keyword": {
"type": "integer"
},
"readability": {
"type": "integer"
}
},
"additionalProperties": false
},
"recommendations": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}voyager-orbit/prospect-audit — Prospect SEO Audit
read-only · MCP public
Analyze a prospect domain and produce a structured audit report with scores across SEO, performance, content, design, and accessibility. Returns actionable findings and recommendations for sales outreach.
Input schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain to audit (e.g. \"example.com\"). Do not include protocol."
},
"deep": {
"type": "boolean",
"description": "When true, also audit representative inner pages discovered from the homepage navigation (capped at 3).",
"default": false
},
"pages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specific inner-page paths or URLs to audit (e.g. \"/about\"). Same-host only; the first 3 are fetched.",
"default": [],
"maxItems": 10
},
"industry": {
"type": "string",
"description": "Industry/vertical for context (e.g. \"plumbing\", \"law firm\", \"restaurant\").",
"default": ""
},
"location": {
"type": "string",
"description": "Geographic market (e.g. \"Denver, CO\").",
"default": ""
},
"competitor_domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional competitor domains for comparison.",
"default": [],
"maxItems": 5
}
},
"required": [
"domain"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"audit_date": {
"type": "string"
},
"overall_score": {
"type": "integer",
"description": "0-100 overall score"
},
"overall_grade": {
"type": "string",
"description": "A/B/C/D/F letter grade"
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"score": {
"type": "integer"
},
"grade": {
"type": "string"
},
"findings": {
"type": "array",
"items": {
"type": "string"
}
},
"recommendations": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"quick_wins": {
"type": "array",
"items": {
"type": "string"
},
"description": "Top 3-5 easy improvements to pitch first."
},
"executive_summary": {
"type": "string"
},
"competitor_comparison": {
"type": "string",
"description": "Brief comparison if competitor domains were provided."
},
"pages_audited": {
"type": "array",
"items": {
"type": "string"
},
"description": "Inner-page URLs actually fetched and included in the audit. Empty when only the homepage informed the audit, including signals-only fallbacks."
}
}
}voyager-content/generate-refresh-brief — Generate Refresh Brief
writes · MCP public
Generate a content freshness refresh brief for a stale post, identifying which sections need updating and optionally rewriting the intro paragraph.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "The stale post to analyze."
},
"auto_rewrite_intro": {
"type": "boolean",
"description": "If true, also generates a rewritten intro paragraph.",
"default": false
}
},
"required": [
"post_id"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"age_days": {
"type": "integer"
},
"sections_to_update": {
"type": "array",
"items": {
"type": "object",
"properties": {
"heading": {
"type": "string"
},
"reason": {
"type": "string"
},
"suggestion": {
"type": "string"
},
"priority": {
"type": "string",
"enum": [
"high",
"medium",
"low"
]
}
},
"required": [
"heading",
"reason",
"suggestion",
"priority"
],
"additionalProperties": false
}
},
"new_intro": {
"type": "string"
},
"data_points_to_verify": {
"type": "array",
"items": {
"type": "string"
}
},
"estimated_effort_minutes": {
"type": "integer"
}
},
"required": [
"post_id",
"title",
"sections_to_update"
],
"additionalProperties": false
}Voyager Site Management voyager-site-management
voyager-orbit/get-site-health — Get Site Health
read-only · idempotent · MCP public
Retrieve comprehensive site health information including plugin version, WordPress/PHP versions, database statistics (table counts, 24h activity), and detected form plugin integrations (Gravity Forms, WPForms, CF7, Elementor).
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object"
}
}
}voyager-orbit/update-self — Update Voyager Orbit
writes · destructive · idempotent
Force-checks GitHub for the latest Voyager Orbit release and applies it via Plugin_Upgrader, then restores the plugin's prior activation state (the upgrader deactivates it for the file swap). Bypasses the PUC scheduler. Use this from MCP to seed sites whose auto-update path is broken (Orbit ≤1.75.0). Returns from_version/to_version/updated/reactivated/error.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"from_version": {
"type": "string"
},
"to_version": {
"type": [
"string",
"null"
]
},
"updated": {
"type": "boolean"
},
"reactivated": {
"type": "boolean"
},
"error": {
"type": [
"string",
"null"
]
},
"opcache_cleared": {
"type": "boolean"
},
"opcache_method": {
"type": "string"
},
"warning": {
"type": [
"string",
"null"
]
}
}
}
}
}voyager-orbit/force-update-check — Force Plugin Update Check
writes · idempotent · MCP public
Bypasses the PUC scheduler (Orbit sets it to 6 hours via the voyager_orbit/update_interval_hours filter) and queries the GitHub Releases API directly for the latest Voyager Orbit version. Clears the WordPress update_plugins transient so the fresh data is injected on the next request. Use this from MCP to unstick fleet sites whose update cache says "no update available" when a newer release exists. IMPORTANT: update_available=false is NOT by itself evidence the site is current — the underlying check returns the same empty result whether the lookup succeeded and found nothing or failed outright. Read lookup_status to tell those apart: ok means the answer is trustworthy, while unauthorized, not_found or no_token mean this site cannot see its releases at all and its "up to date" reading is meaningless. For the same check across Orbit, Blocks and Core, use voyager-orbit/suite-update-health.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"current_version": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"update_available": {
"type": "boolean"
},
"lookup_status": {
"type": "string",
"description": "ok | unauthorized | not_found | no_token | rate_limited | network_error. Anything other than ok means update_available cannot be trusted."
},
"trustworthy": {
"type": "boolean",
"description": "True only when the release lookup actually succeeded."
}
}
}
}
}voyager-orbit/get-users — Get WordPress Users
read-only · idempotent · MCP public
List WordPress admin/editor/author users with their activity summaries — total activities, 30-day count, 7-day count, and today count. Includes display name, email, role, and avatar.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "array"
}
}
}voyager-orbit/list-posts — List Posts
read-only · idempotent · MCP public
Query posts by type, status, taxonomy, meta, date range, and search keyword. Returns ID, title, slug, status, date, modified date, author, excerpt, and permalink. Supports pagination. Use instead of WP-CLI "wp post list".
Input schema
{
"type": "object",
"properties": {
"post_type": {
"type": "string",
"description": "Post type slug (default: post). E.g., post, page, service_area, portfolio.",
"default": "post"
},
"post_status": {
"type": "string",
"description": "Post status filter (default: publish). E.g., publish, draft, pending, private, any.",
"default": "publish"
},
"per_page": {
"type": "integer",
"description": "Results per page (default: 20, max: 100).",
"default": 20,
"minimum": 1,
"maximum": 100
},
"page": {
"type": "integer",
"description": "Page number for pagination (default: 1).",
"default": 1,
"minimum": 1
},
"orderby": {
"type": "string",
"description": "Order by field (default: date). Options: date, modified, title, ID, menu_order, rand.",
"default": "date"
},
"order": {
"type": "string",
"description": "Sort direction (default: DESC).",
"enum": [
"ASC",
"DESC"
],
"default": "DESC"
},
"search": {
"type": "string",
"description": "Search keyword to filter by title/content."
},
"taxonomy": {
"type": "string",
"description": "Taxonomy slug to filter by (e.g., category, post_tag, service_type)."
},
"term": {
"type": "string",
"description": "Term slug within the taxonomy to filter by."
},
"meta_key": {
"type": "string",
"description": "Post meta key to filter by."
},
"meta_value": {
"type": "string",
"description": "Post meta value to match (requires meta_key)."
},
"date_after": {
"type": "string",
"description": "Only posts published after this date (YYYY-MM-DD)."
},
"date_before": {
"type": "string",
"description": "Only posts published before this date (YYYY-MM-DD)."
},
"author": {
"type": "integer",
"description": "Filter by author user ID."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"posts": {
"type": "array"
},
"total": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"page": {
"type": "integer"
}
}
}voyager-orbit/get-plugin-details — Get Plugin Details
read-only · idempotent · MCP public
List all installed plugins with name, version, active status, update availability, vulnerabilities, author, and description. Use instead of WP-CLI "wp plugin list".
Input schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Filter by status: all, active, inactive, must-use (default: all).",
"default": "all",
"enum": [
"all",
"active",
"inactive",
"must-use"
]
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"plugins": {
"type": "array"
},
"total": {
"type": "integer"
},
"summary": {
"type": "object"
}
}
}voyager-orbit/get-theme-details — Get Theme Details
read-only · idempotent · MCP public
List all installed themes with name, version, active status, parent theme, update availability, and template info. Use instead of WP-CLI "wp theme list".
Input schema
{
"type": "object",
"properties": {
"include_inactive": {
"type": "boolean",
"description": "Include inactive themes (default: true).",
"default": true
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"themes": {
"type": "array"
},
"active_theme": {
"type": "string"
},
"total": {
"type": "integer"
}
}
}voyager-orbit/get-options — Get WordPress Options
read-only · idempotent · MCP public
Retrieve WordPress options by key. Only allowlisted keys are accessible for security. Pass specific keys or use "all" to get all allowlisted options at once. Use instead of WP-CLI "wp option get/list".
Input schema
{
"type": "object",
"properties": {
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "Option keys to retrieve. Pass [\"all\"] to get all allowlisted options."
}
},
"required": [
"keys"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"options": {
"type": "object"
},
"keys_requested": {
"type": "integer"
},
"keys_returned": {
"type": "integer"
},
"keys_denied": {
"type": "array"
}
}
}voyager-orbit/get-cron-status — Get Cron Status
read-only · idempotent · MCP public
Check WordPress cron health: whether cron is disabled, the next scheduled events, overdue events, and registered schedules. Use instead of WP-CLI "wp cron test" and "wp cron event list".
Input schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum number of upcoming events to return (default: 30).",
"default": 30,
"minimum": 1,
"maximum": 200
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"cron_disabled": {
"type": "boolean"
},
"schedules": {
"type": "object"
},
"events": {
"type": "array"
},
"total_events": {
"type": "integer"
},
"overdue_count": {
"type": "integer"
}
}
}voyager-orbit/wp-cli — Run WP-CLI Command
writes · destructive
Execute a WP-CLI command on this site. Dangerous commands are blocked. Returns output, exit code, and execution time. Requires manage_options.
Input schema
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "WP-CLI command to run (without the \"wp\" prefix). E.g., \"post list --post_type=post --format=table\""
}
},
"required": [
"command"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"output": {
"type": "string",
"description": "Command stdout/stderr output"
},
"exit_code": {
"type": "integer",
"description": "0 = success"
},
"execution_time_ms": {
"type": "integer"
},
"timestamp": {
"type": "string"
}
}
}voyager-orbit/verify-setup — Verify Site Setup
read-only · idempotent · MCP public
Verify that a WordPress site is properly configured for Voyager — checks all required plugins, RankMath SEO, Portal registration, theme, and key settings. Returns a structured checklist.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"site_url": {
"type": "string"
},
"wordpress_version": {
"type": "string"
},
"php_version": {
"type": "string"
},
"plugins": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"active": {
"type": "boolean"
}
}
}
},
"theme": {
"type": "object",
"properties": {
"stylesheet": {
"type": "string"
},
"is_voyager_theme": {
"type": "boolean"
}
}
},
"portal_registered": {
"type": "boolean"
},
"portal_site_id": {
"type": "string"
},
"rankmath_version": {
"type": "string"
},
"cpts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"registered": {
"type": "boolean"
}
}
}
},
"abilities_count": {
"type": "integer"
},
"overall_status": {
"type": "string",
"description": "ready | issues_found"
}
}
}voyager-orbit/clear-cache — Clear Cache
writes · idempotent · MCP public
Flush WordPress caches — object cache, transients, and page cache (LiteSpeed, WP Super Cache, W3TC, WP Rocket, Cloudflare APO). Use after bulk content updates.
Input schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Cache type to clear: \"all\" (default), \"object\", \"transients\", \"page\".",
"enum": [
"all",
"object",
"transients",
"page"
],
"default": "all"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"cleared": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of caches that were cleared."
}
}
}voyager-orbit/cleanup-expired-transients — Cleanup Expired Transients
writes · idempotent
Delete only expired transients from the wp_options table to reduce bloat. Non-disruptive — leaves valid transients intact. Use for routine maintenance; use clear-cache for the nuclear option.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"deleted_count": {
"type": "integer"
},
"message": {
"type": "string"
},
"duration_ms": {
"type": "integer"
}
}
}voyager-orbit/db-optimize — Optimize Database
writes · idempotent
Run OPTIMIZE TABLE on all WordPress-prefixed database tables to reclaim space and defragment indexes.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"tables_optimized": {
"type": "integer"
},
"tables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"table": {
"type": "string"
},
"status": {
"type": "string"
}
}
}
},
"duration_ms": {
"type": "integer"
}
}
}voyager-orbit/spam-cleanup — Delete Spam Comments
writes · destructive · idempotent
Permanently delete all comments marked as spam. Cannot be undone.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"deleted_count": {
"type": "integer"
},
"duration_ms": {
"type": "integer"
}
}
}voyager-orbit/revision-cleanup — Clean Post Revisions
writes · destructive · idempotent
Delete all post revisions and their orphaned postmeta to reduce database size. Cannot be undone.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"revisions_deleted": {
"type": "integer"
},
"orphaned_meta_deleted": {
"type": "integer"
},
"duration_ms": {
"type": "integer"
}
}
}voyager-orbit/tail-debug-log — Tail Debug Log
read-only · idempotent · MCP public
Return the last N lines of the WordPress debug log (wp-content/debug.log). Read-only. Useful for remote QA checks during onboarding.
Input schema
{
"type": "object",
"properties": {
"lines": {
"type": "integer",
"description": "Number of trailing lines to return (1\u20131000). Default 100.",
"minimum": 1,
"maximum": 1000,
"default": 100
},
"grep": {
"type": "string",
"description": "Optional case-insensitive substring filter. Only lines containing this are returned."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"log_path": {
"type": "string"
},
"total_lines": {
"type": "integer"
},
"returned": {
"type": "integer"
},
"has_fatal": {
"type": "boolean"
},
"lines": {
"type": "array",
"items": {
"type": "string"
}
},
"error": {
"type": "string"
}
}
}Voyager Theme Content voyager-theme-content
voyager-theme/generate-portfolio-entry — Generate Portfolio Entry
read-only · MCP public
Generates a portfolio case-study entry with description, challenge, solution, results, and tags.
Input schema
{
"type": "object",
"properties": {
"project_name": {
"type": "string",
"description": "Name of the project"
},
"client_name": {
"type": "string",
"description": "Name of the client"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Technologies used in the project"
},
"project_type": {
"type": "string",
"description": "Type of project (e.g. website, app, branding)"
}
},
"required": [
"project_name"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"description": {
"type": "string"
},
"challenge": {
"type": "string"
},
"solution": {
"type": "string"
},
"results": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
}
}voyager-theme/generate-service-page — Generate Service Page
read-only · MCP public
Generates service page content with description, features, benefits, and FAQ.
Input schema
{
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service"
},
"target_audience": {
"type": "string",
"description": "Target audience for the service"
},
"price_range": {
"type": "string",
"description": "Price range for the service"
}
},
"required": [
"service_name"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"description": {
"type": "string"
},
"features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"benefits": {
"type": "array",
"items": {
"type": "string"
}
},
"faq": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
}
}
}
}
}voyager-theme/generate-testimonial — Generate Testimonial
read-only · MCP public
Generates a realistic client testimonial with quote, rating, and position.
Input schema
{
"type": "object",
"properties": {
"client_name": {
"type": "string",
"description": "Name of the client"
},
"company": {
"type": "string",
"description": "Company name"
},
"service_used": {
"type": "string",
"description": "Service the client used"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"quote": {
"type": "string"
},
"rating": {
"type": "integer"
},
"position": {
"type": "string"
}
}
}voyager-theme/generate-team-profile — Generate Team Profile
read-only · MCP public
Generates a team member bio, short bio, expertise list, and fun fact.
Input schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Team member name"
},
"role": {
"type": "string",
"description": "Team member role/title"
},
"department": {
"type": "string",
"description": "Department the member belongs to"
}
},
"required": [
"name",
"role"
],
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"bio": {
"type": "string"
},
"short_bio": {
"type": "string"
},
"expertise": {
"type": "array",
"items": {
"type": "string"
}
},
"fun_fact": {
"type": "string"
}
}
}Voyager Theme Design voyager-theme-design
voyager-theme/get-design-tokens — Get Design Tokens
read-only · MCP public
Reads the theme.json design tokens: colors, gradients, spacing, typography, shadows, and border radii.
Input schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"colors": {
"type": "array"
},
"gradients": {
"type": "array"
},
"spacing": {
"type": "object"
},
"typography": {
"type": "object"
},
"shadows": {
"type": "array"
},
"border_radius": {
"type": "array"
}
}
}voyager-theme/suggest-pattern — Suggest Pattern
read-only · MCP public
Suggests theme patterns for a given page type and optional business context.
Input schema
{
"type": "object",
"properties": {
"page_type": {
"type": "string",
"description": "Type of page to build",
"enum": [
"homepage",
"about",
"services",
"contact",
"portfolio",
"landing",
"blog"
]
},
"business_type": {
"type": "string",
"description": "Type of business for contextual suggestions"
}
},
"required": [
"page_type"
],
"additionalProperties": false
}Output schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"reason": {
"type": "string"
}
}
}
}voyager-theme/audit-accessibility — Audit Accessibility
read-only · MCP public
Audits a post or page for common accessibility issues in block content.
Input schema
{
"type": "object",
"properties": {
"post_id": {
"type": "integer",
"description": "Post ID to audit. Defaults to the front page."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"score": {
"type": "integer"
},
"issues": {
"type": "array"
},
"passed_checks": {
"type": "array"
}
}
}