docs(SKILLS): update to 294 tools, b1–b20 (adds Woodmart/Yoast/Wordfence/WPML-write/Caching/Elementor-power/WPBakery-deep/WooCommerce-deep)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8t9GEyyLZbUQu26na1JQg
This commit is contained in:
2026-10-16 02:19:35 +00:00
parent 7f78669c5b
commit 1e5f1bfccd
+63 -251
View File
@@ -2,301 +2,113 @@
> Auto-generated from the live tool registry on 2026-10-16.
> Plugin: `colorlink/advanced-mcp-plugin` · GPL-2.0-or-later · namespace `AskTamMCP\`.
> Total tools: **267**. Of these, **60** are net-new merge additions (batches b1–b12); the rest are the core/baseline set.
> Registry snapshot: **294** tools live on the snapshot host (guarded families whose plugin/theme is absent there are listed under their batch as inert-but-shipped). Net-new merge additions span b1–b20.
## How tools are defined
Each tool: `name`, `scope` (read|write), a JSON input schema, and a static handler `Class::method(array $args): array`. Handlers throw `\RuntimeException` on error. Empty PHP arrays are cast to `new \stdClass()` so they serialize as `{}` not `[]`.
Each tool: `name`, `scope` (read|write|admin), a JSON input schema, and a static handler `Class::method(array $args): array` (throws `\RuntimeException`). `getToolDefinitions()` returns the trimmed client schema {name,description,inputSchema}; scope/handler resolve via `getTool()`/`getHandler()`. Empty PHP arrays cast to `new \stdClass()`.
## Architecture / adding tools
Add a batch = drop one file `includes/Extensions/BatchN.php` that registers on the `asktam_mcp_register_tools` hook. The main file glob-auto-discovers `Batch*.php` (priority 20, `class_exists` + try/catch per batch), so no core edits are needed and a broken batch cannot fatal the plugin. Guard families for absent plugins with `defined()` / `class_exists()` / theme checks so they stay inert where the dependency is missing and auto-activate where present.
Drop one file `includes/Extensions/BatchN.php` registering on the `asktam_mcp_register_tools` hook. The main file glob-auto-discovers `Batch*.php` (priority 20, class_exists + try/catch): no core edits, a bad batch cannot fatal the plugin. Guard absent-plugin families with `defined()`/`class_exists()`/theme checks — inert where the dependency is missing, auto-active where present.
---
## Net-new merge additions (b1–b12)
## Net-new merge additions (b1–b20)
### b1 — Elementor structure (net-new gaps)
Guard: `defined('ELEMENTOR_VERSION')`. Fills gaps the base Elementor set missed. Writes to `_elementor_data`; CSS is regenerated on save.
Guard: `defined('ELEMENTOR_VERSION')`. Fills gaps the base Elementor set missed. Writes `_elementor_data`; CSS regenerated on save.
`elementor_add_section` (post_id req; parent_id, position, settings) · `elementor_add_column` (post_id+section_id req; size, position, settings) · `elementor_set_global_font` (title+font_family req) · `elementor_delete_global_color` (id req) · `elementor_delete_template` (template_id req)
**`elementor_add_section`**
Add a classic Elementor section (legacy row layout). Optional parent_id nests it; settings accepts gap, content_width, background_color, padding, etc.
Args: `post_id:integer` **(req)**, `parent_id:string`, `position:integer`, `settings:object`
**`elementor_add_column`**
Add a column inside a section. size is the column width in percent (1-100, default 100).
Args: `post_id:integer` **(req)**, `section_id:string` **(req)**, `size:integer`, `position:integer`, `settings:object`
**`elementor_set_global_font`**
Add or update a typography entry in the Elementor global font palette (system_typography).
Args: `id:string`, `title:string` **(req)**, `font_family:string` **(req)**, `font_weight:string`
**`elementor_delete_global_color`**
Remove a colour from the Elementor global palette by its id.
Args: `id:string` **(req)**
**`elementor_delete_template`**
Delete a saved Elementor library template permanently.
Args: `template_id:integer` **(req)**
### b2 — SEO (extended) + text extraction
Guard: `none (SEO plugin auto-detected)`. seo_* auto-detect Yoast / RankMath / SEOPress and map each one's meta keys. On a site with no SEO plugin they report plugin=none (not an error). extract_page_text walks post content + Elementor data.
**`seo_detect`**
Detect which SEO plugin is active (Yoast, RankMath, SEOPress, AIOSEO) and whether extended meta read/write is supported.
Args: _(no args)_
**`seo_get_extended`**
Get extended SEO meta for a post: title, description, canonical, OG title/description/image, Twitter title, robots. Supports Yoast, RankMath, SEOPress.
Args: `post_id:integer` **(req)**
**`seo_update_extended`**
Update extended SEO meta on a post. Only supplied fields change. Supports Yoast, RankMath, SEOPress.
Args: `post_id:integer` **(req)**, `title:string`, `description:string`, `canonical:string`, `og_title:string`, `og_description:string`, `og_image:string`, `twitter_title:string`, `noindex:boolean`, `nofollow:boolean`
**`seo_bulk_audit`**
Scan posts/pages for missing SEO title or meta description. Returns the offenders.
Args: `post_types:array`, `per_page:integer`
**`extract_page_text`**
Extract all human-readable text from a page: title, excerpt, post content, and every Elementor text node (with element_id + field) — for translation, audit, or rewriting.
Args: `post_id:integer` **(req)**
### b2 — SEO extended + text extraction
Guard: none (SEO plugin auto-detected). Auto-detect Yoast/RankMath/SEOPress; report plugin=none where absent.
`seo_detect` · `seo_get_extended` (post_id req) · `seo_update_extended` (post_id req; title/description/canonical/og_*/twitter_title/noindex/nofollow) · `seo_bulk_audit` (post_types, per_page) · `extract_page_text` (post_id req — title/excerpt/content + every Elementor text node)
### b3 — Accessibility audit (read-only)
Guard: `none`. WCAG 2.1 relative-luminance math (verified #777/#fff = 4.48:1). Walks post content via DOMDocument + Elementor data. All read-only.
Guard: none. WCAG 2.1 luminance math over post content + Elementor data.
`a11y_contrast_check` (foreground+background req) · `a11y_audit_page` (post_id req) · `a11y_heading_outline` (post_id req) · `a11y_images_missing_alt` (per_page) · `a11y_audit_site` (post_types, per_page)
**`a11y_contrast_check`**
Compute the WCAG 2.1 contrast ratio between two hex colours and report AA/AAA pass for normal and large text.
Args: `foreground:string` **(req)**, `background:string` **(req)**
**`a11y_audit_page`**
Accessibility audit of one page: images missing alt text, heading-order skips, and empty links/buttons. Scans post content and Elementor data.
Args: `post_id:integer` **(req)**
**`a11y_heading_outline`**
Return the ordered heading outline (level + text) of a page and flag skipped heading levels.
Args: `post_id:integer` **(req)**
**`a11y_images_missing_alt`**
List media-library image attachments that have no alt text.
Args: `per_page:integer`
**`a11y_audit_site`**
Run the page accessibility audit across published pages/posts and return per-page issue counts.
Args: `post_types:array`, `per_page:integer`
### b4 — WPML translation audit
Guard: `defined('ICL_SITEPRESS_VERSION')`. Uses the WPML filter API (apply_filters wpml_*). Inert unless WPML is active.
**`wpml_list_languages`**
List all WPML languages: code, name, native name, active flag, and which is the default.
Args: _(no args)_
**`wpml_get_post_language`**
Get the WPML language code of a post.
Args: `post_id:integer` **(req)**
**`wpml_get_translations`**
Get the full translation group of a post: for each language, the translated post id, title, status, and whether it exists.
Args: `post_id:integer` **(req)**
**`wpml_missing_translations`**
List the WPML languages a post is NOT yet translated into.
Args: `post_id:integer` **(req)**
**`wpml_audit`**
Audit published posts/pages for missing translations across all active WPML languages. Returns per-language missing counts and the offenders.
Args: `post_types:array`, `per_page:integer`
### b4 — WPML translation audit (read)
Guard: `defined('ICL_SITEPRESS_VERSION')`.
`wpml_list_languages` · `wpml_get_post_language` (post_id req) · `wpml_get_translations` (post_id req) · `wpml_missing_translations` (post_id req) · `wpml_audit` (post_types, per_page)
### b5 — Media & content utilities
Guard: `none`. Alt-text writers + link/image hygiene. bulk_set_alt_from_title derives alt from attachment title; find_broken_internal_links checks same-host links only.
**`set_image_alt`**
Set (or clear) the alt text of a media-library image attachment.
Args: `attachment_id:integer` **(req)**, `alt:string` **(req)**
**`bulk_set_alt_from_title`**
Backfill alt text for image attachments from their title (or a humanized filename). By default only fills images that have no alt; set overwrite=true to replace existing alts.
Args: `per_page:integer`, `overwrite:boolean`
**`find_broken_internal_links`**
Scan published posts/pages for internal links whose target slug does not resolve to a post/page (candidate broken links). Heuristic: term/archive URLs may appear as false positives.
Args: `post_types:array`, `per_page:integer`
**`list_large_images`**
List media-library images whose file size exceeds a threshold (KB), largest first.
Args: `min_kb:integer`, `per_page:integer`
**`duplicate_title_finder`**
Find published posts/pages that share an identical title.
Args: `post_types:array`, `per_page:integer`
Guard: none.
`set_image_alt` (attachment_id+alt req) · `bulk_set_alt_from_title` (per_page, overwrite) · `find_broken_internal_links` (post_types, per_page) · `list_large_images` (min_kb, per_page) · `duplicate_title_finder` (post_types, per_page)
### b6 — Gutenberg blocks
Guard: `none`. insert_blocks/create_reusable_block build block markup server-side. render_shortcode runs do_shortcode. list_block_types enumerates the registered block registry.
Guard: none.
`list_block_types` (category, per_page) · `insert_blocks` (post_id+blocks req; mode append|replace) · `create_reusable_block` (title req; blocks|markup) · `list_reusable_blocks` (per_page) · `render_shortcode` (shortcode req; post_id)
**`list_block_types`**
List registered Gutenberg block types (name, title, category). Optional category filter.
Args: `category:string`, `per_page:integer`
**`insert_blocks`**
Insert Gutenberg blocks into a post from a simple spec. Each block: {type, content, level?, items?, url?, alt?, id?}. Types: paragraph, heading, list, image, quote, html. mode=append (default) or replace.
Args: `post_id:integer` **(req)**, `blocks:array` **(req)**, `mode:string(append|replace)`
**`create_reusable_block`**
Create a reusable block (wp_block) from a block spec or raw block markup.
Args: `title:string` **(req)**, `blocks:array`, `markup:string`
**`list_reusable_blocks`**
List reusable blocks (wp_block posts).
Args: `per_page:integer`
**`render_shortcode`**
Render a shortcode string to HTML via do_shortcode, optionally in the context of a post.
Args: `shortcode:string` **(req)**, `post_id:integer`
### b7 — WPBakery (js_composer)
Guard: `defined('WPB_VC_VERSION')`. Elements enumerated via WPBMap::getAllShortCodes(). Inert on sites without WPBakery (verified GUARD_OK on mainwp). FUNCTIONAL TEST STILL PENDING on a js_composer site.
**`wpbakery_detect`** — _(guarded off where WPBakery absent — not in the live mainwp registry; activates on js_composer sites)_
**`wpbakery_list_elements`** — _(guarded off where WPBakery absent)_
**`wpbakery_get_content`** — _(guarded off where WPBakery absent)_
**`wpbakery_add_element`** — _(guarded off where WPBakery absent)_
**`wpbakery_replace_text`** — _(guarded off where WPBakery absent)_
### b7 — WPBakery base (js_composer)
Guard: `defined('WPB_VC_VERSION')`. Elements via WPBMap. Functional test pending on a js_composer site. Inert where WPBakery absent.
`wpbakery_detect` · `wpbakery_list_elements` · `wpbakery_get_content` · `wpbakery_add_element` · `wpbakery_replace_text`
### b8 — Remote-data presets
Guard: `none (outbound HTTP)`. wp_remote_get + transient cache (prefix amp_rd_). API keys are passed per-call and NEVER stored. remote_weather=OpenWeather, remote_place_reviews=Google Places.
**`remote_fetch_json`**
Fetch a JSON URL (GET) with transient caching. Optional dot-path (e.g. "data.0.name") extracts part of the response. cache_minutes default 15.
Args: `url:string` **(req)**, `cache_minutes:integer`, `path:string`, `headers:object`
**`remote_weather`**
Current weather from OpenWeather. Provide api_key and either city or lat+lon. units=metric (default) or imperial. Cached 30 min.
Args: `api_key:string` **(req)**, `city:string`, `lat:number`, `lon:number`, `units:string(metric|imperial)`
**`remote_place_reviews`**
Google Place rating + reviews via Places Details API. Provide api_key and place_id. Cached 60 min.
Args: `api_key:string` **(req)**, `place_id:string` **(req)**
**`remote_list_cache`**
List cached remote-data entries (key + size).
Args: _(no args)_
**`remote_clear_cache`**
Clear cached remote-data. Provide key to clear one, or omit to clear all remote-data cache.
Args: `key:string`
Guard: none (outbound HTTP). wp_remote_get + transient cache (amp_rd_). API keys per-call, never stored.
`remote_fetch_json` (url req; cache_minutes, path, headers) · `remote_weather` (api_key req; city|lat+lon; units) · `remote_place_reviews` (api_key+place_id req) · `remote_list_cache` · `remote_clear_cache` (key)
### b9 — Backup / export (Elementor)
Guard: `defined('ELEMENTOR_VERSION')`. export/import round-trips `_elementor_data` as JSON; import uses wp_slash(wp_json_encode(...)) and regenerates element IDs to avoid collisions.
**`export_elementor_page`**
Export a page's Elementor data: parsed elements, page settings, and template. Use as a backup or to clone into another page.
Args: `post_id:integer` **(req)**
**`import_elementor_page`**
Import Elementor data into a target post. Provide elementor_data (JSON string or array). regenerate_ids=true gives every element a fresh id.
Args: `post_id:integer` **(req)**, `elementor_data:Array` **(req)**, `regenerate_ids:boolean`
**`export_global_styles`**
Export the active Elementor kit's global styles (colors, typography, and other page settings).
Args: _(no args)_
**`import_global_styles`**
Write global styles into the active Elementor kit. merge=true (default) merges into existing settings; false replaces them.
Args: `settings:object` **(req)**, `merge:boolean`
**`duplicate_elementor_page`**
Duplicate a page including its Elementor data into a new post (default draft).
Args: `source_id:integer` **(req)**, `title:string`, `status:string`
Guard: `defined('ELEMENTOR_VERSION')`. Round-trips `_elementor_data`; import regenerates element IDs.
`export_elementor_page` (post_id req) · `import_elementor_page` (post_id+elementor_data req; regenerate_ids) · `export_global_styles` · `import_global_styles` (settings req; merge) · `duplicate_elementor_page` (source_id req; title, status)
### b10 — Memory layer (KV store)
Guard: `none`. Option-backed by default; ttl_minutes>0 switches to a transient. Keys sanitized to [a-z0-9_-] and prefixed ampmem_. Values are strings — JSON-encode structured data yourself. memory_append maintains a newline list.
**`memory_set`**
Store a string value under a key. Optional ttl_minutes makes it expire (otherwise it persists). For structured data, pass JSON text as value.
Args: `key:string` **(req)**, `value:string` **(req)**, `ttl_minutes:integer`
**`memory_get`**
Retrieve a stored value by key.
Args: `key:string` **(req)**
**`memory_list`**
List stored memory keys, optionally filtered by prefix.
Args: `prefix:string`
**`memory_delete`**
Delete a stored value by key.
Args: `key:string` **(req)**
**`memory_append`**
Append an item to a newline-delimited list stored at key (created if absent).
Args: `key:string` **(req)**, `item:string` **(req)**
Guard: none. Option-backed; ttl_minutes>0 → transient. Keys prefixed ampmem_. String values.
`memory_set` (key+value req; ttl_minutes) · `memory_get` (key req) · `memory_list` (prefix) · `memory_delete` (key req) · `memory_append` (key+item req)
### b11 — Motion / GSAP
Guard: `defined('ELEMENTOR_VERSION')`. Entrance animations (_animation/_animation_delay) + scroll motion-fx (translateY parallax / opacity). motion_apply_preset staggers delay across top-level elements. Recursive element walk by id.
Guard: `defined('ELEMENTOR_VERSION')`. Entrance animations + scroll motion-fx + staggered presets.
`motion_list_presets` · `motion_set_entrance` (post_id+element_id+animation req; delay_ms) · `motion_set_scroll_fx` (post_id+element_id+effect req; speed) · `motion_apply_preset` (post_id+preset req) · `motion_clear` (post_id req; element_id)
**`motion_list_presets`**
List available entrance animations, scroll motion-FX effects, and named preset bundles.
Args: _(no args)_
### b12 — Woodmart options
Guard: active theme = Woodmart. xts-woodmart-options store; set auto-backs-up to amp_wd_backup; restore reverts/removes.
`woodmart_detect` · `woodmart_get_option` (key req) · `woodmart_list_options` (prefix) · `woodmart_set_option` (key+value req; JSON-aware) · `woodmart_restore_option` (key req)
**`motion_set_entrance`**
Set an Elementor entrance animation (and optional delay in ms) on one element by its id within a post.
Args: `post_id:integer` **(req)**, `element_id:string` **(req)**, `animation:string` **(req)**, `delay_ms:integer`
### b13 — Woodmart functionality
Guard: active theme = Woodmart. 151 Woodmart Elementor widgets discoverable; Layout Builder (woodmart_layout) + HTML Blocks (cms_block). Any wd_* widget is also placeable via core `elementor_add_widget`.
`woodmart_list_widgets` (group wd|wp|all) · `woodmart_list_layouts` (status, per_page) · `woodmart_list_html_blocks` (status, per_page) · `woodmart_get_block` (id req) · `woodmart_create_html_block` (title req; content, status)
**`motion_set_scroll_fx`**
Apply a scroll motion-FX (translateY parallax or opacity fade) to one Elementor element by id.
Args: `post_id:integer` **(req)**, `element_id:string` **(req)**, `effect:string(translateY|opacity)` **(req)**, `speed:integer`
### b14 — Yoast SEO deep
Guard: `defined('WPSEO_VERSION')`. Beyond seo_* (b2): cornerstone, primary category, SEO/readability scores, Premium redirects, sitemap state. Test pending on a Yoast site. Inert where Yoast absent.
`yoast_detect` · `yoast_get_meta` (post_id req) · `yoast_set_meta` (post_id req; title/metadesc/focuskw/canonical/og_*/cornerstone/primary_category/noindex/nofollow) · `yoast_bulk_audit` (post_types, per_page) · `yoast_list_redirects` (Premium)
**`motion_apply_preset`**
Apply a named motion preset bundle to all top-level elements of an Elementor post (staggered).
Args: `post_id:integer` **(req)**, `preset:string` **(req)**
### b15 — Wordfence security
Guard: WORDFENCE_VERSION / wfConfig. Reads wf* tables (Issues/Blocks7/Logins) + wfConfig; block via wfBlock::createIP. Test pending on a Wordfence site. Inert where Wordfence absent.
`wordfence_status` · `wordfence_scan_issues` (status new|all, limit) · `wordfence_blocked_ips` (limit) · `wordfence_recent_logins` (limit, failed_only) · `wordfence_block_ip` (ip req; reason)
**`motion_clear`**
Remove entrance animation and scroll motion-FX settings from one element (or all top-level elements if element_id omitted).
Args: `post_id:integer` **(req)**, `element_id:string`
### b16 — WPML write/deep
Guard: `defined('ICL_SITEPRESS_VERSION')`. Official WPML action API. Smoke-tested on mainwp (trid linkage verified).
`wpml_set_post_language` (post_id+language_code req; trid, source_language) · `wpml_copy_to_language` (source_id+target_language req; status) · `wpml_connect_translation` (source_id+translated_id+language_code req)
### b12 — Woodmart theme helpers
Guard: `active theme = Woodmart`. Writes to the xts-woodmart-options store. set_option is JSON-aware and auto-backs-up the prior value into amp_wd_backup; restore_option reverts or removes. Fully functional on mainwp (Woodmart 8.4.1).
### b17 — Caching (unified)
Guard: none (per-engine detect). LiteSpeed (also Hostinger's stack), W3TC, WP Rocket, WP Super Cache, WP Fastest Cache, Autoptimize, object cache. **Hostinger hosting-level actions (DNS/SSL/deploy) are NOT here — those belong to a Hostinger connector, not a WP plugin.**
`cache_detect` · `cache_status` · `cache_purge_all` · `cache_purge_url` (url req)
**`woodmart_detect`**
Report whether the Woodmart theme is active and its version.
Args: _(no args)_
### b18 — Elementor power (Pro-aware)
Guard: `defined('ELEMENTOR_VERSION')`. Pro pieces degrade gracefully. Tested on mainwp (Pro active).
`elementor_list_kits` · `elementor_list_library` (type, per_page — groups header/footer/single/archive/popup/page/section/…) · `elementor_get_conditions` (template_id req — Pro) · `elementor_get_dynamic_tags` · `elementor_get_form_submissions` (limit, form_name — Pro)
**`woodmart_get_option`**
Read one Woodmart theme option by key.
Args: `key:string` **(req)**
### b19 — WPBakery deep
Guard: `defined('WPB_VC_VERSION')`. Test pending on a js_composer site. Inert where WPBakery absent.
`wpbakery_list_templates` · `wpbakery_get_mapping` (tag req) · `wpbakery_render` (shortcode req; post_id) · `wpbakery_set_content` (post_id+content req) · `wpbakery_wrap` (content req; columns, row_attrs)
**`woodmart_list_options`**
List Woodmart theme option keys (and value types), optionally filtered by prefix.
Args: `prefix:string`
**`woodmart_set_option`**
Set one Woodmart theme option. value is parsed as JSON when valid (so arrays/booleans/numbers work), otherwise stored as a string. The prior value is auto-backed-up for woodmart_restore_option.
Args: `key:string` **(req)**, `value:string` **(req)**
**`woodmart_restore_option`**
Restore one Woodmart option to the value saved before the last woodmart_set_option (or remove it if there was none).
Args: `key:string` **(req)**
### b20 — WooCommerce deep
Guard: `class_exists('WooCommerce')`. Beyond the 27 baseline wc_* tools. Tested on mainwp.
`wc_list_product_categories` (parent, search, per_page) · `wc_create_product_category` (name req; slug, parent, description) · `wc_list_payment_gateways` · `wc_list_shipping_zones` · `wc_list_tax_rates` (class, limit) · `wc_get_settings` (group general|products|tax|account|email req) · `wc_add_order_note` (order_id+note req; customer_note) · `wc_create_refund` (order_id req; amount, reason, restock) · `wc_sales_report` (date_from, date_to, statuses) · `wc_list_product_reviews` (product_id, per_page)
---
## Core / baseline tools
## Core / baseline tools (index)
The pre-existing plugin tools (Elementor base set, core WordPress CRUD, WooCommerce, media, menus, users, options, SEO base, etc.). Full definitions are the live registry; this section is a grouped index by name prefix. Regenerate the full listing any time with the dump + generator scripts noted at the foot of this file.
Pre-existing tools, counted by name prefix. Full per-arg detail is the live registry — regenerate with the scripts below for the exhaustive listing.
Counts by prefix (267 total = 212 core + 55 net-new live; b7's 5 WPBakery tools are guarded off on mainwp):
`activate` 1 · `add` 1 · `ai` 1 · `approve` 1 · `cli` 2 · `count` 3 · `create` 6 · `deactivate` 1 · `delete` 11 · `elementor` 56 · `email` 3 · `fs` 5 · `generate` 2 · `get` 31 · `list` 13 · `pexels` 2 · `read` 1 · `reorder` 1 · `run` 1 · `search` 1 · `send` 1 · `set` 2 · `spam` 1 · `sql` 3 · `switch` 1 · `theme` 7 · `transient` 5 · `trash` 1 · `update` 13 · `upload` 1 · `wc` 27 · `widget` 5 · `wp` 1 · `write` 1
`activate_*` (1) · `add_*` (1) · `ai_*` (1) · `approve_*` (1) · `cli_*` (2) · `count_*` (3) · `create_*` (6) · `deactivate_*` (1) · `delete_*` (11) · `elementor_*` (56) · `email_*` (3) · `fs_*` (5) · `generate_*` (2) · `get_*` (31) · `list_*` (13) · `pexels_*` (2) · `read_*` (1) · `reorder_*` (1) · `run_*` (1) · `search_*` (1) · `send_*` (1) · `set_*` (2) · `spam_*` (1) · `sql_*` (3) · `switch_*` (1) · `theme_*` (7) · `transient_*` (5) · `trash_*` (1) · `update_*` (13) · `upload_*` (1) · `wc_*` (27) · `widget_*` (5) · `wp_*` (1) · `write_*` (1)
(The net-new families above — a11y, seo, wpml, memory, motion, remote, woodmart, plus the b1/b5/b6/b9 additions — are documented in full in the section above.)
Baseline prefixes include the 57-tool `elementor_*` core set and the 27-tool `wc_*` WooCommerce set, plus core WordPress CRUD (posts, pages, media, users, terms, menus, comments, options, transients), fs, sql, cli, theme, widget, seo, pexels and generate families.
---
## Regenerating this file
Against the live registry on the target container:
1. `/tmp/dev_dump_defs.php` — bootstraps wp-load, calls `new \AskTamMCP\MCP\Registry()->getToolDefinitions()`, writes `amp_defs.json`.
2. `/tmp/dev_gen_skills.js` — formats that JSON into this grouped reference.
Re-run both whenever a batch is added so the count and listings stay in sync.
1. `/tmp/dev_dump_defs.php` — bootstraps wp-load, calls getToolDefinitions(), writes amp_defs.json.
2. `/tmp/dev_gen_skills.js` — formats it (batch map b1–b20 documented in full + core prefix index).
Re-run both whenever a batch is added.
_End of reference._