@respira/wordpress-mcp-server 8.3.4 → 8.3.6

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/dist/server.js CHANGED
@@ -3217,7 +3217,15 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
3217
3217
  type: { type: 'string', enum: ['color', 'typography', 'spacing', 'breakpoints'] },
3218
3218
  id: { type: 'string' },
3219
3219
  name: { type: 'string' },
3220
- value: {},
3220
+ value: {
3221
+ // Typed on purpose. An empty schema is valid JSON Schema and a
3222
+ // strict MCP validator rejects it: ChatGPT refused the whole
3223
+ // catalogue over this, so one untyped property took every tool
3224
+ // down. The plugin's own ability schema was fixed in 8.6.6; this
3225
+ // is the same fix in the npm lane, which still shipped it.
3226
+ type: ['string', 'number', 'object'],
3227
+ description: 'Token value: a CSS string for color and spacing ("#0f7b5f", "1.5rem"), a number, or an object for typography (fontFamily, fontSize, fontWeight, lineHeight).',
3228
+ },
3221
3229
  expected_fingerprint: { type: 'string', description: 'Optional document revision returned by wordpress_list_design_tokens.' },
3222
3230
  approval_token: { type: 'string' },
3223
3231
  dry_run: { type: 'boolean' },
@@ -3235,7 +3243,15 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
3235
3243
  type: { type: 'string', enum: ['color', 'typography', 'spacing', 'breakpoints'] },
3236
3244
  id: { type: 'string' },
3237
3245
  name: { type: 'string' },
3238
- value: {},
3246
+ value: {
3247
+ // Typed on purpose. An empty schema is valid JSON Schema and a
3248
+ // strict MCP validator rejects it: ChatGPT refused the whole
3249
+ // catalogue over this, so one untyped property took every tool
3250
+ // down. The plugin's own ability schema was fixed in 8.6.6; this
3251
+ // is the same fix in the npm lane, which still shipped it.
3252
+ type: ['string', 'number', 'object'],
3253
+ description: 'Token value: a CSS string for color and spacing ("#0f7b5f", "1.5rem"), a number, or an object for typography (fontFamily, fontSize, fontWeight, lineHeight).',
3254
+ },
3239
3255
  expected_fingerprint: { type: 'string' },
3240
3256
  approval_token: { type: 'string' },
3241
3257
  dry_run: { type: 'boolean' },
@@ -5159,6 +5175,26 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
5159
5175
  },
5160
5176
  destructiveHint: true,
5161
5177
  },
5178
+ {
5179
+ name: 'wordpress_purge_cache',
5180
+ description: 'Purge page and object caches, and report exactly which caching layers were touched.\n\nEvery Respira write already purges what it changed, so you rarely need this. Reach for it when something changed outside Respira (a plugin update, a theme edit, a CDN holding a copy) or when a page still looks stale after an edit.\n\nPass post_id to purge one page or post. Omit it for a site-wide purge. The response lists every caching plugin Respira knows, split into `purged` (with the exact function or hook called) and `not_found` (with what was looked for), so a quiet result is never ambiguous.',
5181
+ inputSchema: {
5182
+ type: 'object',
5183
+ properties: {
5184
+ post_id: {
5185
+ type: 'number',
5186
+ description: 'Purge just this page or post. Omit for a site-wide purge.',
5187
+ },
5188
+ scope: {
5189
+ type: 'string',
5190
+ enum: ['post', 'site'],
5191
+ description: 'Force a scope. Defaults to post when post_id is given, site otherwise.',
5192
+ },
5193
+ },
5194
+ required: [],
5195
+ },
5196
+ idempotentHint: true,
5197
+ },
5162
5198
  // Media enhancements
5163
5199
  {
5164
5200
  name: 'wordpress_get_media',
@@ -5913,7 +5949,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
5913
5949
  },
5914
5950
  {
5915
5951
  name: 'woocommerce_list_orders',
5916
- description: 'List WooCommerce orders.',
5952
+ description: 'List WooCommerce orders. Every order carries customer_ip_address and customer_user_agent (the request fingerprint WooCommerce recorded, null when it recorded nothing) plus meta_data as a key/value list, so a card-testing run can be triaged from one call. Meta keys whose name matches a credential pattern (token, secret, key, password, hash, nonce, auth) are withheld; meta_data_withheld_count and meta_data_withheld_keys say which. Meta values over 500 characters are cut and the entry is marked truncated. The fingerprint fields are personal data and stay in this response: Respira telemetry never records tool results.',
5917
5953
  inputSchema: {
5918
5954
  type: 'object',
5919
5955
  properties: {
@@ -5926,7 +5962,7 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
5926
5962
  },
5927
5963
  {
5928
5964
  name: 'woocommerce_get_order',
5929
- description: 'Get detailed information for a single WooCommerce order.',
5965
+ description: 'Get detailed information for a single WooCommerce order, including customer_ip_address, customer_user_agent and meta_data as a key/value list. Meta keys whose name matches a credential pattern (token, secret, key, password, hash, nonce, auth) are withheld and reported in meta_data_withheld_count and meta_data_withheld_keys, so filtered data never looks like missing data.',
5930
5966
  inputSchema: {
5931
5967
  type: 'object',
5932
5968
  properties: {
@@ -7950,6 +7986,8 @@ Allowlist: css, scss, less, json. PHP / JS theme writes are intentionally out of
7950
7986
  return await client.updateOption(args.option, args.value);
7951
7987
  case 'wordpress_delete_option':
7952
7988
  return await client.deleteOption(args.option, args.approval_token);
7989
+ case 'wordpress_purge_cache':
7990
+ return await client.purgeCache(args.post_id !== undefined ? Number(args.post_id) : undefined, args.scope);
7953
7991
  // Media enhancements
7954
7992
  case 'wordpress_get_media':
7955
7993
  return await client.getMedia(args.id);