@wisewandtools/mcp-server 2.0.12 โ†’ 2.0.13

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/README.md CHANGED
@@ -445,10 +445,31 @@ All through natural conversation! ๐ŸŽ‰
445
445
  ### ๐Ÿ” Content Discovery & Automation (6 tools)
446
446
 
447
447
  **Content Discovery:**
448
- - `discover_content` - AI-powered content topic and keyword discovery
448
+ - `discover_content` - AI-powered content topic and keyword discovery with automatic project configuration inheritance
449
449
  - `get_discover_result` - Get discovery results and suggestions
450
450
  - `run_discovery` - Execute content discovery process
451
451
 
452
+ #### discover_content - Parameter Inheritance
453
+
454
+ The `apply_project_brief_config` parameter (required, default: `false`) enables automatic inheritance of all project brief settings:
455
+
456
+ **When `apply_project_brief_config: true`:**
457
+ - **Content features**: FAQ, TOC, images, inline images, summaries, info tables, bullet lists, blockquotes
458
+ - **Internal linking**: WordPress links, indexed pages, custom link lists
459
+ - **Style settings**: Persona, colors, formatting preferences
460
+ - **SEO settings**: Keywords, language, country targeting
461
+
462
+ **Example:**
463
+ ```javascript
464
+ mcp__wisewand__discover_content({
465
+ subject: "French cooking techniques",
466
+ project_id: "989a3838-03d2-4dcc-b288-685c421bc112",
467
+ apply_project_brief_config: true, // Inherits all 25+ project settings
468
+ lang: "fr",
469
+ country: "fr"
470
+ })
471
+ ```
472
+
452
473
  **RSS Automation:**
453
474
  - `create_rss_trigger` - Create automated RSS-to-content trigger
454
475
  - `get_rss_trigger` - Get RSS trigger configuration and status
@@ -727,6 +748,17 @@ MIT License - see [LICENSE](LICENSE) file for details
727
748
 
728
749
  ## Changelog
729
750
 
751
+ ### v2.0.12 (2026-02-11) - Production Ready
752
+ - ๐Ÿ› **Fixed**: `apply_project_brief_config` parameter handling in `discover_content`
753
+ - ๐Ÿงน **Cleaned**: Removed debug logging for production
754
+ - โœ… **Verified**: 100% parameter inheritance across all article types
755
+
756
+ ### v2.0.11 (2026-02-09)
757
+ - ๐Ÿ” **Added**: Comprehensive debugging for parameter troubleshooting
758
+
759
+ ### v2.0.10 (2026-02-09)
760
+ - ๐Ÿ”ง **Fixed**: Made `apply_project_brief_config` a required parameter in schema
761
+
730
762
  ### v1.2.0 (2025-09-30) - COMPLETE API COVERAGE
731
763
  - ๐Ÿš€ **COMPLETE**: Added 26 missing MCP tools - now 43 total (100% API coverage)!
732
764
  - โœจ **NEW CATEGORY**: Connections tools (5) - list, get, create, update, delete
package/dist/index.js CHANGED
@@ -289,21 +289,6 @@ var WisewandAPIClient = class {
289
289
  }, this.config.timeout);
