@respira/wordpress-mcp-server 8.3.15 → 8.3.17

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 CHANGED
@@ -5,6 +5,22 @@ All notable changes to Respira WordPress MCP Server will be documented in this f
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [8.3.17] - 2026-08-30
9
+
10
+ The last open finding closes: the Divi Library, as tools.
11
+
12
+ ### Added
13
+
14
+ - **wordpress_save_divi_library_item and wordpress_apply_divi_library_item.** Save a page, one section of it, or a supplied structure as a real Divi Library item, then apply it to any page as a live-linked global reference: the page stores only the reference, Divi expands it at render, and editing the library item once updates every page that carries it. Repetition by referencing, not re-writing. Requires plugin 8.8.1, released alongside.
15
+
16
+ ## [8.3.16] - 2026-08-29
17
+
18
+ The half-answer in 8.3.15 becomes a whole one.
19
+
20
+ ### Added
21
+
22
+ - **Divi 5 presets are first-class tools.** wordpress_list_divi_presets, wordpress_upsert_divi_presets (bulk, idempotent by name so a brand-profile installer can re-run safely), wordpress_delete_divi_preset, and wordpress_resolve_divi_preset (preview what a preset id applies before writing). The REST routes existed in the plugin for months; nothing exposed them, so agents only found them by probing, and the first bulk call in a customer's field report failed 22 times over a field name. The bulk tool accepts `module` as an alias for `module_type` now, normalized client-side. Together with plugin 8.8.0 activating Divi's own styling pipeline, a design system can finally live in presets the next person can edit in the Visual Builder, not in a stylesheet.
23
+
8
24
  ## [8.3.15] - 2026-08-29
9
25
 
10
26
  Companion release to plugin 8.8.0: a customer named Bronko rebuilt a 16-page site with Respira and sent a measured field report. These are the client-side pieces of the answer.
package/README.md CHANGED
@@ -7,14 +7,14 @@
7
7
  <h1 align="center">Respira WordPress MCP Server</h1>
8
8
 
9
9
  <p align="center">
10
- <strong>214 MCP tools, 319 with the WooCommerce add-on. 17 page builders and the native Site Editor. MCP 2026-07-28 with legacy-client support.</strong><br>
10
+ <strong>220 MCP tools, 325 with the WooCommerce add-on. 17 page builders and the native Site Editor. MCP 2026-07-28 with legacy-client support.</strong><br>
11
11
  Element-level editing, full page creation, HTML-to-builder conversion with rendering fidelity validation, per-site tool governance, storefront design intelligence, stock images, bulk operations — all through one MCP server.
12
12
  </p>
13
13
 
14
14
  <p align="center">
15
15
  <a href="https://www.npmjs.com/package/@respira/wordpress-mcp-server"><img src="https://img.shields.io/npm/v/@respira/wordpress-mcp-server.svg?style=flat-square&color=10b981" alt="npm version"></a>
16
16
  <a href="https://www.npmjs.com/package/@respira/wordpress-mcp-server"><img src="https://img.shields.io/npm/dm/@respira/wordpress-mcp-server.svg?style=flat-square" alt="npm downloads"></a>
17
- <img src="https://img.shields.io/badge/tools-319-10b981?style=flat-square" alt="318 Tools with WooCommerce">
17
+ <img src="https://img.shields.io/badge/tools-325-10b981?style=flat-square" alt="325 Tools with WooCommerce">
18
18
  <img src="https://img.shields.io/badge/builders-17-10b981?style=flat-square" alt="17 Page Builders">
19
19
  <img src="https://img.shields.io/badge/TypeScript-100%25-blue?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
20
20
  </p>
@@ -247,7 +247,7 @@ Or run the interactive setup wizard: `npx @respira/wordpress-mcp-server --setup`
247
247
 
248
248
  ### Tool Limit? Use `enabledTools`
249
249
 
250
- Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 319 tools when the WooCommerce add-on is active. To stay under the limit, add `enabledTools` to your config — only those tools will appear in the listing:
250
+ Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 325 tools when the WooCommerce add-on is active. To stay under the limit, add `enabledTools` to your config — only those tools will appear in the listing:
251
251
 
