Skip to content

WordPress.com MCP tools reference

This document provides a comprehensive mapping of MCP tools available for WordPress.com developers. This is a living document and will be updated as new tools are added or existing ones are modified.

For exact input and output schemas, call the tool itself — every STRAP facade exposes action: list (operation catalog) and action: describe (full JSON Schema per operation). Schemas evolve, so always treat the live describe response as the source of truth.

The tools a given user sees can differ from this list. Availability depends on the site’s plan and hosting platform, the user’s permissions on that site, and the tool settings on their WordPress.com account. Call tools/list against the server for the definitive set available to a specific connection.

How WordPress.com MCP tools are organized

The WordPress.com MCP server exposes two kinds of tools:

  • STRAP facade tools: A single MCP tool that wraps a family of related operations behind one entry point. Facades use a uniform action-based interface (action: list | describe | execute) so AI agents discover what’s available, fetch parameter schemas, and execute operations through one tool. This keeps the tool catalog small and predictable.
  • Standalone tools: Single-purpose tools that take parameters directly. Used for operations that don’t fit a larger family (e.g., listing the user’s sites, generating a checkout URL).

The same tool catalog serves WordPress.com-hosted sites and self-hosted sites connected through Jetpack. There is no separate Jetpack namespace: Jetpack features like Backup, Scan, Monitor, Newsletter, and Account Protection are operations on the Site facade rather than tools of their own.

⚠️ Safety protocol: All write, update, and delete operations require user confirmation. The agent must (1) describe exactly what it plans to do, (2) ask the user for explicit confirmation, and (3) include the user’s confirmation as user_confirmed: true in the execute params. Write operations are never auto-executed. Some deletions are permanent — categories, tags, and media items have no trash. These need the same user_confirmed: true; the server applies the permanent-delete flag itself.

Action-based interface (STRAP facades)

Every STRAP facade tool accepts the same three top-level inputs:

  • action (enum: list / describe / execute): What the agent wants to do.
  • list — Discover available operations on this tool. Returns operation names, short descriptions, and disabled-operation reasons.
  • describe — Get the full JSON Schema (parameters, types, required fields) for one operation.
  • execute — Run an operation.
  • operation: The operation name in resource.action form (e.g., posts.create, theme.presets).
  • params: Operation-specific parameters. Write operations must include user_confirmed: true.

Most facades also require wpcom_site (a site ID or URL). The wpcom-mcp-account facade is the exception — it operates on the authenticated user.

All operations support an optional include_fields parameter to limit which fields are returned. Use it to keep responses context-efficient.


STRAP facade tools

Content Authoring ( wpcom-mcp-content-authoring )

Create, read, update, and delete content on a WordPress.com site: posts, pages, comments, media, categories, tags, block patterns, and content search. Includes block-level editing, so a single section of a page or post can be changed in place, and AI image generation into the media library.

💡 Recommended sequence: Call wpcom-mcp-site-editor-context first (theme.active, theme.presets) so content uses theme-aligned preset slugs (e.g. "primary", "large") instead of hard-coded colors and sizes.

Available operations