290
290
  try {
291
291
  const bodyJSON = body ? JSON.stringify(body) : void 0;
292
- console.error("=".repeat(80));
293
- console.error("HTTP REQUEST - EXACT PAYLOAD");
294
- console.error("=".repeat(80));
295
- console.error("Method:", method);
296
- console.error("URL:", url);
297
- console.error("Body JSON:", bodyJSON);
298
- console.error(
299
- "Body includes apply_project_brief_config:",
300
- bodyJSON?.includes("apply_project_brief_config")
301
- );
302
- if (bodyJSON && bodyJSON.includes("apply_project_brief_config")) {
303
- const match = bodyJSON.match(/"apply_project_brief_config":\s*(\w+)/);
304
- console.error("apply_project_brief_config value in JSON:", match ? match[1] : "NOT FOUND");
305
- }
306
- console.error("");
307
292
  logger.info("API HTTP REQUEST - EXACT JSON", {
308
293
  method,
309
294
  endpoint,
@@ -519,11 +504,6 @@ var WisewandAPIClient = class {
519
504
  }
520
505
  // ============= Content Discovery =============
521
506
  async discoverArticles(input) {
522
- console.error("=".repeat(80));
523
- console.error("API CLIENT - DISCOVER ARTICLES");
524
- console.error("=".repeat(80));
525
- console.error("Input payload:", JSON.stringify(input, null, 2));
526
- console.error("");
527
507
  return this.request("POST", "/v1/discoverarticles/", input);
528
508
  }
529
509
  async getDiscoverArticle(id) {
@@ -1190,7 +1170,7 @@ var CreateArticleSchema = z2.object({
1190
1170
  subject: z2.string().min(1, "Subject is required"),
1191
1171
  title: z2.string().optional(),
1192
1172
  keep_title: boolField,
1193
- type: z2.enum(["blog", "news", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product", "affiliation-promo-code-product"]).optional().default("blog"),
1173
+ type: z2.enum(["blog", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product"]).optional().default("blog"),
1194
1174
  lang: z2.enum(LANG_ENUM).optional().default("en"),
1195
1175
  country: z2.enum(COUNTRY_ENUM).optional(),
1196
1176
  length: z2.union([z2.number().max(5e3), z2.literal("auto")]).optional().default("auto"),
@@ -1403,7 +1383,7 @@ var ArticleToolHandler = class {
1403
1383
  subject: { type: "string", description: "The main subject or topic of the article", minLength: 1 },
1404
1384
  title: { type: "string", description: "Optional custom title (auto-generated if not provided)" },
1405
1385
  keep_title: { type: "boolean", description: "Whether to keep the provided title or allow AI to modify it" },
1406
- type: { type: "string", enum: ["blog", "news", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product", "affiliation-promo-code-product"], description: "Type of article to generate", default: "blog" },
1386
+ type: { type: "string", enum: ["blog", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product"], description: "Type of article to generate", default: "blog" },
1407
1387
  lang: { type: "string", enum: [...LANG_ENUM], description: "Language for the article", default: "en" },
1408
1388
  country: { type: "string", enum: [...COUNTRY_ENUM], description: "Target country for localization" },
1409
1389
  length: { oneOf: [{ type: "number", maximum: 5e3 }, { type: "string", const: "auto" }], description: 'Article length in words or "auto"', default: "auto" },
@@ -2790,7 +2770,7 @@ var BulkOperationsToolHandler = class {
2790
2770
  title: { type: "string" },
2791
2771
  type: {
2792
2772
  type: "string",
2793
- enum: ["blog", "news", "affiliation-product-review"]
2773
+ enum: ["blog", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product"]
2794
2774
  },
2795
2775
  lang: { type: "string", enum: ["fr", "en"] },
2796
2776
  target_keyword: { type: "string" },
@@ -3465,11 +3445,43 @@ var UtilityToolHandler = class {
3465
3445
 
3466
3446
  // src/handlers/tools/CategoryPagesToolHandler.ts
3467
3447
  import { z as z6 } from "zod";
3448
+ var boolField2 = z6.union([z6.boolean(), z6.string()]).transform(
3449
+ (val) => typeof val === "string" ? val === "true" : val
3450
+ ).optional().default(false);
3451
+ var numField2 = z6.union([z6.number(), z6.string()]).transform(
3452
+ (val) => typeof val === "string" ? parseInt(val, 10) : val
3453
+ ).optional();
3454
+ var LANG_ENUM2 = ["de", "en", "es", "fr", "it", "nl", "pl", "pt", "ro"];
3455
+ var COUNTRY_ENUM2 = ["ad", "ae", "ar", "at", "au", "be", "br", "ca", "ch", "cl", "co", "de", "eg", "es", "fr", "gb", "in", "it", "lu", "ma", "mx", "nl", "pe", "pl", "pt", "ro", "us", "za"];
3468
3456
  var CreateCategoryPageSchema = z6.object({
3457
+ // Basic fields
3469
3458
  name: z6.string().min(1, "Name is required"),
3470
- data: z6.object({
3471
- input: z6.record(z6.any())
3472
- })
3459
+ subject: z6.string().min(1, "Subject is required"),
3460
+ title: z6.string().optional(),
3461
+ category: z6.string().optional(),
3462
+ // Standard fields
3463
+ lang: z6.enum(LANG_ENUM2).optional().default("en"),
3464
+ country: z6.enum(COUNTRY_ENUM2).optional(),
3465
+ project_id: z6.string().uuid().optional(),
3466
+ persona_id: z6.string().uuid().optional(),
3467
+ apply_project_brief_config: boolField2,
3468
+ // SEO features
3469
+ use_faq: boolField2,
3470
+ use_toc: boolField2,
3471
+ use_image: boolField2,
3472
+ use_inlineimages: boolField2,
3473
+ // Additional fields that might be relevant
3474
+ target_keyword: z6.string().optional(),
3475
+ keywords_secondary: z6.string().optional(),
3476
+ additional_information: z6.string().optional(),
3477
+ length: z6.union([z6.number().max(5e3), z6.literal("auto")]).optional().default("auto"),
3478
+ // Publishing options
3479
+ use_publishwordpress: boolField2,
3480
+ publishwordpress_date: z6.string().optional(),
3481
+ publishwordpress_status: z6.enum(["draft", "publish", "future"]).optional(),
3482
+ publishwordpress_category: numField2,
3483
+ publishwordpress_author: numField2,
3484
+ publishwordpress_connection: z6.string().uuid().optional()
3473
3485
  });
3474
3486
  var CategoryPagesToolHandler = class {
3475
3487
  constructor(apiClient, cache, metrics) {
@@ -3499,10 +3511,31 @@ var CategoryPagesToolHandler = class {
3499
3511
  inputSchema: {
3500
3512
  type: "object",
3501
3513
  properties: {
3502
- name: { type: "string", description: "Name of the category page", minLength: 1 },
3503
- data: { type: "object", description: "Category page configuration", properties: { input: { type: "object", description: "Category page input configuration" } }, required: ["input"] }
3514
+ name: { type: "string", description: "Name/identifier of the category page", minLength: 1 },
3515
+ subject: { type: "string", description: "Category subject/topic", minLength: 1 },
3516
+ title: { type: "string", description: "Category page title" },
3517
+ category: { type: "string", description: "Category name/slug" },
3518
+ lang: { type: "string", enum: [...LANG_ENUM2], description: "Language for the category page", default: "en" },
3519
+ country: { type: "string", enum: [...COUNTRY_ENUM2], description: "Target country for localization" },
3520
+ project_id: { type: "string", format: "uuid", description: "Project UUID" },
3521
+ persona_id: { type: "string", format: "uuid", description: "Persona UUID" },
3522
+ apply_project_brief_config: { type: "boolean", description: "Apply project configuration", default: false },
3523
+ use_faq: { type: "boolean", description: "Generate FAQ section", default: false },
3524
+ use_toc: { type: "boolean", description: "Generate table of contents", default: false },
3525
+ use_image: { type: "boolean", description: "Generate featured image", default: false },
3526
+ use_inlineimages: { type: "boolean", description: "Generate inline images", default: false },
3527
+ target_keyword: { type: "string", description: "Target SEO keyword" },
3528
+ keywords_secondary: { type: "string", description: "Secondary keywords (comma-separated)" },
3529
+ additional_information: { type: "string", description: "Additional context or instructions" },
3530
+ length: { description: 'Content length in words or "auto"', oneOf: [{ type: "number", maximum: 5e3 }, { type: "string", enum: ["auto"] }], default: "auto" },
3531
+ use_publishwordpress: { type: "boolean", description: "Publish to WordPress", default: false },
3532
+ publishwordpress_date: { type: "string", description: "Publication date (ISO 8601 or WordPress format)" },
3533
+ publishwordpress_status: { type: "string", enum: ["draft", "publish", "future"], description: "WordPress post status" },
3534
+ publishwordpress_category: { type: "number", description: "WordPress category ID" },
3535
+ publishwordpress_author: { type: "number", description: "WordPress author ID" },
3536
+ publishwordpress_connection: { type: "string", format: "uuid", description: "WordPress connection UUID" }
3504
3537
  },
3505
- required: ["name", "data"]
3538
+ required: ["name", "subject"]
3506
3539
  },
3507
3540
  handler: /* @__PURE__ */ __name(async (args) => {
3508
3541
  try {
@@ -3710,11 +3743,46 @@ var CategoryPagesToolHandler = class {
3710
3743
 
3711
3744
  // src/handlers/tools/ProductPagesToolHandler.ts
3712
3745
  import { z as z7 } from "zod";
3746
+ var boolField3 = z7.union([z7.boolean(), z7.string()]).transform(
3747
+ (val) => typeof val === "string" ? val === "true" : val
3748
+ ).optional().default(false);
3749
+ var numField3 = z7.union([z7.number(), z7.string()]).transform(
3750
+ (val) => typeof val === "string" ? parseInt(val, 10) : val
3751
+ ).optional();
3752
+ var LANG_ENUM3 = ["de", "en", "es", "fr", "it", "nl", "pl", "pt", "ro"];
3753
+ var COUNTRY_ENUM3 = ["ad", "ae", "ar", "at", "au", "be", "br", "ca", "ch", "cl", "co", "de", "eg", "es", "fr", "gb", "in", "it", "lu", "ma", "mx", "nl", "pe", "pl", "pt", "ro", "us", "za"];
3713
3754
  var CreateProductPageSchema = z7.object({
3755
+ // Basic fields
3714
3756
  name: z7.string().min(1, "Name is required"),
3715
- data: z7.object({
3716
- input: z7.record(z7.any())
3717
- })
3757
+ subject: z7.string().min(1, "Subject is required"),
3758
+ title: z7.string().optional(),
3759
+ product_name: z7.string().optional(),
3760
+ // Product-specific fields
3761
+ product_url: z7.string().url().optional(),
3762
+ product_description: z7.string().optional(),
3763
+ // Standard fields
3764
+ lang: z7.enum(LANG_ENUM3).optional().default("en"),
3765
+ country: z7.enum(COUNTRY_ENUM3).optional(),
3766
+ project_id: z7.string().uuid().optional(),
3767
+ persona_id: z7.string().uuid().optional(),
3768
+ apply_project_brief_config: boolField3,
3769
+ // SEO features
3770
+ use_faq: boolField3,
3771
+ use_toc: boolField3,
3772
+ use_image: boolField3,
3773
+ use_inlineimages: boolField3,
3774
+ // Additional fields that might be relevant
3775
+ target_keyword: z7.string().optional(),
3776
+ keywords_secondary: z7.string().optional(),
3777
+ additional_information: z7.string().optional(),
3778
+ length: z7.union([z7.number().max(5e3), z7.literal("auto")]).optional().default("auto"),
3779
+ // Publishing options
3780
+ use_publishwordpress: boolField3,
3781
+ publishwordpress_date: z7.string().optional(),
3782
+ publishwordpress_status: z7.enum(["draft", "publish", "future"]).optional(),
3783
+ publishwordpress_category: numField3,
3784
+ publishwordpress_author: numField3,
3785
+ publishwordpress_connection: z7.string().uuid().optional()
3718
3786
  });
3719
3787
  var ProductPagesToolHandler = class {
3720
3788
  constructor(apiClient, cache, metrics) {
@@ -3744,10 +3812,33 @@ var ProductPagesToolHandler = class {
3744
3812
  inputSchema: {
3745
3813
  type: "object",
3746
3814
  properties: {
3747
- name: { type: "string", description: "Name of the product page", minLength: 1 },
3748
- data: { type: "object", description: "Product page configuration", properties: { input: { type: "object", description: "Product page input configuration" } }, required: ["input"] }
3815
+ name: { type: "string", description: "Name/identifier of the product page", minLength: 1 },
3816
+ subject: { type: "string", description: "Product subject/topic", minLength: 1 },
3817
+ title: { type: "string", description: "Product page title" },
3818
+ product_name: { type: "string", description: "Name of the product" },
3819
+ product_url: { type: "string", format: "uri", description: "URL of the product" },
3820
+ product_description: { type: "string", description: "Product description" },
3821
+ lang: { type: "string", enum: [...LANG_ENUM3], description: "Language for the product page", default: "en" },
3822
+ country: { type: "string", enum: [...COUNTRY_ENUM3], description: "Target country for localization" },
3823
+ project_id: { type: "string", format: "uuid", description: "Project UUID" },
3824
+ persona_id: { type: "string", format: "uuid", description: "Persona UUID" },
3825
+ apply_project_brief_config: { type: "boolean", description: "Apply project configuration", default: false },
3826
+ use_faq: { type: "boolean", description: "Generate FAQ section", default: false },
3827
+ use_toc: { type: "boolean", description: "Generate table of contents", default: false },
3828
+ use_image: { type: "boolean", description: "Generate featured image", default: false },
3829
+ use_inlineimages: { type: "boolean", description: "Generate inline images", default: false },
3830
+ target_keyword: { type: "string", description: "Target SEO keyword" },
3831
+ keywords_secondary: { type: "string", description: "Secondary keywords (comma-separated)" },
3832
+ additional_information: { type: "string", description: "Additional context or instructions" },
3833
+ length: { description: 'Content length in words or "auto"', oneOf: [{ type: "number", maximum: 5e3 }, { type: "string", enum: ["auto"] }], default: "auto" },
3834
+ use_publishwordpress: { type: "boolean", description: "Publish to WordPress", default: false },
3835
+ publishwordpress_date: { type: "string", description: "Publication date (ISO 8601 or WordPress format)" },
3836
+ publishwordpress_status: { type: "string", enum: ["draft", "publish", "future"], description: "WordPress post status" },
3837
+ publishwordpress_category: { type: "number", description: "WordPress category ID" },
3838
+ publishwordpress_author: { type: "number", description: "WordPress author ID" },
3839
+ publishwordpress_connection: { type: "string", format: "uuid", description: "WordPress connection UUID" }
3749
3840
  },
3750
- required: ["name", "data"]
3841
+ required: ["name", "subject"]
3751
3842
  },
3752
3843
  handler: /* @__PURE__ */ __name(async (args) => {
3753
3844
  try {
@@ -3936,7 +4027,7 @@ var ProductPagesToolHandler = class {
3936
4027
 
3937
4028
  // src/handlers/tools/DiscoverToolHandler.ts
3938
4029
  import { z as z8 } from "zod";
3939
- var boolField2 = z8.union([z8.boolean(), z8.string()]).transform(
4030
+ var boolField4 = z8.union([z8.boolean(), z8.string()]).transform(
3940
4031
  (val) => typeof val === "string" ? val === "true" : val
3941
4032
  ).optional().default(false);
3942
4033
  var DiscoverContentSchema = z8.object({
@@ -3945,7 +4036,7 @@ var DiscoverContentSchema = z8.object({
3945
4036
  keywords_secondary: z8.string().optional(),
3946
4037
  project_id: z8.string().uuid().optional(),
3947
4038
  persona_id: z8.string().uuid().optional(),
3948
- apply_project_brief_config: boolField2,
4039
+ apply_project_brief_config: boolField4,
3949
4040
  lang: z8.enum(["fr", "en"]).optional(),
3950
4041
  country: z8.enum(["fr", "be", "ch", "ca", "us", "gb"]).optional(),
3951
4042
  length: z8.union([z8.number().max(2e3), z8.literal("auto")]).optional(),
@@ -4102,28 +4193,12 @@ var DiscoverToolHandler = class {
4102
4193
  },
4103
4194
  handler: /* @__PURE__ */ __name(async (args) => {
4104
4195
  try {
4105
- console.error("=".repeat(80));
4106
- console.error("MCP DISCOVER_CONTENT - STAGE 1: RAW INPUT");
4107
- console.error("=".repeat(80));
4108
- console.error("Raw args:", JSON.stringify(args, null, 2));
4109
- console.error("apply_project_brief_config present:", "apply_project_brief_config" in args);
4110
- console.error("apply_project_brief_config value:", args.apply_project_brief_config);
4111
- console.error("apply_project_brief_config type:", typeof args.apply_project_brief_config);
4112
- console.error("");
4113
4196
  logger.info("discover_content RAW INPUT", {
4114
4197
  raw_args: args,
4115
4198
  apply_project_brief_config_raw: args.apply_project_brief_config,
4116
4199
  apply_project_brief_config_raw_type: typeof args.apply_project_brief_config
4117
4200
  });
4118
4201
  const validated = DiscoverContentSchema.parse(args);
4119
- console.error("=".repeat(80));
4120
- console.error("MCP DISCOVER_CONTENT - STAGE 2: AFTER VALIDATION");
4121
- console.error("=".repeat(80));
4122
- console.error("Validated:", JSON.stringify(validated, null, 2));
4123
- console.error("apply_project_brief_config present:", "apply_project_brief_config" in validated);
4124
- console.error("apply_project_brief_config value:", validated.apply_project_brief_config);
4125
- console.error("apply_project_brief_config type:", typeof validated.apply_project_brief_config);
4126
- console.error("");
4127
4202
  logger.info("discover_content VALIDATED (after boolField transform)", {
4128
4203
  apply_project_brief_config: validated.apply_project_brief_config,
4129
4204
  apply_project_brief_config_type: typeof validated.apply_project_brief_config,
@@ -4136,13 +4211,6 @@ var DiscoverToolHandler = class {
4136
4211
  cleanedInput[key] = value;
4137
4212
  }
4138
4213
  }
4139
- console.error("=".repeat(80));
4140
- console.error("MCP DISCOVER_CONTENT - STAGE 3: CLEANED INPUT");
4141
- console.error("=".repeat(80));
4142
- console.error("Cleaned input:", JSON.stringify(cleanedInput, null, 2));
4143
- console.error("apply_project_brief_config present:", "apply_project_brief_config" in cleanedInput);
4144
- console.error("apply_project_brief_config value:", cleanedInput.apply_project_brief_config);
4145
- console.error("");
4146
4214
  logger.info("discover_content CLEANED INPUT (undefined removed)", {
4147
4215
  before_cleaning_keys: Object.keys(validated).length,
4148
4216
  after_cleaning_keys: Object.keys(cleanedInput).length,
@@ -4150,11 +4218,6 @@ var DiscoverToolHandler = class {
4150
4218
  apply_project_brief_config_value: cleanedInput.apply_project_brief_config
4151
4219
  });
4152
4220
  const discovery = await this.apiClient.discoverArticles(cleanedInput);
4153
- console.error("=".repeat(80));
4154
- console.error("MCP DISCOVER_CONTENT - STAGE 4: API RESPONSE");
4155
- console.error("=".repeat(80));
4156
- console.error("Discovery ID:", discovery.id);
4157
- console.error("");
4158
4221
  await this.cache.set(`discover:${discovery.id}`, discovery, 300);
4159
4222
  this.metrics.recordAPICall("discover_content", "success");
4160
4223
  return {
@@ -4164,15 +4227,6 @@ var DiscoverToolHandler = class {
4164
4227
  success: true,
4165
4228
  discovery_id: discovery.id,
4166
4229
  message: "Content discovery created successfully",
4167
- // DIAGNOSTIC INFORMATION - shows what MCP received and validated
4168
- debug_info: {
4169
- raw_input_has_param: "apply_project_brief_config" in args,
4170
- raw_input_value: args.apply_project_brief_config,
4171
- raw_input_type: typeof args.apply_project_brief_config,
4172
- validated_has_param: "apply_project_brief_config" in validated,
4173
- validated_value: validated.apply_project_brief_config,
4174
- validated_type: typeof validated.apply_project_brief_config
4175
- },
4176
4230
  next_steps: [
4177
4231
  `Use 'run_discovery' with id: ${discovery.id}`,
4178
4232
  `Use 'get_discover_result' with id: ${discovery.id}`
@@ -5072,7 +5126,7 @@ var ResourceHandler = class {
5072
5126
  },
5073
5127
  type: {
5074
5128
  type: "string",
5075
- enum: ["blog", "news", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product", "affiliation-promo-code-product"],
5129
+ enum: ["blog", "affiliation-product-review", "affiliation-compare-products", "affiliation-top-product"],
5076
5130
  default: "blog"
5077
5131
  },
5078
5132
  lang: {
@@ -5921,19 +5975,19 @@ Here are 5 powerful workflows that Wisewand users love:
5921
5975
 
5922
5976
  ### \u{1F4E1} Workflow 4: RSS-Powered Auto-Publishing
5923
5977
 
5924
- **Goal:** Curate industry news automatically
5978
+ **Goal:** Curate industry content automatically
5925
5979
 
5926
5980
  \`\`\`
5927
- 1. create_rss_connection with industry news feeds
5981
+ 1. create_rss_connection with industry feeds
5928
5982
  2. create_rss_article_from_feed:
5929
5983
  - Monitors RSS feeds
5930
5984
  - Generates original commentary/analysis
5931
5985
  - Adds your expert perspective
5932
5986
  3. Set up recurring jobs (via Jobs tools)
5933
- 4. Auto-publish daily roundups to WordPress
5987
+ 4. Auto-publish blog posts to WordPress
5934
5988
  \`\`\`
5935
5989
 
5936
- **Perfect for:** News sites, curated newsletters, trend analysis blogs
5990
+ **Perfect for:** Content curation, industry newsletters, trend analysis blogs
5937
5991
 
5938
5992
  ---
5939
5993
 
@@ -6039,7 +6093,7 @@ Use \`get_transactions\` to track:
6039
6093
 
6040
6094
  **11. Smart Image Usage**
6041
6095
  - AI images cost credits
6042
- - Skip images for news/updates: \`use_image: false\`
6096
+ - Skip images for quick updates: \`use_image: false\`
6043
6097
  - Use images for evergreen content: \`use_image: true\`
6044
6098
  - Best ratios: 16:9 (blog), 1:1 (social), 9:16 (mobile)
6045
6099