@respira/wordpress-mcp-server 8.3.14 → 8.3.16
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 +20 -0
- package/README.md +4 -4
- package/SOUL.md +1 -0
- package/TOOL_CATALOG.md +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +119 -8
- package/dist/server.js.map +1 -1
- package/dist/wordpress-client.d.ts +12 -0
- package/dist/wordpress-client.d.ts.map +1 -1
- package/dist/wordpress-client.js +47 -0
- package/dist/wordpress-client.js.map +1 -1
- package/package.json +2 -2
- package/tool-capabilities.json +80 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ 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.16] - 2026-08-29
|
|
9
|
+
|
|
10
|
+
The half-answer in 8.3.15 becomes a whole one.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **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.
|
|
15
|
+
|
|
16
|
+
## [8.3.15] - 2026-08-29
|
|
17
|
+
|
|
18
|
+
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.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **The phantom "4KB limit" is gone.** Nested Divi 5 payloads over roughly 4KB appeared to arrive truncated, failing with a generic validation error that forced batches to be split and pushed one build toward literal hex colors instead of global-color variables. There was never a size limit. The inject tool's schema declared `content` as an object while every canonical payload shape is an array, so strict validators rejected the array form, and larger payloads are simply more often the nested-array shape. The schema now accepts both.
|
|
23
|
+
- **find_builder_targets works on Divi 5.** Agents pass the generation string the builder info reports (`divi5`), which resolved no adapter, so the tool walked nothing and answered "this page is empty" with a success flag. The generation strings now alias to the right adapter.
|
|
24
|
+
- **get_page_outline accepts `id`.** Every sibling read tool calls it `id`; this one demanded `page_id` and rejected the rest. Both work now.
|
|
25
|
+
- **batch_update stops advertising a duplicate action the server rejects.** The schema promised it, the server 400ed the entire batch. The schema now tells the truth and points at duplicate_element.
|
|
26
|
+
- **Every add_* shortcut states its contract up front.** They append at the end of the page, always. That used to be revealed only after a positioning parameter was silently ignored; the tool descriptions now say it before you build, along with the move_element recipe.
|
|
27
|
+
|
|
8
28
|
## [8.3.12] - 2026-08-25
|
|
9
29
|
|
|
10
30
|
### Fixed
|
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>
|
|
10
|
+
<strong>218 MCP tools, 323 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-
|
|
17
|
+
<img src="https://img.shields.io/badge/tools-323-10b981?style=flat-square" alt="323 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
|
|
250
|
+
Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 323 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>
|
|
859
|
+
<strong>218 core tools, 323 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/SOUL.md
CHANGED
|
@@ -48,6 +48,7 @@ What agents always and never do.
|
|
|
48
48
|
- **Never edit theme PHP, `wp_postmeta`, or the WordPress database directly.** All edits go through the builder-native tools. If the customer asks for a direct edit, refuse and explain why the safer path produces the same outcome.
|
|
49
49
|
- **Always pass `site_id` per call in Cowork and multi-site contexts.** Switching context silently is how cross-site mistakes happen.
|
|
50
50
|
- **Always read `inline_schemas` before injecting WPBakery, Uncode, or Visual Composer shortcodes.** The schemas are the contract. Guessing produces broken output.
|
|
51
|
+
- **When the customer asks for a preview link to a staged change, quote `preview_url`, never the plain page url.** Every duplicate and staged write returns a signed `preview_url` (and repeats it in the response message): it renders that one draft to anyone, no WordPress login, and dies when the change is rejected. The plain `url` field is login-gated while the post is a draft, so handing it to a client is handing them a 404.
|
|
51
52
|
- **When stuck: retry once with the structured hint, then run `respira_diagnose_connection`, then ASK the customer if they want to file a bug via `respira_report_issue`.** Never auto-file. The customer decides what to surface.
|
|
52
53
|
- **Beautiful, accurate, fast.** Every output is judged on three axes in this order. Beautiful means it reads well and the page renders well. Accurate means it does exactly what was asked. Fast means it consumed the minimum tokens necessary.
|
|
53
54
|
|
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: **
|
|
5
|
+
Generated catalog: **191 core tools**, **105 WooCommerce tools**, **296 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
|
|
|
@@ -58,6 +58,7 @@ The runtime applies site context and per-site governance, so an individual conne
|
|
|
58
58
|
- `wordpress_delete_custom_post` — write; native + hosted
|
|
59
59
|
- `wordpress_delete_design_direction` — write; native + hosted
|
|
60
60
|
- `wordpress_delete_design_token` — write; native + hosted
|
|
61
|
+
- `wordpress_delete_divi_preset` — write; hosted/stdio
|
|
61
62
|
- `wordpress_delete_media` — write; native + hosted
|
|
62
63
|
- `wordpress_delete_menu` — write; native + hosted
|
|
63
64
|
- `wordpress_delete_menu_item` — write; native + hosted
|
|
@@ -123,6 +124,7 @@ The runtime applies site context and per-site governance, so an individual conne
|
|
|
123
124
|
- `wordpress_list_custom_taxonomies` — read; hosted/stdio
|
|
124
125
|
- `wordpress_list_design_directions` — read; native + hosted
|
|
125
126
|
- `wordpress_list_design_tokens` — read; native + hosted
|
|
127
|
+
- `wordpress_list_divi_presets` — read; hosted/stdio
|
|
126
128
|
- `wordpress_list_media` — read; native + hosted
|
|
127
129
|
- `wordpress_list_memory` — read; native + hosted
|
|
128
130
|
- `wordpress_list_menu_items` — read; native + hosted
|
|
@@ -156,6 +158,7 @@ The runtime applies site context and per-site governance, so an individual conne
|
|
|
156
158
|
- `wordpress_reorder_elements` — write; native + hosted
|
|
157
159
|
- `wordpress_report_issue` — read; hosted/stdio
|
|
158
160
|
- `wordpress_reset_site_template` — write; native + hosted
|
|
161
|
+
- `wordpress_resolve_divi_preset` — read; hosted/stdio
|
|
159
162
|
- `wordpress_restore_session` — write; hosted/stdio
|
|
160
163
|
- `wordpress_restore_snapshot` — write; native + hosted
|
|
161
164
|
- `wordpress_run_pagespeed_audit` — read; hosted/stdio
|
|
@@ -193,6 +196,7 @@ The runtime applies site context and per-site governance, so an individual conne
|
|
|
193
196
|
- `wordpress_update_translation` — write; native + hosted
|
|
194
197
|
- `wordpress_update_user` — write; native + hosted
|
|
195
198
|
- `wordpress_upload_media` — write; native + hosted
|
|
199
|
+
- `wordpress_upsert_divi_presets` — read; hosted/stdio
|
|
196
200
|
- `wordpress_validate_security` — read; native + hosted
|
|
197
201
|
- `wordpress_write_theme_file` — read; hosted/stdio
|
|
198
202
|
|
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
|
@@ -2196,6 +2196,88 @@ 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_resolve_divi_preset',
|
|
2263
|
+
description: 'Preview what a Divi 5 preset would apply: returns the resolved attribute groups for a `_presetId` without writing anything. ' +
|
|
2264
|
+
'Use before a write to check a preset id is valid for the target module type; an unknown id returns the closest match.',
|
|
2265
|
+
inputSchema: {
|
|
2266
|
+
type: 'object',
|
|
2267
|
+
properties: {
|
|
2268
|
+
preset_id: { type: 'string', description: 'Preset id to resolve.' },
|
|
2269
|
+
module_type: { type: 'string', description: 'Target module type, e.g. "divi/heading".' },
|
|
2270
|
+
},
|
|
2271
|
+
required: ['preset_id'],
|
|
2272
|
+
},
|
|
2273
|
+
annotations: {
|
|
2274
|
+
title: 'Resolve Divi Preset',
|
|
2275
|
+
readOnlyHint: true,
|
|
2276
|
+
destructiveHint: false,
|
|
2277
|
+
idempotentHint: true,
|
|
2278
|
+
openWorldHint: false,
|
|
2279
|
+
},
|
|
2280
|
+
},
|
|
2199
2281
|
{
|
|
2200
2282
|
name: 'wordpress_search_abilities',
|
|
2201
2283
|
description: 'Search the curated WordPress Abilities directory and classify each result as Respira-native, inhaled, unavailable, or replaced by a safer Respira workflow. ' +
|
|
@@ -3077,8 +3159,12 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
3077
3159
|
type: 'number',
|
|
3078
3160
|
description: 'Page or post ID',
|
|
3079
3161
|
},
|
|
3162
|
+
id: {
|
|
3163
|
+
type: 'number',
|
|
3164
|
+
description: 'Alias for page_id (every sibling read tool calls it id, so both are accepted).',
|
|
3165
|
+
},
|
|
3080
3166
|
},
|
|
3081
|
-
required: [
|
|
3167
|
+
required: [],
|
|
3082
3168
|
},
|
|
3083
3169
|
annotations: {
|
|
3084
3170
|
title: "Page Outline",
|
|
@@ -3129,8 +3215,14 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
3129
3215
|
description: 'Page ID',
|
|
3130
3216
|
},
|
|
3131
3217
|
content: {
|
|
3132
|
-
type: 'object'
|
|
3133
|
-
|
|
3218
|
+
// F5 (Bronko's field report): this was `type: 'object'`, while the
|
|
3219
|
+
// canonical Divi 5 / Gutenberg / Elementor payloads are ARRAYS.
|
|
3220
|
+
// Strict client-side validators rejected the array shape with a
|
|
3221
|
+
// generic InputValidationError that looked like a size limit
|
|
3222
|
+
// (larger payloads are simply more often the nested-array form,
|
|
3223
|
+
// so the failures correlated with ~4KB and read as truncation).
|
|
3224
|
+
type: ['array', 'object'],
|
|
3225
|
+
description: 'Structured content to inject in simplified format. In "replace" mode (default), this REPLACES all existing content. In "append" mode, this is added after existing content. For Gutenberg: array of blocks [{type: "core/heading", attrs: {level: 2}, content: "Hello"}, {type: "core/paragraph", attrs: {}, content: "Text here"}]. For Beaver Builder: {rows: [{cols: [{modules: [{type: "rich-text", settings: {text: "..."}}]}]}]}. For Elementor: array of widget objects. For Divi 5: array of section nodes (see the canonical nested shape in this tool\'s description). Use extract_builder_content to see the format for any builder.',
|
|
3134
3226
|
},
|
|
3135
3227
|
mode: {
|
|
3136
3228
|
type: 'string',
|
|
@@ -9477,6 +9569,14 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
9477
9569
|
return await client.getBuilderInfo({ debug: Boolean(args?.debug) });
|
|
9478
9570
|
case 'wordpress_get_divi_migration_readiness':
|
|
9479
9571
|
return await client.getDiviMigrationReadiness();
|
|
9572
|
+
case 'wordpress_list_divi_presets':
|
|
9573
|
+
return await client.listDiviPresets(args.module_type, args.scope);
|
|
9574
|
+
case 'wordpress_upsert_divi_presets':
|
|
9575
|
+
return await client.upsertDiviPresets(args.presets);
|
|
9576
|
+
case 'wordpress_delete_divi_preset':
|
|
9577
|
+
return await client.deleteDiviPreset(args.preset_id);
|
|
9578
|
+
case 'wordpress_resolve_divi_preset':
|
|
9579
|
+
return await client.resolveDiviPreset(args.preset_id, args.module_type);
|
|
9480
9580
|
case 'wordpress_abilities_gap_report':
|
|
9481
9581
|
return await client.getAbilitiesGapReport();
|
|
9482
9582
|
case 'wordpress_search_abilities':
|
|
@@ -9644,8 +9744,15 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
9644
9744
|
return await client.extractBuilderContent(args.builder, args.page_id);
|
|
9645
9745
|
case 'wordpress_find_builder_targets':
|
|
9646
9746
|
return await client.findBuilderTargets(args.builder, args.page_id, args.query, args.limit, args.offset);
|
|
9647
|
-
case 'wordpress_get_page_outline':
|
|
9648
|
-
|
|
9747
|
+
case 'wordpress_get_page_outline': {
|
|
9748
|
+
// F9: every sibling read tool takes `id`; agents pass it here too and
|
|
9749
|
+
// used to get a schema error. Accept both.
|
|
9750
|
+
const outlineId = args.page_id ?? args.id;
|
|
9751
|
+
if (outlineId === undefined || outlineId === null) {
|
|
9752
|
+
throw new Error('get_page_outline needs page_id (or its alias id).');
|
|
9753
|
+
}
|
|
9754
|
+
return await client.getPageOutline(args.builder, outlineId);
|
|
9755
|
+
}
|
|
9649
9756
|
case 'wordpress_get_builder_inline_schemas':
|
|
9650
9757
|
return await client.getBuilderInlineSchemas(args.builder, args.types);
|
|
9651
9758
|
case 'wordpress_inject_builder_content':
|
|
@@ -10819,12 +10926,12 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
10819
10926
|
post_id: { type: 'number', description: 'Page/post ID' },
|
|
10820
10927
|
operations: {
|
|
10821
10928
|
type: 'array',
|
|
10822
|
-
description: 'Array of operations applied in order. Each op: {action: "update"|"remove"|"move"
|
|
10929
|
+
description: 'Array of operations applied in order. Each op: {action: "update"|"remove"|"move", identifier_type: "id"|"admin_label"|"type"|"path", identifier_value: string, updates?: object, target_container_path?: string, position?: number, match_content?: string}. To duplicate an element, use wordpress_duplicate_element (batch duplicate is not implemented server-side; the schema used to advertise it and the server rejected the whole batch).',
|
|
10823
10930
|
items: {
|
|
10824
10931
|
type: 'object',
|
|
10825
10932
|
required: ['action', 'identifier_type', 'identifier_value'],
|
|
10826
10933
|
properties: {
|
|
10827
|
-
action: { type: 'string', enum: ['update', 'remove', 'move'
|
|
10934
|
+
action: { type: 'string', enum: ['update', 'remove', 'move'] },
|
|
10828
10935
|
identifier_type: { type: 'string', enum: ['id', 'admin_label', 'type', 'widget_type', 'path', 'content'] },
|
|
10829
10936
|
identifier_value: { type: 'string' },
|
|
10830
10937
|
updates: { type: 'object', description: 'For action=update: flat settings patch OR nested attrs bucket. See respira_update_element for shape.' },
|
|
@@ -11387,7 +11494,11 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
|
|
|
11387
11494
|
];
|
|
11388
11495
|
return shortcuts.map((s) => ({
|
|
11389
11496
|
name: `wordpress_${s.name}`,
|
|
11390
|
-
|
|
11497
|
+
// F6 (Bronko's field report): the append-only behavior was only surfaced
|
|
11498
|
+
// AFTER a positioning param was silently ignored, so agents built whole
|
|
11499
|
+
// pages in content→form→rest order to control placement. State the
|
|
11500
|
+
// contract and the supported recipe up front.
|
|
11501
|
+
description: `${s.description} Appends at the END of the page (no positioning params). To place it elsewhere, call wordpress_move_element with the returned element_id.`,
|
|
11391
11502
|
inputSchema: {
|
|
11392
11503
|
type: 'object',
|
|
11393
11504
|
properties: {
|