OperationDescription
posts.listList posts with optional filters (status, author, search, taxonomy, date range, ordering, pagination).
posts.getGet a single post by ID or slug. Falls back to searching pages if a slug doesn’t match a post.
posts.createCreate a new post — creates as draft by default. Write.
posts.updateUpdate an existing post. Only provided fields change. If status is publish, changes go live immediately. Write.
posts.deleteMove a post to trash. Restorable from WordPress admin within 30 days. Write.
post-sections.listList a post’s top-level blocks, each with its index, block name, attributes, and a content preview. Returns locking tokens that the replace, insert, and remove operations require.
post-sections.replaceReplace one top-level block of a post, leaving the rest untouched. Target the block by index from post-sections.list and supply the replacement as serialized block markup. Write.
post-sections.insertInsert one new top-level block into a post at a given index. Supply the block as serialized block markup. Write.
post-sections.removeRemove one top-level block from a post, leaving the rest untouched. Target the block by index from post-sections.list. Write.
pages.listList pages with optional filters (parent, status, search, ordering, pagination).
pages.getGet a single page by ID or slug.
pages.createCreate a new page — creates as draft by default. Supports hierarchical structures and page templates. Write.
pages.updateUpdate an existing page. Only provided fields change. If status is publish, changes go live immediately. Write.
pages.deleteMove a page to trash. Restorable from WordPress admin within 30 days. Write.
page-sections.listList a page’s top-level blocks, each with its index, block name, attributes, and a content preview. Returns locking tokens that the replace, insert, and remove operations require.
page-sections.replaceReplace one top-level block of a page, leaving the rest untouched. Target the block by index from page-sections.list and supply the replacement as serialized block markup. Write.
page-sections.insertInsert one new top-level block into a page at a given index. Supply the block as serialized block markup. Write.
page-sections.removeRemove one top-level block from a page, leaving the rest untouched. Target the block by index from page-sections.list. Write.
comments.listList comments with optional filters (status, post, author, search, date range, pagination).
comments.getGet a single comment by ID.
comments.createCreate a comment on a post. Comments from authenticated users auto-populate author fields. Write.
comments.updateUpdate an existing comment. If status is approved, changes are visible immediately. Write.
comments.deleteMove a comment to trash. Write.
media.listList media items with optional filters (mime type, post, author, search, date range, pagination).
media.getGet a single media item by ID.
media.createUpload a new media item (image, video, audio, document). Write.
media.generateGenerate an image from a text prompt and save it to the media library. Returns the new media item ID and URL, ready to use as a featured image or in an Image block. Write.
media.updateUpdate media item metadata (not the file). Changes to alt_text and caption update immediately wherever the media is used. Write.
media.deletePermanently delete a media item. WordPress.com does not trash attachments, so the file cannot be recovered and any content using it loses the image. Write.
categories.listList categories with optional filters.
categories.getGet a single category by ID.
categories.createCreate a new category. Supports hierarchical parent-child relationships. Write.
categories.updateUpdate an existing category. Changing the slug affects archive URLs immediately and may break links. Write.
categories.deletePermanently delete a category — taxonomy terms have no trash. Assigned posts move to Uncategorized; child categories are reassigned to the deleted category’s parent. Write.
tags.listList tags with optional filters. Tag search is case-insensitive.
tags.getGet a single tag by ID.
tags.createCreate a new tag. Write.
tags.updateUpdate an existing tag. Changing the slug affects archive URLs immediately. Write.
tags.deletePermanently delete a tag — removed from all associated posts. Write.
patterns.listList block patterns available on the site (theme, core, pattern directory).
patterns.getGet a single block pattern by name, including its block markup.
synced-patterns.listList the site’s synced (reusable) patterns.
synced-patterns.getGet a single synced pattern by ID, including its block markup.
content.searchFree-text search across the site’s public content. Searches published content only — for drafts, private, or pending content, use posts.list or pages.list with a status filter.

⚠️ Destructive operations (posts.delete, pages.delete, comments.delete, media.delete, categories.delete, tags.delete) require the agent to fetch and present the item being deleted (title, author, count of affected posts) before requesting confirmation.

💡 Tip: When creating pages, use patterns.listpatterns.get to fetch block patterns and compose full pages from multiple patterns. After every create or update, check the response’s _content_warnings field — WordPress may strip blocks or HTML during save.

💡 Tip: To change one part of an existing page or post, use the section operations rather than pages.update or posts.update. Call page-sections.list or post-sections.list to find the block by index, then replace, insert, or remove that single block. Full-page updates are better suited to new content and complete rewrites.


Site Editor Context ( wpcom-mcp-site-editor-context )

Query site design context — theme presets, applied styles, and registered block types. Read-only companion to Content Authoring. Use it before creating or updating content so the markup uses theme-aligned tokens rather than hard-coded values.

