Skip to main content
Glama

wpxmcp

The open-source MCP server that runs your WordPress sites like a senior admin would — content, design, plugins, SEO, performance, security and the whole fleet, from Claude, ChatGPT, Cursor or any MCP client.

Deploy to Cloudflare CI License: MIT MCP 2026-07-28 WordPress 6.0–7.1

150 tools · 20 playbooks · stdio + remote · many sites, one server · MIT · no subscription, no usage cap


Why I built this

I run several WordPress sites, and I wanted an AI agent to do the real work on them — not just draft a post, but find out why a page is slow, fix a meta description in Rank Math, check whether a plugin update broke the checkout, tidy a bloated options table.

The official route stopped short. The WordPress MCP Adapter is the right long-term idea, but it can only expose what something has registered as an ability — and out of the box core registers three, all read-only. It is one endpoint per site, it has to be installed on every site, and nothing in it tells you why a page is slow or whether your site is exposed.

The commercial route came with a meter. The hosted and plugin-based MCPs that can do more charge per site or per seat, cap how many requests or actions you get, and hold your credentials on their servers. For a handful of sites managed every day, the limits arrived before the work was done — and I could not read, fix or extend the thing I was paying for.

So I built the server I needed, used it on my own sites until it was dependable, and released it. It is free, MIT-licensed, self-hosted, and has no usage limit other than your own WordPress.


Related MCP server: wordpress-mcp

What it looks like

"The pricing page still shows the old price, and it feels slow. Sort it out."

An illustrative session, abridged.

find_content_by_url  https://example.com/pricing/          → page 812
update_content       edits: [{ find: "$39", replace: "$49" }]  → 1 replacement
get_page_html        /pricing/                              → still shows $39
purge_cache          scope: url                             → WP Rocket purged
get_page_html        /pricing/                              → $49 ✓
profile_url          /pricing/
  → 184 queries (61 duplicates from wp-content/plugins/pricing-table)
  → external HTTP call to api.currency.example 1.4s on every request

It read the rendered page instead of trusting a 200, found the stale cache, and then found the real reason the page was slow — with the file and plugin responsible.


Why wpxmcp

It is not reinventing the wheel

wpxmcp is built on what WordPress already ships: the REST API, Application Passwords and the Abilities API (it is a client of wp-abilities/v1, so plugin-registered abilities just work). When a plugin offers its own REST route or ability, wpxmcp uses it — so the plugin's validation, hooks and cache invalidation run. It falls back in order: ability → REST → the plugin's own settings save → WP-CLI → guarded SQL. The optional companion plugin only adds what core has no API for at all: logs, profiling, theme files, WP-CLI, SQL, admin screens.

Compared with the official MCP Adapter

WordPress MCP Adapter

wpxmcp

What the agent can do

Whatever plugins registered as abilities

150 tools on day one, plus every registered ability

Sites per connection

One

Many — one server, one connection

Install on each site

Required

Optional (113 tools need nothing on the site)

Diagnostics, profiling, security, SEO, fleet

—

✅

Guardrails (dry-run, drafts, confirm tokens)

Up to each ability

✅ built in

They are complementary: install the adapter if you like, and wpxmcp will call the same abilities.

Compared with commercial plugin-based MCPs

Typical commercial MCP

wpxmcp

Price

Per site / per seat, monthly

Free

Usage

Request or action quotas

No cap

Where credentials live

Vendor's servers, or inside the site

Your Cloudflare account or your machine

Can you read and change it

No

Yes — MIT

Lock-in

Their plugin, their dashboard

Standard MCP, standard WordPress APIs

The power of open source, in practice

  • Auditable guardrails. Every safety claim in SECURITY.md is code you can read and a test you can run — and each was verified to refuse, not just to exist.

  • Extensible by you. Add a tool with one defineTool({...}); save your team's conventions as a playbook with save_skill.

  • Yours to deploy. Cloudflare Workers free tier, or node dist/index.js on a laptop. No telemetry; the only outside services it calls are the ones a tool names (WordPress.org, the WPVulnerability database, stock-photo APIs you configure).


What it does, by who you are

Site owners and webmasters

  • Plain-language edits that read the page back before and after, draft before publish, and say plainly when something cannot be undone

  • security_audit — exposed files, user enumeration, XML-RPC, weak config, admin accounts, and known-vulnerable plugins from the WPVulnerability database, scored and sorted

  • purge_cache for WP Rocket, LiteSpeed, W3TC, WP Super Cache, SiteGround, Kinsta, WP Engine and more — then proves the page changed

  • backup_status before anything risky; tail_error_log when the site shows a critical error

Plugin power users — operate any installed plugin as an admin

  • inspect_plugin maps what a plugin exposes: REST routes, abilities, settings, admin screens

  • get_plugin_settings / update_plugin_settings write through WordPress's own settings save, so the plugin's sanitisation runs — with a preview, a confirm step and one-call undo

  • admin_page / submit_admin_form read and submit any wp-admin screen as the administrator — Yoast, Rank Math, WooCommerce, forms, caching — even where no API exists

WordPress developers

  • profile_url — Query Monitor over MCP: every query with caller and plugin, duplicates, external HTTP calls, PHP warnings, assets, memory, and the template that rendered the page

  • inspect_registry — post types, meta, blocks, REST routes, shortcodes, cron, and hooks with file:line of every callback

  • inspect_options, cleanup_options, inspect_database — autoload bloat, orphaned data and tables, attributed to the plugin that left them

  • WP-CLI (emulated — no SSH), guarded SQL, the Abilities API, rest_api for anything else

Theme developers

  • Sandboxed theme drafts with private preview links; never edit a live theme

  • diff_global_styles — what the Site Editor changed versus theme.json; reset_template_customization to revert

  • validate_theme_json — schema, duplicate slugs, missing font files, WCAG contrast across every style variation

  • check_accessibility on any page or draft preview; apply_style_variation, list_block_patterns, classic PHP + Tailwind scaffolding

SEO and content teams

  • get_seo_meta / set_seo_meta across Yoast, Rank Math, AIOSEO, SEOPress and The SEO Framework — and a check that what is stored is what actually renders

  • seo_site_check, check_links, internal_link_report (orphans and link suggestions), content_inventory (CSV), content_calendar

  • Page-builder aware: Elementor, Divi, Beaver Builder, Bricks and Breakdance content is detected and never corrupted by an HTML edit

Agencies

  • fleet_report — every client site in one call: reachability, versions, pending updates, Site Health, noindex left on, HTTPS — worst first

  • One deployment, one bearer token per team, credentials in Worker Secrets instead of on every laptop

Every tool →


Guardrails that hold

  • New content is a draft; deletes go to the trash.

  • Bulk edits, SQL, search-replace, settings changes and form submissions preview first and return a single-use confirm_token bound to those exact arguments.

  • Theme work happens in a sandboxed copy; publishing backs up the previous theme.

  • Protected options, path traversal, stacked SQL, off-site fetches and private-network requests are refused — at the server and in the plugin.

  • Every sensitive action is written to an append-only audit log, locally and on the site.


Deploy to Cloudflare

Or three commands:

npm install
openssl rand -hex 32 | npx wrangler secret put WPX_AUTH_TOKEN
npx wrangler secret put WPX_SITES     # your sites JSON, then Ctrl-D
npm run deploy

Connect any client:

{
  "mcpServers": {
    "wpxmcp": {
      "type": "http",
      "url": "https://wpxmcp.<your-subdomain>.workers.dev/mcp",
      "headers": { "Authorization": "Bearer <your WPX_AUTH_TOKEN>" }
    }
  }
}

It speaks MCP 2026-07-28 (stateless, no handshake) and still serves clients on 2025-era revisions from the same endpoint. The free tier covers 100,000 requests a day. Full walkthrough →

Or run it locally

git clone https://github.com/alokemajumder/wpxmcp.git
cd wpxmcp && npm install && npm run build
npm run doctor          # checks reachability, auth, capabilities, plugin
claude mcp add wpxmcp -- node /absolute/path/to/wpxmcp/dist/index.js \
  -e WORDPRESS_URL=https://example.com \
  -e WORDPRESS_USERNAME=admin \
  -e "WORDPRESS_APP_PASSWORD=abcd EFGH ijkl MNOP qrst UVWX"

Create the Application Password under Users → Profile → Application Passwords. WordPress only offers them over HTTPS, and some hosts strip the Authorization header — test_site detects both. Auth guide →


Do you need the companion plugin?

Not for most work. 113 of the 150 tools run against a stock WordPress with nothing installed.

The other 37 do things core WordPress has no API for: reading the error log, profiling a request, operating admin screens, WP-CLI, SQL, theme files, cache purges and code snippets. Each of those tools names the plugin when it is missing, and tells you how to install it. What it adds and how it is secured → · Comparison and evidence →


Documentation

Tool reference

Every tool, generated from the code

Deploy to Cloudflare

Secrets, custom domains, rotation, troubleshooting

WordPress auth

Application Passwords, roles, HTTPS, header passthrough

Configuration

Every option and precedence rule

Companion plugin

What it adds, how it is secured

Comparison

Versus other WordPress MCP servers

Security

Threat model and guardrails

Contributing

Setup, conventions, adding a tool or playbook


Status

v2.0.0. CI on Node 20, 22 and 24, PHP 7.4 and 8.3, with the Worker build verified on every push.

Every release is verified against a live WordPress 7.1, not only unit-tested: the full tool surface exercised over stdio and over HTTP, on both the 2026-07-28 and 2025-era protocols, with every guardrail confirmed to refuse. The suites are in audit/ and re-runnable against any throwaway WordPress.

Issues and pull requests are read. Especially welcome: playbooks for plugins you know well, and adapters for more cache, backup and SEO plugins. If wpxmcp saves you time, a star helps other people find it.

Development

npm install && npm run build
npm test            # unit tests, no network needed
npm run cf:dev      # the Worker locally at :8787/mcp

Adding a tool is one defineTool({...}) — it appears on both transports and in the generated tool reference automatically.

License

MIT — see LICENSE. Not affiliated with the WordPress Foundation, Automattic, or Cloudflare.

Available Tools

150 tools
activate_pluginActivate a pluginA

Activate an installed plugin. Activation runs the plugin's code immediately — a plugin incompatible with this WordPress or PHP version can fatal the site, so prefer testing on staging first.

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin identifier, e.g. "akismet/akismet".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
network_wideNoActivate across a multisite network.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing that activation runs the plugin's code immediately and can fatal the site if incompatible with the current WordPress/PHP version. This is significant behavioral risk context that an agent would not otherwise know. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose first, then adds the critical risk warning in a single follow-up sentence. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter activation tool with no output schema or nested objects, the description covers the purpose, the installed-plugin precondition, the main risk, and a mitigation strategy. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a clear description in the schema. The free-text description adds no parameter-specific semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Activate an installed plugin.' It clearly scopes the operation to already-installed plugins, which distinguishes it from install/delete/deactivate siblings. The title and description align without being tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: the tool targets installed plugins and should be used with caution. The warning to prefer testing on staging first provides actionable guidance for when to proceed. It does not explicitly name alternatives like install_plugin or deactivate_plugin, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

activate_themeActivate a themeA
Destructive

Switch the site's active theme. This changes the entire front-end appearance immediately, and widget/menu assignments do not always carry across. Requires confirm: true. If you are iterating on a theme you are building, use the draft workflow and publish_draft_theme instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoRequired — this changes the live site's appearance for every visitor.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
stylesheetYesTheme directory name to activate.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations flag readOnlyHint=false and destructiveHint=true, but the description adds that the change is immediate, affects all visitors, and that widget/menu assignments may not carry over. It also explains the confirm requirement, which is beyond the annotation. Minor gap: doesn't state reversibility or how to revert, but the destructive nature is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each informative: the core action/effect, the caveat about widget/menu assignments, and the alternative workflow. No fluff, everything earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a destructive action with a confirm flag) and with no output schema, the description adequately covers the key behavioral caveats, the confirm requirement, and the alternative. A small gap: no mention of failure modes or how to revert, but the description is sufficient for an agent to select and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already has 100% coverage for all parameters: stylesheet is described as 'theme directory name', confirm as 'Required — this changes the live site's appearance', and site_id explains optionality and default behavior. The description mentions confirm explicitly but doesn't add extra meaning beyond the schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Switch the site's active theme') and its immediate effect ('changes the entire front-end appearance immediately'), which distinguishes it from theme management siblings like install_theme or list_themes. It also contrasts with the draft workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use it (activating an existing theme) and when not to (when iterating on a theme being built), explicitly suggesting publish_draft_theme instead. This is strong routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_menu_itemAdd a menu itemA

Add an entry to a navigation menu. It can point at a post, page or custom post type (object_id + object), a taxonomy term, or an arbitrary URL. Use parent to nest it under another item and menu_order to position it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoTarget URL. Required for type "custom".
xfnNoXFN relationship value for the link.
typeNocustom: an arbitrary URL. post_type: link to a post/page/CPT (set object + object_id). taxonomy: link to a term. post_type_archive: link to a CPT archive.custom
titleYesLink label.
objectNoFor post_type: the post type slug ("page"). For taxonomy: the taxonomy slug ("category").
parentNoMenu item ID to nest under, creating a submenu.
targetNo_blank opens in a new tab.
classesNoExtra CSS classes on the link.
menu_idYesMenu to add to.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
object_idNoID of the post or term being linked to.
attr_titleNoThe link's title attribute.
menu_orderNoPosition within the menu. Lower numbers come first.
descriptionNoItem description, shown by themes that support it.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a non-read, non-destructive, non-idempotent mutation, and the description adds useful behavioral detail about supported link types and how parent and menu_order affect the item. It does not contradict the annotations and provides adequate transparency for a creation action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-organized sentences that front-load the core action and then cover link target types plus nesting/positioning. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool, the description plus a fully documented schema covers the key decisions: what the item can link to, required parameters, and how to nest or order the item. It does not explain return values or behavior on an invalid menu_id, but those are minor gaps given the absence of an output schema and the completeness of the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented in the input schema. The description adds a useful mental model for object_id/object pairing and calls out parent and menu_order, but it does not provide substantive meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Add an entry to a navigation menu') and clearly identifies the resource being modified. It also distinguishes this from sibling tools like update_menu_item, delete_menu_item, and reorder_menu_items by focusing on creation and listing the supported link target types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: adding a new menu item that can point to a post, term, or URL, with optional nesting and ordering. It does not explicitly name alternatives like update_menu_item or delete_menu_item, but the create-oriented wording and target coverage make the intended usage reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_pageView a wp-admin screen as adminA
Read-only

View any wp-admin screen as the authenticated administrator and get back its structure rather than raw HTML: the page title, its notices (errors, warnings, "Settings saved" messages), the wp-admin links on it, and every form with its fields (name, type, label, current value, options for selects/radios, whether required, and the help text), plus a capped text summary. This is how you read a plugin's settings screen that has no REST route — for example "admin.php?page=wpseo_titles" (Yoast) or "admin.php?page=rank-math-options-titles". The server authenticates the request with a single-use token; no cookie ever reaches the client.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
url_or_pageYesA wp-admin screen: "admin.php?page=wpseo_titles", "options-general.php", or a full wp-admin URL on this site.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description reveals important behavior: it returns a structured summary with capped text, includes only notices/forms/links, and authenticates server-side with a single-use token so no cookie reaches the client. This adds meaningful context about how the tool operates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it explains what the tool returns, gives usage context, and discloses the auth mechanism, all front-loaded with the key distinction from raw HTML. No filler or redundant restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only screen inspection tool with a well-described schema and no output schema, the description provides all necessary context: what fields come back, how to address a screen, why this tool exists, and how auth works. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters fully (100% coverage) and even includes examples for url_or_page. The description reinforces this with concrete URL examples, but adds no new parameter-level meaning beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('View'), names the resource ('wp-admin screen'), and clearly states the output is structured data rather than raw HTML. It gives concrete examples like 'admin.php?page=wpseo_titles', which sets it apart from get_page_html and other sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: to read a plugin's settings screen that has no REST route. It also implies the alternative of raw HTML by contrasting 'structure rather than raw HTML', though it does not name the specific sibling tool (get_page_html) or mention cases where this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_style_variationApply a style variationA
Destructive

Apply one of the active theme's style variations to the site's global styles — what choosing it in Site Editor → Styles does. Without confirm_token it is a dry run showing the JSON-path diff between the current user styles and the result. A full variation replaces the user's global-styles customisations; a colour or typography partial is merged into them. The previous state is kept as a global-styles revision (GET /wp/v2/global-styles/{id}/revisions), which is how to undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDisambiguates a title shared by a full variation and a partial.
modeNoauto: full variations replace the user styles, partials merge into them (Site Editor behaviour). replace: overwrite all user customisations. merge: deep-merge the variation over the current customisations.auto
indexNoVariation index from list_style_variations — an alternative to title.
titleNoVariation title or slug from list_style_variations, e.g. "Evening".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
confirm_tokenNoToken from this tool's dry-run preview. Omit to preview.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Whereas the annotations only signal readOnlyHint=false and destructiveHint=true, the description discloses exactly what is destructive — a full variation 'replaces the user's global-styles customisations' — and reveals the safety valve: state is preserved as a global-styles revision and the endpoint to undo is given. The dry-run/diff behavior without confirm_token is also explicitly spelled out, which is substantial context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The four sentences are front-loaded with the core action and then cover dry-run behavior, mutation semantics, and undo path — each earns its place and the ordering is logical. It is somewhat dense with parenthetical asides, but nothing is wasted or repetitive relative to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutating tool with no output schema, the description covers the full call lifecycle: preview and diff output, commit via confirm_token, replace-vs-merge behavior, and precisely how to undo via revisions. Given the tool's complexity and its destinations, nothing an agent needs to invoke it correctly or safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter is already well documented in the schema (enums, defaults, source from list_style_variations, confirm-token semantics). The description does usefully tie kind and mode to real side effects (full replaces vs partial merges), but that relationship mostly duplicates the schema's auto-mode explanation, so it does not add much beyond the documented baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb plus resource ('apply one of the active theme's style variations to the site's global styles') and grounds it in a familiar UI action ('what choosing it in Site Editor → Styles does'), so an agent immediately understands the purpose. It is also easy to distinguish from siblings like get_global_styles, update_global_styles, diff_global_styles, and list_style_variations because it names the precise action and the input source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear, actionable usage conditions: omit confirm_token for a dry-run preview and include it to commit; it also explains how the tool behaves depending on kind (full replaces, partial merges). It does not explicitly name when-not-to-use alternatives such as update_global_styles or diff_global_styles, but the Site Editor analogy and the dry-run/confirm contract give a strong practical usage frame.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

assign_terms_to_contentAssign terms to contentA

Assign taxonomy terms to any content item. Terms may be given as IDs or as names — names that do not exist are created for you. By default this replaces the item's terms in that taxonomy; pass mode: "add" to keep the existing ones, or "remove" to detach.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreplace: these become the only terms. add: keep existing and add these. remove: detach these.replace
typeNoContent type of that ID.post
termsYesTerm IDs, or names — unknown names are created.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
taxonomyYesTaxonomy to assign within (category, post_tag, or a custom one).
content_idYesThe content item to modify.
create_missingNoCreate terms given by name that do not exist yet.

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals that the default mode 'replaces the item's terms' and that 'remove' detaches terms, both of which are destructive actions. However, the annotations declare destructiveHint: false, which contradicts the described behavior. Per the rubric, a description that contradicts annotations receives a 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the main action, and includes the most important behavioral nuance (default replace) without any filler. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core operation and mode semantics, but with no output schema and 7 parameters, it omits information about return values and potential side effects beyond the annotation conflict. It is adequate but not fully complete for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates what the schema already says about modes and term creation (e.g., 'names that do not exist are created for you') without adding new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Assign taxonomy terms to any content item') with a clear resource and additional detail about modes. It clearly distinguishes from sibling tools like get_content_terms (which retrieves) and create_term (which creates standalone terms).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use different modes (replace, add, remove) and mentions auto-creation of unknown names. It does not explicitly name alternatives like create_term or get_content_terms, but the mode guidance gives strong practical usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_contentAudit content qualityA
Read-only

Sweep a content type and report the problems worth fixing: missing SEO titles and descriptions, missing or duplicate H1s, thin content, missing featured images, missing excerpts, uncategorised posts, and images without alt text. Read-only — it names the issues and the IDs so you can fix them with bulk_update_content or update_content.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoContent type to audit.post
limitNoHow many items to examine.
statusNoWhich status to audit. Published content is usually what matters.publish
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
thin_content_wordsNoWord count below which content is flagged as thin.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces these with 'Read-only' without contradicting them. It adds value beyond annotations by disclosing that the tool reports both the issues and the entity IDs, which is useful behavioral information given there is no output schema. It does not mention potential performance costs of sweeping large content sets, but the schema's limit parameter covers that partially.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states the action and output scope, the second clarifies the read-only nature and the downstream fix path. The checklist of issues is long but each item is specific and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does important work by naming the output shape (issues plus IDs) and linking to corrective tools. It could go further by stating the exact response structure or warning about timeouts on large sweeps, but given the schema covers all inputs and the annotations cover safety, the description is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter—type, limit, status, site_id, thin_content_words—already has a clear, meaningful description. The tool description adds no parameter-specific detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Sweep') with a clear resource ('a content type') and enumerates the exact problem categories reported, so the tool's function is unmistakable. This distinguishes it from siblings like list_content, audit_media, or update_content by focusing on quality auditing rather than listing, media-specific checks, or modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames the tool as a read-only diagnostic step and names the follow-up tools (bulk_update_content or update_content) for fixing the issues it finds, which gives an agent a clear workflow. It does not explicitly contrast with other audit-style siblings like audit_media or check_links, but the problem list is specific enough to imply when it applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_mediaAudit the media libraryA
Read-only

Audit the media library for images missing alt text and for attachments not referenced by any content. Alt text is the highest-value accessibility fix on most sites, and unused media is where disk usage quietly accumulates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many attachments to examine.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
check_unusedNoAlso check which attachments no content references. Slower — it scans content bodies.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the specific behavior: checking for missing alt text and unreferenced attachments, consistent with readOnlyHint=true and destructiveHint=false. It adds detail beyond the annotations by naming the exact findings, though it does not describe the result format or potential performance impact beyond the schema note on check_unused.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste: the first states the action and scope, the second gives the rationale. The core behavior is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the read-only annotations and fully described parameters, the tool is callable as-is. The main gaps are the lack of an output description and no explicit routing against check_accessibility, but these are not blocking for a simple read-only audit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter already has a meaningful description including defaults and trade-offs (e.g., check_unused is slower). The main description adds no parameter semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Audit the media library') and enumerates two concrete checks: images missing alt text and attachments not referenced by any content. This clearly separates it from retrieval siblings like list_media and get_media by its analytic intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical rationale for running the audit (accessibility value and disk usage), but it never names alternatives or states when not to use it. The agent must infer that list_media is for retrieval and that check_accessibility may overlap on the alt-text dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

backup_statusCheck backup statusA
Read-only

Report which backup plugin the site uses (UpdraftPlus, BackWPup, Duplicator, All-in-One WP Migration, Jetpack VaultPress Backup, BlogVault, WPvivid, BackupBuddy) and when the last completed backup was taken, with a warning when there is none or it is stale. Run this before any risky change — updates, theme publishes, search-replace, bulk deletes. Host-level backups are invisible to WordPress and are flagged as unknown. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, non-destructive behavior. The description adds meaningful context beyond the annotations: host-level backups are invisible to WordPress and are flagged as unknown, and the tool 'Needs the companion plugin.' It clearly discloses limitations and prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: the main purpose is front-loaded, followed by usage timing, a host-level caveat, and a dependency note. Every sentence adds value, and the plugin list is compact and relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status tool with one optional parameter and no output schema, the description covers the report scope, warning conditions, operational context, and a known limitation. The only small gap is that 'Needs the companion plugin' is slightly vague, and the exact output shape is not described, but the report semantics are clear enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single optional parameter, site_id, with a clear description. The tool description does not add any additional parameter detail, but the schema already fully explains the parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Report') with a clear resource: the site's backup plugin and last completed backup. It even enumerates the recognized plugins and the warning behavior, making the tool's function unambiguous. It is easily distinguished from all sibling tools, none of which cover backup status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to run the tool: 'Run this before any risky change — updates, theme publishes, search-replace, bulk deletes.' This is strong situational guidance. It doesn't explicitly state when not to use it or name alternative tools, but no backup-status alternative exists among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_contentBulk update contentA

Apply the same change to many items at once — set a status, reassign an author, add a category, or run a find/replace across bodies. Always previews first: the initial call reports exactly which items would change and how, and returns a confirm_token you must echo back to apply it. Nothing is written without that token.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoContent type to operate on.post
limitNoHard ceiling on how many items can be touched in one call.
filterNoWhich items to act on. Without any filter this would match everything, so a limit always applies.
changesNoField changes applied to every matched item.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
confirm_tokenNoToken from the preview. Required to actually write.
content_editsNoFind/replace applied to each item's body. Items where nothing matches are skipped rather than failing the batch.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses a critical two-step behavior: the initial call returns a confirm_token and nothing is written without it. This goes beyond the annotations (readOnlyHint=false, destructiveHint=false) by explaining the actual write gate. It also notes that items with no matches are skipped, which is useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and then the critical preview/confirm requirement. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (7 params, nested objects, no output schema), the description covers the essential flow (preview → confirm token → apply) and mentions skipping non-matching items. It does not describe the return format, but since no output schema exists, the description could have said more; however, the critical usage constraints are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description provides a high-level summary of the change types (status, author, category, find/replace) but does not add specific parameter details beyond what the schema already documents. It adds no new semantic meaning for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: applying the same change to many items at once, and enumerates concrete operations (set status, reassign author, add category, find/replace). It distinguishes itself from single-item tools like update_content by emphasizing 'many items at once'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (bulk vs. single) and explicitly outlines the required preview-confirm flow. However, it does not name alternative tools for single-item edits or state when not to use it, though the context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_accessibilityCheck a page's accessibilityA
Read-only

Fetch a page on the configured site and run deterministic accessibility checks on its server-rendered HTML: html lang, page title, a single h1 and no skipped heading levels, images without alt (alt="" is treated as decorative), links and buttons with no accessible name, generic link text ("read more", "click here"), form controls without labels, duplicate ids, iframes without title, autoplaying media, a viewport that disables zoom, and WCAG contrast of block colour classes (has-{slug}-color / has-{slug}-background-color and inline colours) resolved against the theme palette. Each issue has a WCAG reference, severity, snippet and fix. Works on draft-theme preview URLs from get_preview_url. It does not run JavaScript or compute CSS, so it complements rather than replaces a browser audit.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPath or full same-site URL, e.g. "/about/", or a preview URL from get_preview_url (its query parameters are kept)./
rulesNoOnly run these rules. Omit for all.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_issuesNoCap on issues listed; counts always cover every issue found.
preview_tokenNoToken from get_preview_url, to check a draft theme when passing a plain path.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, and the description adds a substantial amount beyond that: it does not run JavaScript or compute CSS, it is deterministic, and every issue includes a WCAG reference, severity, snippet, and fix. This is especially valuable because there is no output schema to document the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core action and then lists the checks and limitations in one dense paragraph. The exhaustive rule list and issue-format details all earn their place, though the single paragraph could be more scannable with bullets or separation between purpose, checks, output, and limitations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and a complex rule set, the description is complete: it covers what it checks, what each issue contains, what it cannot do, and how it relates to preview URLs and browser audits. An agent has enough context to invoke it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including preview-token and rules semantics. The description does not add parameter-level meaning beyond what the schema provides, but it does not need to; the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch a page on the configured site and run deterministic accessibility checks on its server-rendered HTML.' It enumerates the exact rule set and explicitly positions the tool as a complement to browser audits, so an agent can distinguish it from generic audit or validation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when to use the tool: server-rendered HTML, draft-theme preview URLs from get_preview_url, and situations where a full browser audit is unnecessary or out of scope. It does not, however, explicitly name sibling alternatives or state 'use this instead of X', so it stops short of full when-to-use/when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cleanup_optionsClean up options and transientsA
Destructive

Reduce options-table weight in one of three ways: delete_expired_transients (expired transients and site transients, plus timeout rows whose value is gone), set_autoload_off (stop loading named options on every request — they remain readable on demand), or delete_options (remove named options). Always two steps: the first call is a dry run that returns exactly what would change, the bytes saved, what was refused and a confirm_token; repeat the identical call with that token to apply it. Core WordPress options, wpxmcp's own state and lock-out options (siteurl, active_plugins, user roles, salts…) are refused. Deleting an option a plugin still uses resets that plugin's setting, so check owners in inspect_options first. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNoOption names for set_autoload_off or delete_options, exactly as listed by inspect_options. Ignored for delete_expired_transients.
actionYesdelete_expired_transients, set_autoload_off (needs names) or delete_options (needs names).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
confirm_tokenNoToken from this tool's dry-run preview. Omit it to preview; pass it back with identical action and names to apply.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate destructiveHint=true; the description goes far beyond by disclosing the dry-run preview with confirm_token, the exact return contents (what would change, bytes saved, refusals), the permanent refusal of core WordPress options, and the risk that deleting an option resets a plugin's settings. This is exactly the behavioral context an agent needs to safely invoke a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every sentence carries operational weight. It front-loads the three modes, then the two-step process, then limitations and risks. The only slight deduction is for the density – a reader must parse carefully – but there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates by specifying exactly what the dry run returns (what would change, bytes saved, refused items, confirm_token). It also covers prerequisite dependencies (companion plugin), safety constraints (core options refused), and the downstream risk of plugin settings. For a destructive, multi-mode tool, this is comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3, but the description adds real value: it tells the agent that names must be 'exactly as listed by inspect_options', explains that confirm_token comes from the dry-run preview, and clarifies that names is ignored for delete_expired_transients (matching the schema but reinforcing it). It also defines the three action modes in user-oriented terms beyond the raw enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Reduce options-table weight') and then enumerates the three distinct actions (delete_expired_transients, set_autoload_off, delete_options), each with a brief explanation. This clearly distinguishes the tool from siblings like get_options, set_option, or inspect_options, which deal with reading/writing individual options rather than bulk cleanup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage context: it explains the mandatory two-step dry-run/apply flow, warns to 'check owners in inspect_options first' before deleting, and notes the dependency on the companion plugin. It also declares that core/lock-out options are refused, setting expectations. It doesn't explicitly name alternative tools for the same purpose (e.g., when to use purge_cache instead), which prevents a 5, but the guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_snippetManage code snippetsA

Add PHP, CSS or JavaScript to the site as a managed snippet rather than by editing theme files — so it survives theme updates and can be switched off without touching code. New snippets are always created DISABLED: you activate them in wp-admin after reading the code. PHP snippets are syntax-checked before they are saved, so a parse error is reported rather than fataling the site.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSnippet id, for get/update/delete.
codeNoThe snippet body. For PHP, omit the opening <?php tag.
titleNoSnippet name, for create/update.
actionYesWhat to do.
confirmNoRequired for delete.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
languageNoSnippet language, for create.
locationNoWhere it runs. CSS and JS snippets usually want header or footer.everywhere
descriptionNoWhy this snippet exists — worth writing, since someone will find it later.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds important behavioral details beyond the annotations: new snippets are always created DISABLED and must be activated in wp-admin after reading the code, and PHP snippets are syntax-checked before saving so parse errors are reported rather than fatalling the site. This is critical safety context not present in the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: it states the core value proposition first, then covers the two most important behavioral safety details. No filler or repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-action tool with no output schema, the description thoroughly covers creation behavior and safety. It does not describe list/get/update/delete behavior or return values, but the schema plus the disabled-by-default and syntax-check notes make the tool safely callable for its primary purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already documented in the schema. The description adds context about creation workflow (disabled by default, syntax-checked) but does not add new per-parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: add PHP, CSS, or JavaScript as managed snippets rather than editing theme files. It also names the specific benefit—surviving theme updates and being switchable without touching code—which differentiates it from related theme-file tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: when you want managed snippets instead of editing theme files, with the advantage of surviving updates. It does not enumerate when not to use it or compare it to plugin creation explicitly, but the primary use case is well specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

content_calendarContent calendarA
Read-only

Editorial calendar view: scheduled (future) content grouped by ISO week, publishing cadence per week over the last N weeks, stale drafts not touched in N days, and gaps against a target posts-per-week. Useful for content teams planning what to publish next.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNoContent types to include.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
weeks_backNoHow many past weeks of publishing cadence to report (including the current week).
weeks_aheadNoHow many upcoming weeks to lay out (including the current week).
target_per_weekNoDesired items per week. When set, weeks below it are reported as gaps.
stale_draft_daysNoA draft or pending item not modified for this many days is reported as stale.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it is safe. The description adds valuable behavioral context: it reports grouped-by-week data, past cadence, stale drafts, and gaps. This goes beyond the annotations and clarifies the analytical nature of the tool without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and then the reporting dimensions. No redundant phrases or filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only view tool with no output schema, it sufficiently describes the major output categories (scheduled, cadence, stale, gaps). It does not specify the exact data structure or how results are presented (e.g., per-week breakdown vs totals), but given the tool's nature and the lack of output schema, it is reasonably complete. Slightly more detail on return format would push it to 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters have individual descriptions. The description adds meaning by explaining how the parameters relate to the output (e.g., 'gaps against a target posts-per-week' ties to target_per_week, 'stale drafts not touched in N days' ties to stale_draft_days). It integrates the parameters into a coherent narrative, adding value over the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('grouped by ISO week'), resource ('content calendar'), and scope ('scheduled future content', 'publishing cadence', 'stale drafts', 'gaps'). Clearly distinguishable from individual content tools like list_content or get_content, as it is an aggregate view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear context: 'Useful for content teams planning what to publish next.' This implies it is for high-level planning rather than individual item operations, but it does not explicitly name alternative tools or state when NOT to use it. The context is present but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

