@respira/wordpress-mcp-server 8.3.23 → 8.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +105 -21
  3. package/TOOL_CATALOG.md +445 -300
  4. package/dist/__tests__/0e6bd33c-redeem-preserves-per-site-settings.test.js +3 -2
  5. package/dist/__tests__/0e6bd33c-redeem-preserves-per-site-settings.test.js.map +1 -1
  6. package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.d.ts +11 -0
  7. package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.d.ts.map +1 -0
  8. package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.js +80 -0
  9. package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.js.map +1 -0
  10. package/dist/__tests__/plugin-slug-path-encoding.test.d.ts +2 -0
  11. package/dist/__tests__/plugin-slug-path-encoding.test.d.ts.map +1 -0
  12. package/dist/__tests__/plugin-slug-path-encoding.test.js +41 -0
  13. package/dist/__tests__/plugin-slug-path-encoding.test.js.map +1 -0
  14. package/dist/__tests__/release-9-surface.test.d.ts +2 -0
  15. package/dist/__tests__/release-9-surface.test.d.ts.map +1 -0
  16. package/dist/__tests__/release-9-surface.test.js +197 -0
  17. package/dist/__tests__/release-9-surface.test.js.map +1 -0
  18. package/dist/install-skills.d.ts +4 -5
  19. package/dist/install-skills.d.ts.map +1 -1
  20. package/dist/install-skills.js +4 -5
  21. package/dist/install-skills.js.map +1 -1
  22. package/dist/server.d.ts.map +1 -1
  23. package/dist/server.js +332 -73
  24. package/dist/server.js.map +1 -1
  25. package/dist/skill-prompts.d.ts +43 -0
  26. package/dist/skill-prompts.d.ts.map +1 -0
  27. package/dist/skill-prompts.js +135 -0
  28. package/dist/skill-prompts.js.map +1 -0
  29. package/dist/wordpress-client.d.ts +40 -11
  30. package/dist/wordpress-client.d.ts.map +1 -1
  31. package/dist/wordpress-client.js +74 -22
  32. package/dist/wordpress-client.js.map +1 -1
  33. package/package.json +2 -2
  34. package/skills/activity-report-composer/SKILL.md +17 -5
  35. package/skills/activity-report-composer/metadata.json +2 -2
  36. package/skills/art-direction/SKILL.md +9 -3
  37. package/skills/art-direction/metadata.json +7 -3
  38. package/skills/brand-voice-synthesizer/SKILL.md +36 -16
  39. package/skills/brand-voice-synthesizer/metadata.json +8 -4
  40. package/skills/build-oxygen6-page/SKILL.md +17 -2
  41. package/skills/conversion-audit/SKILL.md +12 -0
  42. package/skills/custom-post-type-architect/SKILL.md +12 -0
  43. package/skills/figma-to-bricks/SKILL.md +4 -2
  44. package/skills/figma-to-divi/SKILL.md +4 -2
  45. package/skills/figma-to-elementor/SKILL.md +8 -1
  46. package/skills/figma-to-gutenberg/SKILL.md +4 -2
  47. package/skills/html-to-breakdance/SKILL.md +7 -3
  48. package/skills/html-to-breakdance/metadata.json +7 -3
  49. package/skills/html-to-bricks/SKILL.md +7 -3
  50. package/skills/html-to-bricks/metadata.json +7 -3
  51. package/skills/internal-link-builder/SKILL.md +12 -0
  52. package/skills/migrate-beaver-builder-to-bricks/SKILL.md +19 -3
  53. package/skills/migrate-beaver-builder-to-gutenberg/SKILL.md +19 -3
  54. package/skills/migrate-brizy-to-gutenberg/SKILL.md +19 -3
  55. package/skills/migrate-divi-to-breakdance/SKILL.md +19 -3
  56. package/skills/migrate-divi-to-bricks/SKILL.md +19 -3
  57. package/skills/migrate-divi-to-gutenberg/SKILL.md +19 -3
  58. package/skills/migrate-elementor-to-breakdance/SKILL.md +20 -4
  59. package/skills/migrate-elementor-to-bricks/SKILL.md +20 -4
  60. package/skills/migrate-elementor-to-gutenberg/SKILL.md +20 -4
  61. package/skills/migrate-elementor-to-oxygen/SKILL.md +20 -4
  62. package/skills/migrate-oxygen-to-breakdance/SKILL.md +19 -3
  63. package/skills/migrate-oxygen-to-bricks/SKILL.md +19 -3
  64. package/skills/migrate-thrive-architect-to-gutenberg/SKILL.md +19 -3
  65. package/skills/migrate-visual-composer-to-gutenberg/SKILL.md +19 -3
  66. package/skills/migrate-wpbakery-to-bricks/SKILL.md +19 -3
  67. package/skills/migrate-wpbakery-to-gutenberg/SKILL.md +19 -3
  68. package/skills/mobile-experience-report/SKILL.md +12 -0
  69. package/skills/murmur-review-loop/SKILL.md +142 -0
  70. package/skills/page-template-library/SKILL.md +12 -0
  71. package/skills/respira-builder-edits/SKILL.md +1 -0
  72. package/skills/respira-setup-assistant/SKILL.md +12 -0
  73. package/skills/respira-site-audit/SKILL.md +18 -6
  74. package/skills/respira-woocommerce/SKILL.md +1 -0
  75. package/skills/seo-aeo-amplifier/SKILL.md +14 -2
  76. package/skills/seo-aeo-amplifier/metadata.json +2 -2
  77. package/skills/stale-content-detector/SKILL.md +12 -0
  78. package/skills/technical-debt-audit/SKILL.md +14 -2
  79. package/skills/woo-marketing-campaigns/SKILL.md +12 -9
  80. package/skills/woo-pricing-promotions/SKILL.md +9 -9
  81. package/skills/woocommerce-health-check/SKILL.md +22 -8
  82. package/skills/wordpress-ai-image-optimizer/SKILL.md +14 -2
  83. package/skills/wordpress-ai-image-optimizer/metadata.json +2 -2
  84. package/skills/wordpress-security-review/SKILL.md +154 -0
  85. package/skills/wordpress-site-dna/README.md +1 -1
  86. package/skills/wordpress-site-dna/SKILL.md +52 -19
  87. package/tool-capabilities.json +3236 -351
