From 1e5f1bfccdabd825e181b85406f8f40f7f522b6a Mon Sep 17 00:00:00 2001 From: colorlink Date: Fri, 16 Oct 2026 02:19:35 +0000 Subject: [PATCH] =?UTF-8?q?docs(SKILLS):=20update=20to=20294=20tools,=20b1?= =?UTF-8?q?=E2=80=93b20=20(adds=20Woodmart/Yoast/Wordfence/WPML-write/Cach?= =?UTF-8?q?ing/Elementor-power/WPBakery-deep/WooCommerce-deep)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Q8t9GEyyLZbUQu26na1JQg --- SKILLS.md | 314 +++++++++++------------------------------------------- 1 file changed, 63 insertions(+), 251 deletions(-) diff --git a/SKILLS.md b/SKILLS.md index aac1b91..01c5ae1 100644 --- a/SKILLS.md +++ b/SKILLS.md @@ -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._