This facade uses action: list | describe | get (not execute, since it never writes).

💡 Recommended sequence: theme.activetheme.presets → (optionally) blocks.allowed → then create content via wpcom-mcp-content-authoring.

Available operations

OperationDescription
theme.activeGet the active theme’s stylesheet slug and name. Use the stylesheet value when fetching theme.presets or theme.styles.
theme.presetsGet the site’s design tokens — color palette, font sizes, font families, gradients, spacing scale. Auto-resolves stylesheet from the active theme if omitted.
theme.stylesGet the site’s applied styles from theme.json — block-level overrides and element-level typography/colors. Complements theme.presets: presets are what tokens exist; styles are how they’re applied.
blocks.allowedList block types registered on the site with name, title, description, category, and style variations. Apply a style variation as is-style-{name}.

💡 Tip: Reference preset slugs in block markup — e.g., has-primary-color or has-large-font-size — rather than inline styles with raw hex or pixel values, so content adapts when the site’s design tokens change.

⚠️ Important: A block being registered does not guarantee its markup survives the REST API save pipeline unchanged. After every create or update via wpcom-mcp-content-authoring, check the _content_warnings field. If markup was stripped, use simpler block alternatives or ask the user how to proceed.


Account ( wpcom-mcp-account )

Manage the authenticated user’s WordPress.com account: profile, notifications, achievements, domains, subscriptions and billing, connections, security, and currency. Operates on the calling user; no wpcom_site parameter required.

Available operations

OperationDescription
profile.getBasic profile (username, email, display name, avatar, locale, timezone), optionally with preferences, stats, account info, social/activity data.
profile.updateUpdate profile fields (display name, bio, locale, etc.). Write.
notifications.getNotification preferences across email, push, timeline, and other channels. Includes device list and delivery test.
notifications.updateUpdate notification settings. Write.
inbox.getThe user’s notification inbox (messages, alerts, mentions, likes, follows). Filter by type, unread, time range.
achievements.getEarned badges, feats, gamification progress, and trophy case.
domains.listList the authenticated user’s domains across all sites.
domains.getDomain details: management capabilities, DNS configuration, DNSSEC, SSL status, maintenance state.
domains.attachAttach a standalone domain to a site, or move a domain you already own from another WordPress.com site to this one. Optionally sets it as the primary domain. Write.
domains.dns_recordsDNS records (A, AAAA, ALIAS, CAA, CNAME, MX, NS, SRV, TXT) for a single domain.
domains.set_primarySet a custom domain as the primary domain for a site. Write.
connections.getSocial and third-party service connections (list, get details, test health).
security.getSecurity status: 2FA, application passwords, active sessions, login history, account age.
subscriptions.getThe user’s WordPress.com subscriptions, with billing history, payment methods, and usage.
subscriptions.renewals.listUpcoming renewals for the user’s subscriptions.
subscriptions.invoice.getRetrieve a single invoice.
subscriptions.manage_plan.get_urlGet the URL where the user can manage a plan directly.
subscriptions.stop_renewalTurn off auto-renewal on a subscription. The subscription stays active until the end of the current term. Write.
subscriptions.resume_renewalTurn auto-renewal back on for a subscription. Write.
subscriptions.cancelCancel a subscription. Write.
subscriptions.reactivateReactivate a cancelled subscription. Write.
subscriptions.payment_method.removeRemove a stored payment method from the account. Write.
currency.previewPreview the impact of changing account currency (does not commit).
currency.changeChange the account’s billing currency. Applies to new purchases only. Existing subscriptions keep renewing in the currency they were bought in. Write.

Site ( wpcom-mcp-site )

Manage a WordPress.com site: settings, statistics, plugins, collaborators, activity log, themes, backups, security scans, and Jetpack module configuration. Requires wpcom_site (site ID or URL).

Available operations

