@noleemits/vision-builder-control-mcp 4.32.1 → 4.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +56 -1
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -3,6 +3,7 @@
3
3
  * Noleemits Vision Builder Control MCP Server
4
4
  *
5
5
  * Provides 65 tools for building and managing WordPress/Elementor sites.
6
+ * v4.33.0: Elementor kit layout settings (get_kit_settings, set_kit_settings) — read/write container_width, viewports, gutter.
6
7
  * v4.15.0: Injection engine v2 — icon-list injection, unfilled slot clearing.
7
8
  * v4.14.0: Pipeline quality fixes — smart counter parsing, post-processing, quality scores in browse, injection completeness.
8
9
  * v4.13.0: Phase 3 DX — display_conditions, null filter fix, garbage HTML cleanup, icon key docs, auto-inject convenience docs.
@@ -104,7 +105,7 @@ process.on('SIGINT', () => {
104
105
  // CONFIG
105
106
  // ================================================================
106
107
 
107
- const VERSION = '4.32.0';
108
+ const VERSION = '4.33.0';
108
109
  const MIN_PLUGIN_VERSION = '4.13.0'; // Minimum WP plugin version required by this MCP server
109
110
 
110
111
  // ================================================================
@@ -3050,6 +3051,23 @@ function getToolDefinitions() {
3050
3051
  }
3051
3052
  }
3052
3053
  },
3054
+ {
3055
+ name: 'get_kit_settings',
3056
+ description: 'Read Elementor kit layout settings (container_width, viewport_md, viewport_lg, space_between_widgets, etc.) from the active kit. Slider values come back as {unit, size, sizes} objects.',
3057
+ inputSchema: { type: 'object', properties: {} }
3058
+ },
3059
+ {
3060
+ name: 'set_kit_settings',
3061
+ description: 'Update Elementor kit layout settings on the active kit. Pass a settings object with any whitelisted keys: container_width (px), container_width_tablet, container_width_mobile, space_between_widgets, viewport_md, viewport_lg, viewport_mobile, viewport_tablet. Slider values accept either a plain number (treated as px) or {size, unit, sizes?}. Clears Elementor CSS cache after applying. Always dry_run=true first.',
3062
+ inputSchema: {
3063
+ type: 'object',
3064
+ properties: {
3065
+ settings: { type: 'object', description: 'Map of kit setting keys to values. Numbers auto-wrap into {unit:"px", size:N} for slider keys. Example: {"container_width": 1280}' },
3066
+ dry_run: { type: 'boolean', description: 'Preview without saving (default: true).' }
3067
+ },
3068
+ required: ['settings']
3069
+ }
3070
+ },
3053
3071
  {
3054
3072
  name: 'audit_broken_images',
3055
3073
  description: 'Scan all published posts and Elementor pages for broken images (non-200 HTTP responses). Checks <img> tags in post_content and image/image-box widgets + background images in Elementor data. Returns broken URLs with HTTP status, error details, and which posts are affected.',
@@ -5178,6 +5196,43 @@ async function handleToolCall(name, args) {
5178
5196
  return ok(out);
5179
5197
  }
5180
5198
 
5199
+ case 'get_kit_settings': {
5200
+ const r = await apiCall('/kit-settings');
5201
+ if (r.code || r.error) return ok(`Failed: ${r.message || r.error}`);
5202
+ let out = `=== ELEMENTOR KIT SETTINGS ===\nKit ID: ${r.kit_id}\n\n`;
5203
+ for (const [k, v] of Object.entries(r.settings || {})) {
5204
+ if (v === null) { out += ` ${k}: (unset)\n`; continue; }
5205
+ if (typeof v === 'object' && 'size' in v) {
5206
+ out += ` ${k}: ${v.size}${v.unit || ''}\n`;
5207
+ } else {
5208
+ out += ` ${k}: ${v}\n`;
5209
+ }
5210
+ }
5211
+ return ok(out);
5212
+ }
5213
+
5214
+ case 'set_kit_settings': {
5215
+ const body = { settings: args.settings || {} };
5216
+ if (args.dry_run !== undefined) body.dry_run = args.dry_run;
5217
+ const r = await apiCall('/kit-settings', 'POST', body);
5218
+ if (r.code || r.error) return ok(`Failed: ${r.message || r.error}`);
5219
+ let out = r.dry_run ? `=== SET KIT SETTINGS (DRY RUN) ===\n` : `=== SET KIT SETTINGS ===\n`;
5220
+ out += `Kit ID: ${r.kit_id}\n`;
5221
+ if (r.changes?.length) {
5222
+ r.changes.forEach(c => { out += ` • ${c}\n`; });
5223
+ } else {
5224
+ out += ' No changes detected.\n';
5225
+ }
5226
+ if (r.rejected && Object.keys(r.rejected).length) {
5227
+ out += `\nRejected:\n`;
5228
+ for (const [k, why] of Object.entries(r.rejected)) {
5229
+ out += ` ✗ ${k}: ${why}\n`;
5230
+ }
5231
+ }
5232
+ out += `\n${r.note}`;
5233
+ return ok(out);
5234
+ }
5235
+
5181
5236
  case 'audit_broken_images': {
5182
5237
  const params = new URLSearchParams();
5183
5238
  if (args.page_id) params.set('page_id', args.page_id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noleemits/vision-builder-control-mcp",
3
- "version": "4.32.1",
3
+ "version": "4.33.0",
4
4
  "description": "Vision Builder Control MCP server - design token-driven page builder tools for WordPress/Elementor websites",
5
5
  "type": "module",
6
6
  "main": "index.js",