Catalogue — 79 free, 16 Pro
SiteHelm exposes 79 named operations through 11 MCP tools. There is no other way in — no PHP, no shell, no SQL, no REST passthrough.
Each operation declares a required WordPress capability, a risk level that reflects blast radius rather than difficulty, and whether the change can be undone. Those declarations are not documentation written afterwards; they are what the plugin enforces at the moment of the call.
An agent does not hold 79 tool definitions in its context. It holds
eleven dispatchers, and asks one of them for its catalogue when it
needs it. Call a dispatcher with no operation and it
answers with the operations it carries, their capabilities, and
their policies.
The trade is deliberate: the client’s tool list stays small enough to sit comfortably in context, and the catalogue is fetched on demand for the dispatcher actually in use.
Illustrative call, not a recording.
The eleven dispatchers.
That dispatcher’s catalogue: ids, summaries, capabilities, policies.
On a write: a preview of exactly what would change, and a token to apply it.
79 operations in the free plugin, grouped by what they touch. The dispatcher under each name is the tool an agent actually calls.
Posts, pages, custom post types, blocks, terms and redirects — the operations an editor would otherwise perform by hand.
content-read
Reads one item with its fields, terms, and metadata
needs edit_posts
content-read
Lists items with filtering and pagination
needs edit_posts
content-read
Lists registered taxonomies and their terms
needs edit_posts
content-read
Returns the block outline of one item, or one addressed block in full
needs edit_post
content-read
Reports the links in one item, resolving this site's own against its posts and redirects
needs edit_post
content-read
Lists every redirect this site serves, with the table's size and capacity
needs manage_options
content-write
Creates a post, page, or custom post type item
needs edit_posts
content-write
Updates title, content, excerpt, slug
needs edit_post
content-write
Publishes, drafts, schedules, or privatises
needs edit_post
content-write
Sets or clears the featured image
needs edit_post
content-write
Writes registered post meta
needs edit_post
content-write
Assigns categories, tags, or custom terms
needs edit_post
content-write
Moves an item to trash — reversible, never a permanent delete
needs delete_post
content-write
Restores a previous change from its snapshot
needs edit_post
content-write
Changes the attributes or inner markup of one block
needs edit_post
content-write
Points one path at a successor URL, or marks it gone
needs manage_options
content-write
Removes the redirect stored for one path
needs manage_options
The library: attachment details, uploads, alt text and captions, and import from a URL behind a guarded fetch.
media-read
Reads one attachment with its metadata and generated sizes
needs upload_files
media-read
Lists the media library with filtering
needs upload_files
media-read
Lists registered image sizes and their dimensions
needs read
media-write
Uploads a file from supplied bytes
needs upload_files
media-write
Fetches a file from a URL and adds it to the library
needs upload_files
media-write
Updates alt text, caption, title, description
needs edit_post
media-write
Attaches an existing item to a post
needs edit_post
media-write
Brings an oversized image within a width and height you name, keeping the original file
needs edit_post + upload_files
Navigation menus, their items, their order, and which theme location each one is assigned to.
menu-read
Lists menus with their theme location assignments
needs edit_theme_options
menu-read
Reads one menu's full item tree
needs edit_theme_options
menu-write
Adds an item to a menu
needs edit_theme_options
menu-write
Updates an item's label, target, or attributes
needs edit_theme_options
menu-write
Reorders and re-parents a menu tree
needs edit_theme_options
menu-write
Assigns a menu to a theme location
needs edit_theme_options
Documents and elements, widget settings, global colour and typography tokens, and theme-builder display conditions.
elementor-read
Lists Elementor-built documents
needs edit_posts
elementor-read
Reads a document's element tree
needs edit_post
elementor-read
Summarizes what a document contains, at a size that does not grow with it
needs edit_post
elementor-read
Reads one element by its id
needs edit_post
elementor-read
Finds elements within a document by type, text, or setting
needs edit_post
elementor-read
Reports which widget types this site actually has
needs edit_posts
elementor-read
Returns a widget's or container's control schema
needs edit_posts
elementor-read
Reads the global palette and type styles with their write identifiers
needs edit_theme_options
elementor-read
Lists theme-builder templates with the display conditions each one stores
needs edit_posts
elementor-write
Inserts an element at a position in the tree
needs edit_post
elementor-write
Updates an element's settings
needs edit_post
elementor-write
Updates several elements' settings as one change; one bad entry refuses all of them
needs edit_post
elementor-write
Updates a widget's settings against its control schema
needs edit_post
elementor-write
Moves an element within or between containers
needs edit_post
elementor-write
Duplicates an element with fresh ids
needs edit_post
elementor-write
Removes an element from the tree
needs edit_post
elementor-write
Updates global colour tokens site-wide
needs edit_theme_options
elementor-write
Updates global type styles site-wide
needs edit_theme_options
elementor-write
Replaces one theme template's display conditions as a whole rule
needs edit_theme_options
ACF and Meta Box field groups, their fields, and their values — read and written through each plugin’s own API.
fields-read
Lists ACF field groups
needs edit_posts
fields-read
Lists fields in a group
needs edit_post
fields-read
Reads a field's value for an object
needs edit_post
fields-read
Lists Meta Box field groups
needs edit_posts
fields-read
Lists fields in a group
needs edit_post
fields-read
Reads a field's value for an object
needs edit_post
fields-write
Writes an ACF field value
needs edit_post
fields-write
Writes a Meta Box field value
needs edit_post
Titles, descriptions and robots directives, read and written through whichever SEO plugin the site already runs.
content-read
Reads one item's search-engine metadata from whichever SEO plugin the site runs
needs edit_post
content-read
Reads one item's SEO and readability scores as the SEO plugin stored them, with the findings SiteHelm derives
needs edit_post
content-read
Audits a page of items: stored scores, missing or over-long descriptions, missing focus keywords, noindexed published items, in-page duplicate titles and descriptions
needs edit_posts
content-read
Reads one category's or tag's search-engine metadata from whichever SEO plugin the site runs
needs edit_posts + the taxonomy's edit capability
content-write
Writes one item's search-engine metadata into whichever SEO plugin the site runs
needs edit_post
content-write
Writes one category's or tag's search-engine metadata into whichever SEO plugin the site runs
needs edit_posts + the taxonomy's edit capability
The moderation queue: list by status, approve, hold, spam or trash, and reply beneath a comment.
content-read
Lists comments by status, post, or search term, newest first
needs moderate_comments
content-write
Approves, holds, spams, or trashes one comment
needs moderate_comments
content-write
Posts an approved reply beneath one comment, authored by the acting user
needs moderate_comments
Read only: which forms the site holds, each form’s fields and embed shortcode, and its most recent entries.
content-read
Lists every form the site's form plugin holds, with each form's embed shortcode
needs edit_posts
content-read
Reads one form's title, embed shortcode, and the fields it declares — name, type, required
needs edit_posts
content-read
Reads one form's most recent entries, newest first — or says plainly that the plugin stores none
needs manage_options
The roster, and one write: replacing a user’s roles with a single role the site has actually registered.
system-read
Lists user accounts by role or search term, newest registration first, with the role slugs this site has registered
needs list_users
content-write
Replaces one user's roles with a single registered role
needs promote_users
Thirteen fields, allowlisted: title, tagline, timezone, date and time formats, posts per page, front-page geometry, permalinks, default discussion settings, and search-engine visibility.
system-read
Reads the whole site-settings allowlist, typed, in one call — the same thirteen fields site-settings-set can change, and nothing else
needs manage_options
content-write
Changes site settings from a strict thirteen-field allowlist — title, tagline, timezone, date and time formats, posts per page, front page geometry, permalink structure, default comment and ping status, search-engine visibility
needs manage_options
Connection, environment, integration health, one operation’s schema on demand, and the change ledger.
system-read
Confirms the gateway is reachable and reports who is authenticated
needs read
system-read
WordPress and PHP versions, theme, post types, taxonomies
needs manage_options
system-read
Health of every optional integration: Active, Inactive, VersionBlocked
needs manage_options
system-read
Returns one named operation's full input and output schema, so an agent fetches only the schema it is about to use
needs read
system-read
Reads the change ledger: what changed, when, by whom, and what can be rolled back
needs manage_options
These are not gaps waiting on a release. They are the reason the other 79 operations can be trusted: an agent that cannot reach code, the database, or the filesystem cannot surprise you with something the catalogue never mentioned.
The safety model covers what happens when an agent asks for one of these anyway.
No eval, no snippet store, no theme-file editor. There is no path from an agent to executing code.
No query passthrough. Every read and write goes through a typed operation with a schema.
No arbitrary file writes, and no WP-CLI passthrough.
Nothing is destroyed without a snapshot that can put it back.
Nothing above moves behind the licence. Pro operations register into the same dispatchers, take the same previews, and write the same audit ledger — they simply check the licence before they look at anything else.
Site-wide SEO settings, schema, the 404 log and redirections, and bulk fixes across up to fifty posts at once.
system-read
Reads the SEO plugin's settings at site scope (separator, knowledge-graph name and logo, default social image, breadcrumbs) or for one public post type (postType: title and description templates, noindex, sitemap inclusion)
needs manage_options
content-write
Writes the same allowlisted settings, one scope per change — site scope or postType, never both
needs manage_options
content-write
Sets the per-post fields of content-seo-set on up to fifty posts as one previewed, reversible change; one post the caller may not edit, or one that does not exist, refuses the whole set
needs edit_post on every post
system-read
Pages Rank Math's 404 monitor newest first (URI, hits, last seen, referer), at most 200 per page
needs manage_options
system-read
Pages Rank Math's redirections newest first (sources, destination, status code, hits, status)
needs manage_options
content-read
Reads one post's primary schema type (Schema.org spelling, null when the plugin's default applies), the plugin's stored fields for it, and the type names the plugin accepts on write
needs edit_post
content-write
Sets one post's schema type and optional fields as a previewed, reversible change; null clears it back to the plugin's default and drops the stored fields; an unknown type is refused naming content-seo-schema-get for the list
needs edit_post
content-write
Takes the same page content-seo-audit would (type, status, limit ≤ 50, offset, minScore) and fixes the chosen findings on every post that carries one as one previewed, reversible change — missing-description from the post's excerpt or text (a post whose text yields fewer than 70 characters is reported under unfixable), description-too-long and title-too-long trimmed at a word boundary, noindex set to false
needs edit_post on every post
Products read and edited; orders and customers read only, and always will be.
content-read
Pages products newest first with name, SKU, status, type, price, sale price, stock status and quantity, and categories; filtered by search term, status, category or stock state
needs edit_products
content-read
Reads one product in full — name, description, short description, SKU, regular and sale price, stock, categories, tags, images, type — and says when the price lives on the product's variations rather than on the product
needs edit_products
content-read
Lists the product categories with parent, slug and product count
needs edit_products
content-read
Pages orders newest first with status, total, currency, item count and date, filtered by status, customer or date range
needs manage_woocommerce
content-read
Reads one order — line items, totals, tax, shipping, payment method and status history
needs manage_woocommerce
content-read
Pages shop customers with order count, lifetime spend and last order date
needs manage_woocommerce
content-write
Creates one simple product from name, description, SKU, prices, stock and categories
needs edit_products
content-write
Changes one product's name, description, SKU, regular price, sale price, stock status, stock quantity or categories
needs edit_products, re-checked as edit_product against the resolved product