OperationDescription
settings.getGeneral, writing, reading, discussion, media, permalink, and privacy settings.
settings.updateUpdate site settings. Write.
statistics.getSite totals — published posts, pages, subscribers — plus optional views, visitors, posts published, and pages published for a date range. Does NOT include top-posts, referrers, geo, or per-URL breakdowns.
plugin.listInstalled plugins with status, version, update availability, and permissions.
activity.getActivity log entries (posts, comments, plugin updates, backups, user actions). Reverse-chronological. Defaults to the last 6 months. Filter by activity_group and activity_action.
backup.rewind_statusJetpack Backup readiness for the site: the backup system state, a non-sensitive summary of stored server credentials, and backup facts including when the last successful backup ran and how the most recent attempt ended.
backup.storage_statusBackup storage used against quota, the size of the most recent backup, the retention window, and whether backups have stopped because storage is full. Covers backup storage only, not the site’s media storage.
scan.statusJetpack Scan state, last-scan metadata, the live threat list with autofix eligibility, ignored threats, and recently fixed threats.
scan.runQueue a fresh Jetpack Scan. The scan runs in the background and results appear in scan.status. Write.
theme.listSearch and browse block themes available for the site. Filter by subject category or keyword. Returns screenshots, preview links, and style tags for comparing themes before switching.
theme.setSwitch the active theme. Write.
users.listList the site’s collaborators with user ID, login, display name, roles, capabilities, and registration date. Supports role filtering, search, sorting, and pagination.
monitor.status / monitor.activate / monitor.deactivateJetpack Monitor uptime checks. Activate/deactivate are writes.
newsletter.status / newsletter.get_settings / newsletter.update_settingsNewsletter diagnostics and settings. status returns subscriber counts, recent sends with delivery counts, and whether the site can currently send. get_settings returns the public-facing Newsletter settings. update_settings applies a partial update: pass any subset of fields and the rest are left unchanged. update_settings is a write.
account-protection.status / account-protection.activate / account-protection.deactivateJetpack Account Protection. Activate/deactivate are writes.
manage-site.status / manage-site.launch / manage-site.set-visibilitySite lifecycle — coming-soon status, launch, visibility. Writes.

💡 Tip for activity.get: combine activity_group (e.g. ["plugin"]) and activity_action (e.g. ["activated", "deactivated"]) to narrow investigations. Call without filters first to discover what’s available for a given site.

User Management ( wpcom-mcp-user-management )

Manage collaborators on a WordPress.com site: list them, invite new ones, change roles, and remove access. Requires wpcom_site (site ID or URL).

⚠️ Invites reach a real inbox. user.invite and user.resend-invite send email as soon as they execute, so they should never be run to explore or test the tool. user.change-role and user.remove-access return a preview first, and apply only when the call is repeated with user_confirmed: true. Removing access removes the person from that site and does not delete their WordPress.com account.

Available operations

OperationDescription
user.listList current collaborators with their site-local user ID, login, display name, roles, and capabilities. The user ID returned here is the one user.change-role and user.remove-access expect.
user.pending-invitesList invitations that have been sent but not yet accepted.
user.inviteInvite someone to the site by email address or WordPress.com username, at a chosen role. Sends email. Write.
user.cancel-inviteCancel a pending invitation. Write.
user.resend-inviteResend a pending invitation. Sends email. Write.
user.change-roleChange a collaborator’s role. Returns a preview unless user_confirmed: true is passed. Accepts the five standard WordPress roles only. Write.
user.remove-accessRemove a collaborator from the site. Returns a preview unless user_confirmed: true is passed. Irreversible for that site. Write.

Plugin Management ( wpcom-mcp-plugin-management )

Manage plugins on a WordPress.com site across their full lifecycle: search the catalog, install, activate, deactivate, update, and uninstall. plugin.search works at account level and needs no site. Every other operation requires wpcom_site.

Plugin operations need a plan that includes plugin installation. On other sites these operations return an unsupported response rather than an error.

Available operations

