@wisewandtools/mcp-server 2.0.15 → 2.0.17
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 +21 -0
- package/dist/index.js +9 -28
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -630,6 +630,27 @@ src/
|
|
|
630
630
|
- ✅ Docker security best practices
|
|
631
631
|
- ✅ Non-root container execution
|
|
632
632
|
|
|
633
|
+
## Known Limitations
|
|
634
|
+
|
|
635
|
+
### API Response Limitations
|
|
636
|
+
|
|
637
|
+
#### Minimal GET Responses
|
|
638
|
+
The `get_article`, `get_category_page`, and `get_product_page` functions return minimal data (typically just ID and status) due to the Wisewand API design. To retrieve full content including the generated HTML/markdown:
|
|
639
|
+
|
|
640
|
+
- **For articles**: Use `get_article_output` instead of `get_article`
|
|
641
|
+
- **For category pages**: Use `get_category_page_output` instead of `get_category_page`
|
|
642
|
+
- **For product pages**: Use `get_product_page_output` instead of `get_product_page`
|
|
643
|
+
|
|
644
|
+
#### RSS Feed Integration
|
|
645
|
+
The RSS feed creation feature (`create_rss_feed`) currently has upstream integration issues with RSS.app. This is a known limitation of the Wisewand API backend. The MCP server correctly forwards requests, but you may encounter 400 Bad Request errors from the RSS.app service.
|
|
646
|
+
|
|
647
|
+
**Workaround**: Use direct RSS feed URLs or alternative RSS feed generation services until this is resolved.
|
|
648
|
+
|
|
649
|
+
#### Category/Product Cost Estimation
|
|
650
|
+
The `estimate_category_page_cost` and `estimate_product_page_cost` endpoints may return validation errors as these features are not yet fully available in the Wisewand API.
|
|
651
|
+
|
|
652
|
+
**Workaround**: Use `estimate_article_cost` as a proxy to estimate costs for similar content, as the underlying generation mechanisms are similar.
|
|
653
|
+
|
|
633
654
|
## Troubleshooting
|
|
634
655
|
|
|
635
656
|
### Claude Desktop Integration Issues
|
package/dist/index.js
CHANGED
|
@@ -370,10 +370,10 @@ var WisewandAPIClient = class {
|
|
|
370
370
|
return this.request("POST", "/v1/articles/cost", input);
|
|
371
371
|
}
|
|
372
372
|
async createBulkArticles(articles) {
|
|
373
|
-
return this.request("POST", "/v1/articles/bulk",
|
|
373
|
+
return this.request("POST", "/v1/articles/bulk", articles);
|
|
374
374
|
}
|
|
375
375
|
async calculateBulkCost(articles) {
|
|
376
|
-
return this.request("POST", "/v1/articles/bulk/cost",
|
|
376
|
+
return this.request("POST", "/v1/articles/bulk/cost", articles);
|
|
377
377
|
}
|
|
378
378
|
// ============= Project Operations =============
|
|
379
379
|
async createProject(input) {
|
|
@@ -1764,7 +1764,7 @@ var ArticleToolHandler = class {
|
|
|
1764
1764
|
try {
|
|
1765
1765
|
const cost = await this.apiClient.calculateArticleCost(args);
|
|
1766
1766
|
this.metrics.recordAPICall("estimate_cost", "success");
|
|
1767
|
-
return { content: [{ type: "text", text: JSON.stringify({ success: true, cost_estimate: cost, message: `Estimated cost: ${cost.credits} credits ($${cost.
|
|
1767
|
+
return { content: [{ type: "text", text: JSON.stringify({ success: true, cost_estimate: cost, message: `Estimated cost: ${cost.credits} credits ($${cost.cost})` }, null, 2) }] };
|
|
1768
1768
|
} catch (error) {
|
|
1769
1769
|
logger.error("Failed to estimate cost", { error: error.message });
|
|
1770
1770
|
this.metrics.recordAPICall("estimate_cost", "error");
|
|
@@ -3428,7 +3428,7 @@ var CreateCategoryPageSchema = z6.object({
|
|
|
3428
3428
|
title: z6.string().optional(),
|
|
3429
3429
|
category: z6.string().optional(),
|
|
3430
3430
|
// Standard fields
|
|
3431
|
-
lang: z6.enum(LANG_ENUM2).optional()
|
|
3431
|
+
lang: z6.enum(LANG_ENUM2).optional(),
|
|
3432
3432
|
country: z6.enum(COUNTRY_ENUM2).optional(),
|
|
3433
3433
|
project_id: z6.string().uuid().optional(),
|
|
3434
3434
|
persona_id: z6.string().uuid().optional(),
|
|
@@ -3483,7 +3483,7 @@ var CategoryPagesToolHandler = class {
|
|
|
3483
3483
|
subject: { type: "string", description: "Category subject/topic", minLength: 1 },
|
|
3484
3484
|
title: { type: "string", description: "Category page title" },
|
|
3485
3485
|
category: { type: "string", description: "Category name/slug" },
|
|
3486
|
-
lang: { type: "string", enum: [...LANG_ENUM2], description: "Language for the category page"
|
|
3486
|
+
lang: { type: "string", enum: [...LANG_ENUM2], description: "Language for the category page" },
|
|
3487
3487
|
country: { type: "string", enum: [...COUNTRY_ENUM2], description: "Target country for localization" },
|
|
3488
3488
|
project_id: { type: "string", format: "uuid", description: "Project UUID" },
|
|
3489
3489
|
persona_id: { type: "string", format: "uuid", description: "Persona UUID" },
|
|
@@ -3512,7 +3512,7 @@ var CategoryPagesToolHandler = class {
|
|
|
3512
3512
|
await this.cache.set(`category_page:${categoryPage.id}`, categoryPage, 300);
|
|
3513
3513
|
this.metrics.recordAPICall("create_category_page", "success");
|
|
3514
3514
|
return {
|
|
3515
|
-
content: [{ type: "text", text: JSON.stringify({ success: true, category_page_id: categoryPage.id, name: categoryPage.name, message: `Category page "${categoryPage.name}" created successfully`, next_steps: [`Use 'generate_category_page' with id: ${categoryPage.id}`, `Use 'get_category_page' with id: ${categoryPage.id}`] }, null, 2) }]
|
|
3515
|
+
content: [{ type: "text", text: JSON.stringify({ success: true, category_page_id: categoryPage.id, name: categoryPage.name || validated.name, message: `Category page "${categoryPage.name || validated.name}" created successfully`, next_steps: [`Use 'generate_category_page' with id: ${categoryPage.id}`, `Use 'get_category_page' with id: ${categoryPage.id}`] }, null, 2) }]
|
|
3516
3516
|
};
|
|
3517
3517
|
} catch (error) {
|
|
3518
3518
|
logger.error("Failed to create category page", { error: error.message });
|
|
@@ -3729,7 +3729,7 @@ var CreateProductPageSchema = z7.object({
|
|
|
3729
3729
|
product_url: z7.string().url().optional(),
|
|
3730
3730
|
product_description: z7.string().optional(),
|
|
3731
3731
|
// Standard fields
|
|
3732
|
-
lang: z7.enum(LANG_ENUM3).optional()
|
|
3732
|
+
lang: z7.enum(LANG_ENUM3).optional(),
|
|
3733
3733
|
country: z7.enum(COUNTRY_ENUM3).optional(),
|
|
3734
3734
|
project_id: z7.string().uuid().optional(),
|
|
3735
3735
|
persona_id: z7.string().uuid().optional(),
|
|
@@ -3786,7 +3786,7 @@ var ProductPagesToolHandler = class {
|
|
|
3786
3786
|
product_name: { type: "string", description: "Name of the product" },
|
|
3787
3787
|
product_url: { type: "string", format: "uri", description: "URL of the product" },
|
|
3788
3788
|
product_description: { type: "string", description: "Product description" },
|
|
3789
|
-
lang: { type: "string", enum: [...LANG_ENUM3], description: "Language for the product page"
|
|
3789
|
+
lang: { type: "string", enum: [...LANG_ENUM3], description: "Language for the product page" },
|
|
3790
3790
|
country: { type: "string", enum: [...COUNTRY_ENUM3], description: "Target country for localization" },
|
|
3791
3791
|
project_id: { type: "string", format: "uuid", description: "Project UUID" },
|
|
3792
3792
|
persona_id: { type: "string", format: "uuid", description: "Persona UUID" },
|
|
@@ -3814,7 +3814,7 @@ var ProductPagesToolHandler = class {
|
|
|
3814
3814
|
const productPage = await this.apiClient.createProductPage(validated);
|
|
3815
3815
|
await this.cache.set(`product_page:${productPage.id}`, productPage, 300);
|
|
3816
3816
|
this.metrics.recordAPICall("create_product_page", "success");
|
|
3817
|
-
return { content: [{ type: "text", text: JSON.stringify({ success: true, product_page_id: productPage.id, name: productPage.name, message: `Product page "${productPage.name}" created successfully`, next_steps: [`Use 'generate_product_page' with id: ${productPage.id}`, `Use 'get_product_page' with id: ${productPage.id}`] }, null, 2) }] };
|
|
3817
|
+
return { content: [{ type: "text", text: JSON.stringify({ success: true, product_page_id: productPage.id, name: productPage.name || validated.name, message: `Product page "${productPage.name || validated.name}" created successfully`, next_steps: [`Use 'generate_product_page' with id: ${productPage.id}`, `Use 'get_product_page' with id: ${productPage.id}`] }, null, 2) }] };
|
|
3818
3818
|
} catch (error) {
|
|
3819
3819
|
logger.error("Failed to create product page", { error: error.message });
|
|
3820
3820
|
this.metrics.recordAPICall("create_product_page", "error");
|
|
@@ -5767,25 +5767,6 @@ Here are 5 powerful workflows that Wisewand users love:
|
|
|
5767
5767
|
|
|
5768
5768
|
---
|
|
5769
5769
|
|
|
5770
|
-
### \u{1F504} Workflow 5: Update Old Content
|
|
5771
|
-
|
|
5772
|
-
**Goal:** Refresh 50 old articles with new info
|
|
5773
|
-
|
|
5774
|
-
\`\`\`
|
|
5775
|
-
1. List existing WordPress posts via get_posts
|
|
5776
|
-
2. Use update_post to refresh content:
|
|
5777
|
-
- Add new statistics/data
|
|
5778
|
-
- Update outdated sections
|
|
5779
|
-
- Improve SEO based on current trends
|
|
5780
|
-
3. Batch process with create_bulk_update
|
|
5781
|
-
4. Monitor via get_job_status
|
|
5782
|
-
5. Re-publish updated articles
|
|
5783
|
-
\`\`\`
|
|
5784
|
-
|
|
5785
|
-
**Impact:** Revive organic traffic from existing content
|
|
5786
|
-
|
|
5787
|
-
---
|
|
5788
|
-
|
|
5789
5770
|
**Which workflow matches your use case?** Each can be customized further with personas, custom images, and advanced SEO settings.
|
|
5790
5771
|
|
|
5791
5772
|
Want to learn best practices next?`
|