@respira/wordpress-mcp-server 8.3.26 → 8.3.28
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 +26 -0
- package/README.md +3 -3
- package/dist/__tests__/chatgpt-connector-blocked-by-host.test.d.ts +17 -0
- package/dist/__tests__/chatgpt-connector-blocked-by-host.test.d.ts.map +1 -0
- package/dist/__tests__/chatgpt-connector-blocked-by-host.test.js +123 -0
- package/dist/__tests__/chatgpt-connector-blocked-by-host.test.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +28 -4
- package/dist/server.js.map +1 -1
- package/dist/wordpress-client.d.ts +38 -3
- package/dist/wordpress-client.d.ts.map +1 -1
- package/dist/wordpress-client.js +141 -3
- package/dist/wordpress-client.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,32 @@ 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.28] - 2026-09-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`diagnose_connection` says when a host blocks ChatGPT.** ChatGPT's connector reads a
|
|
13
|
+
site's sign-in details from OpenAI's servers with a Python user agent, and some hosts
|
|
14
|
+
refuse that before WordPress runs; WP Engine does by default. ChatGPT then says the
|
|
15
|
+
server "does not implement OAuth", although the plugin serves those details correctly.
|
|
16
|
+
Diagnose now asks for them the way ChatGPT does, reports `chatgpt_connector_blocked`,
|
|
17
|
+
names WP Engine when the site is on it, and says what to ask the host to allow.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- The package description and README said 230 core tools. The server has 231; the
|
|
22
|
+
WooCommerce count was one too high.
|
|
23
|
+
|
|
24
|
+
## [8.3.27] - 2026-09-18
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **A write can name the page version it was based on.** update_page, update_post,
|
|
29
|
+
update_element, update_module, inject_builder_content and apply_builder_patch take
|
|
30
|
+
`expected_version`. With plugin 9.0.3 every read and write returns the page's
|
|
31
|
+
`content_version`; send it back and the write is refused with respira_version_conflict,
|
|
32
|
+
nothing written, if the page changed since. Leave it out and nothing changes.
|
|
33
|
+
|
|
8
34
|
## [8.3.26] - 2026-09-17
|
|
9
35
|
|
|
10
36
|
### Added
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<h1 align="center">Respira WordPress MCP Server</h1>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<strong>
|
|
10
|
+
<strong>231 MCP tools, 335 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
|
|
|
@@ -404,7 +404,7 @@ The server lists only what the connected site can use. Builder tools appear on t
|
|
|
404
404
|
|
|
405
405
|
| Site | Tools listed |
|
|
406
406
|
|---|---|
|
|
407
|
-
| Core site (Gutenberg, no WooCommerce or ACF) |
|
|
407
|
+
| Core site (Gutenberg, no WooCommerce or ACF) | 231 |
|
|
408
408
|
| Core site with ACF | 284 |
|
|
409
409
|
| WooCommerce add-on | 334 |
|
|
410
410
|
| WooCommerce and ACF on Elementor | 395 |
|
|
@@ -958,6 +958,6 @@ MIT © [Respira](https://respira.press)
|
|
|
958
958
|
---
|
|
959
959
|
|
|
960
960
|
<p align="center">
|
|
961
|
-
<strong>
|
|
961
|
+
<strong>231 core tools, 335 with WooCommerce. 17 builders. The AI infrastructure layer for WordPress.</strong><br>
|
|
962
962
|
<a href="https://respira.press">respira.press</a>
|
|
963
963
|
</p>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WP Engine's edge answers 403 to Python HTTP client user agents on every
|
|
3
|
+
* path, including `Python/3.12 aiohttp/3.13.5`, which is what ChatGPT's MCP
|
|
4
|
+
* connector sends from OpenAI's servers. Browsers and a Node user agent get
|
|
5
|
+
* 200. Verified 2026-09-19 on www.thinkfreely.ai and
|
|
6
|
+
* thinkfreelystg.wpenginepowered.com: the 200 carries `x-powered-by: WP
|
|
7
|
+
* Engine`, the 403 carries nothing that names the host.
|
|
8
|
+
*
|
|
9
|
+
* ChatGPT then reports "Error fetching OAuth configuration ... does not
|
|
10
|
+
* implement OAuth" while the plugin serves correct metadata, and every probe
|
|
11
|
+
* diagnose_connection made with its own user agent came back green.
|
|
12
|
+
*
|
|
13
|
+
* These drive the real WordPressClient.diagnoseConnection against a local
|
|
14
|
+
* server that behaves like that edge.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=chatgpt-connector-blocked-by-host.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-connector-blocked-by-host.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/chatgpt-connector-blocked-by-host.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WP Engine's edge answers 403 to Python HTTP client user agents on every
|
|
3
|
+
* path, including `Python/3.12 aiohttp/3.13.5`, which is what ChatGPT's MCP
|
|
4
|
+
* connector sends from OpenAI's servers. Browsers and a Node user agent get
|
|
5
|
+
* 200. Verified 2026-09-19 on www.thinkfreely.ai and
|
|
6
|
+
* thinkfreelystg.wpenginepowered.com: the 200 carries `x-powered-by: WP
|
|
7
|
+
* Engine`, the 403 carries nothing that names the host.
|
|
8
|
+
*
|
|
9
|
+
* ChatGPT then reports "Error fetching OAuth configuration ... does not
|
|
10
|
+
* implement OAuth" while the plugin serves correct metadata, and every probe
|
|
11
|
+
* diagnose_connection made with its own user agent came back green.
|
|
12
|
+
*
|
|
13
|
+
* These drive the real WordPressClient.diagnoseConnection against a local
|
|
14
|
+
* server that behaves like that edge.
|
|
15
|
+
*/
|
|
16
|
+
import { test, after } from 'node:test';
|
|
17
|
+
import assert from 'node:assert/strict';
|
|
18
|
+
import http from 'node:http';
|
|
19
|
+
import { WordPressClient } from '../wordpress-client.js';
|
|
20
|
+
// Pinned as a literal, not imported: this is the measured string, and the
|
|
21
|
+
// probe must keep sending exactly it.
|
|
22
|
+
const CHATGPT_UA = 'Python/3.12 aiohttp/3.13.5';
|
|
23
|
+
const servers = [];
|
|
24
|
+
after(() => {
|
|
25
|
+
for (const s of servers)
|
|
26
|
+
s.close();
|
|
27
|
+
});
|
|
28
|
+
async function startSite(mode, opts = {}) {
|
|
29
|
+
const userAgents = [];
|
|
30
|
+
const server = http.createServer((req, res) => {
|
|
31
|
+
req.resume();
|
|
32
|
+
req.on('end', () => {
|
|
33
|
+
const ua = String(req.headers['user-agent'] || '');
|
|
34
|
+
userAgents.push(ua);
|
|
35
|
+
const isPython = /^python/i.test(ua);
|
|
36
|
+
if (isPython && mode === 'block_python') {
|
|
37
|
+
// Like the WP Engine edge: an HTML 403, no x-powered-by.
|
|
38
|
+
res.writeHead(403, { 'Content-Type': 'text/html' });
|
|
39
|
+
res.end('<html><head><title>403 Forbidden</title></head><body>Forbidden</body></html>');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (isPython && mode === 'reset_python') {
|
|
43
|
+
req.socket.destroy();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const url = new URL(req.url || '/', 'http://placeholder');
|
|
47
|
+
const route = url.searchParams.get('rest_route') || url.pathname.replace(/^\/wp-json/, '') || '/';
|
|
48
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
49
|
+
if (opts.poweredBy)
|
|
50
|
+
headers['X-Powered-By'] = opts.poweredBy;
|
|
51
|
+
const json = (status, body) => {
|
|
52
|
+
res.writeHead(status, headers);
|
|
53
|
+
res.end(req.method === 'HEAD' ? undefined : JSON.stringify(body));
|
|
54
|
+
};
|
|
55
|
+
if (url.pathname === '/.well-known/oauth-protected-resource' || route === '/respira/v1/oauth-protected-resource') {
|
|
56
|
+
return json(200, { resource: `http://${req.headers.host}/wp-json/respira/v1/mcp`, authorization_servers: ['https://www.respira.press'] });
|
|
57
|
+
}
|
|
58
|
+
if (route === '/respira/v1/ping' && (req.method === 'GET' || req.method === 'HEAD'))
|
|
59
|
+
return json(200, { ok: true });
|
|
60
|
+
if (req.method === 'OPTIONS')
|
|
61
|
+
return json(200, {});
|
|
62
|
+
if (route === '/respira/v1/ping') {
|
|
63
|
+
return json(404, { code: 'rest_no_route', message: 'No route was found matching the URL and request method.', data: { status: 404 } });
|
|
64
|
+
}
|
|
65
|
+
return json(200, { ok: true, route });
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
servers.push(server);
|
|
69
|
+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
70
|
+
const { port } = server.address();
|
|
71
|
+
const origin = `http://127.0.0.1:${port}`;
|
|
72
|
+
const client = new WordPressClient({ id: 'chatgpt-ua', name: 'chatgpt-ua', url: origin, apiKey: 'respira_test_key' });
|
|
73
|
+
return { client, origin, userAgents };
|
|
74
|
+
}
|
|
75
|
+
test('a host that 403s the ChatGPT user agent on the OAuth metadata is flagged, with the fix first', async () => {
|
|
76
|
+
const site = await startSite('block_python');
|
|
77
|
+
const report = await site.client.diagnoseConnection({ probe_timeout_ms: 5000 });
|
|
78
|
+
assert.equal(report.success, true);
|
|
79
|
+
assert.equal(report.chatgpt_connector_blocked, true);
|
|
80
|
+
assert.equal(report.chatgpt_connector_probe, 'ran');
|
|
81
|
+
assert.equal(report.chatgpt_connector.default_user_agent_status, 200);
|
|
82
|
+
assert.equal(report.chatgpt_connector.chatgpt_user_agent_status, 403);
|
|
83
|
+
assert.equal(report.chatgpt_connector.url, `${site.origin}/.well-known/oauth-protected-resource`);
|
|
84
|
+
assert.equal(report.chatgpt_connector.host_detected, null);
|
|
85
|
+
// Exactly one request went out with ChatGPT's user agent.
|
|
86
|
+
assert.equal(site.userAgents.filter((ua) => ua === CHATGPT_UA).length, 1);
|
|
87
|
+
const first = String(report.recommendations[0] || '');
|
|
88
|
+
assert.match(first, /blocks ChatGPT's connector before WordPress runs/);
|
|
89
|
+
assert.match(first, /does not implement OAuth/);
|
|
90
|
+
assert.match(first, /answered 200 to this server's user agent and 403 to ChatGPT's/);
|
|
91
|
+
assert.match(first, /allow the user agent Python\/3\.12 aiohttp on \/\.well-known\/oauth-protected-resource and \/wp-json\/respira\/v1\//);
|
|
92
|
+
assert.doesNotMatch(first, /WP Engine/, 'the host is only named when the headers show it');
|
|
93
|
+
});
|
|
94
|
+
test('WP Engine is named when the 2xx it serves says so, even though its 403 does not', async () => {
|
|
95
|
+
const site = await startSite('block_python', { poweredBy: 'WP Engine' });
|
|
96
|
+
const report = await site.client.diagnoseConnection({ probe_timeout_ms: 5000 });
|
|
97
|
+
assert.equal(report.chatgpt_connector_blocked, true);
|
|
98
|
+
assert.equal(report.chatgpt_connector.host_detected, 'wpengine');
|
|
99
|
+
assert.match(String(report.recommendations[0] || ''), /on WP Engine/);
|
|
100
|
+
assert.match(String(report.recommendations[0] || ''), /Ask WP Engine support to allow/);
|
|
101
|
+
});
|
|
102
|
+
test('a host that answers ChatGPT the same as everyone else is not flagged', async () => {
|
|
103
|
+
const site = await startSite('allow_all');
|
|
104
|
+
const report = await site.client.diagnoseConnection({ probe_timeout_ms: 5000 });
|
|
105
|
+
assert.equal(report.success, true);
|
|
106
|
+
assert.equal(report.chatgpt_connector_blocked, false);
|
|
107
|
+
assert.equal(report.chatgpt_connector_probe, 'ran');
|
|
108
|
+
assert.equal(report.chatgpt_connector.chatgpt_user_agent_status, 200);
|
|
109
|
+
assert.ok(!report.recommendations.some((r) => /ChatGPT's connector/.test(r)), 'no ChatGPT recommendation on a site that lets it through');
|
|
110
|
+
});
|
|
111
|
+
test('a ChatGPT probe that errors is reported and diagnose still succeeds', async () => {
|
|
112
|
+
const site = await startSite('reset_python');
|
|
113
|
+
const report = await site.client.diagnoseConnection({ probe_timeout_ms: 5000 });
|
|
114
|
+
assert.equal(report.success, true);
|
|
115
|
+
assert.equal(report.chatgpt_connector_probe, 'error');
|
|
116
|
+
assert.equal(report.chatgpt_connector_blocked, null, 'an error proves nothing either way');
|
|
117
|
+
assert.ok(report.chatgpt_connector.error, 'the error itself is in the evidence');
|
|
118
|
+
assert.ok(!report.recommendations.some((r) => /ChatGPT's connector/.test(r)));
|
|
119
|
+
// The rest of the report is intact.
|
|
120
|
+
assert.equal(report.well_known_discovery.verdict, 'wordpress_serves_it');
|
|
121
|
+
assert.equal(report.write_method_verdict, 'not_blocked');
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=chatgpt-connector-blocked-by-host.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-connector-blocked-by-host.test.js","sourceRoot":"","sources":["../../src/__tests__/chatgpt-connector-blocked-by-host.test.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -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
|
@@ -2636,6 +2636,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
2636
2636
|
inputSchema: {
|
|
2637
2637
|
type: 'object',
|
|
2638
2638
|
properties: {
|
|
2639
|
+
expected_version: {
|
|
2640
|
+
type: 'string',
|
|
2641
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
2642
|
+
},
|
|
2639
2643
|
id: {
|
|
2640
2644
|
type: 'number',
|
|
2641
2645
|
description: 'Page ID',
|
|
@@ -3037,6 +3041,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
3037
3041
|
inputSchema: {
|
|
3038
3042
|
type: 'object',
|
|
3039
3043
|
properties: {
|
|
3044
|
+
expected_version: {
|
|
3045
|
+
type: 'string',
|
|
3046
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
3047
|
+
},
|
|
3040
3048
|
id: {
|
|
3041
3049
|
type: 'number',
|
|
3042
3050
|
description: 'Post ID',
|
|
@@ -3361,6 +3369,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
3361
3369
|
inputSchema: {
|
|
3362
3370
|
type: 'object',
|
|
3363
3371
|
properties: {
|
|
3372
|
+
expected_version: {
|
|
3373
|
+
type: 'string',
|
|
3374
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
3375
|
+
},
|
|
3364
3376
|
builder: {
|
|
3365
3377
|
type: 'string',
|
|
3366
3378
|
description: 'Builder identifier. Use exactly: gutenberg, divi, elementor, bricks, beaver, oxygen, breakdance, brizy, thrive, visual-composer, wpbakery, flatsome, spectra, kadence, generateblocks, greenshift.',
|
|
@@ -3440,6 +3452,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
3440
3452
|
inputSchema: {
|
|
3441
3453
|
type: 'object',
|
|
3442
3454
|
properties: {
|
|
3455
|
+
expected_version: {
|
|
3456
|
+
type: 'string',
|
|
3457
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
3458
|
+
},
|
|
3443
3459
|
builder: {
|
|
3444
3460
|
type: 'string',
|
|
3445
3461
|
description: 'Builder name. Use exactly: gutenberg, divi, elementor, bricks, beaver, oxygen, breakdance, brizy, thrive, visual-composer, wpbakery, flatsome, spectra, kadence, generateblocks, greenshift.',
|
|
@@ -4570,6 +4586,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
4570
4586
|
inputSchema: {
|
|
4571
4587
|
type: 'object',
|
|
4572
4588
|
properties: {
|
|
4589
|
+
expected_version: {
|
|
4590
|
+
type: 'string',
|
|
4591
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
4592
|
+
},
|
|
4573
4593
|
builder: {
|
|
4574
4594
|
type: 'string',
|
|
4575
4595
|
description: 'Builder slug',
|
|
@@ -4748,7 +4768,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
4748
4768
|
},
|
|
4749
4769
|
{
|
|
4750
4770
|
name: 'wordpress_diagnose_connection',
|
|
4751
|
-
description: 'Run a connection-fingerprint diagnostic for the active site. Combines the plugin\'s server-side report (route registration, php/wp/plugin versions, edge plugin presence) with outside-in probes from the MCP server (REST root reachability, content-type sanity check on Respira routes, edge-layer headers). Use when a tool returns "html instead of json", an opaque 5xx, or when a connection that worked yesterday silently breaks. ALSO use it when the user suspects the wrong site, a stale connection, or a setup step that "did nothing": the response carries transport_mode (which install is answering: mcpb_bundle, npx_cache, global_npm_install, project_local_install, source_checkout), transport.duplicate_entries (whether a second Respira server is running, which usually means the client config lists Respira twice), and client_config (which config source won and how many sites came out of it). Returns a structured object including detected edge layers (Cloudflare, Wordfence, Sucuri) and concrete remediation recommendations. It also reports well_known_discovery: whether the host answers /.well-known/oauth-protected-resource itself instead of letting WordPress answer it, which is what breaks a ChatGPT connection on a site whose plugin is working, since ChatGPT checks only that address.',
|
|
4771
|
+
description: 'Run a connection-fingerprint diagnostic for the active site. Combines the plugin\'s server-side report (route registration, php/wp/plugin versions, edge plugin presence) with outside-in probes from the MCP server (REST root reachability, content-type sanity check on Respira routes, edge-layer headers). Use when a tool returns "html instead of json", an opaque 5xx, or when a connection that worked yesterday silently breaks. ALSO use it when the user suspects the wrong site, a stale connection, or a setup step that "did nothing": the response carries transport_mode (which install is answering: mcpb_bundle, npx_cache, global_npm_install, project_local_install, source_checkout), transport.duplicate_entries (whether a second Respira server is running, which usually means the client config lists Respira twice), and client_config (which config source won and how many sites came out of it). Returns a structured object including detected edge layers (Cloudflare, Wordfence, Sucuri) and concrete remediation recommendations. It also reports well_known_discovery: whether the host answers /.well-known/oauth-protected-resource itself instead of letting WordPress answer it, which is what breaks a ChatGPT connection on a site whose plugin is working, since ChatGPT checks only that address. And chatgpt_connector_blocked: whether the host or CDN refuses ChatGPT\'s connector (user agent Python/3.12 aiohttp) on that metadata while it serves this server fine, which is what makes ChatGPT say the server "does not implement OAuth".',
|
|
4752
4772
|
inputSchema: {
|
|
4753
4773
|
type: 'object',
|
|
4754
4774
|
properties: {
|
|
@@ -10155,14 +10175,14 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
10155
10175
|
return await client.getBuilderInlineSchemas(args.builder, args.types);
|
|
10156
10176
|
case 'wordpress_inject_builder_content':
|
|
10157
10177
|
return hoistDroppedStylingWarnings({
|
|
10158
|
-
...(await client.injectBuilderContent(args.builder, args.page_id, args.content, args.divi_version, args.edit_target, args.mode, args.confirm_replace)),
|
|
10178
|
+
...(await client.injectBuilderContent(args.builder, args.page_id, args.content, args.divi_version, args.edit_target, args.mode, args.confirm_replace, args.expected_version)),
|
|
10159
10179
|
respira_approvals_url: client.getApprovalsUrl(),
|
|
10160
10180
|
});
|
|
10161
10181
|
case 'wordpress_make_responsive':
|
|
10162
10182
|
return await client.makeResponsive(args.page_id, args.dry_run || false);
|
|
10163
10183
|
case 'wordpress_update_module':
|
|
10164
10184
|
return hoistDroppedStylingWarnings({
|
|
10165
|
-
...(await client.updateModule(args.builder, args.page_id, args.module_identifier, args.updates, args.edit_target)),
|
|
10185
|
+
...(await client.updateModule(args.builder, args.page_id, args.module_identifier, args.updates, args.edit_target, args.expected_version)),
|
|
10166
10186
|
respira_approvals_url: client.getApprovalsUrl(),
|
|
10167
10187
|
});
|
|
10168
10188
|
case 'wordpress_validate_security':
|
|
@@ -10645,7 +10665,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
10645
10665
|
case 'wordpress_get_design_apply_reports':
|
|
10646
10666
|
return await client.callRestV2('GET', '/design-direction/apply-reports', args.direction_id !== undefined ? { direction_id: args.direction_id } : undefined);
|
|
10647
10667
|
case 'wordpress_apply_builder_patch':
|
|
10648
|
-
return await client.applyBuilderPatch(args.builder, args.post_id, args.operations, args.include, args.edit_target);
|
|
10668
|
+
return await client.applyBuilderPatch(args.builder, args.post_id, args.operations, args.include, args.edit_target, args.expected_version);
|
|
10649
10669
|
case 'woocommerce_list_products':
|
|
10650
10670
|
return await client.woocommerceListProducts(args);
|
|
10651
10671
|
case 'woocommerce_get_product':
|
|
@@ -11178,6 +11198,10 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
11178
11198
|
inputSchema: {
|
|
11179
11199
|
type: 'object',
|
|
11180
11200
|
properties: {
|
|
11201
|
+
expected_version: {
|
|
11202
|
+
type: 'string',
|
|
11203
|
+
description: "Optional. The content_version from your last read or write of this page. The write is refused with respira_version_conflict (409, nothing written) if the page changed since, e.g. another agent or an editor saved it. Read again, reapply your change, and retry with the new content_version.",
|
|
11204
|
+
},
|
|
11181
11205
|
post_id: { type: 'number', description: 'Page/post ID' },
|
|
11182
11206
|
identifier_type: {
|
|
11183
11207
|
type: 'string',
|