content_inventoryContent inventoryA
Read-only

Export a content inventory — one row per item with id, type, status, URL, title, word count, published and modified dates, author name, term names, whether it has a featured image, and the SEO title/description when Yoast exposes them. JSON or CSV, with field selection and cursor pagination, for content audits, migrations and spreadsheets.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNoContent types to include, in order.
cursorNonext_cursor from the previous call, to fetch the next rows.
fieldsNoColumns to include, in order. Omit for all. Leaving out words, terms and author makes each page cheaper to build.
formatNojson rows, or a CSV document with a header row.json
statusNoStatus filter: publish, draft, pending, private, future, or "any".publish
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoRows per call.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, non-destructive behavior, so the description correctly adds value by disclosing output shape ('one row per item' with a detailed field list), format options (JSON/CSV), field selection, and cursor pagination. It also notes the conditional Yoast SEO field exposure. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action ('Export a content inventory'), and every clause earns its place. It packs the output contract, formats, pagination, and use cases without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only export tool with 7 fully documented optional parameters and no output schema, the description covers the essential behavioral context: row contents, formats, pagination, and purpose. It does not detail edge cases like empty results or cursor chaining, but those are already addressed by the schema, and the description is sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents each parameter (types, cursor, fields, format, status, site_id, per_page) with meaningful detail. The description adds a high-level summary (e.g., 'field selection and cursor pagination') but no additional parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Export') and resource ('content inventory'), enumerates the exact fields included in each row, and names the output formats (JSON/CSV). It also distinguishes this tool from sibling content tools by conveying a bulk-export/audit purpose, unlike list_content or get_content which have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: 'for content audits, migrations and spreadsheets' implies when an agent would reach for this tool — when a comprehensive, exportable snapshot is needed. It does not explicitly name alternatives or state when not to use it, but the use-case framing provides strong implied guidance without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_classic_themeScaffold a classic themeA

Scaffold a complete classic PHP theme styled with Tailwind, as a draft. Classic templates with utility classes are far more reliable to generate and to review than nested block markup — the output is readable, diffable and predictable. The scaffold includes style.css, functions.php, header/footer, index, single, page, archive, 404, search, comments, a theme.css holding the design tokens (colors, fonts, radii) that every template reuses, and a Tailwind CDN setup wired to those tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTheme display name, e.g. "Northwind".
slugNoTheme directory name. Derived from the name if omitted.
authorNoAuthor name written into the style.css header.wpxmcp
tokensNoDesign tokens written into theme.css as CSS custom properties and reused across every template.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
as_draftNoCreate it as an editable draft rather than a directly installed theme. Keep true.
descriptionNoTheme description for style.css.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the generic annotations (readOnly=false, destructive=false), the description discloses that the theme is created as a draft and enumerates the exact files generated, including style.css, functions.php, templates, theme.css, and Tailwind CDN setup. It does not mention return values or post-creation publication steps, but the safety profile is already covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and well-structured: a one-sentence summary, a brief rationale, then a concrete list of generated files. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool creates and the draft nature, but with no output schema it does not explain what the tool returns or how to follow up (e.g., publishing or activating the draft). The rich input schema compensates for invocation clarity, but the missing return/post-condition information leaves a gap for chaining operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and every parameter including the nested token object has individual descriptions. The tool description itself only adds the context that tokens are written into theme.css as CSS custom properties, which is useful but not necessary for understanding the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Scaffold a complete classic PHP theme styled with Tailwind, as a draft.' It clearly differentiates this from block-based theme creation by emphasizing classic templates with utility classes versus nested block markup, which is useful against siblings like create_draft_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to choose classic templates over block markup, calling the output 'readable, diffable and predictable.' It does not explicitly name alternative sibling tools such as create_draft_theme or state when not to use this tool, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_commentCreate a commentA

Post a comment on a content item, optionally as a threaded reply. Set status to "approve" to publish it immediately (requires moderation capability); otherwise it enters the normal moderation queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoISO 8601 date to backdate the comment.
postYesContent ID to comment on. Its comment_status must be "open".
authorNoPost as this registered user ID.
parentNoComment ID this replies to, for threading.
statusNoModeration status. Requires moderate_comments to set.
contentYesThe comment body. Basic HTML is allowed; WordPress sanitises it.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
author_urlNoCommenter website URL.
author_nameNoDisplay name, when not commenting as a logged-in user.
author_emailNoEmail, when not commenting as a logged-in user.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate non-read-only and non-destructive; the description adds the moderation workflow (approve vs queue) and the permission requirement for approve. This goes beyond what annotations and schema already say, providing useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action and threading option, then the moderation nuance. No redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with a well-documented schema, the description captures the essential purpose and the critical moderation behavior. It omits some prerequisites (comment_status must be open) but those are in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters at 100%, so description adds limited extra meaning. It clarifies the effect of the status parameter ('approve' publishes immediately) which is a slight addition to the schema's description, but not substantial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'Post a comment on a content item' with a specific verb and resource, plus the optional threading nuance. Clearly distinguishes from sibling tools like update_comment, delete_comment, and moderate_comments by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly indicates usage for creating comments, but does not explicitly mention when to use it vs alternatives like update_comment or moderate_comments. The moderation queue mention hints at post-creation behavior but not explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_contentCreate contentA

