Install — three steps

Ten minutes, and one credential you can revoke.

SiteHelm registers one REST route and one admin menu. There is no options screen, no dashboard widget to configure, and no cron job.

You will need WordPress 6.6 or newer, PHP 8.1 or newer, and HTTPS. Elementor, ACF, Meta Box, an SEO plugin and WooCommerce are all optional — SiteHelm reports which of them it found rather than requiring any.

Step 1 — install

Upload the plugin.

1
Download the latest zip

From the releases page — the file is named sitehelm-*.zip.

2
Plugins → Add New → Upload Plugin

Choose the zip, Install Now, then Activate.

3
Open SiteHelm → Connect an app

The endpoint, the credential, and a ready-to-paste config for your client are all on that one screen.

If PHP or WordPress is below the floor, the plugin refuses to boot and shows an admin notice rather than fataling. That is deliberate: a half-loaded plugin with a live REST route is worse than no plugin.

From source

Shell
git clone https://github.com/Mrshahidali420/SiteHelm.git
cd SiteHelm
composer install --no-dev

Then symlink or copy the directory into wp-content/plugins/.

Step 2 — connect

One route, one Application Password.

SiteHelm speaks JSON-RPC 2.0 over a single authenticated REST route, and authenticates with a WordPress Application Password over HTTP Basic. The route requires a logged-in user, and every operation re-checks that user’s real capabilities.

The agent acts as that account and no other. Give it an editor if you want an editor’s reach; revoke the password on the Connect screen and the agent is out immediately.

Always use HTTPS. An Application Password sent over plain HTTP is a credential sent in the clear.

Endpoint
POST https://your-site.com/wp-json/sitehelm/v1/mcp

Claude Code

Shell
claude mcp add --transport http sitehelm \
  https://your-site.com/wp-json/sitehelm/v1/mcp \
  --header "Authorization: Basic BASE64_OF_user:app_password"

Cursor, VS Code, any HTTP MCP client

mcpServers
"sitehelm": {
  "url": "https://your-site.com/wp-json/sitehelm/v1/mcp",
  "headers": { "Authorization": "Basic …" }
}

Clients that only speak stdio need an HTTP-to-stdio bridge for now. A first-party bridge is the top item on the roadmap.

Step 3 — the first call

Ask the site what it is before you ask it to do anything.

system-connection

Confirms the gateway is reachable and reports who is authenticated.

system-integrations

Which optional integrations are active, inactive, or blocked on a version.

system-environment

WordPress and PHP versions, active theme, registered post types and taxonomies.

Two of those cost one call each and tell an agent what is actually available before it plans anything. Every dispatcher called with no operation answers with its own catalogue, so the agent discovers the rest at runtime.

See what it can do Read the module docs

Cue 5 — blackout

If the first call is refused.

AuthenticationFailed

On many servers the Authorization header never reaches WordPress. The Health tab checks this specifically and prints the .htaccess fix when it finds it — the same verdict also appears under Tools → Site Health.

Forbidden

The account is real but lacks the capability for that object. Use an account with the role the work needs.

IntegrationUnavailable

The plugin an operation depends on is not active. Health names what each blocked module is waiting on.

A refusal here is the system working. It carries the reason and, where one exists, the remedy — and never a stack trace, a filesystem path, or anything else worth handing to a stranger.

The full safety model lists all eleven refusals and what each one means.