252
252
  ```json
253
253
  {
@@ -856,6 +856,6 @@ MIT © [Respira](https://respira.press)
856
856
  ---
857
857
 
858
858
  <p align="center">
859
- <strong>214 core tools, 319 with WooCommerce. 17 builders. The AI infrastructure layer for WordPress.</strong><br>
859
+ <strong>220 core tools, 325 with WooCommerce. 17 builders. The AI infrastructure layer for WordPress.</strong><br>
860
860
  <a href="https://respira.press">respira.press</a>
861
861
  </p>
package/TOOL_CATALOG.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <!-- Generated by scripts/check-tool-registry-parity.mjs. Do not edit by hand. -->
4
4
 
5
- Generated catalog: **187 core tools**, **105 WooCommerce tools**, **292 total**.
5
+ Generated catalog: **193 core tools**, **105 WooCommerce tools**, **298 total**.
6
6
 
7
7
  The runtime applies site context and per-site governance, so an individual connection may expose a smaller relevant subset.
8
8
 
@@ -23,6 +23,7 @@ The runtime applies site context and per-site governance, so an individual conne
23
23
  - `wordpress_apply_accessibility_fixes` — write; hosted/stdio
24
24
  - `wordpress_apply_builder_patch` — write; native + hosted
25
25
  - `wordpress_apply_design_direction` — write; native + hosted
26
+ - `wordpress_apply_divi_library_item` — write; hosted/stdio
26
27
  - `wordpress_assign_menu_location` — write; native + hosted
27
28
  - `wordpress_batch_update` — write; native + hosted
28
29
  - `wordpress_begin_session` — read; hosted/stdio
@@ -58,6 +59,7 @@ The runtime applies site context and per-site governance, so an individual conne
58
59
  - `wordpress_delete_custom_post` — write; native + hosted
59
60
  - `wordpress_delete_design_direction` — write; native + hosted
60
61
  - `wordpress_delete_design_token` — write; native + hosted
62
+ - `wordpress_delete_divi_preset` — write; hosted/stdio
61
63
  - `wordpress_delete_media` — write; native + hosted
62
64
  - `wordpress_delete_menu` — write; native + hosted
63
65
  - `wordpress_delete_menu_item` — write; native + hosted
@@ -123,6 +125,7 @@ The runtime applies site context and per-site governance, so an individual conne
123
125
  - `wordpress_list_custom_taxonomies` — read; hosted/stdio
124
126
  - `wordpress_list_design_directions` — read; native + hosted
125
127
  - `wordpress_list_design_tokens` — read; native + hosted
128
+ - `wordpress_list_divi_presets` — read; hosted/stdio
126
129
  - `wordpress_list_media` — read; native + hosted
127
130
  - `wordpress_list_memory` — read; native + hosted
128
131
  - `wordpress_list_menu_items` — read; native + hosted
@@ -156,11 +159,13 @@ The runtime applies site context and per-site governance, so an individual conne
156
159
  - `wordpress_reorder_elements` — write; native + hosted
157
160
  - `wordpress_report_issue` — read; hosted/stdio
158
161
  - `wordpress_reset_site_template` — write; native + hosted
162
+ - `wordpress_resolve_divi_preset` — read; hosted/stdio
159
163
  - `wordpress_restore_session` — write; hosted/stdio
160
164
  - `wordpress_restore_snapshot` — write; native + hosted
161
165
  - `wordpress_run_pagespeed_audit` — read; hosted/stdio
162
166
  - `wordpress_run_security_audit` — read; native + hosted
163
167
  - `wordpress_save_design_direction` — write; native + hosted
168
+ - `wordpress_save_divi_library_item` — write; hosted/stdio
164
169
  - `wordpress_scan_page_accessibility` — read; hosted/stdio
165
170
  - `wordpress_search_abilities` — read; native + hosted
166
171
  - `wordpress_search_docs` — read; hosted/stdio
@@ -193,6 +198,7 @@ The runtime applies site context and per-site governance, so an individual conne
193
198
  - `wordpress_update_translation` — write; native + hosted
194
199
  - `wordpress_update_user` — write; native + hosted
195
200
  - `wordpress_upload_media` — write; native + hosted
201
+ - `wordpress_upsert_divi_presets` — read; hosted/stdio
196
202
  - `wordpress_validate_security` — read; native + hosted
197
203
  - `wordpress_write_theme_file` — read; hosted/stdio
198
204
 
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -2196,6 +2196,135 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
2196
2196
  openWorldHint: false,
2197
2197
  },
2198
2198
  },
2199
+ {
2200
+ name: 'wordpress_list_divi_presets',
2201
+ description: 'List Divi 5 global presets on the active site (module presets and cross-cutting group presets). ' +
2202
+ 'Presets are the reusable design objects the Divi Visual Builder shows as "Preset: <name>"; reference one from any write via `_presetId`. ' +
2203
+ 'Optionally filter by module_type (e.g. divi/heading) or scope.',
2204
+ inputSchema: {
2205
+ type: 'object',
2206
+ properties: {
2207
+ module_type: { type: 'string', description: 'Filter to presets for one module type, e.g. "divi/button".' },
2208
+ scope: { type: 'string', description: 'Optional preset scope filter.' },
2209
+ },
2210
+ },
2211
+ annotations: {
2212
+ title: 'List Divi Presets',
2213
+ readOnlyHint: true,
2214
+ destructiveHint: false,
2215
+ idempotentHint: true,
2216
+ openWorldHint: false,
2217
+ },
2218
+ },
2219
+ {
2220
+ name: 'wordpress_upsert_divi_presets',
2221
+ description: 'Create or update Divi 5 global presets in bulk. Each preset: {name, kind: "module"|"group", module_type, is_default?, attrs}. ' +
2222
+ '`module` is accepted as an alias for `module_type`. Upsert key is (kind, module_type, name), so re-running a brand-profile installer is idempotent: same names update in place, no duplicates. ' +
2223
+ 'This is how a design system becomes editable by the next person in the Visual Builder instead of living in child-theme CSS.',
2224
+ inputSchema: {
2225
+ type: 'object',
2226
+ properties: {
2227
+ presets: {
2228
+ type: 'array',
2229
+ description: 'Presets to create or update.',
2230
+ items: { type: 'object' },
2231
+ },
2232
+ },
2233
+ required: ['presets'],
2234
+ },
2235
+ annotations: {
2236
+ title: 'Upsert Divi Presets',
2237
+ readOnlyHint: false,
2238
+ destructiveHint: false,
2239
+ idempotentHint: true,
2240
+ openWorldHint: false,
2241
+ },
2242
+ },
2243
+ {
2244
+ name: 'wordpress_delete_divi_preset',
2245
+ description: 'Delete one Divi 5 global preset by its preset id. Modules referencing it keep their materialized attributes.',
2246
+ inputSchema: {
2247
+ type: 'object',
2248
+ properties: {
2249
+ preset_id: { type: 'string', description: 'Preset id (from wordpress_list_divi_presets).' },
2250
+ },
2251
+ required: ['preset_id'],
2252
+ },
2253
+ annotations: {
2254
+ title: 'Delete Divi Preset',
2255
+ readOnlyHint: false,
2256
+ destructiveHint: true,
2257
+ idempotentHint: true,
2258
+ openWorldHint: false,
2259
+ },
2260
+ },
2261
+ {
2262
+ name: 'wordpress_save_divi_library_item',
2263
+ description: 'Save a page, ONE section of it (section_index), or a supplied node structure as a Divi Library item (et_pb_layout). ' +
2264
+ 'The item gets full Divi identity (layout_type + scope terms, builder metas, VB marker) so the next person can edit it in Divi\'s own library UI. ' +
2265
+ 'Returns layout_id plus the ready-to-paste global reference block. Requires plugin 8.8.1+.',
2266
+ inputSchema: {
2267
+ type: 'object',
2268
+ properties: {
2269
+ name: { type: 'string', description: 'Library item name.' },
2270
+ page_id: { type: 'number', description: 'Source page/post to save from.' },
2271
+ section_index: { type: 'number', description: 'Zero-based top-level block index to save just one section.' },
2272
+ structure: { description: 'Alternative to page_id: node array (or block markup string) to save.' },
2273
+ layout_type: { type: 'string', enum: ['layout', 'section', 'row', 'module'], description: 'Item kind, default section.' },
2274
+ global: { type: 'boolean', description: 'Global scope (live-linked when applied). Default true.' },
2275
+ category: { type: 'string', description: 'Optional layout_category term.' },
2276
+ },
2277
+ required: ['name'],
2278
+ },
2279
+ annotations: {
2280
+ title: 'Save Divi Library Item',
2281
+ readOnlyHint: false,
2282
+ destructiveHint: false,
2283
+ idempotentHint: false,
2284
+ openWorldHint: false,
2285
+ },
2286
+ },
2287
+ {
2288
+ name: 'wordpress_apply_divi_library_item',
2289
+ description: 'Apply a Divi Library item to a page as a LIVE-LINKED global reference: the page stores only `wp:divi/global-layout {"globalModule":"<id>"}` and Divi expands it at render, so editing the library item once updates every page that references it. ' +
2290
+ 'The write rides the normal update path: duplicate-first safety, snapshots, and the share preview link all apply. Requires plugin 8.8.1+.',
2291
+ inputSchema: {
2292
+ type: 'object',
2293
+ properties: {
2294
+ layout_id: { type: 'number', description: 'Library item id (from wordpress_save_divi_library_item).' },
2295
+ id: { type: 'number', description: 'Target page/post id.' },
2296
+ position: { type: 'string', enum: ['append', 'prepend'], description: 'Where the reference lands, default append.' },
2297
+ },
2298
+ required: ['layout_id', 'id'],
2299
+ },
2300
+ annotations: {
2301
+ title: 'Apply Divi Library Item',
2302
+ readOnlyHint: false,
2303
+ destructiveHint: false,
2304
+ idempotentHint: false,
2305
+ openWorldHint: false,
2306
+ },
2307
+ },
2308
+ {
2309
+ name: 'wordpress_resolve_divi_preset',
2310
+ description: 'Preview what a Divi 5 preset would apply: returns the resolved attribute groups for a `_presetId` without writing anything. ' +
2311
+ 'Use before a write to check a preset id is valid for the target module type; an unknown id returns the closest match.',
2312
+ inputSchema: {
2313
+ type: 'object',
2314
+ properties: {
2315
+ preset_id: { type: 'string', description: 'Preset id to resolve.' },
2316
+ module_type: { type: 'string', description: 'Target module type, e.g. "divi/heading".' },
2317
+ },
2318
+ required: ['preset_id'],
2319
+ },
2320
+ annotations: {
2321
+ title: 'Resolve Divi Preset',
2322
+ readOnlyHint: true,
2323
+ destructiveHint: false,
2324
+ idempotentHint: true,
2325
+ openWorldHint: false,
2326
+ },
2327
+ },
2199
2328
  {
2200
2329
  name: 'wordpress_search_abilities',
2201
2330
  description: 'Search the curated WordPress Abilities directory and classify each result as Respira-native, inhaled, unavailable, or replaced by a safer Respira workflow. ' +
@@ -9487,6 +9616,26 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
9487
9616
  return await client.getBuilderInfo({ debug: Boolean(args?.debug) });
9488
9617
  case 'wordpress_get_divi_migration_readiness':
9489
9618
  return await client.getDiviMigrationReadiness();
9619
+ case 'wordpress_list_divi_presets':
9620
+ return await client.listDiviPresets(args.module_type, args.scope);
9621
+ case 'wordpress_upsert_divi_presets':
9622
+ return await client.upsertDiviPresets(args.presets);
9623
+ case 'wordpress_delete_divi_preset':
9624
+ return await client.deleteDiviPreset(args.preset_id);
9625
+ case 'wordpress_resolve_divi_preset':
9626
+ return await client.resolveDiviPreset(args.preset_id, args.module_type);
9627
+ case 'wordpress_save_divi_library_item':
9628
+ return await client.saveDiviLibraryItem({
9629
+ name: args.name,
9630
+ page_id: args.page_id,
9631
+ section_index: args.section_index,
9632
+ structure: args.structure,
9633
+ layout_type: args.layout_type,
9634
+ global: args.global,
9635
+ category: args.category,
9636
+ });
9637
+ case 'wordpress_apply_divi_library_item':
9638
+ return await client.applyDiviLibraryItem(args.layout_id, args.id, args.position);
9490
9639
  case 'wordpress_abilities_gap_report':
9491
9640
  return await client.getAbilitiesGapReport();
9492
9641
  case 'wordpress_search_abilities':