@@ -1,6 +1,18 @@
1
+ ---
2
+ name: seo-aeo-amplifier
3
+ description: "Use when the user says 'run an seo aeo audit', 'improve my search visibility', 'optimize my site for search engines', or wants the site cited by AI answer engines. Audits on-page SEO and AEO, generates schema markup, and applies fixes on duplicates for review after a snapshot."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.3.1
9
+ mcp-server: respira-wordpress
10
+ category: performance
11
+ ---
12
+
1
13
  # SEO & AEO Amplifier
2
14
 
3
- **Version:** 1.3.0
15
+ **Version:** 1.3.1
4
16
  **Updated:** 2026-06-30
5
17
  **Freshly updated:** v1.3.0 takes a snapshot with respira_get_snapshot before any edit so every change is one-click reversible, switches from full extract/inject to surgical respira_find_element + respira_update_element edits for meta titles, descriptions and H1s, applies schema and meta across many pages in a single safe pass with respira_batch_update, and wires respira_generate_activity_report into the "SEO work done -> client report" handoff. Also leans on the real SEO analysis tools (respira_analyze_seo, respira_analyze_aeo, respira_analyze_rankmath, respira_check_seo_issues, respira_check_structured_data) instead of hand-rolled scoring.
6
18
 
@@ -244,7 +256,7 @@ It can:
244
256
  - `respira_restore_snapshot` (one-click rollback)
245
257
 
246
258
  **Reporting**
247
- - `respira_generate_activity_report` (SEO work done -> client report)
259
+ - `respira_generate_activity_report` (SEO work done -> client report; plugin 9.0 and later list it as a tool; on older plugins call `respira_invoke_ability` with `ability: "respira/generate-activity-report"` and the same arguments under `args`)
248
260
 
249
261
  **WooCommerce tools (optional)**
250
262
  - `woocommerce_list_products`
@@ -12,8 +12,8 @@
12
12
  "requires_accessibility_addon": false,
13
13
  "is_read_only": false,
14
14
  "is_duplicate_first": true,