Create a post, page, or any custom post type. Content is created as a DRAFT unless you explicitly pass status: "publish" — this server never publishes to a live site implicitly. Schedule by passing status: "future" with a future date. Taxonomy terms can be given by name and are created if missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoPublish date in site time, ISO 8601 (2026-01-31T09:00:00). With status "future" (or "publish" and a future date) this schedules the post.
metaNoCustom fields, as key/value pairs. A key only writes if it is registered with show_in_rest — use set_content_meta for unregistered keys.
slugNoURL slug. Changing this on published content breaks existing links unless you add a redirect.
typeNoContent type to create.post
termsNoTaxonomy assignments keyed by taxonomy slug or REST base, e.g. {"categories": [3], "tags": ["news"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created.
titleNoThe title, as plain text.
authorNoUser ID of the author.
formatNoPost format. Only applies to types that support post formats.
parentNoParent ID, for hierarchical types such as pages. 0 for none.
statusNopublish | future | draft | pending | private | trash. "future" needs a `date` in the future. "trash" moves the item to the trash (same as delete_content without force).
stickyNoPin the post to the top of the blog. Posts only.
contentNoFull content body, replacing whatever is there. For the block editor this is block markup (<!-- wp:paragraph --><p>…</p><!-- /wp:paragraph -->); classic content is plain HTML. Use `edits` instead for a small change.
excerptNoHand-written excerpt.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
passwordNoPassword-protect the content. Empty string removes the password.
templateNoPage template file, e.g. "templates/full-width.php". Empty string for the default template.
menu_orderNoSort order for hierarchical types.
ping_statusNoWhether pingbacks and trackbacks are accepted.
comment_statusNoWhether comments are open on this item.
featured_mediaNoAttachment ID of the featured image, or 0 to remove it. Upload it with create_media first.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses critical behavior beyond annotations: content defaults to DRAFT, this server never publishes implicitly, scheduling requires status 'future' with a future date, and taxonomy terms are created if missing. These safety-relevant details are not visible in annotations and add real value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with purpose and immediately followed by the most important behavioral guardrails. No filler or redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter tool, the schema already provides exhaustive parameter descriptions, so the description only needs to carry the behavioral and safety context. It covers the default draft state, publishing guardrail, scheduling requirement, and taxonomy auto-creation, which is enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by specifying the default status behavior (DRAFT unless 'publish' is explicit) and by clarifying how taxonomy terms behave when missing. Most parameter details are already in the schema, but the added defaults are valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: create a post, page, or custom post type. It clearly distinguishes itself from sibling tools like update_content, delete_content, create_comment, and create_media by stating exactly what kind of entity it creates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the core use case obvious: create new content. It does not explicitly list when-not-to-use or name alternatives, but the context is clear enough for an agent to select this tool over update/delete or media/comment creation. It could be stronger with an explicit pointer to update_content for edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_draft_themeCreate a draft themeA

Clone an installed theme into an isolated draft copy that you can edit freely without touching the live site. Every theme edit should go through a draft: write files, preview them on a private tokenised URL, then publish_draft_theme when you are happy (which backs up the previous theme first). Omit from_theme to clone the currently active theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
draft_nameNoHuman-readable name for the draft. Defaults to "<theme> (draft)".
from_themeNoStylesheet to clone. Defaults to the active theme.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds the key behavioral detail that the draft is isolated and doesn't touch the live site, and that publishing backs up the previous theme. This context is valuable beyond the annotations and helps the agent understand the safety of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place. It is front-loaded with the core purpose, then explains the workflow, and ends with a critical parameter nuance. No fluff, highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 params, none required) and the rich annotations, the description fully covers what an agent needs to call it correctly. It explains the purpose, the isolation, the workflow steps, and the default behavior for the optional parameter. No output schema is needed as the tool's return value is likely a draft identifier or status, not critical for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all parameters. The description adds semantics: it names the key parameter `from_theme` and explains that omitting it clones the active theme. This goes beyond the schema's 'Stylesheet to clone. Defaults to the active theme.' by clarifying the default behavior in context. The description also contextualizes the workflow around these parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Clone) and resource (installed theme into an isolated draft copy), and differentiates from siblings like publish_draft_theme and list_draft_themes. It explicitly positions this tool within the draft workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Every theme edit should go through a draft', and provides a clear workflow: write files, preview, then publish. It also mentions the alternative publish_draft_theme with the backup behavior. This is excellent guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_mediaUpload mediaA

Upload a file into the media library from any of three sources: file_path (a path on the machine running this MCP server — this is how you upload a local screenshot), url (downloaded here, then uploaded), or base64_data. WordPress runs its normal image pipeline, generating the registered thumbnail sizes. Always set alt_text for images — it is required for accessibility and read by search engines.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic http(s) URL to download and re-upload into the library. Private, loopback and local-network addresses are refused (except the WordPress site's own host).
postNoAttach the upload to this content ID.
titleNoMedia title. Defaults to the filename.
captionNoCaption shown beneath the image.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
alt_textNoAlternative text. Set this for every image.
filenameNoFilename to store as. Defaults to the source filename; required for base64_data.
file_pathNoAbsolute or ~-relative path on the machine running this MCP server. For a Mac screenshot that is typically "~/Desktop/Screenshot 2026-08-23 at 2.29.04 PM.png". Not a path on the WordPress host.
attributionNoCredit line for a stock photo; appended to the description.
base64_dataNoRaw base64 file contents (a data: URI prefix is accepted and stripped). Requires `filename`.
descriptionNoLonger description, shown on the attachment page.
featured_for_typeNoContent type of set_as_featured_for.post
set_as_featured_forNoAfter uploading, set this attachment as the featured image of this content ID.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, so the description rightly implies mutation. It goes beyond annotations by disclosing that WordPress runs its image pipeline and generates thumbnail sizes, and that the tool downloads URLs before uploading. The description also states the requirement for alt_text, which is a behavioral expectation beyond the schema. Given the annotations are minimal (just non-read-only), the description adds good behavioral context, though it could mention response or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact two-sentence block that front-loads the core purpose and sources, then adds the alt_text guideline. The only minor inefficiency is a bit of parenthetical detail that could be trimmed, but overall it's appropriately sized for a complex multi-source tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 13 parameters all documented in the schema Michel, the description effectively focuses on the non-obvious aspects: source selection, local vs. remote paths, and the alt_text requirement. It compensates for the lack of an output schema by clarifying the upload process (download then upload, thumbnail generation). The description is complete for an agent to decide when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per guidelines baseline is 3. The description adds value by explaining how file_path relates to the local machine, and that base64_data requires filename. It also explains the relationship between sources (mutually exclusive) and that alt_text is required for accessibility. This exceeds baseline by adding clarifications that are not in the schema, hence 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Upload' and the resource 'media library', and enumerates three distinct sources with precise names (file_path, url, base64_data). It distinguishes this from sibling tools like update_media/edit_media by focusing on creation, and even explains the meaning of file_path in the context of the local machine, which is a common source of confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains the three input sources and when to use each: file_path for local screenshots, url for remote downloads, and base64_data for raw data. It also adds a critical guideline: 'Always set alt_text for images' with rationale, which is actionable usage guidance not present in the schema. The description implicitly covers exclusions like local-network URLs being refused, guiding the agent away from invalid input.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_menuCreate a navigation menuA

Create an empty navigation menu, optionally assigning it to one or more theme locations. Add entries afterwards with add_menu_item.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesMenu name shown in wp-admin.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
auto_addNoAutomatically add new top-level pages to this menu.
locationsNoTheme location slugs to assign it to, e.g. ["primary"]. See list_menus for what the theme registers.
descriptionNoLonger descriptive text.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds behavioral nuance by specifying that the menu is created 'empty' and that it does not add entries itself—this is beyond what the annotations convey. It also mentions the optional assignment to theme locations. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action ('Create an empty navigation menu') and then adds the optional detail and the follow-up workflow. Every clause earns its place; there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with 5 parameters (1 required), no output schema, and no nested objects, the description is nearly complete. It covers the purpose, the optional locations behavior, and the next step. It lacks explicit notes about error handling or failure modes, but those are not typically required for a creation operation. The only minor gap is not mentioning that updating an existing menu is handled by a different tool, but that is not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description adds minimal extra meaning—it mentions the optional locations assignment and that entries are added later, which indirectly clarifies that there is no items parameter. However, it does not add significant cross-parameter semantics beyond what the schema provides, so it stays at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('create') and resource ('empty navigation menu'), and explicitly notes that it optionally assigns theme locations. It distinguishes itself from add_menu_item by clarifying that entries are added afterwards, so an agent can tell it apart from the sibling tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: it is for creating a new menu, and it points to the natural next step ('Add entries afterwards with add_menu_item'). It does not explicitly name alternatives like update_menu or delete_menu, but the workflow implication is sufficient for an agent to know when to use this tool. It could be more explicit about when not to use it, but it is not misleading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pluginCreate a plugin (alias of install)A

Install a plugin from the WordPress.org repository. This is the REST API's own naming for the install operation — install_plugin is the clearer name for the same thing.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWordPress.org plugin slug.
statusNoStatus to leave the plugin in after installing: "active" activates it immediately.inactive
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only and non-destructive, and the description adds the key behavior of downloading/installing from WordPress.org. It does not disclose side effects like filesystem changes, network requirements, or non-idempotence, but it does not contradict annotations either. This is adequate but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, both purposeful: the first states the operation and source, the second preempts naming confusion with install_plugin. No filler or redundant schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with full schema coverage and no output schema, the description plus schema is sufficient to call the tool correctly. It clearly identifies the operation and source, and the schema handles parameter details. It could mention expected return values, but that is not essential for invoking the install.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so slug, status, and site_id are fully documented in the input schema. The description itself adds no parameter-level detail beyond stating the operation, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Install'), a resource ('plugin'), and a source ('WordPress.org repository'), and immediately clarifies that it is the same operation as install_plugin. This makes the tool's function unmistakable and distinguishes it from plugin deletion, activation, or searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to install plugins from WordPress.org, and notes that install_plugin is the clearer equivalent name. It does not explicitly state when not to use it or contrast it with alternatives like activate_plugin or delete_plugin, but the alias explanation prevents confusion with the similarly named install_plugin sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_termCreate a termA

Create a term in any taxonomy. If a term with the same name already exists, WordPress rejects it — search with list_terms first when you might be duplicating.

ParametersJSON Schema
NameRequiredDescriptionDefault
metaNoTerm meta, for keys registered with show_in_rest.
nameYesDisplay name of the term.
slugNoURL slug. Derived from the name if omitted.
parentNoParent term ID. Hierarchical taxonomies only — passing this on a flat taxonomy such as tags is an error.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
taxonomyNoTaxonomy to create the term in.category
descriptionNoLonger descriptive text.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-read-only, non-idempotent, non-destructive operation. The description adds valuable behavioral context: it warns that WordPress rejects duplicates, which is a key behavior. It also implicitly notes that list_terms is a safer alternative for reading. This goes beyond annotations to inform the agent of a non-obvious behavior (rejection on duplicate) that affects decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the core purpose, and the second provides critical pre-call guidance. It is front-loaded with the primary verb and resource, then adds a caution. It is concise with no fluff, but could be slightly more structured (e.g., separate 'When to use' from 'What it does'), but the current structure is efficient and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (7 params, 1 required), the schema covers all parameters, and the description adds the critical duplicate-rejection context. The annotations cover read/write characteristics. The description is sufficient for an agent to call the tool correctly, including the need to pre-check for duplicates. It is complete for the intended use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for parameters, so the schema already documents each parameter. However, the description adds important semantic context for the 'name' parameter by highlighting the uniqueness constraint, which affects how the 'name' parameter should be chosen. It also mentions the 'parent' parameter's restriction to hierarchical taxonomies (in the schema) but the description reinforces the overall creation context. The description goes beyond schema by explaining the duplicate-rejection behavior that depends on the 'name' value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a term') and the resource ('in any taxonomy'), with an explicit caveat about duplicate names. It distinguishes itself from sibling tools by naming the alternative (list_terms) and the condition for using it, which helps an agent identify when to use create_term versus searching first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('search with list_terms first when you might be duplicating') and implies the alternative tool (list_terms). This gives clear usage guidance, including a caution about potential rejection. This is a strong example of when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_userCreate a userA

Create a WordPress user. Requires an Administrator account. Choose the role deliberately — "administrator" grants full control of the site including plugin and theme installation.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoWebsite URL.
metaNoCustom fields as key/value pairs, for keys registered with show_in_rest.
nameNoDisplay name.
emailYesEmail address. Must be unique on the site.
rolesNoRole slugs, e.g. ["editor"]. Defaults to the site's default role (usually subscriber).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
passwordYesInitial password. Use a long random value and share it out of band.
usernameYesLogin name. Cannot be changed later.
last_nameNoFamily name.
first_nameNoGiven name.
descriptionNoAuthor bio.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the annotations: it discloses permission requirements and warns that the 'administrator' role grants full site control including plugin and theme installation. Annotations already establish non-readonly and non-idempotent behavior, so the extra role-security warning is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core purpose is front-loaded, followed immediately by the most important prerequisite and safety warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with 11 parameters and no output schema, the description covers the key prerequisite and security implications. The remaining parameter details are fully present in the schema, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful meaning to the roles parameter by explaining the risk of 'administrator' and advising deliberate selection, which is not in the schema's generic role-slug description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Create a WordPress user' with a specific verb and resource. It clearly differentiates from sibling tools like update_user, delete_user, and list_users.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear prerequisite ('Requires an Administrator account') and vital selection guidance for the roles parameter. It does not explicitly name alternatives or when-not-to-use, but the context is strong enough for an agent to know when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_widgetAdd a widgetA

Add a widget to a sidebar. id_base names the widget type (block, text, nav_menu, search, categories, recent-posts…). For the modern "block" widget, put block markup in instance.content — that is how the block-based widget editor stores everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_baseYesWidget type: "block" for a block widget, or a classic type such as "text", "nav_menu", "search", "categories", "recent-posts".
sidebarYesTarget sidebar id, e.g. "sidebar-1". See list_sidebars.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
instanceNoWidget settings. For id_base "block", use {"content": "<!-- wp:paragraph --><p>Hi</p><!-- /wp:paragraph -->"}. For "nav_menu", {"title": "Menu", "nav_menu": 12}.
positionNoIndex within the sidebar. Appended if omitted.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutation profile is known. The description adds genuinely useful behavioral context about how block widgets store markup in instance.content, which is beyond the schema. It does not disclose side effects, auth needs, or error behavior, but the annotation coverage lowers the bar and the added block-widget note earns some credit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core action is front-loaded, and the second sentence adds the one non-obvious detail (block widget storage) that an agent needs to invoke the tool correctly. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five parameters, a nested instance object, and no output schema, the description covers the trickiest part — how block widgets store content — while the schema covers parameter formats and references list_sidebars and list_sites. It does not mention return values or failure modes, but annotations and schema carry enough of the safety and parameter burden to make the description reasonably complete for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters thoroughly, including the block widget instance.content example. The description reinforces the id_base options and block-widget content requirement, but adds little meaning that is not already in the schema. This matches the baseline 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Add a widget to a sidebar.' It clearly distinguishes this create operation from sibling update_widget and delete_widget, and it adds useful type context via id_base examples. An agent can immediately tell what the tool does and that it creates, not modifies or removes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb 'Add' — use this when creating a new widget. However, the description does not explicitly state when to prefer this over update_widget or delete_widget, nor does it mention any prerequisites or exclusions. It relies on the reader inferring the create-vs-update distinction from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deactivate_pluginDeactivate a pluginA

Deactivate an active plugin. Its features stop working immediately; settings and data are normally retained.

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin identifier, e.g. "akismet/akismet".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, which already tell the agent this is a mutating but non-destructive action. The description adds useful context: features cease immediately, settings/data are 'normally' retained, and it acknowledges possible exceptions with the word 'normally'. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action, the target, and the key behavioral outcome with no filler. Every clause earns its place, and the caveat 'normally retained' is valuable precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With fully documented parameters and a clear statement of immediate and long-term effects, an agent has enough to invoke the tool correctly. Minor omissions such as reversibility or permission requirements are acceptable given the annotations and simple two-parameter schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, thoroughly documenting the plugin identifier with an example and the site_id behavior including the default-site logic. The description itself adds no parameter-specific detail, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Deactivate' with the resource 'active plugin', which clearly states the operation. It also names the immediate effect (features stop working) and the non-destructive consequence (settings/data retained), distinguishing it from delete_plugin and activate_plugin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'active plugin' implies the precondition that the plugin must be active, and the retained-data note hints at a non-destructive alternative to deletion. However, it does not explicitly name alternatives or provide clear when-not-to-use guidance, leaving usage largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_commentDelete a commentA
Destructive

Delete a comment. It goes to the trash by default and is recoverable; force: true removes it permanently and requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe comment ID.
forceNoDelete permanently rather than trashing. Requires confirm: true.
confirmNoRequired for permanent deletion.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds crucial nuance: deletion goes to trash by default and is recoverable, while force: true makes it permanent and requires confirm: true. This gives the agent the exact behavioral profile needed before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action is stated first, and the critical trash-vs-permanent caveat is placed immediately after.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool, the description covers the main safety distinction and the confirm requirement, while the schema handles parameter details. It does not describe return values, but no output schema exists and this is a standard deletion operation, so the gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description restates the force/confirm relationship but adds no new meaning about id or site_id beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the specific verb 'Delete' and resource 'a comment', leaving no ambiguity about the target. It is easily distinguishable from sibling tools like get_comment, update_comment, and moderate_comments because those name different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as moderate_comments or update_comment. The intended usage is only implied by the resource name, not explicitly explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_contentDelete contentA
Destructive

Delete content of any type. By default it goes to the trash and stays recoverable from wp-admin. Permanent deletion requires force: true AND confirm: true, and cannot be undone — the row is removed from the database along with its meta.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe content ID to delete.
typeNoContent type of that ID.post
forceNoSkip the trash and delete permanently. Requires confirm: true.
confirmNoExplicit acknowledgement, required only for permanent deletion.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses that content goes to trash and stays recoverable from wp-admin by default, that permanence requires force AND confirm together, and exactly what is destroyed ('the row is removed from the database along with its meta'). Fully consistent with destructiveHint: true and readOnlyHint: false — no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, purpose front-loaded in the first, with each sentence carrying distinct information: scope, default trash behavior, and the permanent-deletion path. No filler or repetition of schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Strong coverage for a 5-parameter tool: purpose, safety default, permanence requirement, and destruction scope are all disclosed. Minor gaps: no indication of what the response reports (trashed vs permanently deleted) given there is no output schema, and 'any type' leaves some ambiguity against the type-specific delete siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by synthesizing the force/confirm interaction and spelling out the consequence of setting force: true (irreversible row + meta deletion), enriching what the bare parameter docs convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete content of any type') in the first sentence. The 'any type' phrasing differentiates it from the type-specific delete siblings (delete_media, delete_comment, delete_term, delete_plugin), and the trash-versus-permanent detail further clarifies what the operation does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'any type' and the permanent-deletion gate, but never explicitly says when to use this tool over siblings like delete_media, delete_comment, or delete_term, nor states any exclusions. An agent must infer that this is the generic content-delete tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_draft_themeDelete a draft themeA
Destructive

Discard a draft theme and its files. The live site is unaffected — this only removes the sandbox copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeYesDraft theme id to discard.
confirmNoRequired — draft files are removed permanently.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate destructive intent, and the description adds exactly what is destroyed ('a draft theme and its files') and what is not ('the live site'). The sandbox-vs-live distinction is meaningful behavioral context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action and scope are front-loaded, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with complete schema coverage and no output schema, the description plus schema fully explains what is removed, what is preserved, and what confirmation is required. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no parameter-level details beyond 'and its files', but that is acceptable given the high baseline coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Discard') and a specific resource ('a draft theme and its files'), then clarifies scope by stating the live site is unaffected. This clearly distinguishes it from file-level tools like delete_theme_file and from publish_draft_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this tool is for discarding an unpublished sandbox theme, which gives an agent solid context for when to use it. It does not name alternative tools explicitly or provide exclusions, but the draft/sandbox framing is enough to route selection correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_field_groupDelete a field groupA
Destructive

Remove a registered field group. The stored values are left in place, so the data is not lost and the group can be re-registered to expose it again.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoRequired.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
group_keyYesThe group key to remove.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as destructive, and the description usefully narrows what is destroyed: only the registration, not the underlying stored values. It also adds that re-registration is possible. It does not mention the confirm gating behavior hinted at by the schema, but the description still adds meaningful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core action is front-loaded, and the second sentence efficiently conveys the non-destructive outcome and the recovery option.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the annotations plus schema cover safety and parameter meaning. The description does not clarify the confirm parameter, which is marked 'Required.' with default false but is not in the schema's required list; this ambiguity could lead an agent to call the tool without the confirmation needed to actually delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the structured schema already documents group_key, site_id, and confirm. The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Remove a registered field group.' It also clarifies that the action targets the registration rather than the data itself, which distinguishes it from related field-group operations such as register_fields and list_field_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool when you want to unregister a field group without losing its stored values, and the group can be re-registered to restore it. It implies the recovery path but does not explicitly name the alternative tool or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_mediaDelete a media itemA
Destructive

Delete a media item. Attachments bypass the trash by default in WordPress, so deletion removes the file from disk permanently and requires confirm: true. Any content still referencing the file will show a broken image.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe attachment ID.
confirmNoRequired — the file is removed from disk and cannot be recovered.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint true and readOnlyHint false, but the description adds crucial non-obvious consequences: attachments bypass the trash, files are permanently removed from disk, and references break. This goes beyond the structured metadata and directly prevents an agent from treating this as a reversible delete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, irreversible behavior/requirement, and side-effect warning. No filler, and the most safety-critical statement is front-loaded after the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a delete operation, the description covers what is deleted, what the caller must provide, what happens to the file, and downstream consequences. Combined with full schema parameter docs and destructive annotations, nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with confirm already documented as required and irreversible, id as attachment ID, and site_id with usage details. The description repeats the confirm requirement, which reinforces it, but does not add meaning beyond the schema for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening phrase 'Delete a media item' states a specific verb and resource, and the WordPress attachment detail makes the target unambiguous among delete_* siblings. Even without naming alternatives, an agent cannot confuse this with delete_content, delete_plugin, or delete_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs callers to set confirm: true and warns why, which is a concrete usage rule. It does not name alternatives or exclusions, but the media-specific scope makes the appropriate context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_menuDelete a navigation menuA
Destructive

Delete a navigation menu and all of its items. Any theme location it filled falls back to the theme's default output. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe menu ID to delete.
confirmNoRequired — menus and their items cannot be recovered.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructiveHint, but the description adds behavior beyond them: it cascades to all menu items and explains the theme-location fallback. This gives the agent a concrete picture of side effects that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct value: what is deleted, what side effect occurs, and what confirmation is required. No filler, and the core operation is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with 3 parameters and no output schema, the description covers the key operational facts: cascade deletion, theme fallback, and confirm requirement. It does not explain return behavior, but that is a minor gap for such a straightforward operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, confirm, and site_id. The description restates the confirm requirement but adds no new semantic meaning beyond the schema, keeping this at the baseline for fully covered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a navigation menu') and clarifies the cascade ('and all of its items'), distinguishing it from sibling delete_menu_item. The resource is unambiguous and the sentence is action-focused.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys the key usage requirement ('Requires confirm: true') and implies it is for whole-menu deletion, but it never explicitly says when to prefer this over alternatives like update_menu or delete_menu_item. No exclusions or alternative-routing guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_menu_itemDelete a menu itemA
Destructive

Remove one item from a navigation menu. Its children are re-parented to the top level rather than deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe menu item ID.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which already mark the tool destructive and non-idempotent, the description reveals a crucial side effect: children are re-parented to the top level instead of being deleted. This is exactly the kind of non-obvious behavior an agent needs to know before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The primary action is stated first, and the important behavioral caveat follows immediately. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive tool with annotations covering the safety profile, the description is complete. It covers the action, the target, and the most important side effect; the optional site_id is fully explained in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both id and site_id already documented. The tool description adds no parameter-specific meaning, but it does not need to since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove'), a specific resource ('one item from a navigation menu'), and immediately clarifies the key distinction from deleting the entire menu. The child re-parenting detail also makes the tool's scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you want to remove a single menu item rather than the whole menu. It does not explicitly name alternatives like delete_menu, but the 'one item' phrasing establishes the intended use without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_pluginDelete a pluginA
Destructive

Delete an installed plugin from the server. The plugin must be inactive first. Files are removed permanently; many plugins also drop their database tables on uninstall. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin identifier, e.g. "hello-dolly/hello".
confirmNoRequired — plugin files are permanently removed.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as destructive, but the description adds valuable specifics: files are removed permanently, many plugins also drop database tables, and confirm: true is required. This goes well beyond the annotation surface and gives the agent a realistic understanding of consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the action first, then the prerequisite, then the irreversible consequences, then the required flag. Every sentence earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete operation with no output schema, the description is fully adequate. It covers what gets deleted, prerequisites, irreversible effects, and the required confirmation flag. The annotations supply idempotency and destructive hints, and the schema covers parameter details, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful emphasis on the confirm parameter ('Requires confirm: true'), which is critical for invoking this destructive operation correctly. It also clarifies the plugin must be inactive, reinforcing the prerequisite tied to the plugin parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Delete an installed plugin') and clearly differentiates this from sibling tools like activate_plugin, deactivate_plugin, and install_plugin. The scope is unambiguous and immediately tells the agent what operation this tool performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the key prerequisite: 'The plugin must be inactive first.' This gives strong contextual guidance for when this tool is appropriate and implies that deactivation should happen before deletion. However, it does not explicitly name alternative tools like deactivate_plugin for cases where deletion is not intended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_skillDelete a saved playbookB

Delete one of your saved playbooks. Bundled playbooks cannot be deleted, but a saved skill of the same name will override one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the saved skill to delete.

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says 'Delete one of your saved playbooks', a destructive action, but the annotations set destructiveHint=false. This is an annotation contradiction, and per the rubric the score must be 1 even though the bundled/override nuance is useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the core action front-loaded, followed by a useful caveat. The second sentence is slightly awkward but earns its place by explaining the override behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter delete tool with full schema coverage, the essentials are present. However, with no output schema and minimal annotations, the description does not disclose whether deletion is permanent, what happens if the name does not exist, or what the response will be.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains the name parameter. The description reinforces 'saved' vs 'bundled' but does not add meaningful parameter syntax, values, or edge-case behavior beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Delete') and a specific resource ('one of your saved playbooks'), and adds a distinguishing constraint: bundled playbooks cannot be deleted, only saved ones. This clearly separates it from generic delete tools among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a partial when-not: bundled playbooks cannot be deleted. It does not name an alternative tool or specify when an agent should prefer this tool over another delete or skill-management tool, so routing guidance is mostly implied by the name and title.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_termDelete a termA
Destructive

Delete a term from any taxonomy. Terms have no trash — deletion is immediate and permanent, so this reports what will be affected and requires confirm: true. Content assigned to the term is not deleted; it simply loses the assignment (posts losing their only category fall back to the default category).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe term ID to delete.
confirmNoRequired — term deletion cannot be undone.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
taxonomyNoTaxonomy slug or REST base (category, post_tag/tags, or a custom one).category

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond destructiveHint=true by disclosing that terms have no trash, deletion is immediate and permanent, the tool reports what will be affected and requires confirm:true, and that content assignments are orphaned rather than deleted, with fallback to the default category. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, starting with purpose, then the critical safety warning about permanent deletion, and finally the content side-effect. Every sentence adds meaningful information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, side-effects on content, and the confirmation requirement—sufficient for safe invocation. Does not describe the response shape beyond 'reports what will be affected,' but with no output schema that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all four parameters with descriptions, so the description adds little parameter-level detail. It reinforces that confirm:true is required and explains the reason, which provides some context beyond the schema's 'required' label, but no additional format or valid-value guidance is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action, object, and scope: 'Delete a term from any taxonomy.' Differentiates from sibling delete_* tools (delete_content, delete_media) by specifying the resource type, and from update_term by stating deletion rather than modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes the finality of the operation and that confirm is required, but does not explicitly identify alternatives or conditions for choosing this tool over siblings. The context makes the use case clear, yet no when-not guidance or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_theme_fileDelete a theme fileA
Destructive

Delete a file from a theme draft. Refuses to touch a live active theme unless explicitly allowed. Deleting a required template (index.php, style.css) breaks the theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to the theme root.
themeNoTheme stylesheet or draft id.
confirmNoRequired — the file is removed from the server.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
allow_live_themeNoPermit acting on the live active theme. Use a draft instead.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds valuable behavioral detail: it refuses to operate on live active themes without explicit permission, and it warns that deleting required templates like index.php or style.css breaks the theme. This helps an agent anticipate important consequences before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler: the first states the operation, the second states the safety guardrail, and the third states the key risk. All information is front-loaded and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the core action, the safety constraint, and the most important risk. While it doesn't describe response behavior or explicitly say 'permanent,' the destructiveHint annotation, high schema coverage, and confirm parameter description make the tool well-specified overall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema. The description does not add parameter-specific semantics beyond broad behavioral context, so the baseline of 3 is appropriate because the schema carries the weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Delete'), a specific resource ('a file from a theme draft'), and distinguishes itself from live-theme operations by noting that live active themes are refused unless explicitly allowed. This clearly separates it from sibling tools like read_theme_file, write_theme_file, and edit_theme_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use it on draft themes, and it will not touch a live active theme unless allow_live_theme is explicitly set. It does not explicitly name sibling alternatives, but the draft-vs-live guidance is sufficient for an agent to select this tool over related theme-file tools in most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_userDelete a userA
Destructive

Delete a user. WordPress has no trash for users, so this is permanent and requires confirm: true. You must say what happens to their content: reassign it to another user (strongly preferred) or let it be deleted with them.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe user ID to delete.
confirmNoRequired — user deletion cannot be undone.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
reassign_toNoUser ID to inherit this user's posts. Omit only if you truly want their content deleted too.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint: true, but the description adds meaningful context beyond that: deletion is permanent because there is no trash, confirm must be true, and content must be either reassigned or deleted. This gives the agent important behavioral expectations beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler, and the most important information—permanence and mandatory confirm—is front-loaded. Every sentence contributes directly to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 4-parameter tool with no output schema, the description covers the critical behavioral context: permanence, confirmation requirement, and content disposition. It could additionally note that id is required, but the schema already covers that, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented structurally. The description reinforces the semantics of confirm and reassign_to, but does not add new parameter-level information beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific action and resource: 'Delete a user', and immediately clarifies the key semantic that WordPress has no trash for users, so deletion is permanent. This clearly distinguishes it from sibling tools like update_user or create_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditions for use: deletion requires confirm: true and the agent must decide what happens to the user's content, with reassignment strongly preferred. It doesn't explicitly name alternatives or say when not to use it, but the required workflow is clearly specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_widgetDelete a widgetA
Destructive

Remove a widget. By default it is moved to the inactive widgets area so its settings survive; force: true deletes it outright.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWidget id.
forceNoDelete permanently instead of moving to inactive widgets.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive and non-idempotent, but the description goes further by explaining the nuanced behavior: the widget is moved to the inactive area and its settings survive unless force is true. This is meaningful behavioral context beyond what annotations or the schema alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the core action and then immediately explains the most important behavioral nuance, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter delete tool with no output schema, the description covers the essential behavior and the key force parameter. It could mention what happens to a widget currently placed in a sidebar, but the inactive-widgets explanation provides enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some semantic value by explaining the real-world consequence of force: true versus false, especially that settings survive in the inactive area. It does not compensate for id or site_id, but those are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Remove a widget,' a specific verb and resource that clearly identifies the tool's action. It also distinguishes itself from sibling delete_* tools by naming 'widget' and from update_widget by the remove semantics. The force behavior adds further clarity without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains the default soft-delete behavior versus the force: true permanent delete, giving agents a decision rule for the force parameter. It does not explicitly discuss when to use this tool instead of update_widget or other alternatives, but the core usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_global_stylesDiff global styles against theme.jsonA
Read-only

Show exactly what the Site Editor has overridden in a block theme: a JSON-path diff of the user's global-styles customisations against the theme's own theme.json values (palette entries are matched by slug), plus every template and template part whose source is "custom" — edited in the Site Editor and therefore no longer following the theme's files. Use it before editing theme.json (a user override silently wins over file changes) or before shipping a theme update.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_entriesNoCap on diff entries returned.
include_unchangedNoAlso list user values that merely restate the theme's value — harmless, but they pin the value so later theme.json changes will not show through.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it explains that the diff includes JSON-path entries, that palette entries are matched by slug, and that it also lists templates/parts with source 'custom'. It also discloses the 'silently wins' override behavior, which is a non-obvious consequence. It doesn't mention pagination or output format, but the output schema is absent and the description gives enough behavioral detail for a read-only inspection tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and then the use-case guidance. Every clause earns its place: the slug-matching detail, the custom-source template list, and the 'silently wins' warning are all high-value. No fluff or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diff tool with no output schema, the description covers what the tool does, what it returns (diff entries plus templates/parts), and when to use it. It doesn't describe the exact output structure or how to interpret a diff entry, but the tool's purpose is clear enough for an agent to invoke it and interpret results. The absence of an output schema raises the burden slightly, but the description is strong enough to earn a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context for include_unchanged by explaining the 'pin the value' consequence, which is not in the schema. It doesn't add much for site_id or max_entries, but the schema covers them well, so the baseline 3 is exceeded by the added semantic value for include_unchanged.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Show'), a precise resource ('diff of the user's global-styles customisations against the theme's own theme.json values'), and the matching mechanism ('palette entries are matched by slug'). It also distinguishes itself from related theme tools by focusing on Site Editor overrides and custom templates, which is unique among the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'before editing theme.json' and 'before shipping a theme update', and explains why (a user override silently wins over file changes). It also implies when not to use it (when you don't need to inspect overrides), and the sibling list contains no other diff tool, so the guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_abilitiesDiscover plugin abilitiesA
Read-only

List the abilities registered on the site through the WordPress Abilities API — capabilities that plugins such as WPForms, AIOSEO or SeedProd expose for programmatic use. Running a plugin's own ability is always safer than writing to its tables directly, because the plugin's validation, hooks and cache invalidation still run.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter abilities by name or description.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not repeat safety. It adds context about the underlying API and the rationale for using abilities, which goes beyond the annotations. However, it does not disclose behavior like pagination or output structure, but given the read-only nature and annotations, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first sentence front-loads the primary function; the second provides valuable context about why abilities are preferable, though it's slightly tangential to a listing tool. Still, it earns its place by aiding decision-making. Appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with optional search and site_id, the description conveys the purpose and the broader ecosystem. It does not explicitly describe the return format (a list of abilities) but that is implied. Given the output schema is absent, this is sufficient. It could mention pagination or that details are available via get_ability_info, but that is not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both search and site_id have clear descriptions. The tool description does not add any parameter-specific details beyond what the schema provides, so it sits at the baseline for high schema coverage. No extra guidance on parameter usage is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (list) and resource (abilities) with a specific API (WordPress Abilities API). It names example plugins (WPForms, AIOSEO, SeedProd) and distinguishes this from sibling tools like discover_content_types or discover_taxonomies by focusing on abilities. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the broader value of abilities (safer than direct table writes) but does not explicitly say when to use this tool versus alternatives like get_ability_info or run_ability. It implies listing is a discovery step but lacks direct guidance on when to choose this tool over siblings. No exclusions or conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_content_typesDiscover content typesA
Read-only

List every content type registered on the site — post, page, and any custom post type — with its REST base, whether it is hierarchical, which taxonomies apply, and which fields it supports. Call this before working with an unfamiliar site: a type absent here is registered with show_in_rest => false and cannot be reached over REST at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_countsNoAlso report how many items exist per type. Costs one extra request per type.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnly and non-destructive behavior. The description adds non-obvious context: a type missing from this list has show_in_rest => false and is unreachable over REST. This is exactly the kind of behavioral insight that goes beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the purpose and output fields; the second delivers usage guidance. Every clause contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only discovery tool, this is complete: the returned fields are enumerated, the parameters are fully documented in the schema, annotations cover the safety profile, and the usage context is explicit. No critical information an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (site_id and include_counts) thoroughly. The tool description does not need to restate them, and it adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies the exact resource ('every content type registered on the site') with concrete examples (post, page, custom post type). It also enumerates what is returned, making it easy to distinguish from sibling tools like discover_taxonomies or list_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger: 'Call this before working with an unfamiliar site.' It also explains the consequence of a type being absent, which is strong practical guidance. It does not name alternatives or explicitly say when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_rest_routesDiscover REST routesA
Read-only

List the REST namespaces and routes the site actually registers, including those added by plugins. Use this before rest_api so you call routes that exist — WordPress route shapes vary between plugin versions and guessing wastes calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter routes by substring.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
namespaceNoShow routes under one namespace only, e.g. "wc/v3".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with them (a list operation). Beyond annotations, it adds that results reflect live site registration including plugin additions, and that route shapes vary between plugin versions — useful open-world context consistent with openWorldHint=true. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place: the first states the core function, the second delivers usage guidance with a rationale. Information is front-loaded with purpose before context, with no filler or repetition of schema/annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only discovery tool, the description covers purpose, when to use it, and the basic return content (namespaces and routes). Annotations cover the safety profile and open-world nature, and the schema documents all parameters. The minimal return description suffices for the stated use case of feeding rest_api.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters (search, site_id, namespace) already documented in the schema. The description adds no parameter-specific semantics beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb + resource: it lists the REST namespaces and routes the site actually registers, including plugin-added ones. It distinguishes itself from siblings like rest_api by scoping to actually-registered routes rather than theoretical ones, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'Use this before rest_api so you call routes that exist' — naming the alternative tool directly and giving the condition plus rationale (route shapes vary between plugin versions, guessing wastes calls). There is no ambiguity about when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_taxonomiesDiscover taxonomiesA
Read-only

List every taxonomy on the site — categories, tags, and any custom taxonomy — with its REST base, which post types it applies to, and whether it is hierarchical. A taxonomy missing here is registered with show_in_rest => false and is unreachable over REST.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
for_typeNoOnly taxonomies attached to this content type.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail by disclosing that taxonomies with show_in_rest=>false are omitted and unreachable, which is beyond the annotation hints. This transparency about limitations enhances the agent's understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero fluff. The first sentence front-loads the core purpose and output, and the second adds a concise, high-value caveat. Every word earns its place, and the structure is immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only discovery tool with no required parameters and no output schema, the description covers the essential facts: what is returned, the REST base, post types, hierarchical flag, and the important exclusion. It does not mention pagination or limits, but for a tool with this simplicity and given the annotations (openWorldHint), the missing details are minor. The description is complete enough for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (site_id and for_type) already have detailed descriptions in the schema. The description does not add any parameter-specific information, but it doesn't need to because the schema fully documents them. The baseline of 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a precise resource ('every taxonomy on the site'), and enumerates the exact information returned (REST base, post types, hierarchical flag). It also adds a critical caveat about taxonomies not exposed over REST, distinguishing the tool's scope from a general taxonomy listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear what the tool returns and includes a practical note about unreachable taxonomies, but it does not explicitly mention when to choose this over related tools like discover_content_types or list_terms. The usage context is implied rather than stated, and no alternatives or exclusions are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_mediaEdit a media item (alias)A

Legacy alias for update_media, kept for backward compatibility. Prefer update_media.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe item ID.
postNoAttach to this content ID.
titleNoDisplay title.
captionNoCaption shown beneath the item.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
alt_textNoAlternative text for accessibility and SEO.
descriptionNoLonger descriptive text.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals that this is an alias with legacy status, which is useful context beyond the annotations, but it does not describe side effects, permissions, or what fields actually get modified. Since readOnlyHint=false, destructiveHint=false, and idempotentHint=false already signal a non-read, non-destructive mutation, a mid score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler: it states the alias relationship, the backward-compatibility rationale, and the preference for update_media. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated alias, the description is largely complete because it directs the agent to update_media for canonical behavior, and the input schema documents all parameters. It does not describe return values, but the alias framing makes that omission minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all seven parameters and their meanings. The description adds no parameter-level information, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description make clear this tool edits a media item, and the description explicitly frames it as a legacy alias for update_media. This distinguishes it from update_media and other media tools, though it relies on the referenced tool to fully define the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: this is a legacy alias for update_media, kept only for backward compatibility, and update_media should be preferred. This is a clear when-to-use versus when-not-to-use statement with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_theme_fileEdit a theme fileA

Make targeted find/replace edits inside a theme file, leaving the rest untouched. Safer than write_theme_file for changing one function or block of markup. An edit that matches nothing fails loudly rather than silently writing nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to the theme root.
editsYesEdits applied in order.
themeNoTheme stylesheet or draft id.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
allow_live_themeNoPermit editing the live active theme directly. Use a draft instead.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal a non-read-only, non-idempotent mutation. The description adds useful behavioral context beyond that: edits are surgical, safer than a full write, and a no-match edit fails loudly. This is meaningful and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: one states what it does, one gives the key comparison with the sibling alternative, and one discloses an important failure behavior. There is no fluff and the most important distinguishing information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential context for safe use: targeted edits, comparison to write_theme_file, and loud failure on no match. The schema fills in the remaining operational details like path, theme selection, and live-theme protection. Some minor context such as drafts or ordering is handled by the schema and sibling tools, not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all parameters, so the schema carries the semantic weight. The tool description adds general context about targeted find/replace and failure behavior, but it does not need to add per-parameter meaning since the schema already documents find, replace, all, regex, required, theme, site_id, and allow_live_theme in detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Make targeted find/replace edits inside a theme file'. It also distinguishes itself from write_theme_file by emphasizing targeted edits and leaving the rest untouched, so an agent can immediately tell this from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names write_theme_file as the alternative and gives the deciding condition: 'Safer than write_theme_file for changing one function or block of markup'. This gives clear when-to-use guidance rather than leaving it to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_sql_queryRun a database queryA

Run a SQL query against the WordPress database through the companion plugin. SELECT/SHOW/DESCRIBE/EXPLAIN run immediately with an enforced row limit. Anything that mutates data is blocked unless you pass allow_mutation: true, and even then it first returns a preview and a confirm_token that you must echo back — stacked statements are always refused. Reach for this only when the REST API and WP-CLI cannot get at the data: raw SQL bypasses WordPress hooks, so caches are not invalidated and plugin logic does not run.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesA single SQL statement. Use the site's real table prefix — get it from site_info if you are unsure it is wp_.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_rowsNoRow ceiling. A LIMIT is appended automatically to unbounded SELECTs.
confirm_tokenNoToken returned by the preview, required to actually run a mutating statement.
allow_mutationNoPermit a data-changing statement. Still requires a confirm_token from the preview.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the sparse annotations (readOnlyHint: false, destructiveHint: false). It discloses the two-phase mutation protocol (preview + confirm_token required even with allow_mutation: true), the 'stacked statements are always refused' rule, the enforced row limit on safe statements, and the side effects of bypassing hooks: caches not invalidated and plugin logic skipped. No contradiction — destructiveHint: false is consistent with the default-deny-plus-confirmation design.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences (~90 words) with zero redundancy: what the tool does, how safe statements execute, the mutation safety protocol, and the routing caveat all earn their place. The description is front-loaded with the core purpose and flows logically from behavior to risk, with no repeated information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Operationally complete for an agent: execution model, row limit, confirmation flow, stacked-statement refusal, and side effects are all covered. The only gap is the return shape of query results and the preview response, which matters because no output schema exists — though the confirm_token parameter description ('Token returned by the preview') partially bridges the preview format question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all five parameters, including the interplay between allow_mutation and confirm_token. The description adds only framing — 'enforced row limit' echoes max_rows and 'stacked statements are always refused' constrains query — but no significant new semantics beyond the schema's own parameter descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Run a SQL query against the WordPress database through the companion plugin.' The scope is unambiguous and the closing sentence explicitly frames raw SQL as a last resort beyond the REST API and WP-CLI, which maps to siblings rest_api and run_wp_cli — so an agent can tell this tool apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Reach for this only when the REST API and WP-CLI cannot get at the data' is an explicit when-condition that names the alternatives and implies the when-not: do not use it when standard APIs suffice. It also explains why ('raw SQL bypasses WordPress hooks, so caches are not invalidated and plugin logic does not run'), giving the agent a decision rule rather than a vague preference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_content_by_urlFind (and optionally update) content by URLA

Resolve any WordPress front-end URL to the content behind it, detecting the post type from the URL shape (so /documentation/getting-started/ finds the documentation custom post type), then optionally update it in the same call. This is the tool to reach for when a human hands you a link. Detection tries, in order: an explicit ?p= id, the site's own search index, the registered rewrite base, then a slug sweep across every type.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAny URL on the site — permalink, ?p=123, or a pretty CPT URL.
dateNoPublish date in site time, ISO 8601 (2026-01-31T09:00:00). With status "future" (or "publish" and a future date) this schedules the post.
metaNoCustom fields, as key/value pairs. A key only writes if it is registered with show_in_rest — use set_content_meta for unregistered keys.
slugNoURL slug. Changing this on published content breaks existing links unless you add a redirect.
editsNoTargeted find/replace edits applied to the existing raw content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`.
termsNoTaxonomy assignments keyed by taxonomy slug or REST base, e.g. {"categories": [3], "tags": ["news"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created.
titleNoThe title, as plain text.
authorNoUser ID of the author.
formatNoPost format. Only applies to types that support post formats.
parentNoParent ID, for hierarchical types such as pages. 0 for none.
statusNopublish | future | draft | pending | private | trash. "future" needs a `date` in the future. "trash" moves the item to the trash (same as delete_content without force).
stickyNoPin the post to the top of the blog. Posts only.
updateNoApply the supplied changes once the content is found. Off by default, so this tool is safe to use purely for lookup.
contentNoFull content body, replacing whatever is there. For the block editor this is block markup (<!-- wp:paragraph --><p>…</p><!-- /wp:paragraph -->); classic content is plain HTML. Use `edits` instead for a small change.
excerptNoHand-written excerpt.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
passwordNoPassword-protect the content. Empty string removes the password.
templateNoPage template file, e.g. "templates/full-width.php". Empty string for the default template.
menu_orderNoSort order for hierarchical types.
ping_statusNoWhether pingbacks and trackbacks are accepted.
comment_statusNoWhether comments are open on this item.
featured_mediaNoAttachment ID of the featured image, or 0 to remove it. Upload it with create_media first.
include_contentNoReturn the full body along with the match.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint:false and openWorldHint:true, but the description adds significant behavioral context: it can optionally mutate in the same call, update is off by default making it safe for pure lookup, and it discloses the detection order (explicit ?p=, search index, rewrite base, slug sweep). This goes well beyond what the annotations convey and helps the agent predict side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the core purpose and usage trigger, and every sentence contributes: purpose, example, when-to-use, and detection order. No filler or repetition of schema contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 23 parameters and nested objects, the description provides the necessary mental model — URL resolution, optional update behavior, and the update flag's safety default. It doesn't describe return values or failure modes, but with no output schema and rich parameter docs, what's missing is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 23 parameters is already documented in the schema; the description adds no parameter-level detail beyond the url resolution logic and the update flag's default-off behavior. This matches the baseline of 3 where the schema carries the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Resolve any WordPress front-end URL to the content behind it') and a clear resource, and distinguishes itself from siblings by the URL-resolution mechanism and optional update capability. The example with /documentation/getting-started/ and the explicit 'This is the tool to reach for when a human hands you a link' makes its purpose unmistakable and differentiates it from slug-based tools like get_content_by_slug.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-to-use signal ('when a human hands you a link') and explains the detection order, which helps agents understand what kinds of URLs are valid inputs. However, it stops short of explicitly naming alternatives or stating when not to use it (e.g., 'if you already have a slug, use get_content_by_slug instead'), so it lacks full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fleet_reportFleet health reportA
Read-only

One report across every configured WordPress site (or a chosen subset), checked in parallel: reachability and response time, WordPress version, pending core/plugin/theme updates, active plugin count, companion plugin presence, HTTPS, search-engine blocking (blog_public / homepage noindex) and Site Health critical issues. Each site is isolated, so one failure never breaks the report. Sites are sorted worst first with headline issues — the starting point for agency maintenance rounds.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idsNoOnly these site ids. Omit for every configured site.
timeout_msNoPer-request timeout for each site.
concurrencyNoHow many sites to check at once.
check_homepageNoFetch each homepage to detect noindex and the WordPress generator version when the companion plugin is absent.
include_healthNoInclude Site Health issue counts (via the companion plugin, one request per site).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations: sites are checked in parallel, each site is isolated so one failure never breaks the report, and results are sorted worst-first with headline issues. It also confirms the read-only nature of the operation without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and packed with useful, specific information in just two sentences. The checklist of checks is organized efficiently, and every clause contributes meaning without repetition or boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description tells an agent what the report covers, how failures are handled, and how results are ordered. It could be more explicit about the exact response shape, but for selecting and invoking the tool the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters. The description loosely reinforces some parameters, such as 'chosen subset' for site_ids and 'checked in parallel' for concurrency, but it does not add substantial new parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific function: generating one aggregate report across all configured WordPress sites or a chosen subset. It enumerates the exact checks performed and distinguishes itself from single-site tools like test_site or get_site by its fleet-wide, parallel scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context by positioning the tool as 'the starting point for agency maintenance rounds' and by clarifying it can run on every site or a chosen subset. It does not explicitly name alternatives or when-not-to-use, but the intended use case is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ability_infoGet ability detailsA
Read-only

Get the full definition of one ability, including its input and output schemas and whether it is destructive, so you can call it correctly the first time. Ability names are namespaced, e.g. "my-plugin/get-site-info".

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFully qualified ability name from discover_abilities, in the form "namespace/ability".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat those. The description adds value by specifying that the tool returns input/output schemas and destructive status, which are behavioral traits beyond the read-only nature. This complements the annotations, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. It front-loads the primary benefit ('full definition'), then lists the key returned details, and ends with crucial naming guidance. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, 1 required, no output schema), the description is adequate. It explains the purpose, the main use case (calling correctly), and the namespacing requirement. It could mention that the output schema is not provided here, but the description already says it returns schemas, so an agent knows to look at the result. Overall, sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains both parameters. The description adds nuance by noting ability names are namespaced with an example ('my-plugin/get-site-info'), which reinforces the schema's pattern and helps agents format the parameter correctly. This is a small but meaningful addition beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the full definition of one ability, including its input and output schemas and whether it is destructive.' It specifies the resource (an ability) and the exact information it returns. While it doesn't explicitly distinguish itself from siblings, the unusual 'ability' concept makes it unique enough, and it references 'discover_abilities' for context, aiding differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool is the prerequisite for calling abilities correctly: 'so you can call it correctly the first time.' It also implies it should be used after discovering abilities. However, it does not explicitly state when NOT to use it or name alternatives, but given the unique purpose, this is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_audit_logRead the audit logA
Read-only

Read the append-only local audit log of every sensitive action this server has taken — writes, deletes, SQL, WP-CLI, theme publishes — with timestamp, site, tool, target and outcome. Useful for answering "what did the AI actually change?".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many of the most recent entries to return.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
all_sitesNoInclude entries for every site rather than just one.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful context: the log is append-only and local, and specifies which actions are recorded, going beyond what annotations convey. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences with no filler. The first sentence front-loads the resource, scope, and output fields; the second adds a practical use case without repeating schema or annotation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description's explicit listing of returned fields (timestamp, site, tool, target, outcome) is essential and sufficient. The append-only nature, scope, and invocation parameters are all covered between description and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter definitions for limit, site_id, and all_sites, including defaults and bounds. The description does not add parameter-specific semantics, but the schema already carries that burden adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reading the append-only local audit log, and enumerates what events it covers (writes, deletes, SQL, WP-CLI, theme publishes) plus the fields returned. This clearly differentiates it from sibling audit/content-specific tools like audit_content or security_audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear use case: answering 'what did the AI actually change?' and frames the tool as a server-wide sensitive-action log. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commentGet a commentA
Read-only

Fetch one comment by ID with its full text, author details and moderation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe comment ID.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, non-destructive nature, so the description adds value by disclosing the returned fields: full text, author details, and moderation status. No behavioral edge cases (e.g., not-found behavior) are mentioned, but for a simple fetch this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every phrase earns its place by specifying the resource, the lookup key, and the expected return contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool with full parameter documentation, safe annotations, and a description that names the return fields, nothing essential is missing. No output schema exists, but the description sufficiently explains what the caller will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (id, site_id) are already well documented in the schema. The description only reinforces 'by ID' without adding new parameter meaning, matching the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), a precise resource ('one comment by ID'), and the key data returned (full text, author details, moderation status). This clearly distinguishes it from list_comments and from mutation siblings like update_comment or delete_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies single-comment retrieval by ID, but it does not explicitly name alternatives or state when not to use this tool. The context is clear, though no exclusions or sibling routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contentGet content by IDA
Read-only

Fetch one item of any content type by ID, including the raw content body exactly as stored — which is what you must read before making targeted edits, since the block editor stores markup with HTML comment delimiters.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe content ID.
rawNoReturn the raw stored content rather than the rendered output. Keep true for editing; set false to see what visitors get.
typeNoContent type slug. Wrong type gives a 404 — use find_content_by_url or get_content_by_slug if unsure.post
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_metaNoInclude registered custom fields.
max_content_charsNoTruncate very long bodies at this many characters.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds valuable context by revealing that the block editor stores markup with HTML comment delimiters and explaining that 'raw' mode returns the exact stored body needed for safe edits. It also surfaces the 404-on-wrong-type behavior in the parameter docs. Minor deduction: no explicit note about the output shape, since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main description is a single, information-dense sentence that front-loads the core action and the editing workflow. It earns its place. Minor deduction: the description leans on schema-side parameter prose for a lot of the routing/behavioral content, so the top-level description alone would be thinner without the schema — but the overall structure is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with no output schema, it covers the critical operational facts: raw vs. rendered content, editing use case, wrong-type 404 routing, site_id fallback logic, and truncation behavior. It is complete enough to use safely in the edit workflow, though an explicit note about what the returned content object looks like would make it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already well documented. The description adds framing on top of the schema by tying the 'raw' parameter to the editing workflow, and the schema itself provides rich practical guidance (e.g., default site behavior with list_sites, wrong-type 404, truncation minimum). The main description doesn't repeat parameter details, but the schema carries that burden and does it well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Fetch one item of any content type by ID') and includes the key differentiator: it returns the raw content body exactly as stored. This distinguishes it from siblings like get_content_summary, get_content_by_slug, and get_content_terms, and makes the tool's purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when this tool must be used ('which is what you must read before making targeted edits') and the schema adds concrete routing: 'Wrong type gives a 404 — use find_content_by_url or get_content_by_slug if unsure.' This goes beyond stating what the tool does to actively direct the agent toward correct vs. alternative usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_content_by_slugFind content by slugA
Read-only

Look up content by slug across every content type at once, or within specific types. Use when you know the URL tail but not which post type owns it.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe slug, i.e. the last path segment of the URL.
typesNoRestrict to these content types. Defaults to every REST-exposed content type.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_contentNoInclude full bodies in the results.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds useful context about cross-content-type lookup and URL-tail semantics, but does not disclose result shape or potential limitations. With annotations present, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences: the first states the operation and scope, the second states the precise condition for use. There is no wasted text and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup tool with fully documented parameters, clear use-case guidance, and safety annotations, the description is nearly complete. The only minor gap is that it does not explicitly describe what the response contains, and there is no output schema to fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all four parameters documented including defaults and semantics. The description adds no additional parameter-level meaning, but none is needed because the schema already carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation—look up content by slug—and precisely scopes it: across every content type at once or restricted to specific types. It also clarifies the distinguishing use case (knowing the URL tail but not the owning post type), which separates it from URL-based or single-type content lookups among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear when-to-use instruction: use when you know the URL tail but not which post type owns it. It does not explicitly name alternatives such as find_content_by_url or get_content, but the context is sufficient for an agent to select this tool for slug-based lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_content_metaRead custom fieldsA
Read-only

Read the custom fields (post meta) on a content item, including keys that are not registered with show_in_rest and therefore invisible to get_content. Needs the companion plugin to see unregistered keys. Values over 20,000 characters are truncated unless the key is requested by name in keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContent ID.
keysNoOnly these meta keys. Omit for everything.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_protectedNoInclude underscore-prefixed internal keys, which plugins use for their own state.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses important behaviors: unregistered keys require a companion plugin, and values over 20,000 characters are truncated unless requested by name in `keys`. These are non-obvious runtime details that meaningfully affect how the agent invokes the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences deliver the purpose, differentiation, prerequisite, and a key behavioral caveat. There is no filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with fully documented parameters, the description covers purpose, differentiation, prerequisites, and constraints. No critical information needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for all parameters, so the description does not need to repeat them. It adds value by explaining the truncation exception tied to the `keys` parameter, which deepens the agent's understanding of how that parameter affects behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and resource ('custom fields (post meta) on a content item'), and clearly distinguishes itself from get_content by noting it can see keys invisible to that tool. This lets an agent identify the tool's unique purpose at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when this tool is needed versus get_content ('keys that are not registered with show_in_rest and therefore invisible to get_content'), and warns about the companion plugin prerequisite. This gives an agent actionable selection criteria without ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_content_summaryGet a content summaryA
Read-only

Return a minimal summary of one item — id, title, slug, status, excerpt, taxonomies, word count and SEO fields (Yoast, Rank Math, AIOSEO or SEOPress) — without the body. Built for audits and lookups over many items. Accepts either an id (with type) or a full URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoContent ID. Provide this or `url`.
urlNoAny front-end URL on the site; the type is detected automatically.
typeNoContent type, used with `id`.post
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only and non-destructive behavior. The description adds a concrete return contract by enumerating fields and explicitly excluding the body, which is valuable given the absence of an output schema. It does not detail taxonomy or SEO field shapes, but this is a minor gap for a simple read-only summary.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with the core deliverable and field list front-loaded. Every sentence earns its place, and there is no repetition of schema or annotation details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the exact fields returned and explicitly stating that the body is excluded. Parameter semantics and read-only safety are covered by the schema and annotations, though minor ambiguities remain around taxonomy/SEO field formatting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all parameters, so the baseline is 3. The description adds cross-parameter meaning by stating that id and url are alternatives and by noting that URL type is detected automatically, which is not explicitly clear in the schema alone. This helps an agent choose the correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: return a minimal per-item summary containing a concrete field list (id, title, slug, status, excerpt, taxonomies, word count, SEO fields) without the body. It clearly distinguishes itself from full-content retrieval and bulk listing siblings by emphasizing 'one item' and 'without the body.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says the tool is 'Built for audits and lookups over many items' and clarifies the two accepted input modes (id with type, or a full URL). It does not explicitly name sibling alternatives or state when not to use it, but the context is clear enough for a read-only lookup tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_content_termsGet terms on contentA
Read-only

Get every taxonomy term assigned to one content item, grouped by taxonomy and resolved to full term objects rather than bare IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoContent type of that ID.post
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
content_idYesThe content item to inspect.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it clarifies the output is not just IDs but fully resolved term objects, and that results are grouped by taxonomy. This gives the agent expectations about the return structure, which is useful for post-processing. It does not mention pagination or potential errors, but for a read-only grouped fetch, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the primary action and key detail (grouped, resolved to full term objects). It avoids unnecessary words and is easy to scan. The only minor issue is that it could mention the 'type' parameter's role more explicitly, but that is covered in the schema. Overall, it is well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-item fetch with no output schema, the description is sufficiently complete. It tells the agent what to expect in the response (full term objects grouped by taxonomy) and what the tool does. It does not document edge cases (e.g., no terms assigned) or required permissions, but given the read-only nature and simple parameter set, this is adequate. The schema covers all parameters, so no gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter (type, site_id, content_id) has a clear description in the schema. The tool description adds value by explaining the semantics of content_id (the content item to inspect) and the overall purpose. The description also clarifies that the response includes full term objects, which is not in the schema. The schema already explains site_id's behavior well, so the description does not need to repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a clear resource ('taxonomy terms on one content item'), and specifies the output format ('grouped by taxonomy', 'resolved to full term objects'). It clearly distinguishes this from sibling tools like assign_terms_to_content, which does the opposite operation (assignment), and from list_terms/get_term which list or fetch terms independently without linking to content. An agent can easily understand what this tool does and what it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for reading terms on a single content item, but it does not explicitly state when to use this versus alternatives like list_terms or get_content_meta. The presence of sibling tools like list_terms suggests one could retrieve all terms in a taxonomy, but the description does not compare or contrast. Given the broad tool set, more explicit routing would be helpful, but the core use case is clear enough from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_global_stylesGet global stylesA
Read-only

Read a block theme's global styles — the palette, typography, spacing and per-block styling that theme.json defines and the Site Editor overrides. This is where a block theme's design tokens live.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_theme_defaultsNoAlso return the theme's own theme.json settings and styles, which the user customisations layer on top of. The user record alone only holds what was changed in the Site Editor, so it is often nearly empty. Verbose.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context: it explains that the user record alone may be nearly empty because it only holds Site Editor changes, and that include_theme_defaults is verbose. This helps the agent understand the data shape and the cost of the verbose option. It doesn't mention pagination or response format, but for a read-only getter with no output schema, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, then a clarifying elaboration. Every sentence earns its place. The second sentence reinforces the resource scope without padding. No fluff, no repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only getter with 2 optional parameters, 100% schema coverage, and no output schema, the description is nearly complete. It explains what the tool returns (global styles/design tokens), the key nuance about user customisations vs theme defaults, and the verbosity of include_theme_defaults. It could mention that the result is JSON or that it returns the full global stylesheet, but the description is sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds value by explaining the conceptual relationship between the user customisations and theme defaults, which clarifies why include_theme_defaults exists and when it matters. It doesn't repeat parameter names but enriches the mental model. Baseline 3 is exceeded because the description adds meaningful context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('a block theme's global styles'), and elaborates on what that includes: palette, typography, spacing, and per-block styling. It also distinguishes this from a generic 'get styles' by noting it covers theme.json definitions and Site Editor overrides, which helps differentiate it from siblings like get_theme, get_theme_mods, and update_global_styles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need design tokens/global styles from a block theme. It doesn't explicitly name alternatives or exclusions, but the context of 'block theme' and 'design tokens' gives clear usage context. It could be improved by explicitly saying 'use get_theme for theme metadata' or 'use get_theme_mods for classic theme settings', but the current wording is sufficient for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_mediaGet a media itemA
Read-only

Fetch one media item by ID, including its source URL, dimensions, generated sizes, alt text and where it is attached.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe attachment ID.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, which covers the safety profile. The description adds meaningful behavioral context beyond annotations by specifying what the fetch returns: source URL, dimensions, generated sizes, alt text, and attachment locations. No contradictions or hidden side effects are suggested.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with the core action front-loaded ('Fetch one media item by ID') and the return details appended. Every phrase earns its place; there is no fluff, redundancy, or unnecessary context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only fetch tool, the description is complete: the required parameter is obvious, the schema covers the optional site_id, annotations cover safety, and the description enumerates the expected return fields despite the lack of an output schema. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents the `id` and `site_id` parameters. The description does not add parameter-level semantics beyond the schema, but this is acceptable because the schema already carries the burden. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says exactly what it does: 'Fetch one media item by ID.' It names the resource, the operation, and the key discriminator (by ID), which distinguishes it from list_media and the media mutation siblings. The list of returned fields adds further precision without obscuring the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the right context: use this when you have a specific media ID and want a single media entity. It does not explicitly name alternatives like list_media or state when not to use it, but the singular 'one media item by ID' provides clear enough guidance for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_menuGet a menu with its itemsB
Read-only

Get one navigation menu together with all of its items, rendered as an indented tree so the hierarchy is obvious.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe menu ID from list_menus.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. However, it adds the trait of returning an indented tree, which is useful. But it doesn't mention output format details, pagination, or whether items include metadata, and with no output schema, the description could provide more behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded with the core action. Every word earns its place — no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with 2 parameters and no output schema, the description is decent but leaves gaps: it doesn't explain what happens if the menu id doesn't exist, how failures are handled, or the exact tree format. Given the sibling tools and context, it's adequate but not complete enough to anticipate edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both id and site_id are well-described in the schema. The description adds the indented tree rendering which relates to the purpose, not to specific parameters, so it doesn't add much parameter-specific value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: retrieve one navigation menu and its items, rendered as an indented tree. It distinguishes from list_menus (which lists menus) and menu item tools, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need a specific menu's hierarchy, but does not explicitly say when to use this versus other menu-related tools. It assumes the agent will infer from context, which is adequate but not stellar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_optionsRead site optionsA
Read-only

Read values from the WordPress options table by name — where plugins and themes keep their configuration. Autoloaded options are also where a bloated database often hides.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many options to return when browsing.
namesNoOption names to read. Omit with `search` to browse.
searchNoFind option names containing this substring.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds context about the options table and autoloaded bloat, but does not disclose return format, how names/search/limit interact, or whether autoloaded options are singled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core action. The second sentence about autoloaded bloat adds contextual value, though it is slightly tangential to actually invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does not explain what the tool returns or how the optional parameters combine. It is adequate for making a basic call but incomplete for an agent trying to interpret results or browse effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema itself. The description adds no additional parameter-level meaning, earning the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read values from the WordPress options table by name.' It clearly identifies what the tool does and distinguishes it from mutation tools like set_option and inspection/cleanup tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reading plugin/theme configuration stored in options, but it does not explicitly say when to prefer this tool over alternatives such as inspect_options or set_option. No exclusions or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_htmlGet rendered page HTMLA
Read-only

Fetch the fully rendered HTML that a visitor receives for any URL on the configured site (other hosts, and redirects to them, are refused), so you can verify that a change actually appears on the front end rather than trusting the API's word for it. Returns the server-rendered HTML — content injected later by JavaScript will not appear. Optionally extracts just the SEO-relevant head tags or the visible text.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPath or full URL to fetch, e.g. "/about/"./
modeNohtml: the raw markup. text: visible text only. head: title/meta/OG tags. summary: head tags plus headings, links and image alt coverage.summary
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_charsNoTruncate the response at this many characters.
preview_tokenNoToken from get_preview_url, to render a draft theme instead of the live one.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses meaningful behavior: only server-rendered HTML is returned, JavaScript-injected content will not appear, other hosts and redirects are refused, and modes can extract head tags or visible text. These limitations materially shape what the caller should expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, with the core fetch+scoping behavior front-loaded, followed by a crucial rendering caveat and the optional modes. Every sentence carries information and none is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only fetch tool with no required parameters and no output schema, the description covers what is returned (server-rendered HTML), how modes alter the output, and the host/redirect constraint. The input schema completes the remaining parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including the mode enum values. The description's mention of optional head/visible-text extraction only paraphrases the mode parameter and adds no new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: fetching the fully rendered HTML a visitor receives for any URL on the configured site. It also states the scope restriction (other hosts refused), which distinguishes it from broader fetch-or-search tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case — verifying that a change actually appears on the front end rather than trusting API data — which is enough to know when to reach for this tool. It does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pluginGet a pluginA
Read-only

Get full details about one installed plugin by its plugin file path, e.g. "woocommerce/woocommerce" or "hello-dolly/hello".

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin identifier as returned by list_plugins, e.g. "akismet/akismet" (no .php extension).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the plugin path identification pattern but does not explain what 'full details' includes, return format, or any read-time caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the action and resource, then gives immediate useful examples. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the schema is strong, so an agent with the plugin identifier can invoke it. However, the lack of an output schema and the vague 'full details' phrase leave the return expectations underspecified, and sibling ambiguity with get_plugin_info/inspect_plugin is not resolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter coverage with detailed descriptions, including the plugin identifier format and site_id default behavior. The description adds redundant but helpful path examples, yet does not substantially extend the schema's meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get full details') and the resource ('one installed plugin'), and specifies the identifying input format with concrete path examples. It distinguishes itself from broad listing/searching sibling tools, though it does not explicitly differentiate from similarly named siblings like get_plugin_info or inspect_plugin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this when you need full details for a single installed plugin and know its plugin file path. There is no explicit guidance about when to prefer list_plugins, search_plugins, or get_plugin_info, and no mention of exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_plugin_infoGet repository plugin infoA
Read-only

Get detailed information about one plugin from the WordPress.org repository — full description, changelog, version history, ratings breakdown, and compatibility. Use before installing or updating to see what changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWordPress.org plugin slug, e.g. "woocommerce".
include_sectionsNoInclude the long description and changelog text. Verbose — off by default.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context by specifying exactly what kind of data is returned and framed as a pre-install/pre-update inspection. It does not cover network dependencies or rate limits, but the read-only nature is well covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the resource and the data it returns; the second provides the decision-relevant use case. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, but the description lists the main return categories (description, changelog, version history, ratings, compatibility), which gives an agent a good idea of what to expect. The use-before-install/update guidance and the repository qualifier complete the picture well enough for a simple read-only info tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description adds general context about the kind of information returned but does not meaningfully enrich the meaning of slug or include_sections beyond what the schema states. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Get detailed information about one plugin from the WordPress.org repository,' and enumerates the returned content categories (description, changelog, version history, ratings, compatibility). This clearly distinguishes it from siblings like get_plugin by anchoring the source to the WordPress.org repository.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: 'Use before installing or updating to see what changed.' This tells an agent when to invoke the tool. It does not explicitly name alternative tools or when not to use it, but the context is sufficient for most decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_plugin_settingsRead a plugin's settings optionA
Read-only

Read an option a plugin owns, unserialised into JSON, with obvious secrets (keys matching pass/secret/token/api_key/license) redacted to "••••" plus the last four characters. Omit option to list the options the plugin appears to own so you can pick one. This reads the raw stored option — the same data the plugin's settings screen edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionNoThe option name to read, e.g. "wpseo_titles". Omit to list the plugin's likely options.
pluginYesPlugin identifier (slug, dir/file, or name).
revealNoReturn secret values in the clear instead of redacting them. Use sparingly.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses important behavior: secrets matching pass/secret/token/api_key/license are redacted to '••••' plus the last four characters, the response is unserialised JSON, and omitting `option` lists owned options. It also notes the data is the raw stored option, giving agents an accurate mental model of what they are reading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences deliver the core behavior, the list-mode option, and the raw-data clarification. Every clause earns its place and the most important information is front-loaded without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity, read-only annotations, and lack of an output schema, the description covers the essential call pattern: required plugin, optional option, listing mode, and redaction behavior. It stops just short of a 5 because it does not describe the exact shape of the listing response or error cases, though those are not critical for a straightforward read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter's role. The description adds the redaction format and reinforces the omit-to-list behavior, but it does not add significant meaning beyond the input schema. A baseline 3 is appropriate since the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reading an option a plugin owns, decoded from raw storage into JSON. It also exposes a distinctive behavior—listing a plugin's likely options when `option` is omitted—which clearly separates it from generic get_options-style tools. The scope is precise enough that an agent knows exactly what this tool does without reading siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: omit `option` to discover candidates, and read the raw stored value just as the plugin's settings screen edits it. It does not explicitly name alternatives or when-not-to-use cases, but the read-only scope and plugin-option focus make the intended use apparent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_preview_urlGet a theme preview URLA
Read-only

Get a tokenised private URL that renders the site using a draft theme, without affecting what anyone else sees. Share it or open it to check your work before publishing. The token expires, so fetch a fresh URL if it stops working.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoWhich page to preview, e.g. "/about/"./
themeNoDraft theme id to preview. Defaults to the most recent draft.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the tokenised, expiring nature of the URL and the fact that it renders draft content privately without affecting others. These behavioral details go beyond the readOnlyHint and destructiveHint annotations, which already mark it as a safe operation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero redundancy. The key value proposition (private, no impact on public site) is front-loaded, followed by usage guidance and the expiry warning. Every sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter tool with a rich schema, the description covers the core workflow (preview before publishing), the privacy guarantee, and the expiry caveat. It lacks explicit mention of the return value format (a URL string), but the tool name and title make that obvious enough that a 5 is not warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context around theme (defaults to most recent draft) and site_id (single-site automatic usage), but these are already covered in the schema descriptions. The description's mention of token expiry is generic, not param-specific, so it doesn't add meaningful param semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: generate a private, tokenised preview URL for a draft theme. It specifies the verb (get), resource (preview URL), and context (draft theme rendering), and distinguishes it from activation/publishing tools like publish_draft_theme and activate_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use it—checking a draft theme's rendered site before publishing—and notes that it does not affect what others see, distinguishing it from publishing/activating. It doesn't explicitly name alternatives like publish_draft_theme, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_seo_metaGet SEO metadataA
Read-only

Read the SEO metadata for one piece of content (by id or URL), normalized across Yoast, Rank Math, AIOSEO, SEOPress and The SEO Framework: title, description, focus keyword, canonical, robots, Open Graph and schema types. Detects the active plugin, shows the per-item overrides it stores, and compares them with what the rendered page actually emits — a mismatch usually means page caching or a theme override. Works without an SEO plugin too (reports what WordPress core renders).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoContent ID. Give either id or url.
urlNoFront-end path or URL on the site, e.g. "/about/". Resolved to its content where possible; the site root is audited as the homepage.
typeNoContent type of the id (post, page, a custom type). Omit to search post, page and then other types.
pluginNoForce which SEO plugin's fields to read, when detection misses it (e.g. REST namespaces hidden by a security plugin).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
compare_renderedNoFetch the public page and compare its <head> with the stored values. Skipped automatically for unpublished content.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and destructiveHint already in annotations, the description adds significant behavioral detail beyond them: it detects the active plugin, exposes per-item overrides, compares them to rendered HTML, maps mismatches to caching or theme overrides, and describes the no-plugin fallback. This lets an agent predict side effects and interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core action and scope, and the rest of the sentences earn their place with the plugin list, the rendered-page comparison, the mismatch explanation, and the no-plugin fallback. No content is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

At 6 params and deep complexity with no output schema, the description still communicates the main return items (title, description, focus keyword, canonical robots, Open Graph, schema types), the per-plugin/override/rendered comparison, and the no-plugin case. It notably doesn't detail the exact result structure or error scenarios, but given schema coverage and the annotations, this is decent coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The description does not add per-parameter details beyond what is in the schema, though it does reinforce the id/URL relationship and the intent of plugin detection. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read the SEO metadata for one piece of content (by id or URL), normalized across...' and enumerates the fields returned. It is clearly differentiated from siblings: a reader vs. set_seo_meta, and a per-content SEO reader rather than a site-wide audit like seo_site_check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool—reading normalized SEO metadata, detecting the active plugin, and comparing stored values with the rendered head. It does not explicitly name alternative tools or state when NOT to use it, but the fallback behavior ('Works without an SEO plugin too') is a viable usage hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_siteGet site configurationA
Read-only

Get the full configuration for one site (secrets redacted), plus what the WordPress install reports about itself: name, description, timezone, WordPress version, permalink shape, and which optional wpxmcp capabilities are available.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_remoteNoAlso query the site itself. Set false for a purely local, offline answer.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful context beyond that: secrets are redacted and the result includes WordPress-reported metadata. It also implies a remote query dimension through the mention of what the WordPress install reports.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the core action ('Get the full configuration') and packs the return contents into an efficient list. No filler or redundant restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the key returned information: config, secrets redaction, and specific WordPress metadata. It could name exact config keys or error behavior, but for a read-only retrieval tool the coverage is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both site_id and include_remote are fully documented in the schema. The description adds no additional parameter-level semantics, which matches the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get the full configuration for one site, plus WordPress-reported details. The mention of secrets redaction and specific fields (timezone, version, permalink shape, capabilities) makes it clearly distinguishable from list_sites and other site-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case clear—retrieve full config and WordPress self-reported info for a single site—but it never explicitly contrasts with overlapping siblings like get_site_settings or site_info, nor does it give when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_site_settingsGet site settingsA
Read-only

Read the site's core settings — title, tagline, timezone, date formats, posts-per-page, front page configuration, default category, comment and registration policy. Requires an Administrator account.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a meaningful behavioral detail beyond that: 'Requires an Administrator account,' which is a real access prerequisite. It also clarifies the scope of what is read, which is useful context. No contradiction with the annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one efficient sentence with the action front-loaded, followed by a compact field enumeration and the permission requirement. Every clause earns its place, and there is no redundant phrasing or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, optional-single-parameter tool, the description is complete. It states what the tool returns, what permission is needed, and the schema fully documents the only parameter. There is no output schema, but the enumerated settings provide enough information for an agent to understand the expected response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single optional site_id parameter is already fully explained in the schema, including the fallback behavior and reference to list_sites. The tool description adds no parameter-specific meaning, which is acceptable because the schema carries the complete burden here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read the site's core settings,' then enumerates the exact fields returned (title, tagline, timezone, date formats, etc.). This level of specificity makes it distinguishable from sibling tools like get_site, site_info, and update_site_settings without needing to inspect any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance or mention of alternatives. The description merely states that it reads settings and requires an Administrator account; it does not tell the agent when to prefer this over get_site, site_info, or get_options, nor when to use update_site_settings instead. The read-only intent is implied by the verb, but that is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateGet a block templateA
Read-only

Get one block template or template part, including its block markup, so you can inspect or edit the layout of an entire page type.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate id, usually "theme//slug", e.g. "twentytwentyfour//single".
kindNoWhether the id names a template or a template part.template
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the response includes block markup and represents a whole page type's layout, but does not describe error behavior, response structure, or other edge cases. Given the annotations, this is acceptable but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the action and resource, then adds the key output detail ('block markup') and the intended use case, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with a fully documented schema, the description adequately covers what the tool returns (block markup) and why it would be used. A slightly more explicit statement about the exact response shape or behavior for a missing id would improve completeness, but it is not essential given annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% description coverage for all three parameters, including an example for id and enum values for kind. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get one block template or template part') and explains the output includes block markup for inspecting or editing a page type's layout. This clearly distinguishes it from siblings like list_templates and get_template_for_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you need a specific block template or part by ID and its block markup, but it does not explicitly discuss when to prefer alternatives such as list_templates or get_template_for_url. It provides context but no exclusions or direct sibling comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_template_for_urlWhich template renders a URLA
Read-only

Answer "which template file (or block template and template parts) renders this URL, and why?" — the resolved file, the template hierarchy WordPress tried, whether a block template or part has been customised in the Site Editor, the queried object and the conditional tags that were true. A lightweight profile_url. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPath or full URL on the site./
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
as_logged_inNoResolve as the logged-in administrator instead of an anonymous visitor.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it requires a companion plugin ('Needs the companion plugin'), which is a critical operational constraint. It also discloses the scope of what it resolves (block templates, template parts, Site Editor customizations, conditional tags), which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core question, then lists the specific outputs, then positions the tool relative to a sibling, then states the plugin requirement. Every clause earns its place with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostic tool with 100% schema coverage and no output schema, the description covers the essential context: what it resolves, what it reports, and its dependency on a companion plugin. The only minor gap is that it doesn't describe the return format or how the 'why' is presented, but since there's no output schema, a bit more detail on the response shape could help. Still, the description is largely complete for an agent to decide whether to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (url, site_id, as_logged_in) with clear descriptions. The description adds the overall purpose but doesn't add parameter-specific meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a direct question that defines the tool's exact purpose: 'which template file (or block template and template parts) renders this URL, and why?' It then enumerates the specific outputs (resolved file, template hierarchy, customization status, queried object, conditional tags). This clearly distinguishes it from siblings like get_template (which retrieves a template by ID) and profile_url (which is a broader profiling tool).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: it's a diagnostic tool for understanding URL-to-template resolution, and explicitly calls itself 'A lightweight profile_url,' which signals when to prefer it over the heavier sibling. However, it doesn't explicitly state when NOT to use it or name alternatives like get_template or list_templates for other template-related queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_termGet a termA
Read-only

Fetch one taxonomy term by ID, including its description, parent, item count and any registered term meta.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe term ID.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
taxonomyNoTaxonomy slug or REST base (category, post_tag/tags, or a custom one).category

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the included fields in the response, but it does not disclose error behavior, taxonomy defaulting, or other runtime details. This is adequate given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. The core operation ('Fetch one taxonomy term by ID') comes first, followed by the return-field summary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with complete schema descriptions and safety annotations, the description provides enough context to invoke it correctly. It also summarizes key return fields, partially compensating for the absence of an output schema, though it does not enumerate every conceivable field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents id, site_id, and taxonomy. The description adds no parametric detail beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Fetch'), a specific resource ('one taxonomy term by ID'), and enumerates the returned data (description, parent, item count, term meta). This clearly distinguishes it from sibling tools like list_terms or get_content_terms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for retrieving a single term by ID, which is sufficient context for choosing it over list_terms. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_themeGet a themeA
Read-only

Get details about one installed theme, including what it declares support for and whether it is a block theme (which changes how you build pages and templates).

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
stylesheetYesTheme directory name, e.g. "twentytwentyfour".

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about block-theme consequences, but it does not disclose error behavior for unknown stylesheets, exact return fields, or installed-theme prerequisites. This is a minor gap for a low-risk read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence front-loads the resource and purpose, then adds two informative specifics. The parenthetical about block themes is decision-relevant rather than padding, so every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter read tool with full schema coverage, the description tells an agent what kind of information to expect and why it matters. However, with no output schema, it does not specify the exact returned fields or behavior for an unrecognized theme, leaving a small completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage: stylesheet includes a real example ('twentytwentyfour') and site_id explains optionality, defaults, and list_sites fallback. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get details') and resource ('one installed theme'), then names two concrete detail categories: what the theme declares support for and whether it is a block theme. This distinguishes it from siblings like list_themes, activate_theme, and get_theme_mods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly scopes the tool to a single installed theme and explains why the block-theme distinction matters for page/template building, which implies when an agent would want this tool. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_theme_modsGet Customizer settingsA
Read-only

Read the active theme's Customizer settings (theme mods) — logo, colors, layout options and anything else the theme registers there. Classic themes keep much of their configuration here rather than in options.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds useful context about where theme mods live and their open-ended contents, but it does not mention return format, empty results, or behavior for block themes that may store config elsewhere. That is a modest but not rich addition over annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences each earn their place: the first defines the verb, resource, and examples; the second adds a valuable routing caveat. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read with one optional fully-documented parameter and clear annotations, the description is nearly complete. The main gap is no explicit statement of return shape, though 'Read settings' implies a settings object, and there is no output schema requiring elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional site_id parameter is fully documented with default behavior and a pointer to list_sites. The tool description adds no parameter details, but none are needed because the schema already carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Read') plus resource ('active theme's Customizer settings / theme mods') and gives concrete examples (logo, colors, layout options). The 'rather than in options' clause also distinguishes it from related option-reading tools, so an agent can tell it apart from get_options/get_site_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to prefer this tool by noting classic themes keep configuration here rather than in options, which steers agents away from get_options. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for a read-only settings lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userGet a userA
Read-only

Fetch one user by ID, or the authenticated user with id: "me". Includes roles and a summary of notable capabilities when permitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe user ID, or "me" for the account this server authenticates as.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and non-destructive. The description adds useful behavioral context by disclosing that the response includes roles and a summary of notable capabilities, and that this is conditional on permissions ('when permitted').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight sentence with no filler. The core operation is front-loaded, the special-case id is mentioned immediately, and the return-relevant detail about roles/capabilities earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward read operation, the description covers the essential return content and special id behavior. There is no output schema, but the description names key response components. Minor gaps remain around exact conditions for 'permitted' capabilities and error behavior, but these are not critical for call selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both 'id' and 'site_id' thoroughly. The description reinforces the 'me' special value but adds little parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Fetch') and resource ('one user'), and clearly distinguishes the single-user lookup from list_users. The special id 'me' is explicitly documented, adding precision about the operation's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the two clear use cases: fetch by ID or fetch the authenticated user via 'me'. It implies this is for individual user retrieval rather than listing all users, though it does not explicitly name list_users as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_databaseInspect the databaseA
Read-onlyIdempotent

A developer's view of the WordPress database: every table with engine, collation, approximate rows, data and index bytes and reclaimable overhead; which plugin each non-core table belongs to, with tables whose owner is inactive, not installed or unknown listed as possible orphans; orphaned rows (postmeta, commentmeta and usermeta without a parent, term relationships pointing nowhere); revisions per post type, auto-drafts, trashed posts and spam/trash comments; and tables not on utf8mb4. Counts are capped so a huge table cannot stall the query. Works on MySQL/MariaDB and on the SQLite integration (sizes are then unavailable and noted). Read-only. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses valuable behavior: counts are capped to avoid stalls, SQLite support has unavailable sizes, the operation is read-only, and the companion plugin is required. These details help the agent anticipate limitations and prerequisites without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause adds a distinct, useful fact: output categories, cap behavior, engine compatibility, SQLite caveat, read-only nature, and plugin requirement. It is front-loaded with the main purpose and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly describes what will be reported, including edge cases such as orphaned rows, inactive plugin owners, and non-utf8mb4 tables. Prerequisites, platform caveats, and safety are all covered, making the tool safe and clear to invoke.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, site_id, is fully documented in the schema with 100% coverage. The description adds no additional parameter-specific details, so it adequately relies on the schema to explain selection behavior and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('the WordPress database') and a clear purpose: a developer-oriented inspection view. It enumerates concrete outputs (tables, engine, collation, rows, plugin ownership, orphans, revisions, trash, utf8mb4 status), which separates it from sibling inspection tools like inspect_options or inspect_registry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when a comprehensive, read-only database overview is needed. It includes important usage constraints like the count cap and SQLite limitations, though it does not explicitly name alternative tools for narrower database work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_optionsInspect options and transientsA
Read-onlyIdempotent

Report where the options table carries weight: total autoloaded bytes against Site Health's 800 KB warning, the largest autoloaded options with an owner guessed from installed plugin/theme slugs (flagging owners that are inactive or no longer installed), a per-owner rollup, and transient hygiene for both transients and site transients — count, bytes, expired rows, orphaned timeout rows and the largest entries. Honours WordPress 6.6 autoload values (on/auto-on/auto). Use it before cleanup_options to decide what to change. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many of the largest autoloaded options (and largest transients, up to 20) to list.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, so the description's job is to add context — and it does substantially. It discloses that owner attribution is a heuristic ('guessed from installed plugin/theme slugs' with inactive/uninstalled owners flagged), that WordPress 6.6 autoload values (on/auto-on/auto) are honored, and that the tool 'Needs the companion plugin' — a critical dependency. These are genuine behavioral disclosures beyond the annotations, and there is no contradiction with readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long (~70 words) but every clause carries a distinct report feature: the threshold comparison, owner guessing, rollup, transient hygiene metrics, WP 6.6 compatibility, usage guidance, and the plugin dependency. It is dense and information-efficient, though it runs as one extended sentence that would benefit from structural breaks. Given there is no output schema, the enumeration earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining return values — and it does so in detail: total bytes, largest options with owner flags, per-owner rollup, and transient metrics (count, bytes, expired rows, orphaned timeout rows, largest entries). Prerequisites ('Needs the companion plugin') and workflow placement ('before cleanup_options') are covered. Nothing an agent needs to invoke this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. Both limit and site_id are already well-documented in the input schema, including the 'up to 20' transient cap and the single-site default behavior. The description adds nothing beyond the schema about parameters, so it neither needs to compensate nor does it exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Report where the options table carries weight') and enumerates the exact scope: autoloaded bytes vs Site Health's 800 KB threshold, largest autoloaded options with owner guesses, per-owner rollup, and transient hygiene. It differentiates from siblings by naming cleanup_options as the downstream action and get_options-style tools are implicitly distinct since this reports aggregate weight rather than single option values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: 'Use it before cleanup_options to decide what to change.' This anchors the tool in a decision workflow and names the related sibling. It does not, however, state when NOT to use it or route to alternatives like get_options or set_option for single-value lookups, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_pluginInspect an installed pluginA
Read-only

Discover everything an installed plugin exposes and, crucially, how to control it: header data, whether it is active, version and pending update; its own REST routes (found by reflecting the callbacks defined in the plugin's files) with methods; Abilities API abilities it registers; Settings API settings it owns; the options it stores (with sizes and autoload); the wp-admin menu pages it adds; its custom post types, taxonomies, blocks, shortcodes and cron events. Returns a control_surface recommending the best path for changing its configuration — a REST route or ability where one exists, otherwise update_plugin_settings for its options, otherwise admin_page + submit_admin_form for its wp-admin screens. Use this first for any plugin (SEO plugins like Yoast or Rank Math, WooCommerce, forms, caching) before trying to change its settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginYesPlugin identifier: its slug ("wordpress-seo"), its "dir/file.php" path, or its display name ("Yoast SEO").
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context: it reflects callbacks from plugin files, returns a control_surface with a recommended configuration path, and lists the categories of data it inspects. This goes beyond the annotations without contradicting them, though it does not discuss performance or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with useful information, front-loading the core purpose and then enumerating the discovered data. Each clause adds value, and the usage guidance is placed at the end. It is not concise, but the length is justified by the tool's complexity; it avoids redundant phrasing and is well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the absence of an output schema, the description thoroughly covers what the tool returns (a control_surface with recommendations) and the full scope of discovery. It also provides usage context and alternative pathways. An agent can confidently call this tool and interpret its results without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters (plugin and site_id) with descriptions, achieving 100% coverage. The tool description does not add any additional parameter semantics beyond the schema; it only restates the plugin identifier types already present. With high schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool discovers everything an installed plugin exposes and how to control it, enumerating header data, active status, version, REST routes, abilities, settings, options, menu pages, custom post types, taxonomies, blocks, shortcodes, and cron events. It clearly distinguishes from sibling tools like get_plugin (basic info) and list_plugins (listing) by adding the control_surface recommendation, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit directive: 'Use this first for any plugin... before trying to change its settings.' This tells the agent when to invoke it and implies it should precede modification attempts. It also explains the returned control_surface recommends the best path (REST route, ability, update_plugin_settings, or admin_page), which guides follow-up tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_registryInspect WordPress registriesA
Read-onlyIdempotent

See what the running WordPress has registered and which plugin, theme or core file registered it — the questions a developer answers with var_dump. kind selects the registry: post_types and taxonomies (all of them, including ones hidden from REST, with rest_base, supports, rewrite and owner); meta (register_meta keys per object type plus the most frequent unregistered postmeta keys with an owner guess); blocks (block types with dynamic flag, attribute count, supports, block.json source, styles, variations, plus block patterns); shortcodes (callback file:line); rest_routes (methods, callback file:line, and routes whose permission_callback is __return_true flagged public); hooks (busiest hooks, or every callback on one hook with priority and file:line); cron (events with next run, schedule, overdue and orphan flags); image_sizes; menus_locations; sidebars; capabilities (each role's caps added/removed versus a fresh install); scripts_styles (handles registered during REST). Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich registry to read. hooks and rest_routes are the usual starting points when debugging 'where does this behaviour come from'.
limitNoMaximum rows per list in the response. Every list also reports its untruncated total.
filterNoNarrow the result. A case-insensitive substring on names for most kinds; a namespace such as "wc/v3" for rest_routes; an exact hook name such as "the_content" for hooks (lists its callbacks — a partial name lists matching hooks instead); for meta, start with "_" or pass "protected" to include underscore-prefixed keys.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description only needs to add contextual behavior. It does so richly: it notes the companion plugin requirement, the inclusion of hidden-from-REST entries, owner guesses for postmeta, permission_callback public-route flags, overdue/orphan cron flags, and the REST-scoped scripts/styles handles. This gives an agent accurate expectations beyond what annotations or schema alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, and the rest is a compact semicolon-separated enumeration of the 13 kinds with their most useful details. It is dense but each clause earns its place by explaining what data a given kind returns. The format is a long single sentence rather than a bulleted list, so it sacrifices a little scannability without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description does a good job conveying what each registry output will contain, including file:line callbacks, flags, totals, and owner guesses. It also covers the prerequisite companion plugin and the filter semantics. It could still be more explicit about the exact response shape and behavior when the companion plugin is missing, but the current level is sufficient for an agent to select and invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents kind, limit, filter, and site_id. The description adds value by explaining what each registry kind contains, including details like dynamic flags, callback file:line, and role cap diffs. It does not need to repeat schema mechanics; the supplement is meaningful but not essential because the schema already covers the parameter meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'See what the running WordPress has registered and which plugin, theme or core file registered it.' It enumerates the concrete registries (post_types, taxonomies, meta, blocks, etc.), making the tool's scope unmistakable and distinct from sibling inspection tools. The var_dump framing immediately conveys the developer-oriented purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: anytime one wants to know what WordPress has registered or who registered it, especially when debugging behavior. It also provides guidance within the tool by calling out hooks and rest_routes as usual starting points. It does not explicitly contrast with sibling tools like list_roles or inspect_plugin, but the purpose is stated clearly enough to imply appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_pluginInstall a pluginA

Install a plugin from the WordPress.org repository by its slug, optionally activating it straight away. Search first with search_plugins to get the right slug. Installation writes files to the server and needs filesystem write access.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWordPress.org plugin slug, e.g. "classic-editor". Find it with search_plugins.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
activateNoActivate immediately after installing.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the side effect that 'Installation writes files to the server' and the requirement for 'filesystem write access', which adds value beyond the readOnlyHint=false annotation. It also notes the optional activation behavior, giving the agent useful operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose, usage guidance, and side-effect warning. The description is front-loaded with the core action and avoids any filler or redundant schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an install action with three well-documented parameters, the description covers the source, the prerequisite search step, side effects, and permission requirements. It does not describe the return value, but there is no output schema and the operational guidance is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains slug, site_id, and activate. The description mostly repeats the schema's guidance about search_plugins and optional activation, adding little new parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Install'), resource ('plugin from the WordPress.org repository'), and key mechanism ('by its slug'), making the tool's purpose immediately clear. It also distinguishes itself from siblings like create_plugin or install_theme by stating its source and slug-based workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises 'Search first with search_plugins to get the right slug', giving the agent a concrete prerequisite and routing step. It does not name alternative tools for non-repository plugins, but the repository scope strongly implies when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_themeInstall a themeA

Install a theme from the WordPress.org repository by slug. Does not activate it — use activate_theme, or the draft workflow, afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWordPress.org theme slug, e.g. "twentytwentyfive".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnlyHint=false and destructiveHint=false, so mutation is known. The description adds the non-activation behavior and the source (WordPress.org repository), which are not in annotations. It does not elaborate on failure modes or idempotency, but annotation covers idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, then deliberately narrows scope with the non-activation caveat. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-param mutation, the description covers the source, the non-activation behavior, and points to alternatives. With annotations providing safety cues and schema covering params, it is sufficiently complete; missing output/error details are minor for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so slug and site_id are fully described. The description only reiterates the slug param ('by slug') without adding new semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific action 'Install a theme from the WordPress.org repository by slug', names the resource, and explicitly separates itself from activate_theme with 'Does not activate it'. This clearly differentiates it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not and alternatives: 'Does not activate it — use activate_theme, or the draft workflow, afterwards.' This tells the agent what to do after installing and which alternative tools handle activation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_admin_pagesList wp-admin menu pagesA
Read-only

List the wp-admin menu and submenu pages registered on the site — title, slug, URL, parent, required capability and the plugin each belongs to — so you can find the screen for a task (e.g. Yoast's "Search Appearance", Rank Math's "Titles & Meta", WooCommerce's settings tabs). Pass plugin to list only that plugin's pages. Menus are built from a snapshot captured on a real admin request; this refreshes it if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pluginNoRestrict to the pages added by this plugin (slug, dir/file, or name).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the tool read-only and non-destructive. The description adds valuable context beyond that by revealing that results come from a snapshot captured on a real admin request and that the snapshot refreshes if needed, which explains potential freshness and non-idempotency behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized, front-loaded with the action and result fields, and every sentence earns its place. The examples and snapshot note add real value without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with two optional parameters and no output schema, the description is complete: it lists the return fields, explains the plugin filter, and discloses the snapshot behavior. Nothing critical for calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds a brief note about the plugin filter but does not go beyond what the schema says; site_id is only covered by the schema, which is acceptable at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List the wp-admin menu and submenu pages'), enumerates the returned fields, and gives concrete use-case examples. It clearly distinguishes itself from navigation-menu tools like list_menus by specifying 'wp-admin menu and submenu pages registered on the site'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the intended use ('so you can find the screen for a task') and how to narrow results with the plugin parameter. It does not explicitly name alternatives or exclusion conditions, but the context is clear enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_block_patternsList block patternsA
Read-only

List the block patterns registered on the site — from core, the active theme's patterns/ folder, plugins and the pattern directory — with their categories, filterable by category and search text. Use it to reuse an existing pattern's markup instead of hand-writing layout. Pattern content is omitted by default because it is large; set include_content for truncated markup.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum patterns to return.
searchNoCase-insensitive match against the pattern name, title, description and keywords.
sourceNoOnly patterns from this source, e.g. "theme", "core", "plugin", "pattern-directory/theme".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
categoryNoOnly patterns in this category slug, e.g. "header", "call-to-action", "banner".
include_contentNoInclude each pattern's block markup, truncated to content_max_chars.
content_max_charsNoTruncation length per pattern when include_content is true.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral detail beyond the annotations: pattern content is omitted by default because it is large, and include_content returns truncated markup. This complements the readOnlyHint and destructiveHint annotations with useful operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences deliver the most decision-relevant information: scope, sources, filtering, and the content-size trade-off. There is no filler, and the key facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a fully documented schema, the description covers sources, filtering, and the important include_content behavior. It does not mention pagination or result shape, but those are less critical given the readOnlyHint annotation and the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 7 parameters with 100% description coverage, so the description does not need to re-explain them. It adds mild context around sources and the include_content default, but it does not significantly extend parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List the block patterns registered on the site'), enumerates the sources (core, theme, plugins, pattern directory), and mentions categories and filtering. This clearly distinguishes it from sibling tools like list_block_types and list_reusable_blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete use case: reuse an existing pattern's markup instead of hand-writing layout. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_block_typesList block typesA
Read-only

List the block types registered on the site, with their attributes. Check here before generating block markup for an unfamiliar plugin's blocks — it tells you the exact block name and which attributes are valid.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoMatch against block titles and names.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
namespaceNoFilter to one namespace, e.g. "core" or "woocommerce".

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the behavior that the tool is site-scoped and returns attribute information, which is useful. It doesn't describe pagination, filtering defaults, or output shape, but those are not heavy gaps given the read-only annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first states the core purpose, and the second provides actionable guidance that justifies checking this tool before generating block markup. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the read-only annotations, fully documented parameters, and no output schema, the description adequately covers what the tool returns ('block types... with their attributes') and when to use it. It could be slightly more explicit about return shape, but nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter (search, site_id, namespace) is already documented in the input schema. The description mentions attributes validity but doesn't add meaning beyond the schema. This matches the baseline of 3 when the schema carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the block types registered on the site') and adds the key detail 'with their attributes.' This clearly distinguishes it from sibling tools like list_block_patterns or list_reusable_blocks, which handle different WordPress block-related resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit when-to-use signal: 'Check here before generating block markup for an unfamiliar plugin's blocks.' It explains what the tool provides (exact block name, valid attributes) to support that use case. It doesn't name alternative tools or exclusions, but the guidance is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cli_commandsList allowed WP-CLI commandsA
Read-only

List every WP-CLI command run_wp_cli will accept. The allowlist is default-deny: anything not listed here is refused, no matter how it is phrased. Each entry says whether it writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoShow only commands containing this substring, e.g. "plugin".

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint and destructiveHint, but the description adds meaningful behavioral detail: the allowlist is enforced as 'default-deny' and 'no matter how it is phrased', and each returned entry indicates whether it writes. This goes beyond the structured hints and helps the agent understand enforcement semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The main purpose is front-loaded, followed by the critical allowlist behavior and the note that entries indicate write status. Every sentence adds distinct, valuable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional parameter and no output schema, the description covers everything needed to use it correctly: what it lists, how the allowlist behaves, and what each entry contains. No missing information is likely to cause incorrect invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional parameter, filter, is already fully described in the schema with an example ('Show only commands containing this substring, e.g. "plugin"'). With 100% schema coverage, the description needs to add little, and it does not attempt to explain the parameter further. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it 'List[s] every WP-CLI command run_wp_cli will accept.' This clearly identifies what the tool does and ties it to its sibling run_wp_cli. The scope ('accepted', 'allowlist') also differentiates it from generic command-listing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context explicit: because the allowlist is 'default-deny', anything not listed is refused, so this tool is the source of truth for what run_wp_cli will accept. It does not explicitly spell out 'use this before calling run_wp_cli' or name alternatives, but the default-deny statement strongly implies when it should be consulted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commentsList commentsA
Read-only

List comments with filtering by post, status, author and date. Moderating? Filter status: "hold" for the pending queue or "spam" for what the spam filter caught — both require authentication.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
postNoOnly comments on this content ID.
typeNoComment type: "comment" (the default WordPress applies), "pingback", "trackback", or a custom type such as "review".
afterNoISO 8601 date.
orderNoSort direction.desc
beforeNoISO 8601 date.
parentNoOnly replies to this comment ID (0 for top-level comments).
searchNoFree-text search term.
statusNoModeration status. Anything other than "approve" requires authentication.
orderbyNoWhich field to sort by.date
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many results per page.
author_emailNoFilter by commenter email. Administrator only.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with them. It adds useful behavioral context beyond the schema by explaining that 'hold' means the pending queue, 'spam' is what the spam filter caught, and both require authentication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The core purpose is front-loaded, and the second sentence delivers targeted moderation guidance exactly where it is most useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter tool with no required fields and a fully documented schema, the description covers the primary filters and the auth-sensitive moderation statuses. It doesn't describe the return shape, but it's a simple listing operation with no output schema and annotations already conveying the read-only safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the JSON schema already documents all 13 parameters and their meanings. The description adds little parameter-level value and even uses the looser term 'author' where the schema more precisely names 'author_email.' Baseline 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'List comments with filtering by post, status, author and date,' which clearly conveys the operation. It is distinguishable from sibling tools like get_comment because it emphasizes a filtered list rather than a single object lookup, though it doesn't explicitly name that alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Moderating? Filter status...' phrasing gives a concrete use case for the status parameter and flags authentication requirements. However, it does not explicitly say when to prefer this tool over get_comment or moderate_comments, leaving some routing decision to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contentList contentA
Read-only

List items of any content type — posts, pages, or a custom post type — with filtering, search, ordering and pagination. Returns compact summaries by default so a listing never floods the context; pass full_content: true only when you genuinely need bodies.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
slugNoFilter by exact slug.
tagsNoTag IDs to include.
typeNoContent type slug (post, page, or a CPT such as "product"). Run discover_content_types if unsure.post
afterNoOnly items published after this ISO 8601 date.
orderNoSort direction.desc
authorNoFilter to one author's user ID.
beforeNoOnly items published before this ISO 8601 date.
fieldsNoReturn only these top-level fields, overriding the default summary shape. Also sent as _fields so WordPress returns less.
parentNoFilter to children of this parent ID (0 for top-level items).
searchNoFree-text search across title and content.
statusNoFilter by status: publish, draft, pending, private, future, trash, or "any". Anything other than publish requires authentication.
stickyNoPosts only: true for only sticky posts, false to leave them out.
excludeNoLeave out these IDs.
includeNoOnly these IDs.
orderbyNoWhich field to sort by. "relevance" requires `search`; "include" requires `include`.date
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many results per page (WordPress caps this at 100).
categoriesNoCategory IDs to include.
full_contentNoInclude the full content body of each item. Off by default — listings are for finding things.
modified_afterNoOnly items modified after this ISO 8601 date.
taxonomy_filtersNoFilter by any custom taxonomy, keyed by REST base, e.g. {"product_cat": [12]}.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it returns compact summaries by default specifically to avoid flooding context, and full_content should only be requested when genuinely needed. This gives the agent useful expectations about output size and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the core action and scope; the second provides the most decision-relevant behavioral guidance. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 22-parameter tool, the description is complete enough for selection and invocation: it establishes scope, filtering options, output shape, and the one parameter that could bloat results. There is no output schema to explain return values, but the compact-summaries note covers the most important expectation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter thoroughly. The description adds a small amount of extra guidance around full_content and the compact-summary default, but it doesn't need to compensate for missing parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'List items of any content type' with filtering, search, ordering, and pagination. It distinguishes itself from single-item retrieval tools like get_content by emphasizing listing and compact summaries, though it doesn't explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you need a listing of content items. It also gives guidance on when to pass full_content: true. However, it doesn't explicitly state when NOT to use it or point to single-item alternatives like get_content or search_site.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_draft_themesList draft themesA
Read-only

List the theme drafts that exist on the site, with what each was cloned from and when it was last touched.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds value by specifying the return content (cloned-from and last-touched), going beyond what annotations alone convey. No contradiction detected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that leads with the verb and resource, packs in the distinguishing return fields, and contains no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and no output schema, the description supplies the necessary scope and return-field hint. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional parameter (site_id) is fully self-documented in the schema. The description does not add parameter-specific guidance, so it relies on the schema as baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and precise resource ('theme drafts') and adds distinguishing details: it returns what each was cloned from and when it was last touched. This clearly separates it from list_themes and get_theme without needing to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context ('exist on the site') and implicitly positions itself as the draft-specific listing tool among siblings like list_themes. However, it does not explicitly state when to choose this over alternatives or list any exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_field_groupsList registered field groupsA
Read-only

List the editable field groups registered on the site, with their fields and where each appears. Check here before registering a group so you extend an existing one rather than duplicating it.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, so the description does not need to repeat safety. It adds that only editable groups are returned and that each entry includes its fields and appearance locations, which is useful behavioral content beyond the title. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both purposeful: the first front-loads exactly what the tool returns, and the second gives the operational use case. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional, well-documented parameter and no output schema, the description states the result contents (fields and appearance) and the context in which the agent should call it. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the optional site_id parameter is already documented with default behavior and pointer to list_sites. The description adds no parameter-specific meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description names a clear verb-noun pair ('List ... field groups') and narrows scope to editable, registered groups, including what each contains (fields and appearance locations). This distinguishes it from register_fields and delete_field_group without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit timing: check this before registering a group, to extend an existing group rather than duplicate it. It does not name the counterpart tool (register_fields) or state when not to use it, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mediaList mediaA
Read-only

List items in the media library with search, type filtering, date filtering and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
afterNoUploaded after this ISO 8601 date.
orderNoSort direction.desc
authorNoUser ID of the author.
beforeNoUploaded before this ISO 8601 date.
parentNoOnly attachments attached to this content ID.
searchNoMatch against title, caption, alt text and filename.
orderbyNoWhich field to sort by.date
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many results per page.
mime_typeNoFilter by exact MIME type, e.g. "image/png".
media_typeNoFilter by broad media type.
missing_alt_textNoReturn only images with empty alt text — useful for an accessibility or SEO sweep. Filters within the requested page, so walk every page (or use audit_media) for a complete list.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the high-level filtering/pagination behavior, but does not disclose nuances such as the missing_alt_text parameter's 'filters within the requested page' caveat (though that is in the schema) or any rate limiting or result count limits. With annotations covering the main risk, the description adds modest value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no redundancy. The key capabilities are front-loaded and structured logically, making it highly scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (13 optional params, no output schema) and that annotations cover safety (read-only, non-destructive), the description provides a sufficient high-level summary. Special parameter behaviors (like missing_alt_text's pagination caveat) are already in the schema, so nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 13 parameters are documented. The description aggregates them into 'search, type filtering, date filtering and pagination', which adds an overview but no new detail over the schema. Baseline 3 is appropriate when the schema carries the explanatory weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'media library', and enumerates the key capabilities (search, type filtering, date filtering, pagination). This distinguishes it from sibling tools like get_media (retrieve a single item) or create_media (write operation), even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a list operation with filtering options, but provides no explicit guidance on when to choose this over alternatives (e.g., get_media for a single item, audit_media for a completeness sweep) or any exclusions. For a straightforward list tool this is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_menusList navigation menusA
Read-only

List the site's navigation menus and which theme locations they are assigned to. Note that block (full-site-editing) themes may instead use navigation blocks — list_content with type "wp_navigation" covers those.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by warning that FSE themes may not use classic menus and pointing to the correct fallback. This goes beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the main purpose is stated first, then a brief and relevant caveat about FSE themes. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional parameter and no output schema, the description explains what is returned (menus and their theme locations) and when results may differ (FSE themes). The note about list_content completes the picture by routing the agent to the correct tool when needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single optional site_id parameter, including behavior with one vs. multiple configured sites and a pointer to list_sites for valid ids. The description adds nothing about parameters, but with 100% schema coverage it does not need to. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List the site's navigation menus and which theme locations they are assigned to.' It clearly distinguishes itself from sibling tools like get_menu, create_menu, and delete_menu by indicating it lists all menus rather than acting on one. The added note about full-site-editing themes further sharpens the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use an alternative: for block themes using navigation blocks, list_content with type 'wp_navigation' is recommended. This gives the agent a clear conditional rule for choosing between this tool and a sibling. No other guidance is needed for such a straightforward list operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pluginsList pluginsA
Read-only

List every plugin installed on the site with its activation status and version. Requires an Administrator account — WordPress exposes no plugin data to lower roles.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoMatch against plugin name and description.
statusNoFilter by activation status.all
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations by stating the administrator-only authorization requirement and confirming that the result includes activation status and version, which is meaningful for an agent deciding whether this call is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action and output are front-loaded, and the second sentence earns its place by communicating the critical authorization constraint. Every word contributes to correct tool selection and invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with all parameters optional and fully documented in the schema, the description is largely complete. It covers the required permission level, the scope of results, and the returned fields. It does not mention pagination or ordering, but these are not clearly necessary for a plugin listing, especially given the annotations already establish the operation as read-only and safe.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides complete descriptions for all three parameters, so the description does not need to add parameter-level detail. The description adds no extra semantic nuance about how search, status, or site_id behave beyond what the schema states, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('every plugin installed on the site') and tells the agent exactly what information is returned: activation status and version. This clearly distinguishes it from related tools like search_plugins or get_plugin_info, which imply narrower or different retrieval semantics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context by stating that listing plugins requires an Administrator account and that lower roles get no plugin data. It does not explicitly name alternatives or state when to prefer search_plugins over this tool, but the 'every plugin' phrasing and the optional search/status parameters imply the tool's scope well enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reusable_blocksList reusable blocks (patterns)B
Read-only

List the site's reusable blocks / synced patterns — the fragments editors reuse across pages. Editing one changes every place it appears.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint true and destructiveHint false, so the description only needs to add context; it does add the useful note that editing a reusable block changes every occurrence. It does not, however, disclose list-specific behavior such as pagination, ordering, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and object; the second sentence earns its place by explaining the synced-pattern behavior. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single optional-parameter list operation with read-only annotations, this is nearly complete; it covers purpose and domain consequences. The main gap is no explicit output format or filtering/sorting details, though the tool name and list semantics make the absence tolerable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the site_id parameter is already fully documented; the description adds no further parameter semantics, earning the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), resource ('reusable blocks / synced patterns'), and scope ('the site's'), and explains what these fragments are. It does not explicitly differentiate from the closely named sibling list_block_patterns, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to choose this tool over alternatives; the sibling list_block_patterns could be confused with 'patterns'. No exclusions or routing to other list tools are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_revisionsList content revisionsA
Read-only

List the stored revisions of a piece of content, so you can see what changed and when — and recover a previous version if an edit went wrong.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContent ID.
typeNoContent type of that ID.post
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many revisions to return, newest first.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint:true and destructiveHint:false, and the description does not contradict them. It adds use-case context but no extra behavioral detail such as pagination, ordering, or a clear statement that listing alone does not restore content. The 'recover' wording is a mild risk but not an annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. The action comes first, followed by the intended value, making it easy to scan and parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the annotations cover the safety profile, but the description leaves a meaningful gap: it suggests recovery without steering the agent to restore_revision. For a read-only listing tool, this is otherwise reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description only refers generally to 'a piece of content' and adds no parameter-specific meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb-resource pair: 'List the stored revisions of a piece of content.' It says what the tool does and why it is useful. However, it does not explicitly distinguish itself from the sibling restore_revision, which is a closely related action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context for when to use the tool — to see what changed or after a bad edit — but it never says when not to use it or names restore_revision as the tool that actually performs restoration. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rolesList rolesA
Read-only

List the roles registered on the site with their capabilities, so you can pick the right role before creating or updating a user. Uses the companion plugin when available and falls back to the standard WordPress roles otherwise.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses implementation behavior: it uses a companion plugin when available and falls back to standard WordPress roles otherwise. This is valuable context not present in the structured metadata, with no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first states the primary action, included data, and use case; the second adds the fallback behavior. No filler or redundancy, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and no output schema, the description provides enough context: what is returned (roles with capabilities) and why to use it. It does not describe the exact return shape, but the low complexity and strong annotations make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter, site_id, is fully described in the schema with 100% coverage. The description does not add extra parameter-level detail, but the schema already explains optionality, default behavior, and how to get valid IDs. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('the roles registered on the site'), and what is included ('their capabilities'). It also gives the intended purpose—selecting a role before creating or updating a user—which clearly distinguishes it from user management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly identifies the context in which the tool is useful: before creating or updating a user. It does not name alternative tools or give exclusion criteria, but the use case is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sidebarsList widget areasA
Read-only

List the theme's widget areas (sidebars) and the widgets currently placed in each. Block themes typically have no classic sidebars — that is expected, not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint and non-destructive status, but the description adds valuable behavior beyond them: it warns that block themes typically have no classic sidebars and that this is expected rather than an error. It also clarifies that the response includes both widget areas and their placed widgets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The main action and target are front-loaded, and the second sentence adds genuinely useful edge-case context about block themes without bloating the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional documented parameter and a safety profile already covered by annotations, the description is complete. It states what is returned, handles the block-theme empty-result case, and needs no output schema or further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional site_id parameter is fully documented in the schema with 100% coverage, including behavior for single-site vs multi-site setups and a pointer to list_sites. The description adds no parameter-specific detail, but the schema already carries that burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and names the resource ('the theme's widget areas (sidebars)') plus the content returned ('widgets currently placed in each'). This clearly distinguishes the tool from list_widgets and other theme-related tools without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use by stating what it lists, and the block-theme note gives helpful context about expected empty results. However, it does not explicitly mention when to prefer this over sibling tools like list_widgets, nor does it state exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesList WordPress sitesA
Read-only

List every WordPress site configured on this MCP server, with its id, URL, auth method and whether it is writable. Start here when you do not know which site_id to use. Credentials are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds a valuable behavioral guarantee with 'Credentials are never returned.' It also clarifies that this is a server-wide enumeration rather than a site-scoped lookup, which is behavior not visible from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: the operation and output fields, the use case, and the credentials caveat. Nothing is redundant and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter discovery tool with no output schema, the description covers the invoked behavior, output shape, entry-point use case, and a security caveat. An agent can decide to call it and know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so there is no parameter gap to fill; the rubric baseline for zero-parameter tools is 4. The description instead clarifies what the returned data will contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List every WordPress site configured on this MCP server'. It then names the output fields (id, URL, auth method, writable), making the scope concrete and separating it from single-site tools like get_site or site_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Start here when you do not know which site_id to use.' That is a clear invocation context, though it does not name excluded alternatives such as get_site or test_site.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_skillsList playbooksA
Read-only

List every available playbook — the bundled ones and any you have saved. Saved skills shadow bundled ones with the same name.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only and non-destructive behavior. The description adds non-obvious context beyond that: saved skills shadow bundled ones with the same name, which an agent could not infer from the schema. It does not describe return shape, but the annotations lower the burden here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The main purpose is front-loaded, and the shadowing nuance is added only after the core behavior is established.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool, the description plus annotations is nearly complete. The only minor gap is not stating the exact response format, but the description's 'List every available playbook' sufficiently conveys intent without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and the schema description coverage is 100%, so parameter semantics carry no burden. The description appropriately focuses on behavior rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('every available playbook'), and further specifies the scope as bundled and saved. It also distinguishes this tool from the many other list_* siblings by naming the specific resource type it enumerates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool is useful: to enumerate all available playbooks including saved ones. It does not explicitly name alternatives or exclusion criteria, but there is no sibling tool that lists playbooks/skills, so the usage is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_style_variationsList style variationsA
Read-only

List the active block theme's style variations (styles/*.json, plus the colour-only and typography-only partials themes ship since WordPress 6.6) with each one's palette, font families and font sizes, so you can pick one without reading the JSON. Titles can repeat across kinds (a full "Evening" and a colour-only "Evening"), so each entry carries its index and kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOnly list variations of this kind.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, so the description does not need to restate safety. It adds valuable behavioral context: it includes both full variations and partials shipped since WordPress 6.6, warns that titles can repeat across kinds, and states that each entry carries an index and kind to disambiguate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences deliver the scope, the included variation types, the returned fields, and the duplicate-title caveat. There is no filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers what the agent will receive (palette, fonts, sizes, index, kind) and the main edge case (duplicate titles across kinds). It could be slightly more explicit about behavior when the 'kind' parameter is omitted, but this is a minor gap for a simple read-only listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the 'kind' concept (full, colour-only, typography-only partials) and why kind matters given duplicate titles across kinds. This helps an agent understand the enum parameter without needing to infer it from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('List the active block theme's style variations') and adds concrete details about what is returned (palette, font families, font sizes) and why (to pick one without reading the JSON). It implicitly differentiates this listing tool from related tools like apply_style_variation and list_themes by focusing on variation contents and disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement implies this tool is for choosing a style variation before applying it, but it does not explicitly say when to use it versus alternatives such as apply_style_variation, get_global_styles, or list_themes. No explicit exclusions are given, so the guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList block templatesA
Read-only

List the block theme's templates (front-page, single, archive…) or template parts (header, footer). Block themes only — a classic theme returns nothing here, and you should use the theme file tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWhich to list.template
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context beyond the annotations: it warns that classic themes return nothing from this tool and clarifies that only block themes are in scope. This helps an agent predict the outcome before calling the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences convey scope, examples, limitations, and an alternative without fluff. The main definition is front-loaded, and the caveat about classic themes is positioned exactly where an agent will notice it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with fully documented parameters and safe annotations, the description is complete. It explains what the tool lists, what kind of themes it applies to, what happens for classic themes, and where to go instead. No output schema is present, but the description's scope and behavioral caveats give enough context for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents both parameters, including the kind enum and the site_id behavior, so schema coverage is 100%. The description adds no parameter-level detail beyond naming template parts, so it does not need to compensate. A baseline of 3 is appropriate when the schema already carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it lists a block theme's templates or template parts, with concrete examples like front-page, single, archive, header, and footer. It also distinguishes itself from related tools by explicitly carving out classic themes, so an agent can tell it apart from list_themes and the theme file tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Block themes only') and when-not-to-use guidance ('a classic theme returns nothing here'), and points to an alternative tool category ('you should use the theme file tools instead'). This is exactly the kind of routing an agent needs to avoid wasted calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_termsList taxonomy termsA
Read-only

List terms in any taxonomy with search, ordering, hierarchy filtering and pagination. Works for categories, tags and custom taxonomies alike.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
postNoOnly terms assigned to this content ID.
slugNoFilter by exact slug.
orderNoSort direction.asc
parentNoOnly direct children of this term ID. Hierarchical taxonomies only.
searchNoMatch against term names.
orderbyNoWhich field to sort by.name
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many results per page.
taxonomyNoTaxonomy slug or REST base (category, post_tag/tags, or a custom one).category
hide_emptyNoSkip terms with no content assigned.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds scope and feature context (search, ordering, hierarchy filtering, pagination) but does not disclose additional behavioral details such as response shape or default taxonomy behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no redundancy. The core purpose is front-loaded and the taxonomy scope is stated immediately, making it quick for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema with 11 well-described optional parameters and safe read-only annotations, the description is adequate for a list operation. It could mention pagination defaults or output shape, but those are either low-risk or inferable from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents each parameter. The description's mention of 'search, ordering, hierarchy filtering and pagination' provides a useful conceptual grouping, but it adds no parameter details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('taxonomy terms'), and clearly distinguishes the scope from siblings like get_term by noting it works 'in any taxonomy' including categories, tags, and custom taxonomies. This leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this when you need to list terms across any taxonomy, including custom ones. It does not explicitly name alternatives or exclusion criteria, but the use case is evident from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_theme_filesList theme filesA
Read-only

List the files in a theme (or theme draft) with sizes, so you can see the template structure before reading or editing anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoTheme stylesheet or draft id. Defaults to the active theme.
subdirNoRestrict the listing to this subdirectory, e.g. "template-parts".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description does not need to prove safety. It adds useful scope context (theme or draft) and the fact that results include sizes, but it does not disclose additional behavior such as whether file contents are omitted or how drafts are prioritized.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no filler. The primary action and output are stated up front, and the purpose clause adds context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple, read-only listing tool with no required parameters and fully documented inputs. Even without an output schema, the description gives enough high-level detail about the result (files with sizes) for an agent to know what to expect. It could be more explicit about the exact return shape, but not enough to lower it below a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three optional parameters. The description adds no parameter-level detail beyond what the schema already provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (List), the resource (files in a theme or theme draft), and the output characteristic (with sizes). It also conveys the intent of inspecting template structure before editing, which distinguishes it from sibling tools like list_themes or read_theme_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a clear usage context: use this to see template structure before reading or editing anything. It does not explicitly name alternative tools or exclusions, but the intended workflow is evident enough for an agent to decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_themesList themesA
Read-only

List every theme installed on the site, showing which is active, which are block (full-site-editing) themes, and their versions and parents.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status.all
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds behavioral value by disclosing exactly what the response will convey: active theme, block-theme designation, versions, and parents, which goes beyond the bare annotation and schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the primary action and then enumerates the useful output attributes. There is no redundant wording or repetition of the tool title or schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward read-only listing tool with only two optional parameters, the description and schema together fully equip an agent to call it correctly. The lack of an output schema is mitigated by the explicit list of fields the tool returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, covering both the status filter and site_id selection, so the description need not repeat them. The tool description adds no direct parameter detail, but it does reinforce the list scope. This aligns with the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'every theme installed on the site', and the key output dimensions: active status, block/full-site-editing status, versions, and parents. This is specific enough to distinguish it from related siblings such as list_draft_themes, get_theme, and search_themes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clear: call this when you need an inventory of installed themes with status and version information. It does not explicitly name alternatives or exclusion conditions, but the wording 'every theme installed on the site' implies the boundary and no misleading alternatives are presented.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersList usersA
Read-only

List users with search, role filtering, ordering and pagination. Email addresses and roles are only returned when the authenticated user has list_users capability (Administrator); otherwise WordPress returns just the public author profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
orderNoSort direction.asc
rolesNoFilter by role slugs, e.g. ["editor", "author"]. Administrator only.
searchNoMatch against name, username, email and slug.
orderbyNoWhich field to sort by.name
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
per_pageNoHow many results per page.
has_published_postsNoOnly users who have published content.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not required to restate those. It adds value by disclosing that email addresses and roles are conditionally returned based on the list_users capability, which affects the response content and security context. This is a meaningful behavioral trait beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The primary purpose and capabilities are front-loaded in the first sentence, and the second sentence adds a critical permission nuance. Efficient and appropriately structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description covers the main functional aspects and the permission-based response variation. It does not describe the return format or pagination specifics beyond what the schema provides, but given the schema's thorough documentation and the read-only nature, it is sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description summarizes the key filtering and pagination features but does not add new meaning beyond the schema's parameter descriptions. It repeats the Administrator-only constraint for roles, which is already in the schema. No additional syntax, format, or edge-case details are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (users) with explicit capabilities (search, role filtering, ordering, pagination). Clearly distinguishes from the singular get_user sibling and other user-related tools by focusing on the collection behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for listing multiple users with filters, but does not explicitly contrast with get_user for single-user retrieval or mention when not to use it. The permission note hints at administrator vs public access but does not provide alternative tool routing. No exclusions or when-not-to-use guidance beyond the implicit scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_widgetsList widgetsA
Read-only

List widgets, optionally within one sidebar, including their settings and rendered output.

ParametersJSON Schema
NameRequiredDescriptionDefault
sidebarNoSidebar id to restrict to, e.g. "sidebar-1".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide the safety profile (readOnlyHint=true, destructiveHint=false), so the description only needs to add behavioral context. It adds the optional sidebar filtering and the fact that settings and rendered output are returned, which is useful, but it does not address pagination, ordering, or response envelope. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 13-word sentence that fronts the core operation ('List widgets'), states the optional filter, and names the returned content. Every word earns its place; there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with two documented optional parameters and no output schema, the description is complete: it names the resource, the optional scoping, and the return content (settings and rendered output). Annotations cover the safety profile, and the schema covers parameter semantics, so nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both sidebar and site_id fully documented. The description merely reinforces the optionality of the sidebar filter and adds no new semantic meaning beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List widgets') and immediately clarifies the optional scope ('within one sidebar') and the payload content ('including their settings and rendered output'). This clearly distinguishes it from widget mutation tools and from list_sidebars.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by stating that listing can be restricted to one sidebar, which tells an agent when to supply the sidebar parameter. It does not explicitly name alternatives like list_sidebars or update_widget, but the read-only listing purpose is unambiguous and no exclusions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_skillLoad a playbookA
Read-only

Load the playbook for the task at hand — a focused guide covering how to do this particular kind of WordPress work correctly, including the traps that are not obvious from the API. Call this FIRST when starting any substantive task: describe what you are about to do and the matching skill is returned. Page builders in particular (Elementor, Divi, Beaver Builder, Bricks, Breakdance) store content in builder-specific structures, and editing their posts as ordinary HTML corrupts the layout — the playbook explains what to do instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLoad a specific skill by name instead of searching.
queryNoWhat you are about to do, e.g. "build a landing page with Elementor" or "fix missing meta descriptions".

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds substantive context beyond that: the returned artifact is a guide containing non-obvious traps, the tool is meant to be invoked first in a workflow, and the page-builder warning (Elementor, Divi, Beaver Builder, Bricks, Breakdance) explains a concrete failure mode the playbook addresses. This workflow and domain context goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: definition of the resource, invocation guidance, and a concrete domain warning. The core purpose is front-loaded in the first sentence, and the length is appropriately sized for a two-parameter read-only tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two optional parameters, no output schema, and safety already declared in annotations, the description covers purpose, when to call, what is returned conceptually, and a critical domain caveat. The main gap is undefined edge-case behavior — what happens when no matching skill exists or when both name and query are supplied — which an agent would need for reliable fallback.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters, placing this at the baseline of 3. The description modestly reinforces the query parameter's intent ('describe what you are about to do and the matching skill is returned') but adds no new syntax, precedence, or combination rules beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action — 'Load the playbook for the task at hand' — and defines the resource as a focused guide covering how to do a particular kind of WordPress work correctly, including traps not obvious from the API. This retrieval semantics clearly distinguishes it from sibling skill-management tools like save_skill, delete_skill, and list_skills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Call this FIRST when starting any substantive task: describe what you are about to do and the matching skill is returned.' This establishes both the trigger condition and the invocation pattern. It stops short of a 5 because it does not name alternatives (e.g., list_skills for browsing) or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

moderate_commentsBulk moderate commentsA

Approve, hold, spam, trash — or unspam/untrash — several comments in one call; the practical way to clear a moderation queue. Reports per-comment outcomes rather than failing the whole batch on one error.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesComment IDs to act on.
actionYesWhat to do with each. unspam/untrash restore the comment's previous status.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses valuable behavioral detail beyond the annotations: per-comment outcomes are reported and a single error does not fail the whole batch. Annotations already signal mutation with readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description adds useful partial-failure context without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences: actions are front-loaded, the use case follows, and the key error-handling behavior closes it. Every clause contributes information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderately complex batch tool with no output schema, the description covers scope, action semantics, and high-level response behavior. It could be slightly richer about the exact per-comment result shape and how to route edge cases like a single comment, but the schema fills most remaining invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the tool description carries little parameter burden. It restates the available actions and batch scope but adds no meaning beyond what the schema already provides for ids, action, or site_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource—moderating comments—and enumerates the exact actions available: approve, hold, spam, trash, unspam, untrash. It clearly distinguishes itself from single-comment tools by emphasizing 'several comments in one call' and positions itself as the queue-clearing operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this for bulk moderation and clearing a moderation queue. However, it does not explicitly state when to use single-comment alternatives like update_comment or delete_comment, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profile_urlProfile a page (Query Monitor style)A
Read-only

Profile how WordPress builds one front-end URL, like Query Monitor but over MCP: which template renders it, every database query (count, total time, slowest with caller and plugin/theme attribution, duplicates), printed scripts/styles, outbound HTTP calls, PHP warnings/notices, conditional tags, memory and timing, plus headline findings. Uses a single-use token so only this one request is instrumented; ordinary visitors are unaffected. Profiles as an anonymous visitor by default. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPath or full URL on the site, e.g. "/about/" or "/?p=12"./
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
sectionsNoWhat to collect. Default: everything except "hooks" (counting every hook fired slows the request; ask for it explicitly).
as_logged_inNoProfile the page as the authenticated administrator (admin bar, logged-in queries) instead of as an anonymous visitor. The plugin switches the user for that request itself; no credentials are sent to the front end.
slow_query_msNoQueries at or above this many milliseconds are listed as slow.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Substantial disclosure beyond the readOnlyHint/destructiveHint annotations: the single-use token mechanism that leaves ordinary visitors unaffected, the anonymous-by-default behavior, the hooks-excluded-by-default performance tradeoff, the credential-free as_logged_in switch, and the companion-plugin prerequisite. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: collection scope, the instrumentation mechanism, the auth default, and the plugin dependency. The enumeration of collected data is long but densely informative rather than padded, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex instrumenting tool with no output schema, the description covers the non-obvious invocation facts: plugin requirement, single-use token, anonymous default, sections default, and the credential-free logged-in mode. Minor gaps: no failure behavior if the plugin is absent and no note on overall request-time impact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies. The description does not need to explain parameters; the schema already documents url defaults, site_id resolution via list_sites, the sections enum, as_logged_in behavior, and the slow_query_ms threshold.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Profile how WordPress builds one front-end URL' — and enumerates exactly what is collected: template, database queries, assets, outbound HTTP, warnings, conditionals, memory and findings. The Query Monitor analogy plus the 'one URL' scope clearly distinguishes it from siblings like get_page_html, get_template_for_url, or get_preview_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: it is a diagnostic profiler gated by a companion plugin, instruments only one request via a single-use token, and defaults to anonymous visiting. It does not explicitly name sibling alternatives or state when not to use it, so a point is lost for missing exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_draft_themePublish a draft themeA
Destructive

Promote a draft theme to the live site. The currently active theme is backed up first, so the change is reversible. This is the one step that changes what visitors see — everything before it is sandboxed. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoDraft theme id to publish. Defaults to the most recent draft.
confirmNoRequired — this changes the live site.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, but the description adds valuable context: 'The currently active theme is backed up first, so the change is reversible.' It also clarifies the live-site impact and that prior steps are sandboxed, going beyond the annotation flags without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler. The first sentence states the core action, the second provides the key safety behavior, and the third gives usage context and a hard requirement. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the action, the live-site impact, reversibility, sandboxing context, and the confirmation requirement. An agent has enough information to decide to invoke it and to know the consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents theme, confirm, and site_id. The description only reinforces that confirm must be true, which is already stated in the schema ('Required — this changes the live site'). It adds no new parameter-level detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Promote') and resource ('a draft theme to the live site'), making the operation unambiguous. It also adds 'This is the one step that changes what visitors see', which separates it from related draft/theme tools like list_draft_themes and activate_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use it: 'This is the one step that changes what visitors see — everything before it is sandboxed.' This implies the tool is for the final go-live action. It does not explicitly name an alternative or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

purge_cachePurge site cachesA
Idempotent

Clear the site's caches through each installed cache layer's own API — WP Rocket, LiteSpeed, W3 Total Cache, WP Super Cache, WP Fastest Cache, SiteGround, Cache Enabler, Breeze, Hummingbird, Nginx Helper, Autoptimize, Varnish (Proxy Cache Purge), WP-Optimize, the Cloudflare plugin, and Kinsta / WP Engine / Pantheon / GoDaddy host caches — plus the object cache. Use it when a change does not appear on the front end. With scope "url" only that page is purged where the layer supports it. Afterwards the page is re-fetched as a visitor and its cache headers reported, so you can tell whether a CDN WordPress cannot reach still holds the old copy. Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPath or full URL on this site to purge, e.g. "/pricing/". Required when scope is "url"; for "all" it only chooses which page to re-fetch for verification (default: homepage).
scopeNo"all" purges every cache; "url" purges one page (layers without per-URL purging are cleared entirely).all
verifyNoRe-fetch the page anonymously after purging and report its cache headers.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the action as non-readonly, non-destructive, and idempotent; the description enriches this by naming the exact mechanisms (each cache layer's own API), the per-URL fallback behavior, the post-purge re-fetch and cache-header report, and the companion-plugin requirement. This is substantial added transparency beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action and use case, and every sentence contributes useful detail. The exhaustive list of cache plugins and hosts is long but informative; it could be trimmed to 'all supported cache layers' without losing function, so 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four parameters and no output schema, the description covers what the tool does, when to use it, prerequisite, scope behavior, verified re-fetch, and result reporting. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains url, scope, verify, and site_id in detail. The description restates the url/scope interaction but adds no new parameter-level semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'Clear' plus the resource 'the site's caches' and enumerates the concrete cache layers targeted. No sibling tool overlaps with this operation, so purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: 'Use it when a change does not appear on the front end.' It also explains url vs all scopes and flags the companion-plugin prerequisite, giving clear context. It does not name alternative tools or when-not-to-use cases, so it misses the top rung.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_theme_fileRead a theme fileA
Read-only

Read the contents of one theme file. Always read before editing — write_theme_file replaces the whole file, and edit_theme_file needs exact text to match.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to the theme root, e.g. "functions.php" or "template-parts/hero.php".
themeNoTheme stylesheet or draft id. Defaults to the active theme.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_charsNoTruncate very large files at this many characters.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by warning that write_theme_file replaces the whole file and edit_theme_file needs exact text — behavioral context about sibling tools that helps the agent avoid destructive mistakes. It doesn't mention truncation behavior, but the max_chars parameter schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core action is stated first, and the usage guidance is front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full schema coverage and annotations covering safety, the description is nearly complete. It explains the relationship to sibling write/edit tools, which is the main contextual gap an agent might have. It doesn't describe return format, but no output schema exists and the tool is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific detail beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('one theme file'), and the title confirms it. It clearly distinguishes itself from siblings like write_theme_file and edit_theme_file by framing reading as the prerequisite for those operations. An agent can tell this tool apart from its siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Always read before editing' and explains why: write_theme_file replaces the whole file, and edit_theme_file needs exact text to match. This gives clear when-to-use guidance and implicitly names the alternatives. It could be slightly more explicit about when not to use it, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_fieldsRegister editable fieldsA

Register custom fields that appear as native meta boxes in wp-admin (or as a settings page for site-wide options), and are automatically exposed to the REST API so they can be read and written afterwards. Use this when building a theme so the site stays editable by humans without touching code. Values are stored as ordinary post meta or options, so the data survives even if this tooling is removed. Fourteen field types are supported: text, textarea, wysiwyg, number, email, url, date, select, checkbox, radio, color, image, gallery, repeater.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesGroup title shown above the meta box.
fieldsYesThe fields in this group, in display order.
contextNopost_meta: a meta box on content. options: a site-wide settings page.post_meta
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
positionNoWhere the meta box sits in the editor.normal
group_keyYesUnique key for this field group, e.g. "homepage_hero".
post_typesNoWhich content types get the meta box, e.g. ["page"]. Required for post_meta.
descriptionNoHelp text shown at the top of the group.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses persistence behavior ('stored as ordinary post meta or options'), data survival ('survives even if this tooling is removed'), and API exposure. Annotations already indicate a write operation, but this adds useful storage and durability context. It does not clarify behavior if group_key is registered again, which idempotentHint=false hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, with the primary purpose front-loaded in the first sentence. The field-type enumeration is somewhat redundant with the schema but not overly wasteful. Overall it is concise and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, typical use case, storage behavior, and field-type variety. With the schema fully documenting all parameters and no output schema required, this is largely complete. It omits what happens on repeated registration, but that is a minor gap given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter baseline is 3. The description lists the fourteen field types, but this mostly repeats the enum in the schema rather than adding new meaning. It provides no extra guidance on parameter relationships or edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Register') and resource ('custom fields') and clarifies where they appear ('native meta boxes in wp-admin' or 'settings page for site-wide options'). It also mentions REST API exposure, which distinguishes it from management siblings like list_field_groups and delete_field_group.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context: 'Use this when building a theme so the site stays editable by humans without touching code.' It does not mention explicit alternatives or exclusions (e.g., when to use set_option instead), so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_menu_itemsReorder menu itemsA

Set the order and nesting of several menu items at once, which is far less error-prone than updating them one by one.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesThe desired arrangement.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is not read-only and not destructive, and the description adds that the operation applies to several items at once. However, it does not disclose response behavior, partial failure handling, or whether the operation is atomic, leaving some behavioral uncertainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action and includes a brief value statement. No wasted words, and the sibling comparison earns its place by clarifying usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple two-parameter schema and full schema coverage, the description is nearly sufficient. It lacks details about return values or error scenarios, but for a straightforward bulk reorder tool the available information is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents the parameters. The description's 'order and nesting' phrasing loosely maps to menu_order and parent, but adds no additional parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Set the order and nesting of several menu items at once.' This clearly identifies the tool's function and distinguishes it from single-item operations like update_menu_item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'far less error-prone than updating them one by one' signals when this tool is preferable, implying a bulk reorder use case versus individual updates. It provides context but does not explicitly state exceptions or when to prefer the single-item sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reset_template_customizationReset a customised templateA
Destructive

Revert a template or template part that was edited in the Site Editor back to the theme's file, by deleting the database copy (DELETE /wp/v2/templates/{id}?force=true). Only works on items whose source is "custom" — find them with diff_global_styles. Without confirm_token it is a dry run that shows what would be lost; if the item was created in the Site Editor and has no theme file, deleting removes it entirely, and the preview says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate id as "theme//slug", e.g. "twentytwentyfive//single".
kindNoWhether the id names a template or a template part.template
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
confirm_tokenNoToken from this tool's dry-run preview. Omit to preview.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses the destructive mechanism (DELETE /wp/v2/templates/{id}?force=true), the dry-run behavior without confirm_token, and the edge case where a Site Editor-created item with no theme file is removed entirely. This is substantial context well beyond the destructiveHint=true annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense, front-loaded sentences carry all the essential information: action, mechanism, applicability condition, dry-run flow, and edge case. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the confirmation flow, the candidate constraint, and the worst-case outcome. It stops short of describing the exact response format after confirmation, but the essential operational context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all four parameters with 100% description coverage, but the description adds meaning around confirm_token by explaining the dry-run preview and what would be lost. It also clarifies the candidate condition for the id/kind parameters, going slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action: 'revert a template or template part ... back to the theme's file', and names the exact resource and mechanism (deleting the database copy). The 'source is custom' qualifier further distinguishes it from ordinary read/update template tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly gives the condition under which the tool applies: 'Only works on items whose source is custom', and it points the agent to diff_global_styles for finding candidates. It does not explicitly name a 'when not to use' alternative like update_template, but the intended use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rest_apiCall any REST endpointA

Call any WordPress REST endpoint directly — the escape hatch for anything the dedicated tools do not cover, including routes registered by plugins such as WooCommerce, Yoast or ACF. Use discover_rest_routes first to find valid routes rather than guessing: an invented route returns rest_no_route and tells you nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body for write methods.
queryNoQuery string parameters.
routeYesRoute including its namespace, e.g. "/wc/v3/orders" or "/wp/v2/posts/12".
methodNoHTTP method. Anything other than GET counts as a write and needs a writable site.GET
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_charsNoTruncate the response at this many characters.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds one behavioral detail beyond the annotations: an invented route returns rest_no_route and gives no useful information. However, it does not disclose important side-effect or authorization behavior for write methods, even though the schema allows POST, PUT, PATCH, and DELETE. The annotations already supply some signal (readOnlyHint false, openWorldHint true), so the description provides modest additional context but does not fully carry the behavioral burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, the plugin-route nuance follows naturally, and the discover_rest_routes warning is placed precisely where it matters. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a deliberately open-ended generic REST tool, the description is as complete as practical: it covers scope, discovery guidance, and failure behavior. It could go further on side effects or authorization for non-GET methods, but the schema's method description and annotations already cover some of that. There is no obvious critical omission that would prevent an agent from calling it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% parameter coverage, so the baseline is strong. The description adds meaningful route guidance: route values must be discovered rather than invented, and plugin-registered namespaces are valid targets. That is useful parameter-level insight beyond what the schema states for the required route field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource statement: "Call any WordPress REST endpoint directly." It also distinguishes this tool from the many dedicated sibling tools by calling it the escape hatch for anything they do not cover, including plugin-registered routes from WooCommerce, Yoast, and ACF. The title and description are consistent and aligned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool: for scenarios where the dedicated tools do not cover the needed endpoint. It also gives an explicit before-step: 'Use discover_rest_routes first to find valid routes rather than guessing,' including a concrete failure signal (rest_no_route) and why guessing is useless.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_plugin_settingsRestore a plugin option from backupA
Destructive

Restore an option to a value saved before an update_plugin_settings write. Every write keeps the last five previous values; by default this restores the most recent. The first call previews the current value next to the one that would be restored and returns a confirm_token; the second applies it. The current value is itself backed up first, so a restore is undoable. Use this to roll back a settings change that broke something.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionYesThe option name to restore.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
backup_indexNoWhich backup to restore (0 = oldest kept). Omit for the most recent.
confirm_tokenNoToken from the preview. Omit it first to see the current value next to the one that would be restored.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false, destructiveHint=true, and idempotentHint=false. The description adds useful context: it describes the backup-retention behavior (last five values), the two-call flow that requires a confirm_token, and states that the current value is backed up first, making the restore undoable. This goes beyond annotations by explaining the mutation flow and safety net, which is valuable for an agent that might otherwise assume a simple immediate mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and well-structured: it starts with the core action, then provides the backup retention and two-step process, and ends with a clear use case. No fluff; each sentence adds critical information without redundancy. Front-loading the action and use case is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (two-step process, backups, safety), the description covers essential operational aspects: it explains the flow, the default, and the undoability. It doesn't explicitly mention return values or error handling, but there's no output schema, so agents must infer. It also doesn't discuss the backup_index semantics (0=oldest) which might be confusing, but the schema partly covers that. Overall, it's quite complete for the agent to call it correctly with the given schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters with descriptions (100% coverage). The description adds context about the two-call flow, which clarifies the confirm_token parameter's role, but it doesn't add additional semantic detail for option, site_id, or backup_index beyond what the schema says. Since the schema is comprehensive, a baseline of 3 is appropriate, and the description does provide slight illumination on confirm_token usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (restore), the resource (plugin option), and the source (backup taken before an update_plugin_settings write). It distinguishes itself from update_plugin_settings by describing a rollback use case. It's specific with verbs and resource context, making it easy for an agent to understand its unique role among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: 'Use this to roll back a settings change that broke something.' It also explains the two-step process (preview with token, then confirm) and that it defaults to the most recent backup. It implies an alternative (update_plugin_settings) but does not explicitly name it; however, the context is clear enough for an agent to select this tool appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_revisionRestore a revisionA

Restore a piece of content to an earlier revision. The current version is itself saved as a revision first, so this is reversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContent ID.
typeNoContent type of that ID.post
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
revision_idYesRevision ID to restore, from list_revisions.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutation), destructiveHint=false (not destructive), idempotentHint=false (not idempotent). The description adds the key behavioral detail that the current version is saved as a revision first, making the operation reversible. This goes beyond what annotations provide and clarifies the non-destructive nature. It doesn't state whether the operation requires specific permissions (e.g., WordPress edit capability), which would be additional context, but the reversibility is the most important behavioral aspect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the action and key behavioral guarantee. No fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters (two optional) and no output schema, the description covers the core behavior. It doesn't describe the return value or error cases, but since the output schema is absent, the agent might need to know what the response looks like; however, the description's focus on reversibility is enough for the main use case. It could mention that the 'id' must match an existing content item, but schema covers that minimally. Overall, adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully described in the schema: id is 'Content ID', revision_id is 'Revision ID to restore, from list_revisions'. The description doesn't add much beyond the schema, but the schema is clear. Since coverage is high, the baseline is 3; the description's mention of 'earlier revision' reinforces the semantics but adds little.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('restore') and resource ('content to an earlier revision'), and the title mirrors it. It clearly distinguishes from siblings like list_revisions, which lists revisions, and is a natural counterpart to restore actions. The action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is for restoring to an earlier revision, implying the need to call list_revisions first (as the schema's revision_id description also suggests, but the description itself doesn't explicitly say 'use list_revisions to get revision_id'). It doesn't state when not to use it (e.g., for content that doesn't have revisions), but the context is clear enough given the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_abilityRun a plugin abilityA

Execute an ability registered through the WordPress Abilities API. This is the preferred way to write data a plugin owns — the plugin's own validation, hooks and cache invalidation all run, which raw SQL would bypass. Check get_ability_info for the input schema first. The Abilities API maps intent onto HTTP methods: read-only abilities use GET, ordinary ones POST, and destructive ones DELETE; this is chosen automatically unless you override it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFully qualified ability name from discover_abilities, in the form "namespace/ability".
inputNoArguments matching the ability's input_schema.
methodNoHTTP method. "auto" reads the ability's definition and picks GET for read-only, DELETE for destructive, POST otherwise.auto
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark readOnlyHint=false and destructiveHint=false, which is ambiguous. The description goes beyond by explaining the automatic HTTP method mapping (GET for read-only, DELETE for destructive) and that plugin hooks and cache invalidation run. This is valuable behavioral context not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but a bit long; however, every sentence adds value—usage context, method mapping, and site_id default. It is front-loaded with the main purpose and then adds necessary nuance. Could be slightly tightened, but no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of output schema and nested input object, the description covers the key aspects: usage, method selection, and site selection. It omits error handling or return value details, but for a tool with openWorldHint=true and no output schema, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well documented in the schema itself (name, input, method, site_id). The description adds context by explaining the 'auto' method and the site_id default behavior, which enhances understanding beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute an ability registered through the WordPress Abilities API' — specific verb and resource. It distinguishes itself from raw SQL and mentions get_ability_info as a companion, enough to differentiate from siblings like discover_abilities or get_ability_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it is the 'preferred way to write data a plugin owns' and contrasts with raw SQL. It advises checking get_ability_info first for the input schema, which is direct when-to-use guidance. It does not list alternatives by name, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_wp_cliRun a WP-CLI commandA

Run a WP-CLI command against the site. Commands are emulated in PHP by the companion plugin — no WP-CLI binary or SSH access is needed on the host. Only allowlisted commands run (see list_cli_commands); everything else is refused. Writing commands need an Administrator account, and search-replace always previews as a dry run before it will touch anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format the command should produce where it supports one.json
commandYesThe command without the leading "wp", e.g. "plugin list --status=active" or "option get blogname".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
confirm_tokenNoToken from a previous dry-run preview, required for destructive commands such as search-replace.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It goes well beyond annotations by adding implementation and safety details: commands are emulated in PHP with no binary/SSH dependency, unauthorized commands are refused, writing commands require Administrator credentials, and search-replace requires a dry-run confirmation. This is precisely the behavioral information an agent needs to choose and call it correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, and each sentence carries distinct information: core action, execution model, and security/completion constraints. The description is front-loaded, readable, and contains no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with strong schema support and no output schema, the description covers the essential operational safety context: what commands are allowed, who can run mutations, and how search-replace requires confirmation. Nothing essential is missing for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents command, format, site_id, and confirm_token accurately. The description adds only a small extra link between destructive commands and the dry-run/token flow, which is useful but does not substantially improve parameter meaning beyond the structured definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-object pairing, 'Run a WP-CLI command against the site', and clearly distinguishes the tool from individual plugin/content/theme helpers by framing it as a general command runner. Mentioning the allowlist and list_cli_commands helps an agent separate capabilities without inspecting all siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear necessary condition for usage: the command must be allowlisted, and it points to list_cli_commands for the accepted set. It stops short of explicitly contrasting with sibling shells like rest_api or execute_sql_query, but the WP-CLI and allowlist framing make the intended scope sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_skillSave a playbookA

Save a playbook so future sessions follow the same conventions — your site's structure, a client's tone of voice, a deployment routine, the fields a particular theme expects. Written to ~/.wpxmcp/skills and loaded by load_skill from then on. Saving a skill with a bundled skill's name overrides it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLowercase hyphenated identifier, e.g. "acme-blog-conventions".
titleYesHuman-readable title.
contentYesThe playbook itself, in Markdown. Write it for an agent: concrete steps, exact tool names, and the mistakes to avoid.
keywordsNoTerms that should trigger this skill, e.g. ["acme", "blog post", "tone"].
descriptionYesOne line on when this skill applies — this is what load_skill matches against.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the persistence location (~/.wpxmcp/skills), the future-loading behavior, and the important side effect that saving under a bundled skill's name overrides it. This is exactly the kind of behavioral detail an agent needs when deciding whether to call the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The first sentence conveys purpose and examples, the second explains storage and future loading, and the third warns about the override edge case. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All five parameters are fully described in the schema, and the description covers the essential behavioral context: where the skill is written, how it is loaded later, and what happens on name collision. No critical information is missing for an agent to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents all five parameters. The tool description adds no meaningful per-parameter semantics beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb-resource pair ('Save a playbook') and clearly explains the purpose: making future sessions follow the same conventions. It also differentiates the tool from load_skill by explaining that saved skills are later loaded by load_skill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: when you want to persist conventions like site structure, client tone, or deployment routines. It references load_skill as the counterpart, providing a useful routing cue, though it does not explicitly contrast with delete_skill or list_skills.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_pluginsSearch the plugin repositoryA
Read-only

Search the public WordPress.org plugin repository. Returns slug, rating, install count, last-updated date and compatibility — enough to judge whether a plugin is maintained before installing it. This queries WordPress.org, not your site.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
searchYesWhat to search for, e.g. "contact form" or "seo".
per_pageNoHow many results per page.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context by clarifying that the tool queries WordPress.org rather than the local site and by listing the returned data fields. It does not mention rate limits or network failure behavior, but the added scope and return information exceeds what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff: the first identifies the action and target, the second lists useful return fields, and the third clarifies the external scope. The most important differentiator ('queries WordPress.org, not your site') is placed at the end but is still crisp and memorable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with a fully documented schema, the description covers the key missing context: the external data source, the purpose, and the kind of results returned. There is no output schema, so the explicit return-field list partially compensates. It could mention pagination or ordering, but the schema already documents page and per_page.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with descriptions, so the baseline is 3. The description does not add parameter-specific semantics beyond the schema, but it does clarify the purpose of the results, which indirectly explains why 'search', 'page', and 'per_page' matter for repository discovery.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search') and a specific resource ('public WordPress.org plugin repository'), and clearly distinguishes this from site-scoped operations. It also enumerates what the tool returns (slug, rating, install count, last-updated date, compatibility), leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use it: when searching the public WordPress.org repository and when assessing plugin maintenance before install. It also distinguishes it from site-local tools with 'This queries WordPress.org, not your site,' though it does not explicitly name sibling alternatives like search_themes or list_plugins.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_siteSearch across the siteA
Read-only

Search every searchable content type at once using WordPress's own search index, returning what type each hit belongs to. Broader than list_content's per-type search.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
typeNoSearch content, taxonomy terms, or post formats.post
queryYesWhat to search for.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
subtypeNoRestrict to one post type or taxonomy.
per_pageNoResults per page.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only and non-destructive, and the description adds useful behavioral context: it uses WordPress's own search index and returns a type label for each hit. This gives the agent meaningful expectations beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry the full scope, mechanism, output shape, and a sibling comparison with zero filler. The key differentiating information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with a fully documented schema)Skip? The description clarifies what results look like ('what type each hit belongs to'), which partially compensates for the lack of an output schema. Pagination and site selection are already covered by the schema, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself documents all six parameters, including query, page, per_page, type, subtype, and site_id. The description adds little parameter-level meaning beyond confirming that results include type information, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Search'), a clear resource ('every searchable content type at once'), and the mechanism ('WordPress's own search index'). It also explicitly differentiates itself from list_content, making its scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this when you need a broad cross-type search, and it explicitly contrasts with list_content's per-type search. It does not enumerate all exclusions or full alternative routing, but the guidance is sufficient for typical selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_stock_photosSearch stock photosA
Read-only

Search Unsplash or Pexels for royalty-free photos and get back candidate image URLs with their required attribution. Pass a chosen result's download_url to create_media (along with its attribution) to bring it into the library. Requires UNSPLASH_ACCESS_KEY or PEXELS_API_KEY to be set on this MCP server.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat to search for, e.g. "modern office desk".
per_pageNoHow many results per page.
providerNoWhich provider to use. "auto" picks whichever API key is configured.auto
orientationNoPreferred aspect ratio.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds valuable context beyond annotations: it explicitly requires environment variables (UNSPLASH_ACCESS_KEY or PEXELS_API_KEY) and mentions that results are candidate URLs that must be attributed and passed to create_media. This reveals external dependency and usage behavior not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with zero filler. Each sentence serves a purpose: stating the function, explaining the integration path, and noting the prerequisite. The most important information is front-loaded. It is a model of conciseness and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (external providers, attribution requirement, API key dependency), the description covers the essential operational aspects: what it returns (URLs and attribution), how to chain results into create_media, and required environment setup. While it doesn't describe errors or pagination behavior, those are not critical for basic usage and are implied by the schema. The description is complete enough for an agent to invoke it successfully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (query, per_page, provider, orientation) is already documented with descriptions and enums. The tool description does not add any additional meaning to parameters; it focuses on workflow and prerequisites. Given the high schema coverage, a baseline of 3 is appropriate, and the description does not elevate it further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and names the specific resource and providers ('Unsplash or Pexels'), and clearly states the output ('candidate image URLs with their required attribution'). It differentiates from sibling search tools like search_plugins by focusing on stock photos and even references create_media for integration, making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on how to use the tool (search for photos, then pass the result to create_media), which is a usage guideline. It does not explicitly state when not to use it or name alternatives (e.g., for existing media use list_media), but the context makes the intended workflow clear. The guidance is not misleading; it just lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_themesSearch the theme repositoryA
Read-only

Search the public WordPress.org theme directory. Returns slug, version, rating, install count, last-updated date, compatibility and whether it is a block theme — enough to choose one before install_theme. This queries WordPress.org, not your site.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
searchYesWhat to search for, e.g. "portfolio" or "minimal blog".
per_pageNoHow many results per page.
block_themes_onlyNoOnly return block (full-site-editing) themes.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only/non-destructive, and the description adds that the actual target is the external WordPress.org directory, not the local site. It also discloses the key return surface (slug, version, rating, install count, last-updated, compatibility, block-theme flag), which matters because no output schema exists. This goes beyond annotation boilerplate without loading unnecessary caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences contain the verb, resource, return fields, intended use case, and the external-not-local distinction. Nothing is redundant or repeated from the schema. The most decision-relevant facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search with a fully documented schema, the description covers what results contain, where they come from, and when to use the tool. No output schema exists, so the explicit return-field list closes that gap. An agent has enough to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters (search, page, per_page, block_themes_only) already have descriptive entries at 100% schema coverage. The description's mention of block-theme flag maps to block_themes_only but adds no new format or constraint details. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'Search the public WordPress.org theme directory' with a specific verb and resource, then enumerates the returned fields. The closing 'queries WordPress.org, not your site' clearly differentiates it from site-local theme tools like list_themes. It is unmistakably distinct from search_plugins and install_theme.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description gives clear selection context: use when you need theme metadata 'enough to choose one before install_theme'. It also excludes the alternative interpretation by stating it queries WordPress.org rather than the user's site. It doesn't name sibling alternatives explicitly, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

security_auditAudit site securityA
Read-only

A read-only security review with a 0–100 score and prioritised findings, each with evidence and a concrete fix. Probes the site from outside as an anonymous visitor (user enumeration via REST and ?author=, XML-RPC, public debug.log, exposed wp-config backups / .git / .env, uploads directory listing, security headers, version leaks, http→https), inspects configuration from inside via the companion plugin (debug display, file editor, wp-config permissions, admin usernames, application passwords, salts, pending updates, PHP end-of-life, inactive plugins/themes, HTTPS), and checks core, plugin and theme versions against the free WPVulnerability database. Works partially without the companion plugin and says what it skipped. Never downloads more than a few KB of any exposed file.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
max_lookupsNoCap on vulnerability lookups; core first, then active plugins/themes, then inactive ones.
include_externalNoRun the anonymous outside-in probes against the site's own URL.
include_vulnerabilitiesNoLook up core, plugins and themes in the WPVulnerability database (outbound requests to wpvulnerability.net).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, but the description adds substantial behavioral detail: probes as an anonymous visitor, lists specific techniques, inspects via a companion plugin, works partially without it, reports skipped items, and caps downloads to a few KB. This far exceeds what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: summary, external probes, internal checks, version database, partial-operation behavior, and safety limit. The most important facts (read-only, score, findings) are front-loaded, and the long list of probes is organized and relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema, the description adequately covers return value shape (score, prioritized findings, evidence, fix, skipped items), operational limits (max lookups, download cap), prerequisites (companion plugin optional), and external calls. An agent has enough to invoke it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema for individual parameters, though it does enrich the overall context of how the audit operates. No compensation needed since the schema fully documents each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (read-only security review) on a specific resource (WordPress site) with a concrete output (0-100 score, prioritized findings with evidence and fix). Clearly distinguishes from sibling tools like audit_content or check_accessibility by focusing on site-wide security posture.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context that this is an external/internal security audit and describes its scope in detail. It does not explicitly name alternatives or state when not to use it, but the purpose is unambiguous among the sibling tools, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seo_site_checkSite-level SEO checkA
Read-only

Check the site-wide SEO fundamentals in one call: "Discourage search engines" (blog_public), robots.txt content and whether it blocks everything, sitemap reachability (core wp-sitemap.xml or the SEO plugin's index), homepage title/description/canonical/Open Graph, plain vs pretty permalinks, HTTPS and the http→https redirect, and duplicate titles across recent published content. Each check reports pass/warn/fail with a concrete fix.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
sample_sizeNoHow many recent published posts and pages to scan for duplicate titles.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so the description need not restate safety. It adds useful behavioral detail beyond annotations by disclosing that 'each check reports pass/warn/fail with a concrete fix,' which tells the agent what kind of result to expect. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence, but every clause adds a distinct check or behavior and the main action is front-loaded. It is arguably longer than necessary for a simple tool, but given the breadth of checks, the length is justified and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description compensates by specifying the output behavior (pass/warn/fail with concrete fixes) and enumerating all included checks. With idempotent and destructive hints covered by annotations, nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents both site_id and sample_size. The description adds no extra semantic detail about the parameters beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Check') and resource ('site-wide SEO fundamentals'), then enumerates a concrete list of checks. The phrase 'site-wide' clearly distinguishes it from content-level or per-page SEO tools like get_seo_meta, so an agent can separate it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for running a full site-level SEO review 'in one call.' It does not explicitly name alternatives or say when not to use it, but the scope is unambiguous enough for an agent to choose it over content-specific or meta-focused tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_content_metaWrite custom fieldsA

Write custom fields (post meta) on a content item, including keys not registered with show_in_rest — which core REST refuses to write. Needs the companion plugin. Values are stored as standard post meta, so they survive if this tooling is removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContent ID.
metaYesKey/value pairs to write. A null value deletes the key.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds useful behavioral context: values persist as standard post meta even if this tooling is removed, and the tool requires a companion plugin. This does not contradict the readOnlyHint=false or destructiveHint=false annotations, and the plugin dependency is material to whether the call will succeed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences. The first sentence front-loads the purpose and key differentiator; the second covers the dependency and persistence guarantee. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, the unique capability with unregistered keys, the plugin prerequisite, and persistence behavior. It does not mention overwrite semantics or return value, but with full schema coverage and annotations present, it is nearly complete for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all three parameters with descriptions, so the baseline is 3. The tool description does not add parameter-level detail beyond the schema; the null-deletes-key behavior is already in the schema. It does add useful conceptual context about unregistered keys, but not new semantics for id, meta, or site_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Write custom fields (post meta) on a content item.' It immediately distinguishes itself from core REST by noting it can write keys not registered with show_in_rest, which clearly separates it from update_content, get_content_meta, and set_seo_meta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states a clear prerequisite ('Needs the companion plugin') and identifies a key use case: writing keys that core REST refuses to write. It does not explicitly name alternative tools or say when not to use it, but the context is enough for an agent to select it for custom-field writes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_optionWrite a site optionA

Write a value to the WordPress options table. Options drive plugin and theme behaviour, and a wrong value can break the site — read the current value first with get_options, and prefer a plugin's own settings screen or ability where one exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOption name.
valueYesNew value. Arrays and objects are serialised the way WordPress expects.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
autoloadNoWhether to load this option on every page request. Leave unset to keep the current behaviour; large values should not autoload.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The mutation nature is already indicated by readOnlyHint=false and idempotentHint=false, but the description adds valuable real-world risk context: a wrong value can break the site and the current value should be read first. It goes beyond annotations, though it does not detail overwrite semantics or response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the operation first, then the risk, then the safer alternatives. Every clause earns its place without repeating schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with a fully documented schema and mutation-relevant annotations, the description supplies the missing operational context: options affect site behavior, wrong values are dangerous, and safer alternatives exist. With no output schema, detailed return-value documentation is not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 100%, the schema already explains name, value, site_id, and autoload. The description adds caution around the value parameter but does not provide additional parameter-level meaning beyond what is already in the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Write') and a precise resource ('WordPress options table'), which clearly identifies the tool's function. It distinguishes itself from read operations like get_options and from other site configuration tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to read the current value first with get_options and to prefer a plugin's own settings screen or ability when available. This gives concrete when-to-use and when-not-to-use guidance beyond what the schema or annotations provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_seo_metaSet SEO metadataA
Destructive

Set the SEO title, meta description, focus keyword, canonical URL and robots noindex/nofollow for one content item, written the way the active SEO plugin expects: its own REST route where one exists (Rank Math updateMeta, AIOSEO, SEOPress), otherwise its post meta keys via core REST (when registered) or the companion plugin's meta route. Always previews first: the initial call shows before → after and returns a confirm_token; re-run with the token to write. Refuses when no SEO plugin is active, because WordPress core would ignore the values.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContent ID to update.
typeNoContent type of the id. Omit to search post, page and then other types.
titleNoSEO title. Plugin template variables (%%title%% for Yoast, %title% for Rank Math) are passed through. Empty string clears the override.
pluginNoForce the target plugin when detection misses it. Writing a plugin's keys while that plugin is inactive has no visible effect.
noindexNotrue asks search engines not to index this item; false explicitly allows indexing.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
nofollowNotrue asks search engines not to follow links on this item.
canonicalNoAbsolute canonical URL. Empty string clears the override so the plugin's default applies.
descriptionNoMeta description; ~140–160 characters reads best in results. Empty string clears the override.
confirm_tokenNoToken from the preview call. Omit to preview; pass it back unchanged with identical arguments to apply.
focus_keywordNoFocus keyphrase used by the plugin's content analysis. Not supported by The SEO Framework.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses a two-step write flow: the initial call returns a confirm_token and only a re-run with that token writes. It also details plugin-specific routing and the no-plugin refusal, adding significant behavioral context that annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action and field list, then the two-step mechanism and refusal condition. Every sentence carries unique information and the length is justified by the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the multi-plugin routing, mandatory preview/confirm sequence, and no-plugin failure mode, which are the non-obvious requirements. It does not describe the return payload of the write call, but given the preview behavior is stated and there is no output schema, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter descriptions already explain empty-string clearing, plugin template variables, and the confirm_token contract. The description echoes the field list but adds no per-parameter meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set the SEO title, meta description, focus keyword, canonical URL and robots noindex/nofollow for one content item.' It explicitly enumerates the fields and the plugin-aware routing distinguishes it from generic setters like set_content_meta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The preview-then-confirm workflow and the refusal condition when no plugin is active are clearly explained, which tells the agent how and when not to call it. However, it never names sibling alternatives such as set_content_meta or update_content, so guidance on choosing this tool over alternatives is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_theme_modSet a Customizer settingA

Write one Customizer setting (theme mod) for the active theme. What is valid depends entirely on the theme — read get_theme_mods first to see the keys it uses.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesTheme mod name, e.g. "custom_logo" or a theme-specific key.
valueYesNew value. Types matter: a logo expects an attachment ID, a color expects a hex string.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds context beyond annotations: it warns that validity depends on the theme and instructs to read get_theme_mods first. It doesn't mention side effects like overwriting existing values, but the annotations cover the safety profile. A 4 is appropriate because the description adds meaningful behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core action is front-loaded, and the critical guidance (read get_theme_mods first) is included immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple write tool with 100% schema coverage and no output schema, the description is nearly complete. It covers the key risk (theme-dependent validity) and the prerequisite (get_theme_mods). It could mention that the operation overwrites an existing mod, but the annotations and schema already cover the basics. A 4 is fair.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds value by explaining that value types matter (logo expects attachment ID, color expects hex string) and that site_id is optional with fallback behavior. This goes beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes one Customizer setting (theme mod) for the active theme, using a specific verb ('Write') and resource ('Customizer setting'). It distinguishes itself from get_theme_mods by explicitly telling the agent to read that first, and from other theme tools by focusing on theme mods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to read get_theme_mods first to see valid keys, which is a clear when-to-use instruction. It also warns that validity depends entirely on the theme, setting expectations for exploration. This is strong guidance for an open-world tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

site_infoGet site intelligenceA
Read-only

A full diagnostic picture of the site in one call: WordPress and PHP versions, active theme, active plugins, database size, health checks, available updates, and server configuration. Start here when auditing a site or diagnosing a problem. Falls back to core REST data when the companion plugin is absent, and says which parts it could not see.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
include_healthNoInclude Site Health checks: core's REST-exposed tests (loopback, HTTPS, updates, page cache, Authorization header) always, plus the direct tests when the companion plugin is active. Adds a few seconds.
include_pluginsNoInclude the plugin inventory.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as read-only, and the description adds meaningful behavioral context: it falls back to core REST data when the companion plugin is absent and explicitly reports which parts it could not see. This honest disclosure of partial visibility goes beyond the structured annotations and helps an agent interpret potentially incomplete results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words: the first lists the tool's content and scope, the second gives the primary use case, and the third discloses the fallback behavior. The most important context is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates reasonably by enumerating the diagnostic categories and noting that a visibility report is part of the response. It could go further by describing the response structure or size, but an agent can call this confidently without that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters clearly, including defaults and the effect of include_health. The description itself doesn't add much parameter-specific meaning beyond what the schema provides, which matches the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and a concrete resource ('site intelligence') and enumerates the exact diagnostic contents: WordPress/PHP versions, active theme/plugins, database size, health checks, updates, and server config. It also clearly separates itself from narrower sibling tools by framing itself as the 'full diagnostic picture' and the starting point for audits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Start here when auditing a site or diagnosing a problem,' giving a clear context for use. It doesn't explicitly name alternative sibling tools (e.g., get_site, test_site) or state when not to use them, but the 'start here' framing plus the comprehensive scope is enough to guide an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_admin_formSubmit a wp-admin settings formA
Destructive

Fill in and submit a form on a wp-admin screen as the administrator — the way to change plugin settings that live only on a wp-admin page with no REST route. First call is a dry run: it fetches the page, locates the form (by index or id), applies your changes on top of the current field values (hidden fields, nonce and referer included automatically; unchecked checkboxes handled correctly), and returns the diff of changed fields plus a confirm_token. Second call re-fetches the page for a fresh nonce, verifies the other field values have not changed since the preview, submits the form same-site, follows the redirect, and reports the resulting notices (e.g. "Settings saved.") and the new values. Unknown field names are refused with suggestions. Forms with file inputs, and screens that manage plugins/themes/users/exports/core updates, are refused — dedicated tools with proper guardrails exist for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesThe wp-admin screen the form is on, e.g. "options-general.php" or "admin.php?page=wpseo_titles".
changesYesField name → new value. Checkboxes accept true/false; selects and radios accept one of their option values.
form_idNoThe form's HTML id, if it has one. An alternative to form_index.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
form_indexNoWhich form on the page (0-based). Use this or form_id.
confirm_tokenNoToken from the dry-run preview, required to actually submit.
allow_sensitiveNoPermit changing a password-type field. Off by default; a dedicated tool is usually safer.
force_incomplete_formNoDANGEROUS: submit even though the completeness check found options the form would not send (options.php blanks them) or controls the parser missed. Only for a human-verified case; it can wipe plugin or site settings.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes substantially beyond them: it discloses the two-phase safety mechanism (dry-run preview, diff + confirm_token, fresh-nonce re-fetch, verification that other fields are unchanged before submit), automatic nonce/referer handling, correct unchecked-checkbox semantics, refusal of unknown fields with suggestions, and explicitly warns that force_incomplete_form 'can wipe plugin or site settings.' Nothing about the tool's side effects or guardrails is left hidden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense — one long paragraph of roughly 180 words — but every sentence earns its place: purpose, two-phase flow, safety mechanics, refusals, and danger warnings. The purpose is front-loaded in the first line. The main weakness is structural: a single em-dash-heavy paragraph is harder to scan than short sentences or bullets, which a tool with this many behavioral caveats would benefit from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with no output schema, the description covers nearly everything an agent needs: what the dry run returns (diff + confirm_token), what the submit call returns (notices like 'Settings saved.' and new values), refusal conditions, the dangerous flag, and the multi-site selection mechanism. The only minor gap is unspecified behavior when the second call discovers fields changed since preview (it implies refusal but doesn't state the response shape). This is negligible against the tool's overall complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema: it explains that `changes` are merged on top of the current field values with hidden fields/nonce/referer handled automatically (the schema only says 'Field name → new value'), and it gives lifecycle meaning to `confirm_token` by describing the two-call protocol. It does not redundantly re-explain each parameter, which is appropriate at full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Fill in and submit a form on a wp-admin screen as the administrator') and immediately adds scope: it is the mechanism for changing plugin settings that live only on a wp-admin page with no REST route. This crisply differentiates it from siblings like run_wp_cli, rest_api, update_plugin_settings, and admin_page — an agent can tell which tool applies without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use: settings reachable only via a wp-admin form with no REST route. Explicit when-not: forms with file inputs, and screens managing plugins/themes/users/exports/core updates are refused, with a note that dedicated tools exist. It names alternatives only generically ('dedicated tools with proper guardrails') rather than pointing to specific siblings, though in a 170-tool list that is a minor gap. The two-call dry-run/confirm protocol is also clearly spelled out as the required usage sequence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tail_error_logRead the PHP error logA
Read-only

Read the end of the site's PHP error log (wp-content/debug.log or php.ini error_log) without downloading it, with duplicate errors grouped and each one attributed to the plugin, theme or core file that raised it. Also reports whether WP_DEBUG / WP_DEBUG_LOG / WP_DEBUG_DISPLAY are on and the last fatal error the companion plugin recorded — which is captured even when logging is off. Start here for white screens, 500 errors and "there has been a critical error". Needs the companion plugin.

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoOnly entries whose message or stack trace contains this text (case-insensitive), e.g. a plugin slug.
levelNoMinimum severity to include: "warning" returns fatals, errors and warnings; "all" also includes unrecognised lines.all
linesNoHow many lines to read from the end of the log (1–2000). Stack-trace lines count toward this.
sinceNoOnly entries at or after this time, as an ISO 8601 date/time, e.g. "2026-09-15T08:00:00Z".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, and the description adds substantial behavioral detail: it reads from the end without downloading, groups duplicates, attributes errors, reports debug constants, and records fatal errors even when logging is off. The 'Needs the companion plugin' caveat is important operational context. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but efficient: purpose, distinctive behavior, use cases, and a prerequisite are all present with no filler. The most important scoping statement is front-loaded, and supporting detail follows logically.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description explains the main return content (grouped, attributed errors; debug-flag report; last recorded fatal) and the operational prerequisite. It covers enough for an agent to select and call it correctly; only a formal result structure is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: grep, level, lines, since, and site_id each have meaningful descriptions. The tool description doesn't add parameter-level semantics, but with full schema coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Read the end of the site's PHP error log'), names concrete log paths, and describes distinctive outputs (deduplicated/attributed entries, WP_DEBUG state, last fatal). This clearly distinguishes it from sibling audit/log tools even without naming one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames when to reach for it: 'Start here for white screens, 500 errors and "there has been a critical error"'. It also states the companion-plugin prerequisite. It doesn't name alternatives or when-not-to-use, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_siteTest site connectionA
Read-only

Test connectivity and authentication against a site, and report exactly what works: REST reachability, whether credentials authenticate, which user they map to, that user's roles and capabilities, and whether the optional companion plugin is installed. Run this first when anything is behaving strangely — it names the specific misconfiguration rather than a generic failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint false, but the description adds value by detailing exactly what checks are performed and that it reports the specific misconfiguration. This goes beyond the annotations, telling the agent exactly what behavior the call will exhibit, including result reporting rather than simply success/failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Second sentence earns its place by giving actionable usage guidance, and the first sentence is packed with specific details about the checks. It's appropriately sized—no wasted words—and front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single optional parameter and no output schema, the description is sufficient. It states the input (which site) and the full range of outputs the tool reports. It doesn't need to explain a return format beyond naming the reported items. No obvious missing context for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description already covers site_id 100%, including its optionality and default behavior. The tool description itself does not add parameter-specific detail, but with full schema coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Test connectivity and authentication') with a clear resource ('a site') and enumerates exactly what it reports (REST reachability, credential mapping, roles/capabilities, plugin status). This clearly distinguishes it from siblings like get_site or site_info, which are about retrieving site data rather than diagnosing connectivity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger: 'Run this first when the site is behaving strangely — it names the specific misconfiguration rather than a generic failure.' This is a clear when-to-use instruction. It doesn't explicitly state when not to use it, but the 'run first' ordering implies this is the diagnostic entry point, which is strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_commentUpdate a commentA

Update a comment's text, author details or moderation status. Setting status to "approve" publishes a held comment; "spam" marks it as spam; "trash" hides it recoverably; "unspam" and "untrash" restore it to its previous status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe comment ID.
dateNoISO 8601 date.
parentNoParent ID, or 0 for none.
statusNoModeration status or action.
contentNoThe body text.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
author_urlNoCommenter website URL.
author_nameNoCommenter display name.
author_emailNoCommenter email address.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true. The description adds valuable behavioral context: it explains that 'approve' publishes a held comment, 'trash' hides recoverably, and 'unspam'/'untrash' restore to previous status. This goes beyond the schema enum values and gives the agent a clear model of side effects. It doesn't mention reversibility of author field edits or whether updates are partial or full, but the moderation lifecycle detail is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence front-loads the core purpose and editable fields; the second packs the moderation status semantics into a compact, scannable list. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter update tool with no output schema, the description covers the most complex behavioral aspect (moderation status transitions) well. It doesn't describe the return value or whether updates are partial (PATCH-like) vs full replacement, which an agent might need to know. But the schema covers parameters, annotations cover safety, and the moderation semantics are the main hidden complexity — which is addressed. Slightly more on update semantics would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters. The description adds meaning for the status parameter by explaining the semantic effect of each enum value, which is genuinely useful. However, it doesn't add anything about date, parent, content, or author fields beyond what the schema already says. Baseline 3 is appropriate since the schema carries the load and the description adds only modest value for one parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('a comment'), then enumerates the exact editable aspects: text, author details, or moderation status. It also distinguishes the moderation statuses with concrete effects (publish, spam, trash, restore), which makes the tool's purpose unmistakable and differentiates it from siblings like delete_comment or moderate_comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the moderation status transitions and their effects, which is essential usage context. It doesn't explicitly name alternatives or say when not to use this tool, but the sibling list includes delete_comment and moderate_comments, and the description's focus on updating fields makes the boundary reasonably clear. A brief mention of when to prefer delete_comment or moderate_comments would push this to 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contentUpdate contentA

Update any content type by ID. Supply content to replace the body wholesale, or edits for targeted find/replace changes that leave the rest of the document untouched — the latter is safer on long pages and is what you should reach for when changing a heading, a price, or one paragraph. An edit that matches nothing fails loudly rather than silently writing nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe content ID to update.
dateNoPublish date in site time, ISO 8601 (2026-01-31T09:00:00). With status "future" (or "publish" and a future date) this schedules the post.
metaNoCustom fields, as key/value pairs. A key only writes if it is registered with show_in_rest — use set_content_meta for unregistered keys.
slugNoURL slug. Changing this on published content breaks existing links unless you add a redirect.
typeNoContent type of that ID.post
editsNoTargeted find/replace edits applied to the existing raw content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`.
termsNoTaxonomy assignments keyed by taxonomy slug or REST base, e.g. {"categories": [3], "tags": ["news"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created.
titleNoThe title, as plain text.
authorNoUser ID of the author.
formatNoPost format. Only applies to types that support post formats.
parentNoParent ID, for hierarchical types such as pages. 0 for none.
statusNopublish | future | draft | pending | private | trash. "future" needs a `date` in the future. "trash" moves the item to the trash (same as delete_content without force).
stickyNoPin the post to the top of the blog. Posts only.
contentNoFull content body, replacing whatever is there. For the block editor this is block markup (<!-- wp:paragraph --><p>…</p><!-- /wp:paragraph -->); classic content is plain HTML. Use `edits` instead for a small change.
excerptNoHand-written excerpt.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
passwordNoPassword-protect the content. Empty string removes the password.
templateNoPage template file, e.g. "templates/full-width.php". Empty string for the default template.
menu_orderNoSort order for hierarchical types.
ping_statusNoWhether pingbacks and trackbacks are accepted.
comment_statusNoWhether comments are open on this item.
featured_mediaNoAttachment ID of the featured image, or 0 to remove it. Upload it with create_media first.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that edits leave the rest of the document untouched and that a non-matching edit fails loudly instead of silently no-oping. It also makes the overwriting nature of `content` clear. This adds meaningful behavioral context that the annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, then the mode selection, then the failure guarantee. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter tool with a rich schema and no output schema, the description covers the key conceptual decision (content vs edits) and an important failure mode. It doesn't mention when to prefer bulk_update_content, but the schema covers the remaining parameter details adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds high-level guidance about the content/edits tradeoff, but per-parameter semantics are already thoroughly covered in the schema. It does not add new parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Update any content type by ID') and clearly explains the two update modes. It does not explicitly distinguish itself from the sibling bulk_update_content, but the singular 'by ID' framing is strong enough to make the core purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear, actionable guidance on when to use `content` vs `edits` — recommending targeted edits for small changes like a heading or price, and wholesale replacement otherwise. It does not mention alternative tools like bulk_update_content, but the internal mode selection is explicit and well-contextualized.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_global_stylesUpdate global stylesA

Update a block theme's global styles — palette, typography, spacing, per-block styling. Changes apply site-wide immediately. Read them first: by default this merges only at the top level, so a partial settings object replaces that whole branch — pass merge: true to deep-merge instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
mergeNoDeep-merge the supplied objects into the current customisations instead of replacing the whole settings/styles branch. Arrays such as a palette are still replaced wholesale.
stylesNotheme.json-shaped styles, e.g. {"color": {"background": "#fff"}, "typography": {...}}.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
settingsNotheme.json-shaped settings, e.g. {"color": {"palette": [...]}}.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the critical side effect that changes apply site-wide immediately and warns that a partial settings object replaces the whole branch unless merge is true. This is essential behavioral context that annotations alone do not convey, especially for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry all the essential information: what the tool updates, the immediate site-wide effect, the read-first warning, and the merge behavior. There is no filler, and the most important behavioral caveat is placed prominently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four optional parameters and no output schema, the description covers the action, scope, safety caveat, and merge semantics. It is sufficient for an agent to decide whether to call this tool and how to set the critical merge parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all four parameters with 100% description coverage, so the baseline is 3. The description adds real semantic value by explaining the default shallow-merge behavior and the branch-replacement risk, which clarifies how the settings and merge parameters interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a block theme's global styles, naming the concrete areas affected (palette, typography, spacing, per-block styling) and the site-wide immediate effect. It distinguishes itself from related siblings like get_global_styles, diff_global_styles, and reset_template_customization by being the update operation on this resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable guidance: read current styles first and understand the merge behavior before writing. It clearly explains when to pass merge: true versus the default top-level replace behavior, though it does not explicitly name the alternative tool to use for reading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_mediaUpdate a media itemB

Update a media item's title, alt text, caption, description or attachment — without re-uploading the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe attachment ID.
postNoRe-attach to this content ID.
slugNoURL slug.
titleNoDisplay title.
authorNoUser ID of the author.
captionNoCaption shown beneath the item.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
alt_textNoAlternative text for accessibility and SEO.
descriptionNoLonger descriptive text.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate that this is a mutating operation (readOnlyHint: false) and not idempotent or destructive. The description adds one useful behavioral detail—that the file is not re-uploaded—but it does not disclose side effects, whether fields are overwritten or merged, permission requirements, or what happens to existing values. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, front-loads the action and resource, and includes a relevant qualifier about not re-uploading. Every part earns its place, though the ambiguous 'or attachment' slightly reduces precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with no output schema, the description gives a reasonable high-level summary but omits any guidance on expected return values, error conditions, site_id selection behavior, or how 'attachment' updates relate to the 'post' parameter. The schema fills parameter details, but the description alone would not fully prepare an agent to invoke the tool correctly in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 9 parameters with 100% coverage, so the baseline is 3. The description adds general context by listing the updatable fields, but it introduces the vague term 'attachment' which does not directly map to any schema property (the closest is 'post', meaning re-attach to content ID). It does not meaningfully clarify parameter behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('update'), the resource ('a media item'), and the specific fields affected ('title, alt text, caption, description or attachment'). It also adds a distinguishing qualifier, 'without re-uploading the file', which helps separate it from creation workflows. However, it does not differentiate from the near-synonymous sibling 'edit_media', so it is not fully distinguishing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without re-uploading the file' implies this tool is for modifying an existing media item rather than creating/uploading new media, giving some usage context. But it does not explicitly state when to prefer update_media over edit_media, create_media, or delete_media, nor does it mention any exclusions or prerequisites. The usage guidance is mostly implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_menuUpdate a navigation menuA

Rename a menu or change which theme locations it fills.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe item ID.
nameNoDisplay name.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
auto_addNoAutomatically add new top-level pages to this menu.
locationsNoReplaces the current location assignments.
descriptionNoLonger descriptive text.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish it is a write operation (readOnlyHint=false) and not idempotent. The description adds no behavioral detail beyond the basic purpose—it does not disclose that changing locations replaces existing assignments (though the schema does), nor any side effects, reversibility, or permission requirements. Given annotations are present, the description's contribution is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero redundant words. It captures the core actions efficiently and is appropriately sized for a tool with a clear, narrow purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has six parameters, one required, and no output schema, the description is minimal but not entirely inadequate. It omits any mention of prerequisites (e.g., that the menu must already exist), site selection behavior, or what happens to unspecified fields. However, the schema covers parameter semantics, so the description is acceptable but could benefit from a note on usage scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all six parameters. The description highlights 'name' and 'locations' as the key updatable fields but adds no additional meaning for auto_add, description, or site_id beyond what the schema provides. It meets the baseline without adding significant value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair ('Rename a menu' or 'change which theme locations it fills'), clearly distinguishing this from sibling menu tools like create_menu, delete_menu, add_menu_item, and update_menu_item. It precisely names the two primary operations, leaving no ambiguity about the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when renaming or changing menu locations) but provides no explicit guidance on when not to use it or alternatives. It does not mention that adding/removing items belongs to add_menu_item/delete_menu_item, nor any prerequisites like the menu existing. The usage context is only implied, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_menu_itemUpdate a menu itemA

Change a menu item's label, target, nesting or position.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe menu item ID.
urlNoNew target URL.
menusNoMove the item to a different menu.
titleNoNew link label.
parentNoSet to 0 to move it back to the top level.
targetNo_blank opens in a new tab.
classesNoReplaces the item's CSS classes.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
menu_orderNoNew position; lower numbers come first.
descriptionNoItem description, shown by themes that support it.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with annotations (readOnlyHint=false, destructiveHint=false) and adds no contradiction. However, it also adds no extra behavioral context such as authentication needs, rate limits, or how partial updates work. Since annotations already carry the safety profile, the description contributes minimal additional insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and lists the key modifiable fields. There is zero redundancy and every word serves a function, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally adequate for a simple mutation tool, but it leaves out details such as whether only provided fields are updated, the effect of setting parent to 0, or expected return behavior. With 10 optional parameters and no output schema, a bit more contextual guidance would improve completeness, though the schema covers parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described in the input schema. The tool description itself adds no parameter-specific meaning beyond the schema, so it doesn't compensate for any missing documentation. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'change' applied to 'a menu item' and enumerates the specific aspects (label, target, nesting, position). This distinguishes it from siblings like add_menu_item (creation), delete_menu_item (deletion), and reorder_menu_items (ordering only), leaving no ambiguity about its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, conditions that favor update_menu_item over add_menu_item, or when not to use it. The usage is implied but never stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_plugin_settingsUpdate a plugin's settings optionA
Destructive

Write an option a plugin owns through WordPress's update_option(), so any sanitize callback attached to it runs. Caveat: plugins that register settings only inside wp-admin (Yoast does) have no sanitizer in this request — the preview warns, and for those the plugin's settings screen via submit_admin_form is the sanitized path. Pass changes to deep-merge fields into the existing option (the usual case for a settings array), or value to replace the whole option. The previous value is backed up (last five kept) and can be undone with restore_plugin_settings. The first call is a dry run: it returns the before→after diff (before sanitization — the plugin may adjust or drop values on save) and a confirm_token; re-run with that token to apply, and the result reports what the sanitizer changed. Options wpxmcp protects, and options not attributable to the plugin (unless force_option), are refused. Prefer a plugin's REST route or ability when inspect_plugin shows one.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoA complete replacement value for the option. Use instead of `changes`, not with it.
optionYesThe option name to write, e.g. "wpseo_titles".
pluginYesPlugin identifier (slug, dir/file, or name).
changesNoFields to deep-merge into the existing option value (for array/object options).
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
force_optionNoWrite even when the option is not attributable to this plugin. Off by default as a guard against typos.
confirm_tokenNoToken from the dry-run preview, required to actually apply the write.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate destructive write behavior, but the description goes much further: it discloses the dry-run/confirm_token flow, before→after diff, sanitizer caveats, backup retention, refusal of protected/un-attributable options, and force_option behavior. Nothing material is hidden by the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place, covering core behavior, caveats, parameter modes, backup/undo, dry-run flow, and guardrails. It front-loads the primary verb and resource, then layers necessary detail. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and destructive semantics, this description is exceptionally complete: it explains return values (diff, confirm_token, sanitizer results), refusal conditions, alternate sanitized paths, backup retention, and the preference for REST routes. An agent has everything needed to invoke this tool correctly and avoid destructive mistakes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema covers all parameters descriptively, the description adds crucial relational semantics: `changes` is a deep-merge operation while `value` replaces the whole option; confirm_token comes from the dry-run preview; force_option overrides the attribution guard; site_id has default-site behavior. This significantly improves parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (writing a plugin-owned option through update_option) and the exact resource (a plugin's settings option). It clearly separates this from siblings like restore_plugin_settings and submit_admin_form, so an agent can identify what this tool does and does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use `changes` vs `value`, warns when the sanitized path is submit_admin_form instead (Yoast example), mentions undo via restore_plugin_settings, and recommends preferring a plugin's REST route or ability when inspect_plugin shows one. This is complete, actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_site_settingsUpdate site settingsA

Update the site's core settings. These are global and take effect immediately for every visitor — changing show_on_front or page_on_front changes what the homepage is, and changing start_of_week or timezone shifts every displayed date. Requires an Administrator account.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoSite title.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
languageNoSite locale, e.g. "en_GB".
timezoneNoA PHP timezone string, e.g. "Europe/London".
site_iconNoAttachment ID for the site icon / favicon.
date_formatNoPHP date format, e.g. "F j, Y".
descriptionNoTagline.
time_formatNoPHP time format, e.g. "g:i a".
page_on_frontNoPage ID to use as the front page. Only applies when show_on_front is "page".
show_on_frontNoWhether the front page shows the blog or a static page.
start_of_weekNo0 = Sunday.
page_for_postsNoPage ID that lists blog posts.
posts_per_pageNoHow many posts appear on a blog listing page.
default_categoryNoCategory ID assigned to posts with no category.
users_can_registerNoAllow public registration. Enabling this on a site without spam protection invites abuse.
default_ping_statusNoWhether new content accepts pingbacks and trackbacks.
default_post_formatNoPost format applied to new posts, e.g. "standard".
default_comment_statusNoWhether new content allows comments by default.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses meaningful behavior beyond the annotations: changes are global, take effect immediately for every visitor, and specific settings alter the homepage or displayed dates. The Administrator requirement adds useful authorization context. Nothing here contradicts the readOnlyHint=false, destructiveHint=false, or idempotentHint=false annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler: the operation, the high-impact implications, and the auth requirement. Every sentence earns its place, and the most important caveats appear immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter, zero-required tool with full schema coverage, the description covers global impact, immediacy, and authentication. It does not describe the return value, but no output schema exists and the update semantics are standard enough that this is not a serious gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by highlighting show_on_front, page_on_front, start_of_week, and timezone and explaining their real-world effects, which helps an agent reason about parameter impact beyond the schema's individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+object ('Update the site's core settings') and then pins the scope with concrete examples like show_on_front, page_on_front, start_of_week, and timezone. This clearly distinguishes it from sibling tools such as get_site_settings or update_plugin_settings without needing to inspect the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly conveys when the tool is appropriate: for core global site settings rather than plugin, theme, or content settings. It also states a prerequisite (Administrator account). It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to route to this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_templateUpdate a block templateA

Update a block template or template part's markup. This changes the layout of every page that uses it, so it takes effect site-wide immediately. WordPress stores the customisation in the database, leaving the theme's own file untouched — you can always revert in the Site Editor.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate id, e.g. "twentytwentyfour//single".
kindNoWhether the id names a template or a template part.template
titleNoNew template title.
contentYesFull block markup for the template.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
descriptionNoNew template description.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds materially beyond annotations: the site-wide immediate effect on every page using the template, storage in the database rather than the theme file, and reversibility in the Site Editor. These consequences align with readOnlyHint=false and explain why destructiveHint=false holds (revertible). No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: core action, consequence, then persistence/reversibility. The verb and resource are front-loaded in the first sentence with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a site-wide mutation with no output schema, the description covers the essential operational facts: scope, blast radius, persistence, and revert path. A note on required permissions or response shape would fully close the gap, but nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 even without param details in the description. The description's 'markup' maps to the content property and 'template or template part' maps to kind, but it adds no novel meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Update a block template or template part's markup.' The scope (template vs template part) and object (markup) are explicit, and the DB-vs-file distinction separates it from sibling write_theme_file/edit_theme_file tools while get_template/list_templates handle reads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when to call it: the agent learns the operation targets block template markup, applies site-wide immediately, and persists as a database customization. It lacks an explicit exclusion clause naming alternatives (e.g., write_theme_file for direct file edits, reset_template_customization for reverting), so it misses the 'when not to use' bar for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_termUpdate a termA

Update a term's name, slug, description, parent or meta in any taxonomy. Changing a slug changes the term archive URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe term ID to update.
metaNoCustom fields as key/value pairs, for keys registered with show_in_rest.
nameNoDisplay name.
slugNoURL slug.
parentNoParent term ID, or 0 for none. Hierarchical taxonomies only.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
taxonomyNoTaxonomy slug or REST base (category, post_tag/tags, or a custom one).category
descriptionNoLonger descriptive text.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description adds genuinely non-derivable behavior: 'Changing a slug changes the term archive URL' discloses a URL/SEO side effect of a specific field. It stops short of covering capability requirements or reversibility, but with annotations present, the added context is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads verb, resource, and field scope; the second adds the single most important behavioral caveat. Every word earns its place for an 8-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 8-parameter complexity, the schema is rich enough to cover parameter semantics and annotations carry the safety profile, so the description does not need to explain return values or basic mutation behavior. Minor gaps remain (no capability/permission note, no pointer to discover_taxonomies for valid taxonomy slugs), but nothing blocks safe selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 8 parameters, including site_id's multi-site behavior and parent's hierarchical-taxonomy restriction. The description only echoes the field list already present in the schema and adds no new parameter-level meaning, landing at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Update') with a precise resource ('a term') and enumerates the mutable fields (name, slug, description, parent, meta) plus the scope ('in any taxonomy'). The term-specific fields clearly differentiate it from the many other update_* siblings like update_content, update_menu, or update_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied through the verb and title — modify an existing term — and the 'in any taxonomy' scope statement adds context. However, there is no explicit when-to-use vs when-not-to-use guidance, and no alternatives (e.g., create_term for new terms, delete_term for removal) are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_userUpdate a userA

Update a user's profile, email, password or roles. Changing roles changes what that person can do — promoting to administrator grants full site control.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe user ID, or "me".
urlNoWebsite URL.
metaNoCustom fields as key/value pairs, for keys registered with show_in_rest.
nameNoDisplay name.
slugNoAuthor archive slug.
emailNoEmail address.
rolesNoReplace the user's roles.
localeNoUser interface locale, e.g. "en_GB".
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
nicknameNoNickname, used by some themes.
passwordNoNew password. This immediately invalidates the user's existing sessions.
last_nameNoFamily name.
first_nameNoGiven name.
descriptionNoLonger descriptive text.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide state-change and idempotency hints, and the description adds a meaningful consequence: changing roles alters permissions, with administrator promotion granting full site control. This goes beyond the structured hints, though it does not cover all side effects such as required privileges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the core action is front-loaded and the risk warning is placed at the end. Every clause contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema, the description is adequate but incomplete. It does not state partial-update semantics, what the return value is, or what privileges are required. The schema covers parameter meaning, but tool-level behavioral context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds semantic weight to the roles parameter by explaining that changing roles changes what the person can do, which goes beyond the schema's "Replace the user's roles." Other parameters are fully explained by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with "Update a user's profile, email, password or roles," giving a specific verb, resource, and scope. It clearly distinguishes updating from sibling tools like create_user, delete_user, and get_user without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over alternatives, nor does it state prerequisites or exclusions. It communicates what the tool does but not the context in which it should be invoked.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_widgetUpdate a widgetA

Change a widget's settings or move it to a different sidebar or position.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWidget id, e.g. "block-3".
sidebarNoMove it to this sidebar.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
instanceNoReplacement settings. Read the widget first — this replaces the instance wholesale.
positionNoNew index within the sidebar.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description agrees by indicating a mutating move/update operation. It adds the specific relocation behavior, but it does not disclose important side effects like wholesale instance replacement, which only appears in the instance parameter description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the action and the two supported outcomes with no filler or redundancy. Every word contributes to the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update operation with fully documented parameters and annotations, the description is largely adequate: it correctly identifies the two allowed outcomes and the schema fills in invocation details. It omits return-value information and the 'read the widget first' prerequisite, but the latter is already captured in the schema and the overall picture is complete enough for an agent to operate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains id, sidebar, site_id, instance, and position. The free-text description only maps 'settings' and 'sidebar/position' to those parameters and adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Change') and identifies the resource ('a widget') with concrete modes: changing settings or moving it to another sidebar/position. This distinguishes it from sibling widget tools such as create_widget, delete_widget, and list_widgets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance or comparison with alternatives. The description never mentions that create_widget is for new widgets, list_widgets should be used first, or that the widget instance should be read before replacing it. The intended use is only implied by the verb 'Change' and the title.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_theme_jsonValidate theme.jsonA
Read-only

Lint a block theme's theme.json and its style variations: version, duplicate palette/font-size/spacing/shadow slugs, invalid colour values, font families whose fontFace has no src, customTemplates/templateParts naming templates that do not exist, deprecated v1 keys and blocks, and WCAG contrast of the text/background pairs the styles actually use (root, link, button, headings, blocks and block style variations — resolved through the palette). Returns {valid, errors[], warnings[]} with JSON paths. Checks the active theme by default; pass theme_json to lint a draft file's text before writing it. Reading the raw file (for version and deprecated keys) needs the companion plugin; without it the merged REST data is linted.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoTheme stylesheet (directory) whose theme.json to read, e.g. a draft theme id. Defaults to the active theme. Global-styles data and variations are only available for the active theme; other themes need the companion plugin.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
theme_jsonNoRaw theme.json text to lint instead of reading one from the site — useful before write_theme_file. Template names are still checked against the active theme.
include_variationsNoAlso lint each style variation, including the contrast of its palette over the theme's styles.
include_user_stylesNoAlso check contrast with the site's Site Editor customisations layered on top (active theme only).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this read-only and non-destructive, but the description goes well beyond them: it names the returned object shape, lists the exact validation categories, explains the companion-plugin dependency, and reveals that without the plugin the validation operates on merged REST data rather than raw file contents. This is rich behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: scope, check list, return value, default behavior, draft-mode usage, and plugin dependency. It front-loads the core purpose and then groups related caveats coherently without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating the return shape ({valid, errors[], warnings[]} with JSON paths). It also covers input modes, defaulting rules, per-mode limitations, and thematic dependencies. Nothing essential for an agent to decide whether and how to invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all five parameters at 100% coverage, so the baseline is 3. The description adds extra meaning by clarifying that theme_json is useful 'before write_theme_file', that template names are checked against the active theme, and that raw-file reading requires the companion plugin — details that complement rather than merely repeat the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Lint a block theme's theme.json and its style variations.' Enumerates concrete validation checks (duplicate slugs, invalid colour values, WCAG contrast, deprecated v1 keys) and states the return shape, making the tool's scope unmistakable and clearly distinct from nearby get/update/list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the default behavior ('Checks the active theme by default'), the draft-file use case ('pass theme_json to lint a draft file's text before writing it'), and a hard limitation ('Reading the raw file ... needs the companion plugin; without it the merged REST data is linted'). This gives an agent concrete conditions for calling the tool and what to expect in different modes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_theme_fileWrite a theme fileA

Create or overwrite a theme file, replacing its entire contents. Refuses to write to a live active theme by default — work in a draft (create_draft_theme) so the site stays untouched until you publish. PHP is syntax-checked before it is saved, so a parse error is reported rather than fataling the site.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath relative to the theme root, e.g. "template-parts/hero.php". Parent directories are created as needed.
themeNoTheme stylesheet or draft id. Defaults to the active draft if there is one.
contentYesFull file contents.
site_idNoWhich configured WordPress site to act on. Optional — with a single site configured it is used automatically; with several, the default site is used unless you name one. Run list_sites for valid ids.
allow_live_themeNoPermit writing directly into the live active theme. Strongly discouraged — use a draft.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: full-content replacement semantics, the default refusal to touch a live theme, and the PHP syntax-check with graceful parse-error reporting instead of fatally breaking the site. This is exactly the 'what gets destroyed and what protects it' context the rubric rewards. The overwrite semantics sit in mild tension with destructiveHint: false, but the description is honest and the live-theme guardrail makes the non-destructive framing defensible, so no contradiction is flagged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: behavior, safe workflow, and safety validation each get exactly one sentence, and the core overwrite semantics are front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutating file writer with no output schema, the description covers the calling decision (what it does), the safety envelope (draft vs. live), and failure behavior (parse errors reported). The only real gap is that it never says what a successful call returns, and idempotency/rollback behavior is unaddressed — minor since the schema and annotations carry the parameter and safety load.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — path, theme, content, site_id, and allow_live_theme all have meaningful schema descriptions (including defaults, parent-directory creation, and list_sites lookup). The description itself adds no parameter-level detail beyond reinforcing the draft workflow already captured by the theme and allow_live_theme fields, so it earns the baseline 3 rather than more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'Create or overwrite a theme file, replacing its entire contents' — and the 'entire contents' qualifier sharply distinguishes it from the partial-edit sibling edit_theme_file and from delete_theme_file. An agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit workflow direction: 'work in a draft (create_draft_theme) so the site stays untouched until you publish,' naming the exact sibling to use first and explaining why. It also defines when the tool refuses to act (against a live active theme). It does not explicitly route partial edits to edit_theme_file or list exclusion conditions, but the draft-first workflow is clear enough to guide correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 150 tool updatesv2.0.0
    • Changedactivate_plugin2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedactivate_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadd_menu_item10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / menu_id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / object_id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / object_id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
    • Addedadmin_page
    • Addedapply_style_variation
    • Changedassign_terms_to_content4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / content_id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / content_id / minimum
        Added value: +-9007199254740991
    • Changedaudit_content4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / thin_content_words / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / thin_content_words / minimum
        Added value: +-9007199254740991
    • Changedaudit_media2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedbackup_status
    • Changedbulk_update_content34 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / additionalProperties
        Removed value: -false
      • addedInput schema / properties / changes / properties / add_categories / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / changes / properties / add_categories / items / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / changes / properties / add_tags / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / changes / properties / add_tags / items / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / changes / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / changes / properties / author / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / changes / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / changes / properties / remove_categories / description
        Added value: +"Category IDs to detach."
      • addedInput schema / properties / changes / properties / remove_categories / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / changes / properties / remove_categories / items / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / changes / properties / remove_tags
        Added value: +{
        +  "description": "Tag IDs to detach.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / changes / properties / status / description
        Previous value: -"Filter by status."New value: +"Set every matched item to this status. \"trash\" moves them to the trash (recoverable)."
      • changedInput schema / properties / changes / properties / status / enum
        Previous value: -[
        -  "publish",
        -  "draft",
        -  "pending",
        -  "private",
        -  "future",
        -  "trash"
        -]New value: +[
        +  "publish",
        +  "draft",
        +  "pending",
        +  "private",
        +  "trash"
        +]
      • addedInput schema / properties / changes / properties / template / description
        Added value: +"Page template file to set, or empty string for the default."
      • removedInput schema / properties / content_edits / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / content_edits / items / properties / all / description
        Added value: +"Replace every occurrence. Without it, an item where the text appears more than once is skipped as ambiguous."
      • addedInput schema / properties / content_edits / items / properties / find / description
        Added value: +"Exact text (or regex with regex: true) to find in each raw body."
      • addedInput schema / properties / content_edits / items / properties / find / minLength
        Added value: +1
      • addedInput schema / properties / content_edits / items / properties / regex / description
        Added value: +"Treat `find` as a JavaScript regular expression."
      • addedInput schema / properties / content_edits / items / properties / replace / description
        Added value: +"Replacement text. Empty string deletes the match."
      • removedInput schema / properties / filter / additionalProperties
        Removed value: -false
      • addedInput schema / properties / filter / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / filter / properties / author / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / filter / properties / categories / description
        Added value: +"Only items in any of these category IDs."
      • addedInput schema / properties / filter / properties / categories / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / filter / properties / categories / items / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / filter / properties / ids / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / filter / properties / ids / items / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / filter / properties / tags / description
        Added value: +"Only items with any of these tag IDs."
      • addedInput schema / properties / filter / properties / tags / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / filter / properties / tags / items / minimum
        Added value: +-9007199254740991
    • Addedcheck_accessibility
    • Addedcheck_links
    • Addedcleanup_options
    • Changedcode_snippet3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / id / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^[a-zA-Z0-9_-]+$",
        +    "type": "string"
        +  }
        +]
    • Addedcontent_calendar
    • Addedcontent_inventory
    • Changedcreate_classic_theme4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / author / description
        Previous value: -"User ID of the author."New value: +"Author name written into the style.css header."
      • removedInput schema / properties / tokens / additionalProperties
        Removed value: -false
    • Changedcreate_comment8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
    • Changedcreate_content21 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / date / description
        Previous value: -"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" this schedules the post."New value: +"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" (or \"publish\" and a future date) this schedules the post."
      • changedInput schema / properties / featured_media / description
        Previous value: -"Attachment ID of the featured image. Upload it with create_media first."New value: +"Attachment ID of the featured image, or 0 to remove it. Upload it with create_media first."
      • addedInput schema / properties / featured_media / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / featured_media / minimum
        Added value: +0
      • changedInput schema / properties / format / description
        Previous value: -"Post format: standard, aside, gallery, link, image, quote, status, video, audio, chat."New value: +"Post format. Only applies to types that support post formats."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "standard",
        +  "aside",
        +  "chat",
        +  "gallery",
        +  "link",
        +  "image",
        +  "quote",
        +  "status",
        +  "video",
        +  "audio"
        +]
      • addedInput schema / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / parent / description
        Previous value: -"Parent ID, for hierarchical types such as pages."New value: +"Parent ID, for hierarchical types such as pages. 0 for none."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +0
      • changedInput schema / properties / password / description
        Previous value: -"Password-protect the content."New value: +"Password-protect the content. Empty string removes the password."
      • changedInput schema / properties / status / description
        Previous value: -"publish | future | draft | pending | private | trash."New value: +"publish | future | draft | pending | private | trash. \"future\" needs a `date` in the future. \"trash\" moves the item to the trash (same as delete_content without force)."
      • changedInput schema / properties / template / description
        Previous value: -"Page template file, e.g. \"templates/full-width.php\"."New value: +"Page template file, e.g. \"templates/full-width.php\". Empty string for the default template."
      • changedInput schema / properties / terms / description
        Previous value: -"Taxonomy assignments keyed by taxonomy REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Names that do not exist yet are created."New value: +"Taxonomy assignments keyed by taxonomy slug or REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created."
      • addedInput schema / properties / terms / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedcreate_draft_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcreate_media7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / set_as_featured_for / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / set_as_featured_for / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / url / description
        Previous value: -"Public URL to download and re-upload into the library."New value: +"Public http(s) URL to download and re-upload into the library. Private, loopback and local-network addresses are refused (except the WordPress site's own host)."
    • Changedcreate_menu2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcreate_plugin3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status."New value: +"Status to leave the plugin in after installing: \"active\" activates it immediately."
    • Changedcreate_term5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
    • Changedcreate_user3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedcreate_widget5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / instance / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / position / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / position / minimum
        Added value: +-9007199254740991
    • Changeddeactivate_plugin2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_comment4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changeddelete_content4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +1
    • Changeddelete_draft_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_field_group2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_media4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changeddelete_menu4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changeddelete_menu_item4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changeddelete_plugin2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_skill2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_term4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changeddelete_theme_file2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddelete_user6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +1
      • addedInput schema / properties / reassign_to / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / reassign_to / minimum
        Added value: +1
    • Changeddelete_widget2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addeddiff_global_styles
    • Changeddiscover_abilities2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddiscover_content_types2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddiscover_rest_routes2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddiscover_taxonomies2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changededit_media6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
    • Changededit_theme_file3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / edits / items / additionalProperties
        Removed value: -false
    • Changedexecute_sql_query2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedfind_content_by_url23 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / date / description
        Previous value: -"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" this schedules the post."New value: +"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" (or \"publish\" and a future date) this schedules the post."
      • changedInput schema / properties / edits / description
        Previous value: -"Targeted find/replace edits applied to the existing content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`."New value: +"Targeted find/replace edits applied to the existing raw content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`."
      • removedInput schema / properties / edits / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / featured_media / description
        Previous value: -"Attachment ID of the featured image. Upload it with create_media first."New value: +"Attachment ID of the featured image, or 0 to remove it. Upload it with create_media first."
      • addedInput schema / properties / featured_media / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / featured_media / minimum
        Added value: +0
      • changedInput schema / properties / format / description
        Previous value: -"Post format: standard, aside, gallery, link, image, quote, status, video, audio, chat."New value: +"Post format. Only applies to types that support post formats."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "standard",
        +  "aside",
        +  "chat",
        +  "gallery",
        +  "link",
        +  "image",
        +  "quote",
        +  "status",
        +  "video",
        +  "audio"
        +]
      • addedInput schema / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / parent / description
        Previous value: -"Parent ID, for hierarchical types such as pages."New value: +"Parent ID, for hierarchical types such as pages. 0 for none."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +0
      • changedInput schema / properties / password / description
        Previous value: -"Password-protect the content."New value: +"Password-protect the content. Empty string removes the password."
      • changedInput schema / properties / status / description
        Previous value: -"publish | future | draft | pending | private | trash."New value: +"publish | future | draft | pending | private | trash. \"future\" needs a `date` in the future. \"trash\" moves the item to the trash (same as delete_content without force)."
      • changedInput schema / properties / template / description
        Previous value: -"Page template file, e.g. \"templates/full-width.php\"."New value: +"Page template file, e.g. \"templates/full-width.php\". Empty string for the default template."
      • changedInput schema / properties / terms / description
        Previous value: -"Taxonomy assignments keyed by taxonomy REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Names that do not exist yet are created."New value: +"Taxonomy assignments keyed by taxonomy slug or REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created."
      • addedInput schema / properties / terms / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Addedfleet_report
    • Changedget_ability_info3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / name / pattern
        Added value: +"^\\s*[a-zA-Z0-9-]+(?:\\/[a-zA-Z0-9-]+)+\\s*$"
    • Changedget_audit_log2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_comment4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedget_content6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +1
      • addedInput schema / properties / max_content_chars / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_content_chars / minimum
        Added value: +100
    • Changedget_content_by_slug4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / slug / minLength
        Added value: +1
      • changedInput schema / properties / types / description
        Previous value: -"Restrict to these content types. Defaults to every REST-exposed type."New value: +"Restrict to these content types. Defaults to every REST-exposed content type."
    • Changedget_content_meta4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedget_content_summary4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +1
    • Changedget_content_terms4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / content_id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / content_id / minimum
        Added value: +-9007199254740991
    • Changedget_global_styles3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / include_theme_defaults
        Added value: +{
        +  "default": false,
        +  "description": "Also return the theme's own theme.json settings and styles, which the user customisations layer on top of. The user record alone only holds what was changed in the Site Editor, so it is often nearly empty. Verbose.",
        +  "type": "boolean"
        +}
    • Changedget_media4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedget_menu4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedget_options2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_page_html4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_chars / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_chars / minimum
        Added value: +1
    • Changedget_plugin2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_plugin_info2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_plugin_settings
    • Changedget_preview_url2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_seo_meta
    • Changedget_site2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_site_settings2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_template2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_template_for_url
    • Changedget_term4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedget_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_theme_mods2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_user3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / id / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "me",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "const": "me",
        +    "type": "string"
        +  }
        +]
    • Addedinspect_database
    • Addedinspect_options
    • Addedinspect_plugin
    • Addedinspect_registry
    • Changedinstall_plugin2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedinstall_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedinternal_link_report
    • Addedlist_admin_pages
    • Addedlist_block_patterns
    • Changedlist_block_types2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_cli_commands2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_comments9 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / parent / description
        Previous value: -"Only replies to this comment ID."New value: +"Only replies to this comment ID (0 for top-level comments)."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "Comment type: \"comment\" (the default WordPress applies), \"pingback\", \"trackback\", or a custom type such as \"review\".",
        +  "type": "string"
        +}
    • Changedlist_content15 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / exclude
        Added value: +{
        +  "description": "Leave out these IDs.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / fields / description
        Previous value: -"Return only these top-level fields, overriding the default summary shape."New value: +"Return only these top-level fields, overriding the default summary shape. Also sent as _fields so WordPress returns less."
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Only these IDs.",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "maxItems": 100,
        +  "type": "array"
        +}
      • changedInput schema / properties / orderby / description
        Previous value: -"Which field to sort by."New value: +"Which field to sort by. \"relevance\" requires `search`; \"include\" requires `include`."
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / parent / description
        Previous value: -"Filter to children of this parent ID."New value: +"Filter to children of this parent ID (0 for top-level items)."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / per_page / description
        Previous value: -"How many results per page."New value: +"How many results per page (WordPress caps this at 100)."
      • addedInput schema / properties / sticky
        Added value: +{
        +  "description": "Posts only: true for only sticky posts, false to leave them out.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / taxonomy_filters / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedlist_draft_themes2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_field_groups2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_media9 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / media_type / enum
        Previous value: -[
        -  "image",
        -  "video",
        -  "audio",
        -  "application",
        -  "text",
        -  "file"
        -]New value: +[
        +  "image",
        +  "video",
        +  "audio",
        +  "application",
        +  "text"
        +]
      • changedInput schema / properties / missing_alt_text / description
        Previous value: -"Return only images with empty alt text — useful for an accessibility or SEO sweep."New value: +"Return only images with empty alt text — useful for an accessibility or SEO sweep. Filters within the requested page, so walk every page (or use audit_media) for a complete list."
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
    • Changedlist_menus2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_plugins2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_reusable_blocks2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_revisions4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedlist_roles2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_sidebars2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_sites1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_skills1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedlist_style_variations
    • Changedlist_templates2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_terms7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
    • Changedlist_theme_files2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_themes2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_users3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
    • Changedlist_widgets2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedload_skill2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedmoderate_comments6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / action / description
        Previous value: -"What to do with each."New value: +"What to do with each. unspam/untrash restore the comment's previous status."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "approve",
        -  "hold",
        -  "spam",
        -  "trash"
        -]New value: +[
        +  "approve",
        +  "hold",
        +  "spam",
        +  "unspam",
        +  "trash",
        +  "untrash"
        +]
      • addedInput schema / properties / ids / items / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / ids / items / minimum
        Added value: +-9007199254740991
    • Addedprofile_url
    • Changedpublish_draft_theme2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedpurge_cache
    • Changedread_theme_file4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_chars / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_chars / minimum
        Added value: +1
    • Changedregister_fields10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / fields / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / fields / items / properties / choices / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / fields / items / properties / choices / items / properties / label / description
        Added value: +"Label shown to the editor."
      • addedInput schema / properties / fields / items / properties / choices / items / properties / value / description
        Added value: +"Stored value."
      • addedInput schema / properties / fields / items / properties / default / description
        Added value: +"Value used when nothing has been saved yet."
      • addedInput schema / properties / fields / items / properties / placeholder / description
        Added value: +"Placeholder text shown in an empty input."
      • addedInput schema / properties / fields / items / properties / required / description
        Added value: +"Whether the editor must fill this field in."
      • addedInput schema / properties / fields / items / properties / sub_fields / items
        Added value: +{}
    • Changedreorder_menu_items9 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / items / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / items / items / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / items / items / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / items / items / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / items / items / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / items / items / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / items / items / properties / parent / minimum
        Added value: +-9007199254740991
    • Addedreset_template_customization
    • Changedrest_api6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / body / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / max_chars / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_chars / minimum
        Added value: +100
      • addedInput schema / properties / query / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Addedrestore_plugin_settings
    • Changedrestore_revision6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / revision_id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / revision_id / minimum
        Added value: +-9007199254740991
    • Changedrun_ability4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / input / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / pattern
        Added value: +"^\\s*[a-zA-Z0-9-]+(?:\\/[a-zA-Z0-9-]+)+\\s*$"
    • Changedrun_wp_cli2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsave_skill2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_plugins4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / search / minLength
        Added value: +1
    • Changedsearch_site3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
    • Changedsearch_stock_photos2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedsearch_themes
    • Addedsecurity_audit
    • Addedseo_site_check
    • Changedset_content_meta5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedset_option3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "value"
        +]
    • Addedset_seo_meta
    • Changedset_theme_mod3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "key"
        -]New value: +[
        +  "key",
        +  "value"
        +]
    • Changedsite_info3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / include_health / description
        Previous value: -"Include Site Health checks. Needs the companion plugin."New value: +"Include Site Health checks: core's REST-exposed tests (loopback, HTTPS, updates, page cache, Authorization header) always, plus the direct tests when the companion plugin is active. Adds a few seconds."
    • Addedsubmit_admin_form
    • Addedtail_error_log
    • Changedtest_site2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedupdate_comment8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / status / description
        Previous value: -"Moderation status."New value: +"Moderation status or action."
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "approve",
        -  "hold",
        -  "spam",
        -  "trash"
        -]New value: +[
        +  "approve",
        +  "hold",
        +  "spam",
        +  "unspam",
        +  "trash",
        +  "untrash"
        +]
    • Changedupdate_content25 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / date / description
        Previous value: -"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" this schedules the post."New value: +"Publish date in site time, ISO 8601 (2026-01-31T09:00:00). With status \"future\" (or \"publish\" and a future date) this schedules the post."
      • changedInput schema / properties / edits / description
        Previous value: -"Targeted find/replace edits applied to the existing content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`."New value: +"Targeted find/replace edits applied to the existing raw content, so you can change one paragraph without resending the whole document. Edits apply in order. Mutually exclusive with `content`."
      • removedInput schema / properties / edits / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / featured_media / description
        Previous value: -"Attachment ID of the featured image. Upload it with create_media first."New value: +"Attachment ID of the featured image, or 0 to remove it. Upload it with create_media first."
      • addedInput schema / properties / featured_media / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / featured_media / minimum
        Added value: +0
      • changedInput schema / properties / format / description
        Previous value: -"Post format: standard, aside, gallery, link, image, quote, status, video, audio, chat."New value: +"Post format. Only applies to types that support post formats."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "standard",
        +  "aside",
        +  "chat",
        +  "gallery",
        +  "link",
        +  "image",
        +  "quote",
        +  "status",
        +  "video",
        +  "audio"
        +]
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +1
      • addedInput schema / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / parent / description
        Previous value: -"Parent ID, for hierarchical types such as pages."New value: +"Parent ID, for hierarchical types such as pages. 0 for none."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +0
      • changedInput schema / properties / password / description
        Previous value: -"Password-protect the content."New value: +"Password-protect the content. Empty string removes the password."
      • changedInput schema / properties / status / description
        Previous value: -"publish | future | draft | pending | private | trash."New value: +"publish | future | draft | pending | private | trash. \"future\" needs a `date` in the future. \"trash\" moves the item to the trash (same as delete_content without force)."
      • changedInput schema / properties / template / description
        Previous value: -"Page template file, e.g. \"templates/full-width.php\"."New value: +"Page template file, e.g. \"templates/full-width.php\". Empty string for the default template."
      • changedInput schema / properties / terms / description
        Previous value: -"Taxonomy assignments keyed by taxonomy REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Names that do not exist yet are created."New value: +"Taxonomy assignments keyed by taxonomy slug or REST base, e.g. {\"categories\": [3], \"tags\": [\"news\"]}. Replaces the item's terms in each taxonomy given. Names that do not exist yet are created."
      • addedInput schema / properties / terms / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_global_styles5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / merge
        Added value: +{
        +  "default": false,
        +  "description": "Deep-merge the supplied objects into the current customisations instead of replacing the whole settings/styles branch. Arrays such as a palette are still replaced wholesale.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / settings / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / styles / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_media8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / author / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / author / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / post / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / post / minimum
        Added value: +-9007199254740991
    • Changedupdate_menu4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
    • Changedupdate_menu_item10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / menu_order / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menu_order / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / menus / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / menus / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +-9007199254740991
    • Addedupdate_plugin_settings
    • Changedupdate_site_settings11 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / default_category / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / default_category / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / page_for_posts / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / page_for_posts / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / page_on_front / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / page_on_front / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / posts_per_page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / site_icon / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / site_icon / minimum
        Added value: +-9007199254740991
    • Changedupdate_template2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedupdate_term8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / id / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / parent / description
        Previous value: -"Parent ID, or 0 for none."New value: +"Parent term ID, or 0 for none. Hierarchical taxonomies only."
      • addedInput schema / properties / parent / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / parent / minimum
        Added value: +0
    • Changedupdate_user4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / id / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "me",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "const": "me",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / meta / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_widget5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / instance / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / position / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / position / minimum
        Added value: +-9007199254740991
    • Addedvalidate_theme_json
    • Changedwrite_theme_file2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 117 tool updatesv1.0.0
    • First observedactivate_plugin
    • First observedactivate_theme
    • First observedadd_menu_item
    • First observedassign_terms_to_content
    • First observedaudit_content
    • First observedaudit_media
    • First observedbulk_update_content
    • First observedcode_snippet
    • First observedcreate_classic_theme
    • First observedcreate_comment
    • First observedcreate_content
    • First observedcreate_draft_theme
    • First observedcreate_media
    • First observedcreate_menu
    • First observedcreate_plugin
    • First observedcreate_term
    • First observedcreate_user
    • First observedcreate_widget
    • First observeddeactivate_plugin
    • First observeddelete_comment
    • First observeddelete_content
    • First observeddelete_draft_theme
    • First observeddelete_field_group
    • First observeddelete_media
    • First observeddelete_menu
    • First observeddelete_menu_item
    • First observeddelete_plugin
    • First observeddelete_skill
    • First observeddelete_term
    • First observeddelete_theme_file
    • First observeddelete_user
    • First observeddelete_widget
    • First observeddiscover_abilities
    • First observeddiscover_content_types
    • First observeddiscover_rest_routes
    • First observeddiscover_taxonomies
    • First observededit_media
    • First observededit_theme_file
    • First observedexecute_sql_query
    • First observedfind_content_by_url
    • First observedget_ability_info
    • First observedget_audit_log
    • First observedget_comment
    • First observedget_content
    • First observedget_content_by_slug
    • First observedget_content_meta
    • First observedget_content_summary
    • First observedget_content_terms
    • First observedget_global_styles
    • First observedget_media
    • First observedget_menu
    • First observedget_options
    • First observedget_page_html
    • First observedget_plugin
    • First observedget_plugin_info
    • First observedget_preview_url
    • First observedget_site
    • First observedget_site_settings
    • First observedget_template
    • First observedget_term
    • First observedget_theme
    • First observedget_theme_mods
    • First observedget_user
    • First observedinstall_plugin
    • First observedinstall_theme
    • First observedlist_block_types
    • First observedlist_cli_commands
    • First observedlist_comments
    • First observedlist_content
    • First observedlist_draft_themes
    • First observedlist_field_groups
    • First observedlist_media
    • First observedlist_menus
    • First observedlist_plugins
    • First observedlist_reusable_blocks
    • First observedlist_revisions
    • First observedlist_roles
    • First observedlist_sidebars
    • First observedlist_sites
    • First observedlist_skills
    • First observedlist_templates
    • First observedlist_terms
    • First observedlist_theme_files
    • First observedlist_themes
    • First observedlist_users
    • First observedlist_widgets
    • First observedload_skill
    • First observedmoderate_comments
    • First observedpublish_draft_theme
    • First observedread_theme_file
    • First observedregister_fields
    • First observedreorder_menu_items
    • First observedrest_api
    • First observedrestore_revision
    • First observedrun_ability
    • First observedrun_wp_cli
    • First observedsave_skill
    • First observedsearch_plugins
    • First observedsearch_site
    • First observedsearch_stock_photos
    • First observedset_content_meta
    • First observedset_option
    • First observedset_theme_mod
    • First observedsite_info
    • First observedtest_site
    • First observedupdate_comment
    • First observedupdate_content
    • First observedupdate_global_styles
    • First observedupdate_media
    • First observedupdate_menu
    • First observedupdate_menu_item
    • First observedupdate_site_settings
    • First observedupdate_template
    • First observedupdate_term
    • First observedupdate_user
    • First observedupdate_widget
    • First observedwrite_theme_file

TDQS

B3.4/5.0

Scored across 150 tools

Disambiguation2/5

Several tools are explicit duplicates or near-duplicates: create_plugin/install_plugin, edit_media/update_media, get_template_for_url/profile_url, and get_content_by_slug/find_content_by_url. Even with strong descriptions, the large number of overlapping retrieval, diagnostic, and plugin-settings tools makes reliable tool selection difficult.

Naming Consistency3/5

Most tools follow a clean verb_noun pattern such as list_*, get_*, create_*, update_*, and delete_*, but there are clear exceptions like site_info, fleet_report, content_inventory, content_calendar, code_snippet, and rest_api. The mixed conventions are still readable, but the pattern is not uniform.

Tool Count1/5

With 150 tools, this server is far beyond what an agent can reliably navigate; 50+ is an extreme mismatch per the calibration. Many audit, report, registry, and SEO functions could be consolidated into fewer, grouped tools.

Completeness4/5

The tool surface is exceptionally broad: content, media, taxonomies, users, comments, plugins, themes, menus, widgets, settings, SEO, audits, and escape-hatch tools like REST, WP-CLI, and SQL are all covered. The most notable gap is the absence of dedicated update operations for plugins, themes, and core updates, which are only reachable indirectly.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables AI-powered WordPress management via MCP, with 158 tools for posts, pages, media, plugins, themes, users, comments, and more, plus token-optimized responses.
    100
    40 npm
    3
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to interact with a WordPress site, allowing content and taxonomy management (list, create, update, delete) through 17 MCP tools.
    2
    -