@noleemits/vision-builder-control-mcp 4.38.1 → 4.39.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 +103 -1
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -107,7 +107,7 @@ process.on('SIGINT', () => {
107
107
  // CONFIG
108
108
  // ================================================================
109
109
 
110
- const VERSION = '4.38.1';
110
+ const VERSION = '4.39.0';
111
111
  const MIN_PLUGIN_VERSION = '4.13.0'; // Minimum WP plugin version required by this MCP server
112
112
 
113
113
  // ================================================================
@@ -2422,6 +2422,62 @@ function getToolDefinitions() {
2422
2422
  }
2423
2423
  }
2424
2424
  },
2425
+ {
2426
+ name: 'get_rankmath_global',
2427
+ description: 'Read RankMath sitewide settings: Knowledge Graph / Organization (name, type, logo, phone, email, address), social profiles (Facebook URL, Twitter handle, additional profile URLs), and default Open Graph image. Use to audit before bulk-updating sitewide schema/social data.',
2428
+ inputSchema: {
2429
+ type: 'object',
2430
+ properties: {}
2431
+ }
2432
+ },
2433
+ {
2434
+ name: 'update_rankmath_global',
2435
+ description: 'Update RankMath sitewide settings (Knowledge Graph / Organization, social profiles, defaults). Send a partial structured object — only provided keys are written. Use to push organization name/logo/phone/address, social URLs, and default OG image into RankMath schema in one call.',
2436
+ inputSchema: {
2437
+ type: 'object',
2438
+ properties: {
2439
+ organization: {
2440
+ type: 'object',
2441
+ description: 'Knowledge Graph / Organization fields',
2442
+ properties: {
2443
+ type: { type: 'string', description: '"company" or "person"' },
2444
+ name: { type: 'string' },
2445
+ logo: { type: 'string', description: 'Logo URL (use a media library URL)' },
2446
+ phone: { type: 'string' },
2447
+ email: { type: 'string' },
2448
+ address: {
2449
+ type: 'object',
2450
+ properties: {
2451
+ street: { type: 'string' },
2452
+ city: { type: 'string' },
2453
+ state: { type: 'string' },
2454
+ zip: { type: 'string' },
2455
+ country: { type: 'string' }
2456
+ }
2457
+ }
2458
+ }
2459
+ },
2460
+ social: {
2461
+ type: 'object',
2462
+ description: 'Social profile URLs',
2463
+ properties: {
2464
+ facebook: { type: 'string', description: 'Facebook page URL' },
2465
+ twitter: { type: 'string', description: 'Twitter handle (e.g. "@firmname")' },
2466
+ additional_profiles: { type: 'array', items: { type: 'string' }, description: 'Additional profile URLs (LinkedIn, Instagram, YouTube, etc.) — one URL per array entry' }
2467
+ }
2468
+ },
2469
+ defaults: {
2470
+ type: 'object',
2471
+ description: 'Sitewide defaults',
2472
+ properties: {
2473
+ open_graph_image: { type: 'string', description: 'Default OG image URL' },
2474
+ open_graph_image_id: { type: 'number', description: 'Default OG image attachment ID' }
2475
+ }
2476
+ },
2477
+ local_business_type: { type: 'string', description: 'schema.org Local Business type (e.g. "LegalService")' }
2478
+ }
2479
+ }
2480
+ },
2425
2481
  {
2426
2482
  name: 'audit_faq_schema',
2427
2483
  description: 'Audit all published posts/pages for FAQ schema issues: duplicate FAQPage markup (NVBC meta + RankMath block), orphaned NVBC schemas, unconverted plain FAQs, invalid JSON, empty Q&As, and encoding issues (bare u003c).',
@@ -4391,6 +4447,52 @@ async function handleToolCall(name, args) {
4391
4447
  return ok(out);
4392
4448
  }
4393
4449
 
4450
+ case 'get_rankmath_global': {
4451
+ const r = await apiCall('/seo/global');
4452
+ if (!r.success) return ok(`Failed: ${r.message || 'Unknown error'}`);
4453
+ let out = `=== RANKMATH GLOBAL SETTINGS ===\n`;
4454
+ out += `\n--- Organization ---\n`;
4455
+ out += ` Type: ${r.organization.type || '(unset)'}\n`;
4456
+ out += ` Name: ${r.organization.name || '(unset)'}\n`;
4457
+ out += ` Logo: ${r.organization.logo || '(unset)'}\n`;
4458
+ out += ` Phone: ${r.organization.phone || '(unset)'}\n`;
4459
+ out += ` Email: ${r.organization.email || '(unset)'}\n`;
4460
+ const a = r.organization.address || {};
4461
+ if (a.street || a.city) {
4462
+ out += ` Address: ${a.street || ''}${a.street && a.city ? ', ' : ''}${a.city || ''}${a.state ? ', ' + a.state : ''} ${a.zip || ''}${a.country ? ' ' + a.country : ''}\n`;
4463
+ } else {
4464
+ out += ` Address: (unset)\n`;
4465
+ }
4466
+ out += `\n--- Social ---\n`;
4467
+ out += ` Facebook: ${r.social.facebook || '(unset)'}\n`;
4468
+ out += ` Twitter: ${r.social.twitter || '(unset)'}\n`;
4469
+ if (r.social.additional_profiles && r.social.additional_profiles.length) {
4470
+ out += ` Additional profiles:\n`;
4471
+ r.social.additional_profiles.forEach(u => out += ` - ${u}\n`);
4472
+ } else {
4473
+ out += ` Additional profiles: (none)\n`;
4474
+ }
4475
+ out += `\n--- Defaults ---\n`;
4476
+ out += ` OG image: ${r.defaults.open_graph_image || '(unset)'}\n`;
4477
+ if (r.defaults.open_graph_image_id) out += ` OG image ID: ${r.defaults.open_graph_image_id}\n`;
4478
+ if (r.local_business_type) out += `\nLocal business type: ${r.local_business_type}\n`;
4479
+ return ok(out);
4480
+ }
4481
+
4482
+ case 'update_rankmath_global': {
4483
+ const r = await apiCall('/seo/global', 'POST', args);
4484
+ if (!r.success) return ok(`Failed: ${r.message || 'Unknown error'}`);
4485
+ let out = `RankMath sitewide settings updated!\n`;
4486
+ out += `Updated: ${(r.updated_fields || []).join(', ') || '(none)'}\n`;
4487
+ if (r.current && r.current.organization) {
4488
+ out += `\n--- New state ---\n`;
4489
+ out += ` Org: ${r.current.organization.name || '(unset)'} (${r.current.organization.type || 'unset'})\n`;
4490
+ out += ` Phone: ${r.current.organization.phone || '(unset)'}\n`;
4491
+ out += ` Facebook: ${r.current.social.facebook || '(unset)'}\n`;
4492
+ }
4493
+ return ok(out);
4494
+ }
4495
+
4394
4496
  case 'audit_seo': {
4395
4497
  const params = new URLSearchParams();
4396
4498
  if (args.post_type) params.set('post_type', args.post_type);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noleemits/vision-builder-control-mcp",
3
- "version": "4.38.1",
3
+ "version": "4.39.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",