OperationDescription
plugin.listInstalled plugins with status, version, update availability, and per-plugin permissions. Includes summary statistics.
plugin.searchSearch the WordPress.org and WordPress.com commercial catalogs. Results arrive pre-ranked, so keep that order when presenting them. Account level, no site required.
plugin.installInstall a plugin by WordPress.org slug or plugin file identifier. Write.
plugin.activateActivate an installed plugin. Write.
plugin.deactivateDeactivate a single plugin, or every active plugin at once with deactivate_all. Jetpack and Akismet are pinned by WordPress.com and cannot be deactivated. Write.
plugin.updateUpdate one installed plugin to its latest version. One plugin per call. Write.
plugin.uninstallUninstall a plugin. Called without user_confirmed: true it returns a preview of what will be removed, so use that preview to confirm with the user before repeating the call. Write.

Site Editing ( wpcom-mcp-site-editing )

Read and change site structure: templates, template parts, navigation, global styles, and installed themes. Requires wpcom_site (site ID or URL).

Read the current state before any write. The sequence is {entity}.list, then {entity}.get, then {entity}.update. All writes need user_confirmed: true.

Block themes use navigation.* for their menus. Classic themes use menus.* and menu-items.*. Template and template part IDs take the form {theme}//{slug}, for example twentytwentyfive//header.

⚠️ Two deletion behaviours differ here. Deleting a template or template part removes a user customization and restores the theme default, so nothing is lost. Deleting a classic menu or menu item is permanent and has no trash.

Available operations

OperationDescription
templates.list / templates.get / templates.lookupList block templates, fetch one by ID, or find which template WordPress would use to render a given URL or post type. templates.lookup avoids listing everything when you only need the template behind one page type.
templates.create / templates.update / templates.deleteCreate a custom template override, update an existing one, or delete an override to return to the theme default. Changes to index, singular, archive, or 404 templates affect every page using them. Writes.
template-parts.list / template-parts.getList template parts by area (header, footer, sidebar, uncategorized) and fetch one by ID, including its block markup.
template-parts.create / template-parts.update / template-parts.deleteCreate, update, or remove a template part override. Header and footer parts appear on every page of the site, so these carry the widest impact of any operation here. Writes.
navigation.list / navigation.getList block navigation menus and fetch one, including its block markup. For block themes.
navigation.create / navigation.updateCreate a block navigation menu, or update an existing one’s title or content. A navigation referenced by a header template part goes live for all visitors immediately. Writes.
menus.list / menus.getList classic navigation menus and fetch one, with its location assignments. For classic themes.
menus.create / menus.update / menus.deleteCreate a classic menu, update its name or theme location assignments, or delete it. Deleting a menu removes it and all of its items permanently. Writes.
menu-items.list / menu-items.getList the items in a classic menu, or fetch one item with its title, URL, type, parent, and order.
menu-items.create / menu-items.update / menu-items.deleteAdd, change, or remove a classic menu item. Deletion is permanent, and child items are not removed with their parent, so clear those first. Writes.
global-styles.get / global-styles.variationsRead the site’s user-level style customizations in theme.json format, or list the style variation presets the active theme provides. This is the user override layer. For theme defaults use wpcom-mcp-site-editor-context theme.presets.
global-styles.updateUpdate user-level global styles. Colors, fonts, and spacing change across the whole site. Fetch current styles first and send only the keys you want to change. Write.
themes.listList installed themes with stylesheet slug, name, author, tags, active status, and whether each is a block theme.

💡 Tip: themes.list here reports what is already installed on the site. To browse themes available to install, use theme.list on the Site facade.

Create Site ( wpcom-mcp-create-site )

Provision a new WordPress.com site, either blank or from a template, for the user to build out with the other MCP tools.

The subdomain is derived from the site title automatically, so there is no separate slug or address to ask for. The workflow is: call site.instructions once to get the runbook, ask the user for a title, derive and check the subdomain, show the resulting URL, then provision only after the user confirms.

