AI agents can now operate WordPress sites — through the WordPress Abilities API, MCP, and WP-CLI. That’s powerful, and it’s also exactly how a confused or manipulated agent breaks a site. Agent Toolbelt gives your agent a small set of maintenance operations it can use safely : every operation can be
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 6.9 and PHP 8.0.
SourceWordPress plugins · Nov 5, 2026
01 / Source details
Aboutthistool.
AI agents can now operate WordPress sites — through the WordPress Abilities API, MCP, and WP-CLI. That’s powerful, and it’s also exactly how a confused or manipulated agent breaks a site.
Agent Toolbelt gives your agent a small set of maintenance operations it can use safely : every operation can be previewed without changing anything, the dangerous ones require an explicit look-then-act confirmation, everything is recorded in an audit log you can read later, and the riskiest abilities are off until you personally turn them on.
Install it and stop worrying — that’s the whole setup. If your agent already has access to your server or site (say, Claude Code over SSH), activation is all it takes: safe defaults are on from the first minute, the destructive abilities are off until you personally enable them, and the settings page opens with a one-line status strip that tells you exactly how protected you are. Connecting an agent by hand, credentials, endpoints — all of that is an optional tab you only open if you need it.
Content-focused MCP plugins let agents edit posts and products. Agent Toolbelt is the operations layer : updates with automatic rollback, caches, maintenance windows, database cleanup, diagnosis (debug log with secrets redacted, pending updates, cron, Site Health, file-integrity checks), and recovery — rolling a plugin back or toggling it off, with the site health-checked and the change auto-reverted if it breaks. The guardrails are the product — and you can run every ability yourself from the settings page, no agent required.
The abilities
Site status (read-only) — WordPress/PHP/database versions, environment, active theme, plugin counts, pending updates, the latest Site Health summary, which toolbelt abilities are enabled, and whether observe mode is on. The agent’s natural first call.
Purge all caches (low risk) — clears the page cache (12 supported cache plugins: WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, WP-Optimize, Breeze, Cache Enabler, Hummingbird, SiteGround Optimizer, Swift Performance, Comet Cache), the object cache, and expired transients.
Flush rewrite rules (low risk) — fixes pretty permalinks returning 404 after plugins or post types change.
Maintenance mode (medium risk) — turns the visitor-facing maintenance page on or off. It always auto-expires (5 minutes by default, 60 max): even if the agent forgets to turn it off, your site can never stay locked. Administrators keep seeing the normal site; the REST API and wp-admin stay reachable.
Read audit log (read-only) — what ran, when, by which caller, and the result. Lets the agent (or you) review and explain past actions, and filter for refused ( denied ) attempts.
Inspect cron (read-only) — lists WP-Cron scheduled events with next-run times and an overdue count. The first thing to check when scheduled posts, emails, or backups seem stuck. Event arguments are digested, never exposed raw.
Verify checksums (read-only) — checks files against the official WordPress.org checksums and reports modified, missing, and unexpected files — WordPress core and installed plugins (one or all). Plugins WordPress.org has no checksums for (premium, custom, single-file) are reported as skipped, never as clean. For “was this site tampered with?” moments.
Run Site Health checks (read-only) — runs WordPress’s own Site Health tests server-side and returns fresh, timestamped results — core only refreshes them when a human opens wp-admin, so agent-managed sites otherwise report stale numbers.
Read debug log (read-only) — the newest entries from wp-content/debug.log with PHP stack traces grouped to their error, filterable by severity, time, or substring. Secrets (API keys, tokens, cookies), absolute paths, emails, and IP addresses are redacted before the content leaves your site. When the site errors, this is the agent’s “what is actually broken?” call.
List available updates (read-only) — pending plugin, theme, and core updates with current and new versions, active and auto-update flags. site-status gives the counts; this gives the plan.
Check site response (read-only) — fetches your home page and REST API as an anonymous visitor (cache-busted) and reports HTTP status, response time, and whether a fatal-error marker is visible — the same probe the recovery abilities run internally, available standalone.
Regenerate thumbnails (medium risk) — generates ONLY missing thumbnail files — it never deletes or overwrites existing images. Work is batched with a time budget; the agent simply calls again to continue.
Update plugin (high risk, disabled by default) — updates one plugin with a safety net; see below.
Update theme (high risk, disabled by default) — updates one theme with the same safety cycle — backup, health check, automatic restore. The dry-run flags the active theme (and the parent of an active child theme), where a broken update takes the whole front-end down until the restore.
Roll back plugin (high risk, disabled by default) — replaces one plugin with an earlier WordPress.org release — the recovery move when an update broke something. A dry-run without a version lists the versions actually available; execution keeps a backup, health-checks the site, and restores the newer version if the old one turns out worse. Premium and custom plugins are refused honestly: there is no trusted source to download from.
Toggle plugin (high risk, disabled by default) — activates or deactivates one plugin, then checks the site still responds and auto-reverts if it does not — the conflict-isolation move, and the fallback when there is no version to roll back to. It refuses to touch Agent Toolbelt itself.
Clean up database (high risk, disabled by default) — deletes database clutter by category: post revisions, abandoned auto-drafts, trashed posts, spam and trashed comments, expired transients, and orphaned meta rows. The dry-run reports exact per-category counts and returns a confirm token; execution requires that token. Deletions are batched and go through core functions, so delete hooks fire and caches stay consistent.
Safe plugin updates with automatic rollback
The flagship ability. When you enable it, an agent can update a plugin like this — and only like this:
01Dry-run first (forced). The ability defaults to preview mode: it reports the installed and available versions and returns a one-time confirm token. Nothing changes.
02Confirm to execute. The real update requires that token back. It is bound to the exact plugin, the exact user, and expires in 15 minutes. A single injected prompt cannot one-shot an update — the agent must look, then act.
03Backup, update, health check. The update runs on WordPress core’s own upgrader, which keeps a temporary backup of the current version. Afterwards it checks the site still responds (home page + REST API, as an anonymous visitor, scanning for fatal errors).
04Automatic rollback. If the site broke, the previous version is restored automatically — and the audit log records rolled_back so everyone knows what happened.
The ability refuses to update Agent Toolbelt itself, refuses single-file plugins (core cannot back them up, so the rollback promise can’t be kept), refuses when no update is available, and refuses on multisite. Since 1.5.2 it also proves the safety net first: if the site cannot reach itself over HTTP (basic auth, an access gate, a host that blocks loopback requests), the health check could never pass, so it refuses with loopback_unavailable instead of reporting a false rollback.
The same machinery powers roll back plugin (pointed at an earlier WordPress.org release instead of a newer one) and, since 1.5, theme updates — the same backup, health check, and automatic restore.
Run any ability yourself
New in 1.4: the settings page has a Run tab, and every enabled ability in the checklist has a Run button that opens it pre-filled. Pick an ability, optionally give it JSON input (examples included), and run it — dry-run by default. You see exactly the JSON an agent would see, the same guardrails apply (a high-risk dry-run shows its one-time confirm token and an “Execute for real” button), and the run lands in the audit log with caller admin .
Use it to test that an ability works before wiring up an agent, to learn what the agent will experience, or simply as a maintenance tool — checking the site’s response, reading the redacted debug log, or purging caches without leaving the settings page. No agent required.
Built for the prompt-injection era
The canonical agent-security failure is indirect prompt injection: malicious content on a page tricks your own agent into calling destructive tools (see OWASP LLM Top 10, LLM01). No plugin can make a gullible agent smart — what it can do is shrink the blast radius:
Non-destructive by default. Read-only and low-risk operations only, until you opt in to more.
Dry-run everywhere. Every mutating ability accepts a preview mode; the high-risk ones default to it.
Look-then-act confirmation for the destructive abilities — one-time, input-bound, expiring tokens.
Observe mode. One checkbox (or the AGENT_TOOLBELT_OBSERVE constant) makes the whole toolbelt read-only: agents can still inspect and preview, but every real change is refused with a clear reason.
Hourly rate budget. Real executions are capped per user per hour (5 high-risk, 30 total by default; filterable) — a runaway agent stalls at the circuit breaker. Dry-runs and read-only calls are never limited, so diagnosis stays free.
Least privilege. Every call requires a logged-in user with manage_options ; plugin updates additionally require update_plugins . Anonymous callers can’t even see the abilities.
Disabled means invisible. An ability you turn off is not registered at all — agents don’t see a “forbidden” tool, they see no tool.
Self-protection. The toolbelt refuses to update, roll back, or deactivate itself — an agent must not switch off its own guardrails.
Everything audited — including refusals. Each execution records the caller (R
See it in action
Screenshots & previews.
The Abilities tab — grouped by risk with a status strip on top: safe by default, high-risk abilities off, every ability one Run button away.The audit log — every operation with caller, user, input digest and result.Dry-run first, then the one-time confirm token, then execute: a safe plugin update round-trip.The Connect an agent tab (optional) — nothing to set up for shell agents; endpoints, a one-click application-password link, and a copyable briefing for network agents.The Run tab — dry-run preview, the one-time confirm token, and an Execute button, straight from the settings page.
02 / Source details
Frequently asked questions.
Do I have to configure anything after activating?
No. The defaults are the product: read-only and low-risk maintenance abilities are on, the destructive ones (update, rollback, toggle, database cleanup) are off, every call is audited, and the status strip at the top of the settings page confirms it at a glance. You only open the settings when you want to grant more (enable a high-risk ability), grant less (observe mode), or try an ability yourself on the Run tab.
My agent already has SSH access to the server. Do I still need the application password?
No — the application password is only for agents that talk to the site over the network. An agent with shell access uses the built-in WP-CLI commands ( wp agent-toolbelt list , wp agent-toolbelt run <ability> , wp agent-toolbelt log ) with the same guardrails, dry-run/confirm flow, and audit logging. What the plugin adds for such an agent is exactly the point: guarded, previewable, logged operations instead of raw destructive shell commands.
Is it really safe to let an AI agent update plugins?
“Safe” here means: previewed, confirmed, backed up, health-checked, and rolled back automatically if the site breaks — with an audit trail. That’s more protection than a human clicking “Update now” gets. It’s still a change to your site, which is why the ability ships disabled and you must enable it deliberately.
What stops a prompt-injected agent from wrecking my site?
Several layers: the destructive abilities are off by default; if you enabled them, execution needs a fresh one-time confirm token from a prior dry-run of the same request (a single malicious instruction can’t do both steps blindly); every call needs an authenticated administrator — content on your pages can’t call anything by itself; the hourly rate budget stalls a stampede; and observe mode lets you cut all write access with one checkbox while you investigate. The honest part: if your agent has admin credentials and is fully compromised, no plugin can save you — the toolbelt’s job is to make the destructive path narrow, slow, and visible.
Why does update-plugin refuse single-file plugins like Hello Dolly?
WordPress core’s temporary-backup mechanism skips plugins that live in a single file, so there would be no backup to roll back to. Rather than update without a safety net, the ability refuses and tells the agent to use wp-admin or WP-CLI instead.
Does it work on multisite?
Everything except the abilities that change plugin files or state: update-plugin, rollback-plugin, and toggle-plugin refuse on multisite with a clear reason instead of guessing at network-wide semantics. Since 1.4 the audit log also heals itself on multisite: if a subsite is missing its log table (network activation only creates it on the main site), the first write creates it.
Can visitors or logged-out agents see or call the abilities?
No. Every ability requires a logged-in user with manage_options (updates also need update_plugins ). Anonymous REST calls get a 401, and the abilities don’t even appear in the listing for unauthorized users.
How do I turn everything off in an emergency?
Two ways: untick abilities on the Settings → Agent Toolbelt page (they unregister instantly), or add define( 'AGENT_TOOLBELT_DISABLED', true ); to wp-config.php — the kill switch unregisters everything: abilities, REST exposure, and the WP-CLI command. There is also a softer option: observe mode (see below) keeps the abilities visible but read-only.
What is observe mode?
A read-only switch for the whole toolbelt. While it is on (checkbox on the settings page, or force it with define( 'AGENT_TOOLBELT_OBSERVE', true ); in wp-config.php), agents can still call read-only abilities and preview any operation with dry-run, but every real change is refused with the machine-readable reason observe_mode and a message telling the agent to ask you. Useful while you are getting to know a new agent, or any time you want eyes-only access without hiding the tools.
Can a runaway agent execute operations in a loop?
Not for long. Real executions are rate-limited per user with a fixed hourly budget: 5 high-risk and 30 total mutating executions per hour by default (the agent_toolbelt_rate_budgets filter changes the numbers; define( 'AGENT_TOOLBELT_NO_RATE_LIMIT', true ); disables the limit for supervised bulk-maintenance sessions). Over-budget calls are refused with the reason rate_budget and a retry_after_s hint, and land in the audit log as denied — so a stampeding agent both stalls and leaves a visible trail. Dry-runs and read-only abilities are never counted: diagnosis stays free.
Why is the database cleanup disabled by default?
Because it deletes content — revisions, trashed posts, spam, orphaned rows. That is exactly what you want from a cleanup, but a tool that can delete rows the moment the plugin activates would contradict what this plugin promises. So you enable it consciously, once, on the settings page. After that the usual guardrails apply: dry-run with exact per-category counts, a one-time confirm token bound to the same input, batched deletes through core functions, and an audit-log entry plus an email for every real execution.
What exactly does cleanup-database delete?
Only well-defined garbage, by category — and you can pass a categories list to run any subset: post revisions; auto-drafts older than 7 days; trashed posts; spam and trashed comments; expired transients; and orphaned post/comment/term/user meta rows whose parent object no longer exists. It never touches published content, drafts, users, terms, or settings. Posts and comments are deleted through WordPress core functions ( wp_delete_post , wp_delete_comment ), so cleanup hooks fire and caches stay consistent.
Why don’t I see maintenance mode when I turn it on?
If you are logged in as an administrator, that’s on purpose — administrators always see the normal site. Open a private/incognito window to see what visitors get. Otherwise, a static page cache is probably serving visitors a cached copy: purge the page cache (there’s an ability for that) and reload. Maintenance mode always auto-expires, so a forgotten “on” can never lock the site permanently.
How does my agent discover the abilities?
Three doors, all showing exactly (and only) what you enabled: the WordPress REST API listing at wp-json/wp-abilities/v1/abilities ; the official MCP Adapter’s default server, where since 1.6.0 each enabled ability is a tool named agent-toolbelt-<ability> and the server instructions carry the calling rules; and the Abilities Explorer in the official ai plugin, if you use it. Every ability that has a Run-tab example publishes it to agents too: as JSON Schema examples in the MCP tool’s input schema, and as meta.example_input in the REST listing (WordPress publishes draft-04 schema keywords only there, so examples itself is stripped). The Connect your agent section on the settings page turns this into a copy-paste briefing with your site’s real URLs.
Does it work with the official WordPress MCP Adapter?
Yes, out of the box. Since 1.6.0 the adapter’s default server lists each enabled ability as its own tool ( agent-toolbelt-<ability> , with title, description, input schema and examples, and the readOnly/destructive/idempotent/openWorld hints) and sends the toolbelt’s calling conventions as the server instructions, so a client knows the dry-run and confirm-token rules before its first call. The abilities also stay reachable the way they were before, through the adapter’s discover-abilities / get-ability-info / execute-ability tools, because they carry meta.mcp.public (and meta.public ) — you will see them both ways; it is the same ability and the same guardrails. Disabled abilities are not registered at all, so no transport can see them. Every MCP call still runs through the same permission checks, dry-run defaults, confirm tokens, rate budget, and audit log as REST — the transport changes, the guardrails don’t. Two filters: agent_toolbelt_mcp_public keeps an ability callable over REST but hidden from MCP; agent_toolbelt_mcp_direct_tools (return false) keeps a site on the adapter’s three meta-tools only.
Can read-debug-log leak my secrets to the agent?
The debug log is the one file on a WordPress site that routinely catches secrets — API keys inside stack traces, database credentials in connection errors, customer emails in mailer failures. That’s why redaction is built in and cannot be turned off: provider API keys, JWTs and bearer tokens, database credentials, URL query secrets, auth cookies and nonces, absolute filesystem paths, emails, and IP addresses are all masked before the content leaves your site. Two honest caveats: redaction is best-effort pattern matching (a secret in a format nobody has seen before can slip through — the response says so), and the search filter deliberately matches the redacted text, so an agent cannot use it to probe whether a specific secret value appears in the log. If that residual risk is still too much for your site, untick the ability — like everything else, disabled means invisible.
Can it roll back my premium plugin?
No, deliberately. Rollback downloads the target version from WordPress.org, which only hosts what it distributes — for premium and custom plugins there is no trusted source to fetch an old version from, so the ability refuses with a clear reason ( versions_unavailable ) instead of improvising. The same honesty rule as checksum verification: no evidence is not a green light.
Why are rollback and toggle disabled by default?
Same product logic as update-plugin and cleanup-database: an ability that can swap plugin versions or deactivate plugins the moment the plugin activates would contradict what this plugin promises. You enable them consciously, once, on the settings page — and after that every execution still needs a dry-run, a one-time confirm token, and passes the health-check-and-revert cycle. A rollback also carries an inherent risk the tool warns about every time: an older version may reintroduce
FinderPress Media Auditor helps site administrators scan for broken images, missing Media Library files, unreachable media URLs, and other media issues across WordPress content. Use it to audit images, video, audio, PDFs, featured images, and attachment files without sending scan data to an external
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati