Launch offer
20% off every Pro tier — and every renewal — for a limited time. Use the code at checkout:
Catalogue — 115 free, 51 Pro
SiteHelm exposes 115 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 115 tool definitions in its context. It
holds 11 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 11 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.
115 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 of any content type this account can edit, public or not, 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
Finds every document whose title, content, excerpt or Elementor data mentions a phrase, filtered to what you may edit
needs edit_posts
content-read
Lists every redirect this site serves, with the table's size and capacity, and the rules another redirect plugin holds
needs manage_options
content-write
Creates a post, page, or custom post type item, optionally at a chosen position in a hand-ordered type
needs edit_posts
content-write
Updates title, content, excerpt, slug, or hand-ordered position
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 the custom fields a site administrator has named on the SiteHelm status screen
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
Adds one SVG image, rebuilt from a safe subset before it is stored
needs upload_files + unfiltered_html
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; a tree too large to send whole comes back shortened by depth and says so, and rootId opens one band at full depth
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 the site's reusable global style classes in cascade order, and reports whether the editor holds unpublished class changes
needs edit_theme_options
elementor-read
Lists theme-builder templates with the display conditions each one stores
needs edit_posts
elementor-read
Lists the saved library templates, filterable by kind
needs edit_posts
elementor-read
Reads one saved template in full — its tree, its page settings and the Elementor version that wrote it
needs edit_post
elementor-read
Reads a document's Elementor page settings — the page layout and title visibility SiteHelm can change, and the whole stored settings row alongside them
needs edit_post
elementor-write
Inserts an element at a position in the tree; a container can be asked for by preset, and full-bleed stores the settings a section needs to run edge to edge
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
Reorders one element's direct children, as a whole permutation of that list
needs edit_post
elementor-write
Sets or clears the name an element carries in the Elementor navigator
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
elementor-write
Changes a document's page layout or title visibility, merging into the stored settings row
needs edit_post
elementor-write
Creates a draft page Elementor controls, optionally with a starting layout
needs edit_posts
elementor-write
Replaces a document's entire content with a layout you supply, validated against the installed widgets first
needs edit_post
elementor-write
Empties a document's content, leaving the page itself in place
needs edit_post
elementor-write
Creates an empty header, footer, archive or single template, with no display conditions
needs edit_theme_options
elementor-write
Inserts a saved library template into a document, re-minting every element id and rebinding its styles
needs edit_post
elementor-write
Saves a document, or one element's subtree, as a new reusable library template
needs edit_posts
elementor-write
Creates a library template from a tree this site did not produce, validated against the installed widgets first
needs edit_posts
elementor-write
Adds one reusable global style class
needs edit_theme_options
elementor-write
Renames one global class, or merges style properties into it
needs edit_theme_options
elementor-write
Deletes one global class, reporting how many documents wear it first
needs edit_theme_options
elementor-write
Sets the cascade order of the global classes
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 — one post at a time, or fifty under a single preview.
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
content-write
Sets the per-post fields of content-seo-set on up to fifty posts as one previewed change that cannot be undone afterwards; one post the caller may not edit, or one that does not exist, refuses the whole set
needs edit_post on every 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 change that cannot be undone afterwards — 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
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 fifteen fields site-settings-set can change, and nothing else
needs manage_options
content-write
Changes site settings from a strict fifteen-field allowlist — title, tagline, site icon, site logo, 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, Unconfigured
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
What the site runs: every installed plugin and theme, its version, whether it is active, and whether an update is waiting.
system-read
Lists every plugin installed on this site with its version, whether it is active, whether the network activated it, whether an update is waiting, and whether the plugin's own setup wizard has ever been finished
needs manage_options
system-read
Lists every theme installed on this site with its version, which one is live, and whether an update is waiting
needs manage_options
These are not gaps waiting on a release. They are the reason the other 115 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.
The free plugin has no path from an agent to running code. Code exists only in the Pro Code module — off by default, always stored switched off, health-checked the moment it is switched on, auto-reverted when the site stops rendering, and self-deactivating unless confirmed.
Snippets load only on the hook they declare, never on the gateway request, WP-CLI or cron — a snippet that white-screens the site cannot break the channel you would use to remove it.
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, per-post schema, and the Rank Math 404 log and redirections.
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). Also reports providerConfigured: false means the plugin has not finished its own setup, so the settings are stored and nothing is using them
needs manage_options
content-write
Writes the same allowlisted settings, one scope per change — site scope or postType, never both
needs manage_options
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), with SiteHelm's own redirects reported beside them under others
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
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
Activate, deactivate, switch theme, update and install — acting on the site’s own extensions, behind the same gates as everything else.
content-write
Switches one installed plugin on, snapshotting the state it replaces; refuses a plugin the network activated, because a single site does not own that decision
needs activate_plugins
content-write
Switches one plugin off, snapshotted and reversible, and refuses a network-activated plugin for the same reason
needs activate_plugins
content-write
Makes a different installed theme the live one, recording the theme it replaced; the theme already live is refused rather than previewed as a change that moves nothing
needs switch_themes
content-write
Updates one plugin to the version WordPress says is waiting, reporting the version it came from
needs update_plugins
content-write
Updates one theme to the version WordPress says is waiting
needs update_themes
content-write
Installs a plugin from WordPress.org by its slug and stores it switched off
needs install_plugins
content-write
Installs a theme from WordPress.org by its slug and does not make it live
needs install_themes
Popups, dynamic tags and brand kits — the Elementor Pro surfaces, behind one gate.
elementor-read
Lists the dynamic tags this site registers, sorted, at most 200 with the true count and a truncated flag, alongside the Elementor Pro version
needs edit_posts
elementor-read
Lists the library's kits oldest first with title, whether the elementor_active_kit option names it, and its global colour and typography counts (system and custom added together)
needs edit_theme_options
elementor-write
Creates a published popup with an empty document and no trigger armed, so it shows to nobody until elementor-popup-settings-set gives it one
needs edit_theme_options
elementor-write
Binds one widget setting to one dynamic tag through the ordinary document write path, after checking the tag against the site's own registry and the setting against the widget's declared props
needs edit_post
elementor-write
Writes five allowlisted display settings — page-load delay, exit intent, scroll offset, and the two prevent-close switches — in whole coupled groups, merged into the stored row rather than replacing it
needs edit_theme_options
elementor-write
Switches the active kit to a validated kit post, snapshots the previous option and invalidates both kits' cached CSS
needs edit_theme_options
Snippets, site-wide CSS and JS, and widget, block and theme-template scaffolds — with the recovery path built before the feature.
system-read
Lists the places a snippet can live — SiteHelm's own runner, always present, and any snippet plugin that is installed — and which safety guarantees each can keep
needs manage_options
system-read
Lists the stored snippets with language, hook, whether each is live and whether it is quarantined; bodies are not returned
needs manage_options
system-read
Reads one snippet in full, including its body
needs manage_options
system-read
Lists the snippets taken out of circulation because a request died while they were running, with the error that did it
needs manage_options
system-read
Fetches the home page and the login screen and reports whether each renders, breaks, or could not be reached — the same check activation runs, callable on its own
needs manage_options
system-read
Issues the one-off URL that loads the site with every snippet skipped, so the admin stays reachable while a snippet is breaking the front end
needs manage_options
system-read
Generates the source for an Elementor widget class from a description of its controls and returns it as text; nothing is stored and nothing runs
needs manage_options
system-read
Generates the source for a WordPress block — registration, attributes, render callback — as text; nothing is stored and nothing runs
needs manage_options
system-read
Generates the source for a theme template file for a post type or archive, as text; nothing is stored and nothing runs
needs manage_options
content-write
Stores one PHP snippet — always stored switched off, no argument makes it live, and refused outright if it does not lex; name WPCode or Code Snippets as the host and it is stored there instead, where only that plugin can switch it on
needs manage_options + edit_plugins re-checked
content-write
Switches one stored snippet on under the guard: health-checked immediately, auto-reverted and quarantined if the site stops rendering, and self-deactivating unless confirmed inside the window
needs manage_options + edit_plugins re-checked
content-write
Confirms that a snippet activated a moment ago should stay live — staying on is not the default, switching back off is
needs manage_options + edit_plugins re-checked
content-write
Switches one snippet off; only ever reduces what runs
needs manage_options + edit_plugins re-checked
content-write
Deletes one snippet, snapshotted first so it can be put back
needs manage_options + edit_plugins re-checked
content-write
Stores custom CSS printed on the front end — it cannot run anything, but it can make a site unusable to look at, so it is previewed and reversible like any other change; WPCode and Code Snippets can hold it instead
needs manage_options + edit_plugins re-checked
content-write
Stores custom JavaScript printed on the front end — it runs in every visitor's browser, a wider reach than PHP, and goes through the same storage discipline; WPCode and Code Snippets can hold it instead
needs manage_options + edit_plugins re-checked
content-write
Turns every snippet off at once, or back on, without knowing which one broke; the switch is read before any snippet is considered, so a broken snippet cannot defeat it
needs manage_options + edit_plugins re-checked
content-write
Puts a quarantined snippet back into circulation — through the whole activation guard again, not on trust
needs manage_options + edit_plugins re-checked