Available operations

OperationDescription
site.instructionsReturns the runbook for site creation: the field schema, the subdomain derivation rule, the confirmation policy, and the actions available once the site exists. Call once, before anything else.
subdomain.checkCheck whether a candidate subdomain is valid and available. Returns the URL the user would actually receive, which may carry a numeric suffix if the base slug is taken. Show that URL verbatim before asking the user to confirm.
site.provisionCreate the site. This provisions a real WordPress.com site, so run it only after the user has confirmed the title and URL. Write.

Standalone tools

ToolWhat it does
wpcom-user-sitesList the user’s accessible sites across WordPress.com and self-hosted Jetpack-connected sites. Use it to find site IDs before calling site-scoped tools. Supports pagination, search, status and privacy filters, sorting, and optional site metrics.
wpcom-domain-purchaseSearch for available domains and generate checkout links for registration. Returns matching domains with prices and pre-built checkout URLs.
wpcom-domain-update-dns-recordsAdd or remove DNS records (A, AAAA, ALIAS, CAA, CNAME, MX, NS, SRV, TXT) for a single custom domain you manage. Write.
wpcom-domain-restore-default-dns-recordsRestore the WordPress.com default A records (apex IPs) or the default www CNAME for a single custom domain. Gated by the “Update DNS records” setting. Write.
wpcom-domain-update-nameserversSet the nameservers for a single custom domain. Requires the caller to manage the site the domain is connected to. Accepts between 2 and 13 valid nameserver hostnames. Write.
wpcom-domain-set-mail-serviceConfigure DNS records on a domain for an external mail service: Google Workspace, iCloud Mail, Office 365, or Zoho Mail. Write.
wpcom-checkout-urlGenerate a pre-configured checkout URL for one or more products, or for a subscription renewal. The URL takes the user to WordPress.com checkout; payment happens in the browser, not through this tool.
wpcom-plans-listList WordPress.com plans with prices and per-tier feature lists. Read-only. Useful for surfacing plan options before generating a checkout URL.
wpcom-ai-agent-sites-listList public WordPress.com sites whose owners have enabled AI Agent Access. Filter by a natural-language topic query or by keywords, matched against site metadata. Discovers opted-in sites; does not search inside one.
wpcom-mcp-jetpack-search-voiceSearch a single public, opted-in blog and return the results together with that blog’s voice guidelines. Built for reader-facing questions about a public blog. Short, specific, noun-heavy queries work best.
wpcom-mcp-send-feedbackSend a feature request, bug report, or general feedback about the WordPress.com MCP server to the development team. Takes a type of request, bug, or general, plus plain-text content.

⚠️ The four domain tools change live DNS, and the effects reach past the site. Before any of them, fetch the current records with wpcom-mcp-accountdomains.dns_records and describe the diff to the user. Misconfigured records break email and websites. Changing nameservers hands DNS control to another provider, so anything WordPress.com was serving stops unless the new nameservers carry the same records. Setting an external mail service overwrites the domain’s existing MX records, and mail flow stops as soon as the new ones propagate.


Safety protocol summary

All write/delete operations enforce a mandatory confirmation flow. The agent must describe the action, get explicit user approval, and pass that approval as user_confirmed: true in the execute params.

BehaviorReadCreateUpdateDelete (trash)Delete (permanent)
Confirmation required
ReversibleN/AN/APartially (previous values lost)✅ Within 30 days❌ Permanent
Default status (content)N/AdraftNo changetrashRemoved entirely

Permanent deletions — categories, tags, and media items — cannot be undone. They take the same user_confirmed: true as any other write.

Accepted forms of user_confirmed: the boolean true (preferred), or one of the strings "true", "yes", "on", "1". Free-form approval phrases like "yes do it" are rejected — the agent must translate the user’s approval into one of these accepted forms.

Last updated: September 14, 2026

Sponsor
SponsoredKunjungi sekarang
Promo