@respira/wordpress-mcp-server 8.3.24 → 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.
- package/CHANGELOG.md +12 -0
- package/README.md +97 -20
- package/TOOL_CATALOG.md +445 -307
- package/dist/__tests__/0e6bd33c-redeem-preserves-per-site-settings.test.js +3 -2
- package/dist/__tests__/0e6bd33c-redeem-preserves-per-site-settings.test.js.map +1 -1
- package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.d.ts +11 -0
- package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.d.ts.map +1 -0
- package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.js +80 -0
- package/dist/__tests__/81c478df-create-page-duplicate-id-aliases.test.js.map +1 -0
- package/dist/__tests__/plugin-slug-path-encoding.test.d.ts +2 -0
- package/dist/__tests__/plugin-slug-path-encoding.test.d.ts.map +1 -0
- package/dist/__tests__/plugin-slug-path-encoding.test.js +41 -0
- package/dist/__tests__/plugin-slug-path-encoding.test.js.map +1 -0
- package/dist/__tests__/release-9-surface.test.d.ts +2 -0
- package/dist/__tests__/release-9-surface.test.d.ts.map +1 -0
- package/dist/__tests__/release-9-surface.test.js +197 -0
- package/dist/__tests__/release-9-surface.test.js.map +1 -0
- package/dist/install-skills.d.ts +4 -5
- package/dist/install-skills.d.ts.map +1 -1
- package/dist/install-skills.js +4 -5
- package/dist/install-skills.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +252 -73
- package/dist/server.js.map +1 -1
- package/dist/skill-prompts.d.ts +43 -0
- package/dist/skill-prompts.d.ts.map +1 -0
- package/dist/skill-prompts.js +135 -0
- package/dist/skill-prompts.js.map +1 -0
- package/dist/wordpress-client.d.ts +40 -11
- package/dist/wordpress-client.d.ts.map +1 -1
- package/dist/wordpress-client.js +74 -22
- package/dist/wordpress-client.js.map +1 -1
- package/package.json +2 -2
- package/skills/activity-report-composer/SKILL.md +17 -5
- package/skills/activity-report-composer/metadata.json +2 -2
- package/skills/art-direction/SKILL.md +9 -3
- package/skills/art-direction/metadata.json +7 -3
- package/skills/brand-voice-synthesizer/SKILL.md +36 -16
- package/skills/brand-voice-synthesizer/metadata.json +8 -4
- package/skills/build-oxygen6-page/SKILL.md +17 -2
- package/skills/conversion-audit/SKILL.md +12 -0
- package/skills/custom-post-type-architect/SKILL.md +12 -0
- package/skills/figma-to-bricks/SKILL.md +4 -2
- package/skills/figma-to-divi/SKILL.md +4 -2
- package/skills/figma-to-elementor/SKILL.md +8 -1
- package/skills/figma-to-gutenberg/SKILL.md +4 -2
- package/skills/html-to-breakdance/SKILL.md +7 -3
- package/skills/html-to-breakdance/metadata.json +7 -3
- package/skills/html-to-bricks/SKILL.md +7 -3
- package/skills/html-to-bricks/metadata.json +7 -3
- package/skills/internal-link-builder/SKILL.md +12 -0
- package/skills/migrate-beaver-builder-to-bricks/SKILL.md +19 -3
- package/skills/migrate-beaver-builder-to-gutenberg/SKILL.md +19 -3
- package/skills/migrate-brizy-to-gutenberg/SKILL.md +19 -3
- package/skills/migrate-divi-to-breakdance/SKILL.md +19 -3
- package/skills/migrate-divi-to-bricks/SKILL.md +19 -3
- package/skills/migrate-divi-to-gutenberg/SKILL.md +19 -3
- package/skills/migrate-elementor-to-breakdance/SKILL.md +20 -4
- package/skills/migrate-elementor-to-bricks/SKILL.md +20 -4
- package/skills/migrate-elementor-to-gutenberg/SKILL.md +20 -4
- package/skills/migrate-elementor-to-oxygen/SKILL.md +20 -4
- package/skills/migrate-oxygen-to-breakdance/SKILL.md +19 -3
- package/skills/migrate-oxygen-to-bricks/SKILL.md +19 -3
- package/skills/migrate-thrive-architect-to-gutenberg/SKILL.md +19 -3
- package/skills/migrate-visual-composer-to-gutenberg/SKILL.md +19 -3
- package/skills/migrate-wpbakery-to-bricks/SKILL.md +19 -3
- package/skills/migrate-wpbakery-to-gutenberg/SKILL.md +19 -3
- package/skills/mobile-experience-report/SKILL.md +12 -0
- package/skills/murmur-review-loop/SKILL.md +142 -0
- package/skills/page-template-library/SKILL.md +12 -0
- package/skills/respira-builder-edits/SKILL.md +1 -0
- package/skills/respira-setup-assistant/SKILL.md +12 -0
- package/skills/respira-site-audit/SKILL.md +18 -6
- package/skills/respira-woocommerce/SKILL.md +1 -0
- package/skills/seo-aeo-amplifier/SKILL.md +14 -2
- package/skills/seo-aeo-amplifier/metadata.json +2 -2
- package/skills/stale-content-detector/SKILL.md +12 -0
- package/skills/technical-debt-audit/SKILL.md +14 -2
- package/skills/woo-marketing-campaigns/SKILL.md +12 -9
- package/skills/woo-pricing-promotions/SKILL.md +9 -9
- package/skills/woocommerce-health-check/SKILL.md +22 -8
- package/skills/wordpress-ai-image-optimizer/SKILL.md +14 -2
- package/skills/wordpress-ai-image-optimizer/metadata.json +2 -2
- package/skills/wordpress-security-review/SKILL.md +154 -0
- package/skills/wordpress-site-dna/README.md +1 -1
- package/skills/wordpress-site-dna/SKILL.md +52 -19
- package/tool-capabilities.json +3171 -370
|
@@ -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.
|
|
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.
|
|
16
|
-
"last_updated": "2026-
|
|
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.
|
|
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.
|
|
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 `
|
|
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. `
|
|
60
|
-
2. `
|
|
61
|
-
3. `
|
|
62
|
-
4. `
|
|
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
|
-
- `
|
|
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, `
|
|
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
|
-
`
|
|
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.
|
|
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
|
|
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. `
|
|
59
|
-
2. `
|
|
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
|
-
- `
|
|
77
|
-
- `
|
|
78
|
-
- `
|
|
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: `
|
|
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
|
-
`
|
|
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.
|
|
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,
|
|
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:
|
|
133
|
-
|
|
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
|
|
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 `
|
|
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
|
-
| `
|
|
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.
|
|
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
|
|
16
|
-
"last_updated": "2026-
|
|
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
|
-
|
|
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.
|
|
4
|
-
**Updated:** 2026-
|
|
5
|
-
**Freshly updated:** v1.2.0
|
|
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 (
|
|
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
|
-
|
|
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
|
|
208
|
-
|
|
|
209
|
-
|
|
210
|
-
|
|
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
|
|
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:
|
|
242
|
-
-
|
|
243
|
-
-
|
|
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
|
-
|
|
|
419
|
-
| Login URL | ⚠️ Cannot verify via MCP
|
|
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: "
|
|
470
|
-
|
|
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
|
---
|