15
- "version": "1.2.0",
16
- "last_updated": "2026-05-24",
15
+ "version": "1.3.1",
16
+ "last_updated": "2026-09-13",
17
17
  "tools_used": [
18
18
  "respira_get_site_context",
19
19
  "respira_list_pages",
@@ -1,3 +1,15 @@
1
+ ---
2
+ name: stale-content-detector
3
+ description: "Use when the user says 'find old content', 'what is stale', 'what needs refreshing', or 'what should i archive'. Categorizes pages and posts as fresh, aging, stale, or archive-candidate by age, traffic signal, and internal link count, with a refresh, redirect, or archive call per item."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.0.0
9
+ mcp-server: respira-wordpress
10
+ category: audit
11
+ ---
12
+
1
13
  # Stale Content Detector
2
14
 
3
15
  **Version:** 1.0.0
@@ -1,6 +1,18 @@
1
+ ---
2
+ name: technical-debt-audit
3
+ description: "Use when the user says 'clean up my wordpress', 'what is bloating my wordpress', 'find orphaned shortcodes', or 'scan for unused plugins'. Audits orphaned shortcodes from deleted plugins, unused plugins, database bloat, unused media, and leftover data from inactive builders."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.2.1
9
+ mcp-server: respira-wordpress
10
+ category: audit
11
+ ---
12
+
1
13
  # Technical Debt Audit
2
14
 
3
- **Version:** 1.2.0
15
+ **Version:** 1.2.1
4
16
  **Updated:** 2026-06-30
5
17
  **Freshly updated:** v1.2.0 turns the audit into safe, reversible cleanup. Every debt type now has a per-type cleanup playbook that opens with a `respira_get_snapshot` checkpoint and ends with an explicit `respira_restore_snapshot` rollback. Orphaned-shortcode findings are validated with `respira_find_element` before any edit. The per-site debt score is persisted via `respira_get_option` / `respira_update_option` so re-runs show the trend. The cleanup narrative is generated with `respira_generate_activity_report`. Builder archaeology now covers the newer block builders (Spectra, Kadence Blocks, GenerateBlocks, SeedProd) alongside the classic 16.
6
18
  **Category:** audit
@@ -550,7 +562,7 @@ All tools below are provided by the `respira-wordpress` MCP server. Never call t
550
562
  | `respira_find_element` | Validate an orphaned shortcode is a live element | `{ pageId, ... }` |
551
563
  | `respira_get_snapshot` | Checkpoint before any cleanup (rollback handle) | none |
552
564
  | `respira_restore_snapshot` | Roll a cleanup back to the checkpoint | `{ snapshot_id }` |
553
- | `respira_generate_activity_report` | Structured totals for the cleanup narrative | none |
565
+ | `respira_generate_activity_report` | Structured totals for the cleanup narrative (plugin 9.0 and later list it as a tool; on older plugins call `respira_invoke_ability` with `ability: "respira/generate-activity-report"` and the same arguments under `args`) | none |
554
566
 
555
567
  > Cleanup tools used inside the playbooks above — `respira_create_page_duplicate`, `respira_create_post_duplicate`, `respira_remove_element`, `respira_batch_update`, `respira_deactivate_plugin`, `respira_activate_plugin`, `respira_delete_plugin` — are also `respira-wordpress` MCP tools. Use only tools from this server; never invent a tool name.
556
568
 
@@ -5,7 +5,7 @@ license: MIT
5
5
  metadata:
6
6
  author: "Respira for WordPress"
7
7
  author_url: https://respira.press
8
- version: 1.0.0
8
+ version: 1.0.1
9
9
  mcp-server: respira-wordpress
10
10
  category: commerce
11
11
  ---
@@ -39,7 +39,7 @@ So this reads sales, stock and catalogue quality before it writes a word, then d
39
39
  ## Requirements
40
40
 
41
41
  - WooCommerce with the Respira WooCommerce add-on, licensed
42
- - Enough order history for `get-sales-report` to say something useful. On a store with almost no orders, say that plainly and plan from stock and margin instead of pretending the data speaks.
42
+ - Enough order history for `woocommerce_top_products` and `woocommerce_revenue_summary` to say something useful. On a store with almost no orders, say that plainly and plan from stock and margin instead of pretending the data speaks.
43
43
 
44
44
  ## Trigger Phrase
45
45
 
@@ -56,10 +56,10 @@ So this reads sales, stock and catalogue quality before it writes a word, then d
56
56
 
57
57
  ### Phase 1: Read the shop
58
58
 
59
- 1. `get-sales-report` over the last 30 and 90 days. What sells, what is seasonal, what has stalled.
60
- 2. `list-products-advanced` for stock and price on the candidates. A hero product that goes out of stock on day two is a campaign that ends on day two.
61
- 3. `find-low-stock` to rule those out early.
62
- 4. `analyze-catalog-quality` on the shortlist. A product with no image and a twelve-word description will not convert however good the campaign is, and fixing that comes first.
59
+ 1. `woocommerce_top_products` and `woocommerce_revenue_summary` over the last 30 and 90 days (pass `date_start` and `date_end`), then `woocommerce_sales_timeseries` with `interval: week`. What sells, what is seasonal, what has stalled.
60
+ 2. `woocommerce_list_products_advanced` for stock and price on the candidates. A hero product that goes out of stock on day two is a campaign that ends on day two.
61
+ 3. `woocommerce_find_low_stock` to rule those out early.
62
+ 4. `woocommerce_catalog_health` for the store, then `woocommerce_product_ai_readiness` on each shortlisted product. A product with no image and a twelve-word description will not convert however good the campaign is, and fixing that comes first.
63
63
 
64
64
  ### Phase 2: Propose, do not assume
65
65
 
@@ -78,7 +78,7 @@ If the promoted products have catalogue gaps, fix those first with Woo Catalog P
78
78
  ### Phase 4: Draft
79
79
 
80
80
  - Landing or category copy through `respira_create_page_duplicate` and the builder tools, never onto the live page
81
- - `update-product` for descriptions on the promoted set, staged
81
+ - `woocommerce_update_product` for descriptions on the promoted set, staged
82
82
  - The offer itself through Woo Pricing and Promotions, previewed with `dry_run` first
83
83
 
84
84
  Every claim traces to something read in Phase 1. Prices come from the product, availability comes from stock, delivery claims come from the shipping settings or are not made.
@@ -87,9 +87,11 @@ Every claim traces to something read in Phase 1. Prices come from the product, a
87
87
 
88
88
  List the drafts, their preview links, and what remains a human decision: approving the pages, sending whatever is being sent, and the date the offer ends.
89
89
 
90
+ For each draft page, `respira_create_share_link` gives a link anyone can open with no WordPress login. When the owner wants the people who sign off to comment on the page itself, send a Murmur review link instead (`respira_create_review_link`, Builder plan and up; on a lower plan the tool answers `respira_murmur_plan`, so fall back to the share link). The Murmur Review Loop skill picks up their notes.
91
+
90
92
  ### Phase 6: Afterwards
91
93
 
92
- When the campaign has run, `get-sales-report` for the window and compare against the plan. Say what worked and what did not, including when the answer is that the campaign made no measurable difference.
94
+ When the campaign has run, `woocommerce_top_products` and `woocommerce_revenue_summary` for the window, and `woocommerce_agent_orders_report` for orders that arrived through agent cart links, and compare against the plan. Say what worked and what did not, including when the answer is that the campaign made no measurable difference.
93
95
 
94
96
  ## Safety Model
95
97
 
@@ -109,7 +111,7 @@ It can: pick candidates from real sales and stock rather than plausibility, stop
109
111
 
110
112
  ## Tooling
111
113
 
112
- `respira_woo_get-sales-report`, `respira_woo_agent-orders-report`, `respira_woo_list-products-advanced`, `respira_woo_find-low-stock`, `respira_woo_analyze-catalog-quality`, `respira_woo_update-product`, `respira_woo_create-coupon`, `respira_woo_schedule-sale`, `respira_create_page_duplicate`, `respira_update_element`, `respira_get_snapshot`
114
+ `woocommerce_top_products`, `woocommerce_revenue_summary`, `woocommerce_sales_timeseries`, `woocommerce_agent_orders_report`, `woocommerce_list_products_advanced`, `woocommerce_find_low_stock`, `woocommerce_catalog_health`, `woocommerce_product_ai_readiness`, `woocommerce_update_product`, `woocommerce_create_coupon`, `woocommerce_schedule_sale`, `respira_create_page_duplicate`, `respira_update_element`, `respira_get_snapshot`, `respira_create_share_link`, `respira_create_review_link`
113
115
 
114
116
  ## Telemetry
115
117
 
@@ -120,6 +122,7 @@ After run completion, fire-and-forget to `POST https://www.respira.press/api/ski
120
122
  - Woo Pricing and Promotions (the offer the campaign runs on)
121
123
  - Woo Catalog Perfection (fix the products before promoting them)
122
124
  - Brand Voice Synthesizer (write in the store's own voice)
125
+ - Murmur Review Loop (collect and apply the sign-off notes)
123
126
  - SEO & AEO Amplifier (make the campaign page findable)
124
127
 
125
128
  ---
@@ -5,7 +5,7 @@ license: MIT
5
5
  metadata:
6
6
  author: "Respira for WordPress"
7
7
  author_url: https://respira.press
8
- version: 1.0.0
8
+ version: 1.0.1
9
9
  mcp-server: respira-wordpress
10
10
  category: commerce
11
11
  ---
@@ -35,7 +35,7 @@ Pricing is the one place on a store where a plausible-looking mistake costs real
35
35
  ## Requirements
36
36
 
37
37
  - WooCommerce with the Respira WooCommerce add-on, licensed
38
- - The store's own reporting for volume, which `get-sales-report` reads
38
+ - The store's own sales history for volume, which `woocommerce_top_products` reads
39
39
 
40
40
  ## Trigger Phrase
41
41
 
@@ -55,8 +55,8 @@ Pricing is the one place on a store where a plausible-looking mistake costs real
55
55
 
56
56
  Never reprice from memory of what a product costs.
57
57
 
58
- 1. `respira_woo_list-products-advanced` for the target set, or `get-product` for a named one. This also matters mechanically: reads are what the add-on records as provenance, and a write to something never read is annotated as unverified.
59
- 2. `get-sales-report` over a comparable recent window, so the discount has a volume to be measured against.
58
+ 1. `woocommerce_list_products_advanced` for the target set, or `woocommerce_get_product` for a named one. This also matters mechanically: reads are what the add-on records as provenance, and a write to something never read is annotated as unverified.
59
+ 2. `woocommerce_top_products` over a comparable recent window (`date_start`, `date_end`), so the discount has a volume to be measured against.
60
60
  3. Note anything already on sale. Stacking a new sale on an existing one is the most common way a discount ends up twice as deep as intended.
61
61
 
62
62
  ### Phase 2: State it in money
@@ -73,15 +73,15 @@ Run the write with `dry_run: true` first, every time. The response lists each pr
73
73
 
74
74
  ### Phase 4: Write
75
75
 
76
- - `bulk-update-prices` for a repricing, or `schedule-sale` when it should end by itself
77
- - `create-coupon` for a code, with `usage_limit` set unless the user says otherwise, because an uncapped code is a liability
78
- - `add-sale-badge` if the storefront should show it
76
+ - `woocommerce_bulk_update_prices` for a repricing (`change_type` percentage, absolute or set_value; `apply_to` regular_price, sale_price or both), or `woocommerce_schedule_sale` when it should end by itself
77
+ - `woocommerce_create_coupon` for a code, with `usage_limit` set unless the user says otherwise, because an uncapped code is a liability
78
+ - `woocommerce_add_sale_badge` if the storefront should show it (block themes only; run it with `dry_run: true` first)
79
79
 
80
80
  Snapshots are captured automatically. Report the snapshot ids.
81
81
 
82
82
  ### Phase 5: Confirm and hand back the undo
83
83
 
84
- State what changed, in money, and how to reverse it: `revert-pricing` with the product and snapshot id. If the sale was scheduled, say the date it ends without anyone acting.
84
+ State what changed, in money, and how to reverse it: `woocommerce_revert_pricing` with the `product_id` and `snapshot_id`. If the sale was scheduled, say the date it ends without anyone acting.
85
85
 
86
86
  ## Safety Model
87
87
 
@@ -101,7 +101,7 @@ It can: show what a change costs before it happens, apply it consistently across
101
101
 
102
102
  ## Tooling
103
103
 
104
- `respira_woo_list-products-advanced`, `respira_woo_get-product`, `respira_woo_get-sales-report`, `respira_woo_bulk-update-prices`, `respira_woo_schedule-sale`, `respira_woo_revert-pricing`, `respira_woo_create-coupon`, `respira_woo_update-coupon`, `respira_woo_list-coupons`, `respira_woo_add-sale-badge`
104
+ `woocommerce_list_products_advanced`, `woocommerce_get_product`, `woocommerce_top_products`, `woocommerce_revenue_summary`, `woocommerce_bulk_update_prices`, `woocommerce_schedule_sale`, `woocommerce_revert_pricing`, `woocommerce_create_coupon`, `woocommerce_update_coupon`, `woocommerce_list_coupons`, `woocommerce_add_sale_badge`
105
105
 
106
106
  ## Telemetry
107
107
 
@@ -1,8 +1,21 @@
1
+ ---
2
+ name: woocommerce-health-check
3
+ description: "Use when the user says 'why is my checkout broken', 'audit my woocommerce store', 'cart problems woocommerce', or 'losing sales woocommerce'. Diagnoses checkout and cart failures, AJAX mismatches, caching conflicts, payment gateway setup, and SSL enforcement."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.2.1
9
+ mcp-server: respira-wordpress
10
+ category: audit
11
+ requires-addon: woocommerce
12
+ ---
13
+
1
14
  # WooCommerce Health Check
2
15
 
3
- **Version:** 1.2.0
16
+ **Version:** 1.2.1
4
17
  **Updated:** 2026-06-30
5
- **Freshly updated:** v1.2.0 adds real order/sales/stock diagnostics via the woocommerce_* read tools (woocommerce_list_orders, woocommerce_sales_report, woocommerce_get_stock_status), gives every detected issue a concrete safe-fix suggestion, uses respira_find_element to locate and validate the actual cart/checkout widgets and blocks, snapshots with respira_get_snapshot before any fix, and frames respira_generate_activity_report as a "prevented X lost orders / revenue protected" report.
18
+ **Freshly updated:** v1.2.0 adds real order/sales/stock diagnostics via the woocommerce_* read tools (woocommerce_list_orders, woocommerce_revenue_summary, woocommerce_get_stock_status), gives every detected issue a concrete safe-fix suggestion, uses respira_find_element to locate and validate the actual cart/checkout widgets and blocks, snapshots with respira_get_snapshot before any fix, and frames respira_generate_activity_report as a "prevented X lost orders / revenue protected" report.
6
19
  **Category:** audit
7
20
  **Status:** active
8
21
  **Requires:** Respira for WordPress plugin + MCP server + WooCommerce (`requires_addon: woocommerce`)
@@ -129,11 +142,12 @@ Look at order status mix over a recent window:
129
142
  - Many `cancelled` after `pending` can mean session/cart loss before payment.
130
143
 
131
144
  ```
132
- Tool: woocommerce_sales_report
133
- Returns: Sales totals over a period
145
+ Tool: woocommerce_revenue_summary
146
+ Args: date_start, date_end (store timezone; default the last 30 days)
147
+ Returns: Gross, discounts, refunds, tax, shipping and net revenue over the period, with the statuses counted and how many orders it covered
134
148
  ```
135
149
 
136
- Use the sales report to size the impact: a sudden drop against a prior period quantifies how much revenue the configuration issues are putting at risk, which feeds the "revenue protected" framing in the final report.
150
+ Use the revenue summary to size the impact: run it for the recent window and for the period before it, and a sudden drop between the two quantifies how much revenue the configuration issues are putting at risk, which feeds the "revenue protected" framing in the final report.
137
151
 
138
152
  ```
139
153
  Tool: woocommerce_get_stock_status
@@ -372,7 +386,7 @@ This skill is read-only by default. When the user approves a fix, every change f
372
386
  After the audit (and any approved fixes), turn the work into a store-owner-facing report with `respira_generate_activity_report`.
373
387
 
374
388
  Frame it around protected revenue, not raw tool calls:
375
- - Tie the failed/pending order rate and the `woocommerce_sales_report` drop you measured in Step 4 to an estimate of orders that were being lost.
389
+ - Tie the failed/pending order rate and the `woocommerce_revenue_summary` drop you measured in Step 4 to an estimate of orders that were being lost.
376
390
  - After fixes, state what was restored: "checkout widget re-inserted, caching exclusions added, X products corrected back in stock."
377
391
  - The activity report becomes the "prevented X lost orders / revenue protected" summary the owner can keep or hand to a client, with the snapshot id as the documented rollback point.
378
392
 
@@ -556,9 +570,9 @@ All tools below are provided by the `respira-wordpress` MCP server. Never call t
556
570
  | `respira_get_snapshot` | Snapshot before any fix (rollback point) | none |
557
571
  | `respira_restore_snapshot` | Roll back to a snapshot if a fix has side effects | snapshot id |
558
572
  | `respira_create_page_duplicate` | Duplicate-first page fixes (checkout/cart/mobile) | `{ id }` |
559
- | `respira_generate_activity_report` | "Revenue protected / prevented X lost orders" report | none |
573
+ | `respira_generate_activity_report` | "Revenue protected / prevented X lost orders" report (plugin 9.0 and later list it as a tool; on older plugins call `respira_invoke_ability` with `ability: "respira/generate-activity-report"` and the same arguments under `args`) | none |
560
574
  | `woocommerce_list_orders` | Recent orders + status mix (failed/pending signal) | none |
561
- | `woocommerce_sales_report` | Sales totals over a period (size the impact) | period |
575
+ | `woocommerce_revenue_summary` | Revenue over a period, net of refunds (size the impact) | date_start, date_end |
562
576
  | `woocommerce_get_stock_status` | Stock state per product (silent lost-sale flags) | none |
563
577
  | `woocommerce_update_stock` | Correct a confirmed stock data error (after snapshot) | product + stock |
564
578
 
@@ -1,6 +1,18 @@
1
+ ---
2
+ name: wordpress-ai-image-optimizer
3
+ description: "Use when the user says 'optimize my wordpress images with ai', 'compress and optimize all images', 'audit my media library', or 'improve image performance'. Downloads images, compresses, converts to WebP, resizes and renames locally, re-uploads, and updates every content reference."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.2.1
9
+ mcp-server: respira-wordpress
10
+ category: performance
11
+ ---
12
+
1
13
  # WordPress AI Image Optimizer
2
14
 
3
- **Version:** 1.2.0
15
+ **Version:** 1.2.1
4
16
  **Updated:** 2026-06-30
5
17
  **Freshly updated:** v1.2.0 replaces per-image `respira_update_media` loops with a single `respira_update_media_batch` pass (up to ~50 items at once), snapshots the media library with `respira_get_snapshot` before the batch so the whole run is one-step reversible, runs the audit through `respira_analyze_images`, surfaces optional stock replacements via `respira_search_stock_images` + `respira_sideload_image`, and closes with a `respira_generate_activity_report` summary (e.g. "optimized 47 images, saved 1.2GB").
6
18
 
@@ -197,7 +209,7 @@ Uses these Respira MCP tools:
197
209
  - `respira_restore_snapshot` (one-step revert)
198
210
 
199
211
  **Reporting:**
200
- - `respira_generate_activity_report` (run summary: images optimized, space saved, alt text added)
212
+ - `respira_generate_activity_report` (run summary: images optimized, space saved, alt text added; plugin 9.0 and later list it as a tool; on older plugins call `respira_invoke_ability` with `ability: "respira/generate-activity-report"` and the same arguments under `args`)
201
213
 
202
214
  **Content Scanning:**
203
215
  - `respira_list_pages`
@@ -12,8 +12,8 @@
12
12
  "requires_accessibility_addon": false,
13
13
  "is_read_only": false,
14
14
  "is_duplicate_first": true,
15
- "version": "1.1.0",
16
- "last_updated": "2026-05-24",
15
+ "version": "1.2.1",
16
+ "last_updated": "2026-09-13",
17
17
  "tools_used": [
18
18
  "respira_list_media",
19
19
  "respira_get_media",
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: wordpress-security-review
3
+ description: "Use when the user asks 'is my site secure', 'run a security audit', 'check for vulnerabilities', 'was my site hacked', or 'fix the vulnerable plugins'. Runs the Respira security audit, reads its indicators, coverage and known vulnerabilities honestly, never calls a partial scan clean, and fixes what it finds one approved step at a time."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.0.0
9
+ mcp-server: respira-wordpress
10
+ category: audit
11
+ respira_min_version: 9.0.0
12
+ ---
13
+
14
+ # WordPress Security Review
15
+
16
+ Runs the security audit built into Respira, explains what it found in plain words, and fixes what can be fixed, one approved step at a time.
17
+
18
+ ## What this skill does
19
+
20
+ A security check an agent improvises usually grades a site on whether a security plugin is installed. That says nothing about whether the site is patched, whether an administrator appeared last week, or whether the uploads folder runs PHP. The Respira audit answers those questions from evidence WordPress itself can verify, and it says which questions it could not answer.
21
+
22
+ This skill runs it, reads every part of the result, and keeps the report honest: a check that did not run is reported as not run, a scan that hit its limit is reported as partial, and a vulnerability database that could not be reached means "not checked", never "clean".
23
+
24
+ **Handles:**
25
+ - The audit: core checksums, administrators and their application passwords, plugins, themes, must-use plugins, cron hooks, indicators and coverage
26
+ - Known vulnerabilities: installed core, plugin and theme versions matched against the Wordfence vulnerability database (plugin 9.0 and later)
27
+ - The uploads execution probe, only with the owner's consent
28
+ - Fixes: plugin, theme and core security updates behind approval, and credential clean-up with explicit consent
29
+ - A second audit after the fixes, saying what cleared and what remains
30
+
31
+ ## What this skill does NOT do
32
+
33
+ - **Call a site clean when it could not look.** Partial coverage, a check that did not run, or an unavailable vulnerability database are reported as exactly that.
34
+ - **Delete, deactivate or replace anything without asking.** Not plugins, not users, not files. The audit never runs clean-up queries, and neither does this skill.
35
+ - **Revoke a credential on its own judgement.** An application password is revoked only when the owner names it and says yes.
36
+ - **See the host.** Server cron, access logs, wp-config secrets and backups are outside what WordPress can verify. The audit says so in `coverage`, and so does the report.
37
+ - **Replace a forensic investigation.** Indicators are questions. A confirmed break-in needs the host and a professional.
38
+
39
+ ## Requirements
40
+
41
+ - Respira for WordPress 9.0 or later for the known-vulnerability match, `respira_update_theme` and `respira_revoke_application_password`. On 8.x the audit still runs: say that the vulnerability match needs plugin 9.0, and list themes to update by hand.
42
+ - Plugin management switched on in Respira settings, for plugin and theme updates.
43
+ - A recent backup the owner can restore, confirmed before any update. Respira's page snapshots do not cover plugin, theme or core files.
44
+ - A connection made with an administrator's key. From 9.0 the audit answers administrators only, because its result names every administrator and credential.
45
+
46
+ ## Trigger Phrase
47
+
48
+ - "is my site secure"
49
+
50
+ ## Alternative Triggers
51
+
52
+ - "run a security audit"
53
+ - "check for vulnerabilities"
54
+ - "was my site hacked"
55
+ - "fix the vulnerable plugins"
56
+ - "security review"
57
+
58
+ ## Execution Workflow
59
+
60
+ ### Phase 1: Run the audit
61
+
62
+ 1. `respira_get_site_context` to confirm the site and its Respira plugin version.
63
+ 2. `respira_run_security_audit` with `deep_scan: true`. The deep scan inspects uploads, wp-content/cache and must-use plugin paths for executable files, within strict time, file and result limits. On plugin 9.0 and later it only reads. On older plugins it also writes and deletes one inert probe file in uploads, so ask the owner first there, because file-change monitors may report it.
64
+ 3. Leave `probe_uploads_execution` off for now. Phase 3 asks for it.
65
+
66
+ ### Phase 2: Read the whole result
67
+
68
+ Read every block and report each one in plain words:
69
+
70
+ - **`indicators`**: each has an `id`, a `severity` and a `summary`, and its `evidence` often carries a `note`. Report every indicator with its summary and note. An indicator is a question, not a verdict: `recent-administrator` looks the same for an account the owner added last week, which is why it asks.
71
+ - **`coverage`**: what was and was not checked.
72
+ - `executable_file_scan` is `complete`, `partial` (the bounded scan reached a limit) or `not_run`. Partial or not run means the uploads were not fully checked; never describe them as clean.
73
+ - `host_cron`, `host_access_logs`, `wp_config_secrets` and `external_backup_state` are false: Respira cannot see these. Say so once.
74
+ - `application_passwords`, `database_file_privilege` and `wp2shell_database_artifacts` say whether each check completed or was unavailable.
75
+ - `recent_administrators` gives the window in days and how many accounts it flagged, so a 0 is read against how far back it looked.
76
+ - **`known_vulnerabilities`** (plugin 9.0 and later): installed software matched against the vulnerability database. Its `status` is `ok` when the match ran, and then every match carries the version that fixes it: report them most severe first. `unavailable` means the database could not be consulted, and `reason` says why (for example, no Respira licence is connected); `not_run` means the call switched it off. In both cases, and when the block is missing because the plugin is older, say the vulnerability check did not run. Only `ok` with no matches means no known vulnerabilities were found. `coverage.known_vulnerabilities` repeats the status.
77
+ - **`checks`**: the evidence behind the indicators (core checksums, administrators and their application passwords, plugins, themes). Use it to answer follow-up questions, not to pad the report.
78
+ - **`warnings`**: repeat each one. They are written for the owner.
79
+
80
+ Build the verdict only from what ran. When coverage is partial, the vulnerability check did not run, or a high-severity indicator is present, the report cannot say "clean" or "secure". Say "no problems found in what was checked", then name what was not checked.
81
+
82
+ ### Phase 3: The uploads probe, only with consent
83
+
84
+ `probe_uploads_execution: true` tests whether the web server would run PHP from the uploads folder, which is the difference between a stray file and a working backdoor. It writes one inert PHP file to uploads, requests it and deletes it. Ask first, in words close to these:
85
+
86
+ > One more check is available: whether your server would run a PHP file placed in uploads. It writes a harmless test file for a moment and deletes it. A security plugin or your host may log it as a new PHP file. Run it?
87
+
88
+ Run it only on a yes, with the same `deep_scan` setting, and report the `uploads-execute-php` indicator if it appears.
89
+
90
+ ### Phase 4: Plan the fixes
91
+
92
+ Before the first change, say in one line that an update replaces the software's files, that Respira's page snapshots do not cover those files, and that the host's backup is the way back. Then propose an ordered plan, most severe first:
93
+
94
+ - Plugins with a known vulnerability and an update that reaches the fixed version
95
+ - Themes with a known vulnerability
96
+ - WordPress core, when the audit reports a security release for the site's own branch
97
+ - Application passwords on administrator accounts the owner does not recognise
98
+ - Anything with no published fix: recommend what to do and wait for the owner
99
+
100
+ Do not add anything that is not on the list. If the update WordPress offers is lower than the fixed version, or no update is offered (common for premium plugins with a lapsed licence), do not force it: say which ones and why.
101
+
102
+ ### Phase 5: Fix, one approved step at a time
103
+
104
+ Every fix tool here is approval-gated: the first call returns `respira_approval_required` with an `approval_token`, and repeating the same call with that token completes it. Tell the owner what the call will do before sending the token back.
105
+
106
+ - **Plugins:** `respira_update_plugin` with the `slug`, one plugin at a time. After each one, load the home page; if it fails, stop the batch and report.
107
+ - **Themes:** `respira_update_theme`, the same way.
108
+ - **Core:** `respira_update_core_security` with the `advisory_id` and `target_version` the audit reported (never guessed), and `backup_confirmed: true` only after the owner confirms a recent backup. WordPress core has no automatic rollback, and the receipt says so.
109
+ - **Application passwords:** `respira_revoke_application_password` only when the owner names the credential and says yes to revoking that one. Never revoke one because it looks old or unused, and never several in one go.
110
+ - **Nothing else.** Never delete, deactivate or replace a plugin, delete a user or remove a file as part of a fix without asking first, even when an indicator points at it.
111
+
112
+ ### Phase 6: Check again
113
+
114
+ 1. Load the home page to confirm the site works.
115
+ 2. Run `respira_run_security_audit` again with the same options.
116
+ 3. Report what cleared, what remains, and what still needs a person: an update that was not offered, a credential the owner has not decided on, anything outside what WordPress can see.
117
+
118
+ The security page in the respira.press dashboard has a "Fix in AER" link that starts this same flow in Respira AER.
119
+
120
+ ## Safety Model
121
+
122
+ - Reads first; nothing changes before the owner sees the plan
123
+ - The one check that writes, the uploads probe, runs only with consent and says what it will do
124
+ - Every fix is approval-gated and runs one at a time, with a home-page check between steps
125
+ - Nothing is deleted, deactivated or revoked without an explicit yes for that specific item
126
+ - Partial, not run and unavailable are reported as such, never rounded up to clean
127
+ - Updates have no Respira snapshot, so the owner's backup is confirmed first
128
+
129
+ ## Honest Disclaimer
130
+
131
+ This skill reviews a WordPress site's security from inside WordPress.
132
+
133
+ It cannot: see the server, its logs, its cron or its backups; prove a site was never compromised; or patch a plugin whose author has not published a fix.
134
+
135
+ It can: check core files against WordPress.org, list every administrator and credential, match installed versions against a database of known vulnerabilities, find executable files where they should not be, and apply the published fixes one approved step at a time, then check again.
136
+
137
+ ## Tooling
138
+
139
+ `respira_get_site_context`, `respira_run_security_audit`, `respira_list_plugins`, `respira_update_plugin`, `respira_update_theme`, `respira_update_core_security`, `respira_revoke_application_password`
140
+
141
+ ## Telemetry
142
+
143
+ After run completion, fire-and-forget to `POST https://www.respira.press/api/skills/track-usage` with `skill_slug = wordpress-security-review`, site and version context, duration, indicator counts by severity, the number of known vulnerabilities and the number of fixes applied. No logins, credentials, file paths or IP addresses are sent. Never block the user on telemetry.
144
+
145
+ ## Related Skills
146
+
147
+ - WordPress Site DNA (the wider archaeology; its security step uses this audit)
148
+ - Respira Site Audit (SEO, accessibility and performance, with a security summary)
149
+ - Technical Debt Audit (plugins nobody uses are attack surface too)
150
+
151
+ ---
152
+
153
+ Built by Respira for WordPress
154
+ https://respira.press/skills/wordpress-security-review
@@ -40,7 +40,7 @@ check my wordpress setup
40
40
  ## File structure
41
41
 
42
42
  ```
43
- claude_skills/wordpress-site-dna/
43
+ plugins/respira-wordpress/skills/wordpress-site-dna/
44
44
  ├── SKILL.md ← Main skill definition (the actual skill)
45
45
  ├── README.md ← This file
46
46
  ├── telemetry.ts ← Telemetry helper functions
@@ -1,8 +1,21 @@
1
+ ---
2
+ name: wordpress-site-dna
3
+ description: "Use when the user says 'analyze my wordpress site', 'what is running on my site', 'site dna', or 'what plugins are on my site'. Detects every page builder, audits active versus dead-weight plugins, maps content structure, finds orphaned shortcodes, and checks performance and security posture."
4
+ license: MIT
5
+ metadata:
6
+ author: Respira for WordPress
7
+ author_url: https://respira.press
8
+ version: 1.3.0
9
+ mcp-server: respira-wordpress
10
+ category: audit
11
+ respira_min_version: 8.9.0
12
+ ---
13
+
1
14
  # WordPress Site DNA
2
15
 
3
- **Version:** 1.2.0
4
- **Updated:** 2026-05-24
5
- **Freshly updated:** v1.2.0 adds awareness of the full Divi 5 108-module catalog (was 16 hand-curated modules), the Elementor 4 atomic-write surface for site-wide audits, and the 4 new v7.1 builders. Integrates with respira_generate_activity_report for the 'site audit → client report' handoff. Cross-links to the new Activity Report Composer skill.
16
+ **Version:** 1.3.0
17
+ **Updated:** 2026-09-13
18
+ **Freshly updated:** v1.3.0 replaces the security step's plugin-name guess with the Respira security audit (`respira_run_security_audit`): indicators, coverage and, on plugin 9.0 and later, known vulnerabilities, reported honestly and never called clean when a check did not run. v1.2.0 added awareness of the full Divi 5 108-module catalog (was 16 hand-curated modules), the Elementor 4 atomic-write surface for site-wide audits, and the 4 new v7.1 builders. Integrates with respira_generate_activity_report (a tool on plugin 9.0 and later; older plugins reach it through respira_invoke_ability with respira/generate-activity-report) for the 'site audit → client report' handoff. Cross-links to the new Activity Report Composer skill.
6
19
  **Category:** audit
7
20
  **Status:** beta
8
21
  **Requires:** Respira for WordPress plugin + MCP server
@@ -139,7 +152,7 @@ Categorize each plugin:
139
152
  - **active**: `active = true`, in use
140
153
  - **inactive**: `active = false`
141
154
  - **outdated**: `update_available = true`
142
- - **security_risk**: abandoned (>2 years no update) or known CVE
155
+ - **security_risk**: abandoned (more than 2 years without an update) or listed in the security audit's `known_vulnerabilities` (Step 7)
143
156
  - **dead_weight**: installed, `active = false`, no evidence of use in content
144
157
 
145
158
  **Performance impact flags:**
@@ -196,18 +209,33 @@ Aggregate across sampled pages to estimate site-wide patterns.
196
209
 
197
210
  ### Step 7: Security Assessment
198
211
 
199
- Derive security posture from data already collected:
212
+ Run the Respira security audit rather than guessing from plugin names. An installed security plugin says nothing about whether the site is patched.
213
+
214
+ ```
215
+ Tool: respira_run_security_audit
216
+ Input: { "deep_scan": true }
217
+ ```
218
+
219
+ On plugin 9.0 and later the deep scan only reads. On older plugins it also writes and deletes one inert probe file in uploads, so leave `deep_scan` off there unless the owner agrees. Never set `probe_uploads_execution` in this skill: the WordPress Security Review skill asks for it with consent. If the tool is missing (a plugin older than 8.0.2), use the context checks below and say the security audit could not run.
200
220
 
201
221
  | Check | Source |
202
222
  |-------|--------|
223
+ | Known vulnerabilities | `known_vulnerabilities` (plugin 9.0 and later): `status` `ok` means the match ran, and each match carries the version that fixes it |
224
+ | Compromise indicators | `indicators`: every entry's `severity`, `summary` and the `note` in its evidence |
225
+ | Core file integrity | the core checksum check in `checks`: files that differ from WordPress.org |
226
+ | Administrators and credentials | the administrator and application password data in `checks`, and `coverage.recent_administrators` |
227
+ | What was not checked | `coverage`: `executable_file_scan` (complete, partial or not_run) and the host-level items it marks false |
203
228
  | SSL/HTTPS | `respira_get_site_context` → site URL scheme |
204
229
  | WordPress version current | `respira_get_site_context` → respira_version |
205
230
  | PHP version supported | `respira_get_site_context` → php_version |
206
231
  | Debug mode disabled | `respira_get_site_context` → debug_mode |
207
- | Security plugin active | `respira_list_plugins` scan for Wordfence, Sucuri, iThemes Security |
208
- | XML-RPC status | `respira_get_site_context` if exposed |
209
- | Admin username | Cannot be determined via MCP — note as "unable to verify, check manually" |
210
- | Login URL customized | Cannot be determined via MCP — note as "unable to verify, check manually" |
232
+ | Security plugin installed | `respira_list_plugins` (informational; not scored) |
233
+ | Login URL customized | Cannot be determined via MCP: note as "unable to verify, check manually" |
234
+
235
+ Report it honestly:
236
+ - Report every indicator, with its summary and note. Indicators are questions for the owner, not verdicts.
237
+ - Never write "secure", "clean" or "no known vulnerabilities" when `coverage.executable_file_scan` is `partial` or `not_run`, when `known_vulnerabilities` is missing or its `status` is not `ok`, or when a high-severity indicator is present. Write "no problems found in what was checked" and name what was not checked.
238
+ - Fixing is a separate, approval-gated step: hand it to the WordPress Security Review skill.
211
239
 
212
240
  ---
213
241
 
@@ -228,7 +256,7 @@ Builder Complexity (25 points):
228
256
  - 4+ builders: 3 pts
229
257
 
230
258
  Plugin Health (25 points):
231
- - No security risks: 10 pts
259
+ - No plugin with a known vulnerability, and none abandoned: 10 pts (5 pts when the vulnerability check did not run: unknown is not clean)
232
260
  - <10% plugins outdated: 8 pts
233
261
  - <20% plugins inactive: 7 pts
234
262
 
@@ -238,9 +266,10 @@ Performance (15 points):
238
266
  - No major JS/CSS bloat: 5 pts
239
267
 
240
268
  Security (10 points):
241
- - SSL active: 4 pts
242
- - Security plugin active: 3 pts
243
- - Debug mode off: 3 pts
269
+ - SSL active: 3 pts
270
+ - Debug mode off: 2 pts
271
+ - No high or medium indicators in the security audit: 3 pts
272
+ - Audit coverage complete (deep scan complete and the vulnerability check ran): 2 pts
244
273
  ```
245
274
 
246
275
  **Score labels:**
@@ -410,15 +439,19 @@ fetch("https://www.respira.press/api/skills/track-usage", {
410
439
 
411
440
  | Check | Status | Notes |
412
441
  |-------|--------|-------|
442
+ | Known Vulnerabilities | [✅ none found / 🔴 n found / ⚠️ not checked] | [each match and the version that fixes it, or why the check did not run] |
443
+ | Audit Indicators | [✅ none / ⚠️ / 🔴] | [each indicator's summary] |
444
+ | Core Files | [✅/🔴] | [files that differ from WordPress.org] |
445
+ | Administrators | [✅/⚠️] | [count, any created recently, application passwords] |
446
+ | Scan Coverage | [✅ complete / ⚠️ partial / ⚠️ not run] | [what was not checked, including host cron, logs and backups] |
413
447
  | SSL/HTTPS | [✅/⚠️/🔴] | [details] |
414
- | Security Plugin | [✅/⚠️/🔴] | [Wordfence/Sucuri/None] |
415
448
  | PHP Version | [✅/⚠️/🔴] | [supported or EOL] |
416
449
  | WordPress Version | [✅/⚠️/🔴] | [current or outdated] |
417
450
  | Debug Mode | [✅/⚠️/🔴] | [on or off] |
418
- | Admin Username | ⚠️ Cannot verify via MCP check manually |
419
- | Login URL | ⚠️ Cannot verify via MCP check manually |
451
+ | Security Plugin | ℹ️ | [installed or not; informational, not scored] |
452
+ | Login URL | ⚠️ Cannot verify via MCP: check manually |
420
453
 
421
- **Risk Level:** [Low | Medium | High | Critical]
454
+ **Risk Level:** [Low | Medium | High | Critical]. Never "Low" when a check did not run: say what was not checked.
422
455
 
423
456
  ---
424
457
 
@@ -466,8 +499,8 @@ these unused plugins: [list from report]"
466
499
 
467
500
  ### Fix Security Issues
468
501
  ```
469
- In Claude with Respira for WordPress: "Audit my WordPress security: check plugin versions,
470
- active security plugins, and PHP version support"
502
+ In Claude with Respira for WordPress: "Run a WordPress security review: fix the known
503
+ vulnerabilities one approved update at a time, then check the site again"
471
504
  ```
472
505
 
473
506
  ---