mcp-wordpress 2.4.2 → 2.5.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 +114 -48
- package/dist/ajv-patch.js +34 -0
- package/dist/cache/CacheInvalidation.d.ts +3 -1
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +10 -4
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/cache/CacheManager.d.ts +3 -2
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +11 -3
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/HttpCacheWrapper.d.ts +7 -6
- package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
- package/dist/cache/HttpCacheWrapper.js +8 -5
- package/dist/cache/HttpCacheWrapper.js.map +1 -1
- package/dist/cache/__tests__/HttpCacheWrapper.test.js +6 -5
- package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
- package/dist/cache/index.d.ts +3 -3
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/client/CachedWordPressClient.d.ts +23 -9
- package/dist/client/CachedWordPressClient.d.ts.map +1 -1
- package/dist/client/CachedWordPressClient.js +4 -1
- package/dist/client/CachedWordPressClient.js.map +1 -1
- package/dist/client/MockWordPressClient.d.ts +2 -1
- package/dist/client/MockWordPressClient.d.ts.map +1 -1
- package/dist/client/MockWordPressClient.js +3 -1
- package/dist/client/MockWordPressClient.js.map +1 -1
- package/dist/client/api.d.ts +17 -13
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +135 -30
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +2 -3
- package/dist/client/auth.js.map +1 -1
- package/dist/client/managers/AuthenticationManager.d.ts +55 -2
- package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
- package/dist/client/managers/AuthenticationManager.js +269 -71
- package/dist/client/managers/AuthenticationManager.js.map +1 -1
- package/dist/client/managers/BaseManager.d.ts +3 -3
- package/dist/client/managers/BaseManager.d.ts.map +1 -1
- package/dist/client/managers/BaseManager.js +11 -5
- package/dist/client/managers/BaseManager.js.map +1 -1
- package/dist/client/managers/RequestManager.d.ts +2 -2
- package/dist/client/managers/RequestManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.js +25 -12
- package/dist/client/managers/RequestManager.js.map +1 -1
- package/dist/config/Config.d.ts +155 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/Config.js +215 -0
- package/dist/config/Config.js.map +1 -0
- package/dist/config/ConfigurationSchema.d.ts +21 -21
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +19 -2
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +2 -1
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js +50 -41
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.d.ts +9 -8
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
- package/dist/docs/DocumentationGenerator.js +10 -7
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
- package/dist/docs/MarkdownFormatter.js +3 -2
- package/dist/docs/MarkdownFormatter.js.map +1 -1
- package/dist/dxt-entry.cjs +81 -0
- package/dist/dxt-entry.js +15 -14
- package/dist/dxt-entry.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -21
- package/dist/index.js.map +1 -1
- package/dist/performance/MetricsCollector.d.ts +13 -7
- package/dist/performance/MetricsCollector.d.ts.map +1 -1
- package/dist/performance/MetricsCollector.js +69 -27
- package/dist/performance/MetricsCollector.js.map +1 -1
- package/dist/performance/PerformanceAnalytics.d.ts +8 -2
- package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
- package/dist/performance/PerformanceAnalytics.js +17 -47
- package/dist/performance/PerformanceAnalytics.js.map +1 -1
- package/dist/performance/PerformanceMonitor.d.ts +2 -1
- package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
- package/dist/performance/PerformanceMonitor.js +12 -13
- package/dist/performance/PerformanceMonitor.js.map +1 -1
- package/dist/performance/index.d.ts +2 -2
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/security/AISecurityScanner.d.ts +1 -0
- package/dist/security/AISecurityScanner.d.ts.map +1 -1
- package/dist/security/AISecurityScanner.js +22 -12
- package/dist/security/AISecurityScanner.js.map +1 -1
- package/dist/security/AutomatedRemediation.d.ts +4 -3
- package/dist/security/AutomatedRemediation.d.ts.map +1 -1
- package/dist/security/AutomatedRemediation.js +46 -15
- package/dist/security/AutomatedRemediation.js.map +1 -1
- package/dist/security/InputValidator.d.ts +13 -9
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +4 -2
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/security/SecurityCIPipeline.d.ts +1 -1
- package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
- package/dist/security/SecurityCIPipeline.js +38 -29
- package/dist/security/SecurityCIPipeline.js.map +1 -1
- package/dist/security/SecurityConfig.d.ts +3 -3
- package/dist/security/SecurityConfig.d.ts.map +1 -1
- package/dist/security/SecurityConfig.js +13 -9
- package/dist/security/SecurityConfig.js.map +1 -1
- package/dist/security/SecurityConfigManager.d.ts +2 -2
- package/dist/security/SecurityConfigManager.d.ts.map +1 -1
- package/dist/security/SecurityConfigManager.js +20 -15
- package/dist/security/SecurityConfigManager.js.map +1 -1
- package/dist/security/SecurityMonitoring.d.ts +2 -2
- package/dist/security/SecurityMonitoring.d.ts.map +1 -1
- package/dist/security/SecurityMonitoring.js +19 -17
- package/dist/security/SecurityMonitoring.js.map +1 -1
- package/dist/security/SecurityReviewer.d.ts.map +1 -1
- package/dist/security/SecurityReviewer.js +10 -7
- package/dist/security/SecurityReviewer.js.map +1 -1
- package/dist/security/index.d.ts +24 -23
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +52 -23
- package/dist/security/index.js.map +1 -1
- package/dist/server/ConnectionTester.d.ts +12 -4
- package/dist/server/ConnectionTester.d.ts.map +1 -1
- package/dist/server/ConnectionTester.js +96 -22
- package/dist/server/ConnectionTester.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +2 -2
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +10 -5
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/tools/BaseToolManager.d.ts +47 -11
- package/dist/tools/BaseToolManager.d.ts.map +1 -1
- package/dist/tools/BaseToolManager.js +168 -29
- package/dist/tools/BaseToolManager.js.map +1 -1
- package/dist/tools/auth.d.ts +16 -10
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +3 -2
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/cache.d.ts +30 -30
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js +1 -6
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/comments.d.ts +20 -20
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +16 -9
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/media.d.ts +18 -16
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +16 -15
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/pages.d.ts +19 -17
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +16 -12
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/performance.d.ts +11 -1
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +67 -34
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/posts/PostHandlers.d.ts +46 -0
- package/dist/tools/posts/PostHandlers.d.ts.map +1 -0
- package/dist/tools/posts/PostHandlers.js +400 -0
- package/dist/tools/posts/PostHandlers.js.map +1 -0
- package/dist/tools/posts/PostToolDefinitions.d.ts +37 -0
- package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -0
- package/dist/tools/posts/PostToolDefinitions.js +236 -0
- package/dist/tools/posts/PostToolDefinitions.js.map +1 -0
- package/dist/tools/posts/index.d.ts +138 -0
- package/dist/tools/posts/index.d.ts.map +1 -0
- package/dist/tools/posts/index.js +163 -0
- package/dist/tools/posts/index.js.map +1 -0
- package/dist/tools/posts.d.ts +10 -246
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +11 -723
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/site.d.ts +19 -18
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +14 -10
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/taxonomies.d.ts +23 -24
- package/dist/tools/taxonomies.d.ts.map +1 -1
- package/dist/tools/taxonomies.js +24 -18
- package/dist/tools/taxonomies.js.map +1 -1
- package/dist/tools/users.d.ts +20 -15
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +12 -8
- package/dist/tools/users.js.map +1 -1
- package/dist/types/client.d.ts +48 -41
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js +30 -5
- package/dist/types/client.js.map +1 -1
- package/dist/types/enhanced.d.ts +237 -0
- package/dist/types/enhanced.d.ts.map +1 -0
- package/dist/types/enhanced.js +49 -0
- package/dist/types/enhanced.js.map +1 -0
- package/dist/types/index.d.ts +15 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp.d.ts +12 -12
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/requests.d.ts +322 -0
- package/dist/types/requests.d.ts.map +1 -0
- package/dist/types/requests.js +8 -0
- package/dist/types/requests.js.map +1 -0
- package/dist/types/tools.d.ts +506 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +8 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/wordpress.d.ts +43 -15
- package/dist/types/wordpress.d.ts.map +1 -1
- package/dist/types/wordpress.js +8 -1
- package/dist/types/wordpress.js.map +1 -1
- package/dist/utils/debug.d.ts +19 -11
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +46 -10
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/enhancedError.d.ts +8 -8
- package/dist/utils/enhancedError.d.ts.map +1 -1
- package/dist/utils/enhancedError.js.map +1 -1
- package/dist/utils/error.d.ts +2 -4
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js +42 -5
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/logger.d.ts +106 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +280 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/streaming.d.ts +9 -9
- package/dist/utils/streaming.d.ts.map +1 -1
- package/dist/utils/streaming.js +71 -52
- package/dist/utils/streaming.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts +9 -7
- package/dist/utils/toolWrapper.d.ts.map +1 -1
- package/dist/utils/toolWrapper.js.map +1 -1
- package/dist/utils/validation/core.d.ts +21 -0
- package/dist/utils/validation/core.d.ts.map +1 -0
- package/dist/utils/validation/core.js +71 -0
- package/dist/utils/validation/core.js.map +1 -0
- package/dist/utils/validation/index.d.ts +25 -0
- package/dist/utils/validation/index.d.ts.map +1 -0
- package/dist/utils/validation/index.js +29 -0
- package/dist/utils/validation/index.js.map +1 -0
- package/dist/utils/validation/network.d.ts +19 -0
- package/dist/utils/validation/network.d.ts.map +1 -0
- package/dist/utils/validation/network.js +93 -0
- package/dist/utils/validation/network.js.map +1 -0
- package/dist/utils/validation/rateLimit.d.ts +21 -0
- package/dist/utils/validation/rateLimit.d.ts.map +1 -0
- package/dist/utils/validation/rateLimit.js +43 -0
- package/dist/utils/validation/rateLimit.js.map +1 -0
- package/dist/utils/validation/security.d.ts +29 -0
- package/dist/utils/validation/security.d.ts.map +1 -0
- package/dist/utils/validation/security.js +327 -0
- package/dist/utils/validation/security.js.map +1 -0
- package/dist/utils/validation/wordpress.d.ts +31 -0
- package/dist/utils/validation/wordpress.d.ts.map +1 -0
- package/dist/utils/validation/wordpress.js +146 -0
- package/dist/utils/validation/wordpress.js.map +1 -0
- package/dist/utils/validation.d.ts +13 -82
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +25 -343
- package/dist/utils/validation.js.map +1 -1
- package/docs/BADGE_UPDATES.md +132 -0
- package/docs/CI_CD_IMPROVEMENTS.md +191 -0
- package/docs/INCREMENTAL_COVERAGE.md +183 -0
- package/docs/api/README.md +3 -1
- package/docs/api/openapi.json +5 -1
- package/docs/api/summary.json +1 -1
- package/docs/api/tools/wp_create_post.md +12 -14
- package/docs/examples/claude-desktop-config.md +1 -1
- package/docs/examples/docker-production.md +100 -93
- package/docs/examples/multi-site-setup.md +5 -4
- package/docs/examples/single-site-setup.md +3 -4
- package/docs/examples/use-case-workflows.md +4 -5
- package/docs/integrations/claude-desktop.md +31 -31
- package/docs/integrations/cline.md +4 -4
- package/docs/integrations/vs-code.md +9 -8
- package/docs/user-guides/SMITHERY_SETUP.md +10 -10
- package/package.json +44 -25
- package/src/cache/CacheInvalidation.ts +12 -5
- package/src/cache/CacheManager.ts +18 -15
- package/src/cache/HttpCacheWrapper.ts +30 -59
- package/src/cache/__tests__/HttpCacheWrapper.test.ts +6 -5
- package/src/cache/index.ts +3 -14
- package/src/client/CachedWordPressClient.ts +32 -30
- package/src/client/MockWordPressClient.ts +4 -2
- package/src/client/api.ts +186 -64
- package/src/client/auth.ts +15 -40
- package/src/client/managers/AuthenticationManager.ts +337 -77
- package/src/client/managers/BaseManager.ts +18 -30
- package/src/client/managers/RequestManager.ts +39 -44
- package/src/config/Config.ts +308 -0
- package/src/config/ConfigurationSchema.ts +23 -2
- package/src/config/ServerConfiguration.ts +51 -47
- package/src/docs/DocumentationGenerator.ts +50 -39
- package/src/docs/MarkdownFormatter.ts +19 -29
- package/src/dxt-entry.cjs +26 -16
- package/src/dxt-entry.ts +17 -27
- package/src/index.ts +42 -28
- package/src/performance/MetricsCollector.ts +108 -86
- package/src/performance/PerformanceAnalytics.ts +69 -164
- package/src/performance/PerformanceMonitor.ts +32 -47
- package/src/performance/index.ts +2 -10
- package/src/security/AISecurityScanner.ts +22 -12
- package/src/security/AutomatedRemediation.ts +49 -18
- package/src/security/InputValidator.ts +9 -6
- package/src/security/SecurityCIPipeline.ts +53 -37
- package/src/security/SecurityConfig.ts +22 -22
- package/src/security/SecurityConfigManager.ts +23 -19
- package/src/security/SecurityMonitoring.ts +24 -21
- package/src/security/SecurityReviewer.ts +10 -7
- package/src/security/index.ts +64 -29
- package/src/server/ConnectionTester.ts +120 -31
- package/src/server/ToolRegistry.ts +31 -21
- package/src/tools/BaseToolManager.ts +286 -33
- package/src/tools/auth.ts +20 -8
- package/src/tools/cache.ts +5 -15
- package/src/tools/comments.ts +34 -48
- package/src/tools/media.ts +41 -53
- package/src/tools/pages.ts +32 -54
- package/src/tools/performance.ts +141 -176
- package/src/tools/posts/PostHandlers.ts +474 -0
- package/src/tools/posts/PostToolDefinitions.ts +250 -0
- package/src/tools/posts/index.ts +192 -0
- package/src/tools/posts.ts +24 -780
- package/src/tools/site.ts +34 -19
- package/src/tools/taxonomies.ts +41 -57
- package/src/tools/users.ts +28 -16
- package/src/types/client.ts +114 -138
- package/src/types/enhanced.ts +318 -0
- package/src/types/index.ts +51 -30
- package/src/types/mcp.ts +20 -42
- package/src/types/requests.ts +378 -0
- package/src/types/tools.ts +608 -0
- package/src/types/wordpress.ts +56 -34
- package/src/utils/debug.ts +77 -59
- package/src/utils/enhancedError.ts +8 -8
- package/src/utils/error.ts +53 -31
- package/src/utils/logger.ts +351 -0
- package/src/utils/streaming.ts +86 -68
- package/src/utils/toolWrapper.ts +10 -12
- package/src/utils/validation/core.ts +108 -0
- package/src/utils/validation/index.ts +36 -0
- package/src/utils/validation/network.ts +132 -0
- package/src/utils/validation/rateLimit.ts +54 -0
- package/src/utils/validation/security.ts +361 -0
- package/src/utils/validation/wordpress.ts +180 -0
- package/src/utils/validation.ts +47 -470
package/src/dxt-entry.cjs
CHANGED
|
@@ -8,37 +8,45 @@
|
|
|
8
8
|
try {
|
|
9
9
|
require('./ajv-patch.js');
|
|
10
10
|
} catch (error) {
|
|
11
|
-
|
|
11
|
+
// Use stderr to avoid interfering with STDIO
|
|
12
|
+
process.stderr.write(`[DXT] AJV patch failed to load: ${error.message}\n`);
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
// Use stderr for debug output to avoid interfering with STDIO
|
|
16
|
+
const debug = (message) => {
|
|
17
|
+
if (process.env.DEBUG || process.env.NODE_ENV === 'development') {
|
|
18
|
+
process.stderr.write(`[DXT] ${message}\n`);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
debug("CommonJS entry point starting...");
|
|
23
|
+
debug(`Current working directory: ${process.cwd()}`);
|
|
24
|
+
debug(`__dirname: ${__dirname}`);
|
|
25
|
+
debug(`Node version: ${process.version}`);
|
|
18
26
|
|
|
19
27
|
// Set DXT mode environment variable
|
|
20
28
|
process.env.NODE_ENV = "dxt";
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
debug("Environment variables passed from DXT:");
|
|
31
|
+
debug(` WORDPRESS_SITE_URL: ${process.env.WORDPRESS_SITE_URL ? 'SET' : 'NOT SET'}`);
|
|
32
|
+
debug(` WORDPRESS_USERNAME: ${process.env.WORDPRESS_USERNAME ? 'SET' : 'NOT SET'}`);
|
|
33
|
+
debug(` WORDPRESS_APP_PASSWORD: ${process.env.WORDPRESS_APP_PASSWORD ? 'SET' : 'NOT SET'}`);
|
|
26
34
|
|
|
27
35
|
// Import and run the main server using dynamic import
|
|
28
36
|
async function startDXTServer() {
|
|
29
37
|
try {
|
|
30
|
-
|
|
38
|
+
debug("Attempting to import ES module...");
|
|
31
39
|
const { MCPWordPressServer } = await import("./index.js");
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
debug("Creating MCPWordPressServer instance from DXT entry point...");
|
|
34
42
|
const server = new MCPWordPressServer();
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
debug("Starting server (DXT mode - fast startup)...");
|
|
37
45
|
await server.run();
|
|
38
46
|
|
|
39
47
|
// Handle graceful shutdown
|
|
40
48
|
const shutdown = async () => {
|
|
41
|
-
|
|
49
|
+
debug("Received shutdown signal in DXT entry point");
|
|
42
50
|
await server.shutdown();
|
|
43
51
|
process.exit(0);
|
|
44
52
|
};
|
|
@@ -47,12 +55,14 @@ async function startDXTServer() {
|
|
|
47
55
|
process.on("SIGTERM", shutdown);
|
|
48
56
|
|
|
49
57
|
} catch (error) {
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
process.stderr.write(`[DXT] FATAL: Server failed to start: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
59
|
+
if (error instanceof Error && error.stack) {
|
|
60
|
+
process.stderr.write(`[DXT] Stack trace: ${error.stack}\n`);
|
|
61
|
+
}
|
|
52
62
|
process.exit(1);
|
|
53
63
|
}
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
// Always run when loaded as DXT entry point
|
|
57
|
-
|
|
67
|
+
debug("Calling startDXTServer...");
|
|
58
68
|
startDXTServer();
|
package/src/dxt-entry.ts
CHANGED
|
@@ -4,35 +4,29 @@
|
|
|
4
4
|
* Entry point for DXT package - ensures proper initialization when run through Claude Desktop
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
console.error(`DEBUG: Current working directory: ${process.cwd()}`);
|
|
9
|
-
console.error(`DEBUG: __dirname equivalent: ${import.meta.url}`);
|
|
10
|
-
console.error("DEBUG: Environment variables passed from DXT:");
|
|
11
|
-
console.error(
|
|
12
|
-
` WORDPRESS_SITE_URL: ${process.env.WORDPRESS_SITE_URL ? "SET" : "NOT SET"}`,
|
|
13
|
-
);
|
|
14
|
-
console.error(
|
|
15
|
-
` WORDPRESS_USERNAME: ${process.env.WORDPRESS_USERNAME ? "SET" : "NOT SET"}`,
|
|
16
|
-
);
|
|
17
|
-
console.error(
|
|
18
|
-
` WORDPRESS_APP_PASSWORD: ${process.env.WORDPRESS_APP_PASSWORD ? "SET" : "NOT SET"}`,
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
// Import and run the main server
|
|
7
|
+
import { LoggerFactory } from "./utils/logger.js";
|
|
22
8
|
import { MCPWordPressServer } from "./index.js";
|
|
23
9
|
|
|
10
|
+
const logger = LoggerFactory.server();
|
|
11
|
+
|
|
12
|
+
logger.debug("DXT entry point starting...");
|
|
13
|
+
logger.debug(`Current working directory: ${process.cwd()}`);
|
|
14
|
+
logger.debug(`__dirname equivalent: ${import.meta.url}`);
|
|
15
|
+
logger.debug("Environment variables passed from DXT:");
|
|
16
|
+
logger.debug(` WORDPRESS_SITE_URL: ${process.env.WORDPRESS_SITE_URL ? "SET" : "NOT SET"}`);
|
|
17
|
+
logger.debug(` WORDPRESS_USERNAME: ${process.env.WORDPRESS_USERNAME ? "SET" : "NOT SET"}`);
|
|
18
|
+
logger.debug(` WORDPRESS_APP_PASSWORD: ${process.env.WORDPRESS_APP_PASSWORD ? "SET" : "NOT SET"}`);
|
|
19
|
+
|
|
24
20
|
async function startDXTServer() {
|
|
25
21
|
try {
|
|
26
|
-
|
|
27
|
-
"DEBUG: Creating MCPWordPressServer instance from DXT entry point...",
|
|
28
|
-
);
|
|
22
|
+
logger.debug("Creating MCPWordPressServer instance from DXT entry point...");
|
|
29
23
|
const server = new MCPWordPressServer();
|
|
30
|
-
|
|
24
|
+
logger.debug("Starting server...");
|
|
31
25
|
await server.run();
|
|
32
26
|
|
|
33
27
|
// Handle graceful shutdown
|
|
34
28
|
const shutdown = async () => {
|
|
35
|
-
|
|
29
|
+
logger.debug("Received shutdown signal in DXT entry point");
|
|
36
30
|
await server.shutdown();
|
|
37
31
|
process.exit(0);
|
|
38
32
|
};
|
|
@@ -40,16 +34,12 @@ async function startDXTServer() {
|
|
|
40
34
|
process.on("SIGINT", shutdown);
|
|
41
35
|
process.on("SIGTERM", shutdown);
|
|
42
36
|
} catch (error) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
);
|
|
46
|
-
console.error(
|
|
47
|
-
`FATAL: Stack trace: ${error instanceof Error ? error.stack : "No stack trace available"}`,
|
|
48
|
-
);
|
|
37
|
+
logger.fatal(`DXT server failed to start: ${error instanceof Error ? error.message : String(error)}`);
|
|
38
|
+
logger.fatal(`Stack trace: ${error instanceof Error ? error.stack : "No stack trace available"}`);
|
|
49
39
|
process.exit(1);
|
|
50
40
|
}
|
|
51
41
|
}
|
|
52
42
|
|
|
53
43
|
// Always run when loaded as DXT entry point
|
|
54
|
-
|
|
44
|
+
logger.debug("Calling startDXTServer...");
|
|
55
45
|
startDXTServer();
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,9 @@ import { ServerConfiguration, SiteConfig } from "./config/ServerConfiguration.js
|
|
|
6
6
|
import { ToolRegistry } from "./server/ToolRegistry.js";
|
|
7
7
|
import { ConnectionTester } from "./server/ConnectionTester.js";
|
|
8
8
|
import { getErrorMessage } from "./utils/error.js";
|
|
9
|
+
import { LoggerFactory } from "./utils/logger.js";
|
|
10
|
+
import { ConfigHelpers } from "./config/Config.js";
|
|
11
|
+
import { McpConfigType } from "./config/ServerConfiguration.js";
|
|
9
12
|
|
|
10
13
|
// --- Constants ---
|
|
11
14
|
const SERVER_VERSION = "1.1.8"; // Technical debt resolution and modular architecture
|
|
@@ -17,28 +20,25 @@ class MCPWordPressServer {
|
|
|
17
20
|
private initialized: boolean = false;
|
|
18
21
|
private siteConfigs: SiteConfig[] = [];
|
|
19
22
|
private toolRegistry: ToolRegistry;
|
|
23
|
+
private logger = LoggerFactory.server();
|
|
20
24
|
|
|
21
|
-
constructor(mcpConfig?:
|
|
25
|
+
constructor(mcpConfig?: McpConfigType) {
|
|
22
26
|
this.loadConfiguration(mcpConfig);
|
|
23
27
|
|
|
24
28
|
if (this.wordpressClients.size === 0) {
|
|
25
29
|
// In test environments, don't exit the process
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
process.env.CI === "true" ||
|
|
29
|
-
(globalThis as any).__EXECUTION_CONTEXT__ === "jest"
|
|
30
|
-
) {
|
|
31
|
-
console.error("WARNING: No WordPress sites configured in test environment");
|
|
30
|
+
if (ConfigHelpers.isCI() || ConfigHelpers.isTest() || (globalThis as Record<string, unknown>).__EXECUTION_CONTEXT__ === "jest") {
|
|
31
|
+
this.logger.warn("No WordPress sites configured in test environment");
|
|
32
32
|
// Create a dummy client for testing
|
|
33
|
-
this.wordpressClients.set("test", {} as
|
|
33
|
+
this.wordpressClients.set("test", {} as WordPressClient);
|
|
34
34
|
} else {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
this.logger.fatal("No WordPress sites configured. Server cannot start.", {
|
|
36
|
+
expectedEnvVars: [
|
|
37
|
+
"WORDPRESS_SITE_URL",
|
|
38
|
+
"WORDPRESS_USERNAME",
|
|
39
|
+
"WORDPRESS_APP_PASSWORD"
|
|
40
|
+
]
|
|
41
|
+
});
|
|
42
42
|
process.exit(1);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -52,7 +52,7 @@ class MCPWordPressServer {
|
|
|
52
52
|
this.setupTools();
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
private loadConfiguration(mcpConfig?:
|
|
55
|
+
private loadConfiguration(mcpConfig?: McpConfigType) {
|
|
56
56
|
const serverConfig = ServerConfiguration.getInstance();
|
|
57
57
|
const { clients, configs } = serverConfig.loadClientConfigurations(mcpConfig);
|
|
58
58
|
|
|
@@ -65,35 +65,45 @@ class MCPWordPressServer {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
private async testClientConnections(): Promise<void> {
|
|
68
|
-
|
|
68
|
+
// Use optimized connection testing with timeouts and concurrency control
|
|
69
|
+
await ConnectionTester.testClientConnections(this.wordpressClients, {
|
|
70
|
+
timeout: ConfigHelpers.getTimeout("test"),
|
|
71
|
+
maxConcurrent: ConfigHelpers.isCI() ? 2 : 3 // Reduce concurrency in CI
|
|
72
|
+
});
|
|
69
73
|
this.initialized = true;
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
async run() {
|
|
73
77
|
// Skip connection testing in DXT environment to prevent timeouts
|
|
74
|
-
const isDXTMode =
|
|
78
|
+
const isDXTMode = ConfigHelpers.isDXT() || process.argv[0]?.includes("dxt-entry");
|
|
75
79
|
|
|
76
80
|
if (!this.initialized && !isDXTMode) {
|
|
77
|
-
|
|
81
|
+
this.logger.info("Testing connections to configured WordPress sites...", {
|
|
82
|
+
siteCount: this.wordpressClients.size
|
|
83
|
+
});
|
|
78
84
|
try {
|
|
79
85
|
await this.testClientConnections();
|
|
80
86
|
} catch (error) {
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
this.logger.warn("Connection test failed - continuing with server startup", {
|
|
88
|
+
error: getErrorMessage(error)
|
|
89
|
+
});
|
|
83
90
|
}
|
|
84
91
|
} else if (isDXTMode) {
|
|
85
|
-
|
|
92
|
+
this.logger.info("DXT mode detected - skipping connection tests for faster startup");
|
|
86
93
|
this.initialized = true;
|
|
87
94
|
}
|
|
88
95
|
|
|
89
|
-
|
|
96
|
+
this.logger.info("Starting MCP WordPress Server...", {
|
|
97
|
+
version: SERVER_VERSION,
|
|
98
|
+
sites: this.wordpressClients.size
|
|
99
|
+
});
|
|
90
100
|
|
|
91
101
|
// Connect to stdio transport with timeout
|
|
92
102
|
const transport = new StdioServerTransport();
|
|
93
103
|
|
|
94
104
|
// Add timeout protection for server connection
|
|
95
105
|
const connectionTimeout = setTimeout(() => {
|
|
96
|
-
|
|
106
|
+
this.logger.fatal("Server connection timed out", { timeoutMs: 30000 });
|
|
97
107
|
process.exit(1);
|
|
98
108
|
}, 30000);
|
|
99
109
|
|
|
@@ -101,7 +111,9 @@ class MCPWordPressServer {
|
|
|
101
111
|
await this.server.connect(transport);
|
|
102
112
|
clearTimeout(connectionTimeout);
|
|
103
113
|
|
|
104
|
-
|
|
114
|
+
this.logger.info("Server started and connected successfully", {
|
|
115
|
+
sites: this.wordpressClients.size
|
|
116
|
+
});
|
|
105
117
|
|
|
106
118
|
// Keep the process alive
|
|
107
119
|
process.stdin.resume();
|
|
@@ -112,14 +124,16 @@ class MCPWordPressServer {
|
|
|
112
124
|
}
|
|
113
125
|
|
|
114
126
|
async shutdown() {
|
|
115
|
-
|
|
127
|
+
this.logger.info("Shutting down MCP WordPress Server...");
|
|
116
128
|
await this.server.close();
|
|
117
|
-
|
|
129
|
+
this.logger.info("Server stopped");
|
|
118
130
|
}
|
|
119
131
|
}
|
|
120
132
|
|
|
121
133
|
// --- Main Execution ---
|
|
122
134
|
async function main() {
|
|
135
|
+
const mainLogger = LoggerFactory.server();
|
|
136
|
+
|
|
123
137
|
try {
|
|
124
138
|
const mcpServer = new MCPWordPressServer();
|
|
125
139
|
await mcpServer.run();
|
|
@@ -132,7 +146,7 @@ async function main() {
|
|
|
132
146
|
process.on("SIGINT", shutdown);
|
|
133
147
|
process.on("SIGTERM", shutdown);
|
|
134
148
|
} catch (error) {
|
|
135
|
-
|
|
149
|
+
mainLogger.fatal("Failed to start server", { error: getErrorMessage(error) });
|
|
136
150
|
process.exit(1);
|
|
137
151
|
}
|
|
138
152
|
}
|