@adsim/wordpress-mcp-server 3.1.0 → 4.4.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.
- package/README.md +543 -176
- package/dxt/manifest.json +86 -9
- package/index.js +3156 -36
- package/package.json +1 -1
- package/src/confirmationToken.js +64 -0
- package/src/contentAnalyzer.js +476 -0
- package/src/htmlParser.js +80 -0
- package/src/linkUtils.js +158 -0
- package/src/utils/contentCompressor.js +116 -0
- package/src/woocommerceClient.js +88 -0
- package/tests/unit/contentAnalyzer.test.js +397 -0
- package/tests/unit/tools/analyzeEeatSignals.test.js +192 -0
- package/tests/unit/tools/approval.test.js +251 -0
- package/tests/unit/tools/auditCanonicals.test.js +149 -0
- package/tests/unit/tools/auditHeadingStructure.test.js +150 -0
- package/tests/unit/tools/auditMediaSeo.test.js +123 -0
- package/tests/unit/tools/auditOutboundLinks.test.js +175 -0
- package/tests/unit/tools/auditTaxonomies.test.js +173 -0
- package/tests/unit/tools/contentCompressor.test.js +320 -0
- package/tests/unit/tools/contentIntelligence.test.js +2168 -0
- package/tests/unit/tools/destructive.test.js +246 -0
- package/tests/unit/tools/findBrokenInternalLinks.test.js +222 -0
- package/tests/unit/tools/findKeywordCannibalization.test.js +183 -0
- package/tests/unit/tools/findOrphanPages.test.js +145 -0
- package/tests/unit/tools/findThinContent.test.js +145 -0
- package/tests/unit/tools/internalLinks.test.js +283 -0
- package/tests/unit/tools/perTargetControls.test.js +228 -0
- package/tests/unit/tools/site.test.js +6 -1
- package/tests/unit/tools/woocommerce.test.js +344 -0
- package/tests/unit/tools/woocommerceIntelligence.test.js +341 -0
- package/tests/unit/tools/woocommerceWrite.test.js +323 -0
package/dxt/manifest.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "wordpress-mcp-server",
|
|
4
4
|
"display_name": "WordPress MCP Server",
|
|
5
|
-
"version": "
|
|
6
|
-
"description": "Manage your WordPress site from Claude Desktop — posts, pages, media, SEO, plugins, themes, revisions, and more.
|
|
7
|
-
"long_description": "A full-featured MCP server for WordPress REST API integration. Manage posts, pages, media, categories, tags, comments, users, SEO metadata, plugins, themes, and
|
|
5
|
+
"version": "4.4.0",
|
|
6
|
+
"description": "Manage your WordPress site from Claude Desktop — posts, pages, media, SEO audits, content intelligence, plugins, themes, revisions, WooCommerce, content compression, and more. 79 tools, no WordPress plugin required.",
|
|
7
|
+
"long_description": "A full-featured MCP server for WordPress REST API integration. Manage posts, pages, media, categories, tags, comments, users, SEO metadata, plugins, themes, revisions, and WooCommerce products/orders/customers through 79 tools — all from Claude Desktop.\n\nNo WordPress plugin required. Uses the built-in WordPress REST API with Application Passwords for secure authentication.\n\nFeatures:\n- Content management: create, read, update, delete posts and pages\n- Content compression: field filtering, content_format (html/text/links_only), list modes (full/summary/ids_only) for LLM context optimization\n- Content intelligence: readability scoring, duplicate detection, entity extraction, publishing velocity, revision diff, content structure analysis, FAQ extraction, CTA detection, link mapping, anchor text audit, schema markup validation\n- Editorial approval workflow: submit for review, approve, reject\n- Media library: list, get details, upload from URL\n- Taxonomy: categories, tags, custom post types\n- SEO: auto-detects Yoast, RankMath, SEOPress, or All in One SEO\n- SEO audit suite: media alt text, orphan pages, heading structure, thin content, canonicals, E-E-A-T signals, broken links, keyword cannibalization, taxonomy bloat, outbound links\n- Plugins & themes: list, activate, deactivate\n- Revisions: list, view, restore, delete\n- WooCommerce read: products, orders, customers, price guardrail\n- WooCommerce intelligence: inventory alerts, order analytics, product SEO audit, product link suggestions\n- WooCommerce write: update products (with price guardrail), stock management, order status transitions\n- Enterprise controls: read-only mode, draft-only, disable-delete, require-approval (global and per-target)\n- Multi-site: target multiple WordPress installations with per-target controls",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "AdSim",
|
|
10
10
|
"email": "georges@adsim.be",
|
|
@@ -27,17 +27,22 @@
|
|
|
27
27
|
"env": {
|
|
28
28
|
"WP_API_URL": "${user_config.wp_api_url}",
|
|
29
29
|
"WP_API_USERNAME": "${user_config.wp_api_username}",
|
|
30
|
-
"WP_API_PASSWORD": "${user_config.wp_api_password}"
|
|
30
|
+
"WP_API_PASSWORD": "${user_config.wp_api_password}",
|
|
31
|
+
"WC_CONSUMER_KEY": "${user_config.wc_consumer_key}",
|
|
32
|
+
"WC_CONSUMER_SECRET": "${user_config.wc_consumer_secret}"
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
},
|
|
34
36
|
"tools": [
|
|
35
|
-
{ "name": "wp_list_posts", "description": "List posts with filtering and search" },
|
|
36
|
-
{ "name": "wp_get_post", "description": "Get post by ID
|
|
37
|
+
{ "name": "wp_list_posts", "description": "List posts with filtering and search. Use mode to reduce context size" },
|
|
38
|
+
{ "name": "wp_get_post", "description": "Get post by ID. Use fields/content_format to reduce context size for large posts" },
|
|
37
39
|
{ "name": "wp_create_post", "description": "Create a post (default: draft)" },
|
|
38
40
|
{ "name": "wp_update_post", "description": "Update a post" },
|
|
39
|
-
{ "name": "wp_delete_post", "description": "Delete a post (trash or permanent)" },
|
|
41
|
+
{ "name": "wp_delete_post", "description": "Delete a post (trash or permanent). Supports two-step confirmation via WP_CONFIRM_DESTRUCTIVE" },
|
|
40
42
|
{ "name": "wp_search", "description": "Full-text search across all content" },
|
|
43
|
+
{ "name": "wp_submit_for_review", "description": "Submit a draft post for editorial review (draft → pending)" },
|
|
44
|
+
{ "name": "wp_approve_post", "description": "Approve a pending post for publication (pending → publish)" },
|
|
45
|
+
{ "name": "wp_reject_post", "description": "Reject a pending post back to draft with a reason" },
|
|
41
46
|
{ "name": "wp_list_pages", "description": "List pages with hierarchy" },
|
|
42
47
|
{ "name": "wp_get_page", "description": "Get page by ID with content and template" },
|
|
43
48
|
{ "name": "wp_create_page", "description": "Create a page (default: draft)" },
|
|
@@ -66,7 +71,48 @@
|
|
|
66
71
|
{ "name": "wp_list_revisions", "description": "List revisions of a post or page" },
|
|
67
72
|
{ "name": "wp_get_revision", "description": "Get a specific revision with full content" },
|
|
68
73
|
{ "name": "wp_restore_revision", "description": "Restore a post or page to a previous revision" },
|
|
69
|
-
{ "name": "wp_delete_revision", "description": "Permanently delete a revision" }
|
|
74
|
+
{ "name": "wp_delete_revision", "description": "Permanently delete a revision. Supports two-step confirmation via WP_CONFIRM_DESTRUCTIVE" },
|
|
75
|
+
{ "name": "wp_analyze_links", "description": "Analyze internal and external links in a post with broken link checking" },
|
|
76
|
+
{ "name": "wp_suggest_internal_links", "description": "Suggest internal links based on keyword relevance, categories, and freshness" },
|
|
77
|
+
{ "name": "wc_list_products", "description": "List WooCommerce products with filtering and search" },
|
|
78
|
+
{ "name": "wc_get_product", "description": "Get a WooCommerce product by ID with full details" },
|
|
79
|
+
{ "name": "wc_list_orders", "description": "List WooCommerce orders with filtering" },
|
|
80
|
+
{ "name": "wc_get_order", "description": "Get a WooCommerce order by ID with full details" },
|
|
81
|
+
{ "name": "wc_list_customers", "description": "List WooCommerce customers with search and filtering" },
|
|
82
|
+
{ "name": "wc_price_guardrail", "description": "Analyze a product price change safety without modifying anything" },
|
|
83
|
+
{ "name": "wc_inventory_alert", "description": "Identify low-stock and out-of-stock products below a threshold, sorted by urgency" },
|
|
84
|
+
{ "name": "wc_order_intelligence", "description": "Analyze customer purchase history: lifetime value, average order, favourite products, order frequency" },
|
|
85
|
+
{ "name": "wc_seo_product_audit", "description": "Audit WooCommerce product listings for SEO issues (missing descriptions, images, alt text, generic slugs)" },
|
|
86
|
+
{ "name": "wc_suggest_product_links", "description": "Suggest WooCommerce products to link from a WordPress blog post based on SEO keyword relevance" },
|
|
87
|
+
{ "name": "wc_update_product", "description": "Update a WooCommerce product with automatic price guardrail (>20% changes require confirmation)" },
|
|
88
|
+
{ "name": "wc_update_stock", "description": "Update stock quantity of a WooCommerce product or variation" },
|
|
89
|
+
{ "name": "wc_update_order_status", "description": "Update WooCommerce order status with transition validation" },
|
|
90
|
+
{ "name": "wp_audit_media_seo", "description": "Audit media library images for SEO issues (missing alt text, filename-as-alt, alt too short)" },
|
|
91
|
+
{ "name": "wp_find_orphan_pages", "description": "Find published pages with no internal links pointing to them from other pages" },
|
|
92
|
+
{ "name": "wp_audit_heading_structure", "description": "Audit heading hierarchy (H1-H6) for SEO issues: H1 in content, level skips, empty headings" },
|
|
93
|
+
{ "name": "wp_find_thin_content", "description": "Find thin/low-quality published posts: too short, outdated, uncategorized" },
|
|
94
|
+
{ "name": "wp_audit_canonicals", "description": "Audit canonical URLs for SEO issues: missing, HTTP on HTTPS site, staging URLs, wrong domain" },
|
|
95
|
+
{ "name": "wp_analyze_eeat_signals", "description": "Analyze E-E-A-T signals for posts. Scores 0-100 with actionable priority fixes" },
|
|
96
|
+
{ "name": "wp_find_broken_internal_links", "description": "Scan posts and verify internal links via HEAD requests. Detects 404s, redirects, timeouts" },
|
|
97
|
+
{ "name": "wp_find_keyword_cannibalization", "description": "Detect articles targeting the same focus keywords, creating internal competition" },
|
|
98
|
+
{ "name": "wp_audit_taxonomies", "description": "Audit categories and tags for taxonomy bloat: empty tags, single-post tags, near-duplicate terms" },
|
|
99
|
+
{ "name": "wp_audit_outbound_links", "description": "Analyze outbound links in posts. Detects missing sources, excessive links, identifies most-cited domains" },
|
|
100
|
+
{ "name": "wp_get_content_brief", "description": "Editorial brief aggregator: SEO + structure + links in 1 call" },
|
|
101
|
+
{ "name": "wp_extract_post_outline", "description": "H1-H6 outline extraction with category-level pattern analysis" },
|
|
102
|
+
{ "name": "wp_audit_readability", "description": "Bulk Flesch-Kincaid FR scoring with transition word and passive voice analysis" },
|
|
103
|
+
{ "name": "wp_audit_update_frequency", "description": "Outdated content detection cross-referenced with SEO scores" },
|
|
104
|
+
{ "name": "wp_build_link_map", "description": "Internal link matrix with simplified PageRank scoring (0-100)" },
|
|
105
|
+
{ "name": "wp_audit_anchor_texts", "description": "Anchor text diversity audit: generic, over-optimized, image link detection" },
|
|
106
|
+
{ "name": "wp_audit_schema_markup", "description": "JSON-LD schema.org detection and validation (Article, FAQ, HowTo, LocalBusiness)" },
|
|
107
|
+
{ "name": "wp_audit_content_structure", "description": "Editorial structure scoring (0-100): intro, conclusion, FAQ, TOC, lists, images" },
|
|
108
|
+
{ "name": "wp_find_duplicate_content", "description": "TF-IDF cosine similarity for near-duplicate detection with union-find clustering" },
|
|
109
|
+
{ "name": "wp_find_content_gaps", "description": "Taxonomy under-representation analysis (categories + tags)" },
|
|
110
|
+
{ "name": "wp_extract_faq_blocks", "description": "FAQ inventory: JSON-LD, Gutenberg blocks, HTML patterns" },
|
|
111
|
+
{ "name": "wp_audit_cta_presence", "description": "CTA detection (6 types) with scoring 0-100" },
|
|
112
|
+
{ "name": "wp_extract_entities", "description": "Regex/heuristic named entity extraction (brands, locations, persons, organizations)" },
|
|
113
|
+
{ "name": "wp_get_publishing_velocity", "description": "Publication cadence by author/category with trend detection" },
|
|
114
|
+
{ "name": "wp_compare_revisions_diff", "description": "Textual diff between revisions with amplitude scoring" },
|
|
115
|
+
{ "name": "wp_list_posts_by_word_count", "description": "Posts sorted by length with 6-tier segmentation" }
|
|
70
116
|
],
|
|
71
117
|
"keywords": [
|
|
72
118
|
"wordpress",
|
|
@@ -76,9 +122,14 @@
|
|
|
76
122
|
"pages",
|
|
77
123
|
"media",
|
|
78
124
|
"seo",
|
|
125
|
+
"seo-audit",
|
|
79
126
|
"plugins",
|
|
80
127
|
"themes",
|
|
81
|
-
"rest-api"
|
|
128
|
+
"rest-api",
|
|
129
|
+
"woocommerce",
|
|
130
|
+
"ecommerce",
|
|
131
|
+
"content-compression",
|
|
132
|
+
"content-intelligence"
|
|
82
133
|
],
|
|
83
134
|
"license": "MIT",
|
|
84
135
|
"user_config": {
|
|
@@ -100,6 +151,32 @@
|
|
|
100
151
|
"description": "Generate at WordPress Admin → Users → Profile → Application Passwords",
|
|
101
152
|
"sensitive": true,
|
|
102
153
|
"required": true
|
|
154
|
+
},
|
|
155
|
+
"wc_consumer_key": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"title": "WooCommerce Consumer Key",
|
|
158
|
+
"description": "Generate at WooCommerce → Settings → Advanced → REST API",
|
|
159
|
+
"sensitive": true,
|
|
160
|
+
"required": false
|
|
161
|
+
},
|
|
162
|
+
"wc_consumer_secret": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"title": "WooCommerce Consumer Secret",
|
|
165
|
+
"description": "Generated alongside the Consumer Key",
|
|
166
|
+
"sensitive": true,
|
|
167
|
+
"required": false
|
|
168
|
+
},
|
|
169
|
+
"wp_require_approval": {
|
|
170
|
+
"type": "boolean",
|
|
171
|
+
"title": "Require Editorial Approval",
|
|
172
|
+
"description": "When true, direct publishing via wp_create_post/wp_update_post is blocked. Use wp_submit_for_review → wp_approve_post workflow instead.",
|
|
173
|
+
"required": false
|
|
174
|
+
},
|
|
175
|
+
"wp_confirm_destructive": {
|
|
176
|
+
"type": "boolean",
|
|
177
|
+
"title": "Confirm Destructive Actions",
|
|
178
|
+
"description": "When true, wp_delete_post and wp_delete_revision require a two-step confirmation token before executing.",
|
|
179
|
+
"required": false
|
|
103
180
|
}
|
|
104
181
|
},
|
|
105
182
|
"compatibility": {
|