mcp-wordpress 1.2.2 → 1.3.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.
Files changed (251) hide show
  1. package/README.md +210 -182
  2. package/dist/cache/CacheInvalidation.d.ts +3 -3
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  4. package/dist/cache/CacheInvalidation.js +119 -119
  5. package/dist/cache/CacheInvalidation.js.map +1 -1
  6. package/dist/cache/CacheManager.d.ts +5 -0
  7. package/dist/cache/CacheManager.d.ts.map +1 -1
  8. package/dist/cache/CacheManager.js +26 -16
  9. package/dist/cache/CacheManager.js.map +1 -1
  10. package/dist/cache/HttpCacheWrapper.d.ts +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  12. package/dist/cache/HttpCacheWrapper.js +29 -29
  13. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  14. package/dist/cache/__tests__/CacheInvalidation.test.js +96 -94
  15. package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -1
  16. package/dist/cache/__tests__/CacheManager.test.js +113 -113
  17. package/dist/cache/__tests__/CacheManager.test.js.map +1 -1
  18. package/dist/cache/__tests__/CachedWordPressClient.test.js +102 -99
  19. package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -1
  20. package/dist/cache/__tests__/HttpCacheWrapper.test.js +98 -95
  21. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  22. package/dist/cache/index.d.ts +7 -7
  23. package/dist/cache/index.d.ts.map +1 -1
  24. package/dist/cache/index.js +4 -4
  25. package/dist/cache/index.js.map +1 -1
  26. package/dist/client/CachedWordPressClient.d.ts +4 -4
  27. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  28. package/dist/client/CachedWordPressClient.js +55 -51
  29. package/dist/client/CachedWordPressClient.js.map +1 -1
  30. package/dist/client/api.d.ts +10 -10
  31. package/dist/client/api.js +158 -158
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts +2 -2
  34. package/dist/client/auth.js +72 -72
  35. package/dist/client/managers/AuthenticationManager.d.ts +2 -2
  36. package/dist/client/managers/AuthenticationManager.js +46 -46
  37. package/dist/client/managers/BaseManager.d.ts +1 -1
  38. package/dist/client/managers/BaseManager.js +9 -9
  39. package/dist/client/managers/RequestManager.d.ts +5 -3
  40. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  41. package/dist/client/managers/RequestManager.js +39 -19
  42. package/dist/client/managers/RequestManager.js.map +1 -1
  43. package/dist/client/managers/index.d.ts +3 -3
  44. package/dist/client/managers/index.js +3 -3
  45. package/dist/config/ConfigurationSchema.d.ts +2 -2
  46. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  47. package/dist/config/ConfigurationSchema.js +40 -40
  48. package/dist/config/ConfigurationSchema.js.map +1 -1
  49. package/dist/config/ServerConfiguration.d.ts +2 -2
  50. package/dist/config/ServerConfiguration.js +35 -35
  51. package/dist/config/ServerConfiguration.js.map +1 -1
  52. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  53. package/dist/docs/DocumentationGenerator.js +296 -255
  54. package/dist/docs/DocumentationGenerator.js.map +1 -1
  55. package/dist/docs/MarkdownFormatter.d.ts +1 -1
  56. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  57. package/dist/docs/MarkdownFormatter.js +60 -51
  58. package/dist/docs/MarkdownFormatter.js.map +1 -1
  59. package/dist/docs/index.d.ts +3 -3
  60. package/dist/docs/index.d.ts.map +1 -1
  61. package/dist/docs/index.js +2 -2
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -16
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp-wordpress-1.3.0.tgz +0 -0
  66. package/dist/performance/MetricsCollector.d.ts +3 -3
  67. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  68. package/dist/performance/MetricsCollector.js +33 -27
  69. package/dist/performance/MetricsCollector.js.map +1 -1
  70. package/dist/performance/PerformanceAnalytics.d.ts +12 -12
  71. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  72. package/dist/performance/PerformanceAnalytics.js +200 -154
  73. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  74. package/dist/performance/PerformanceMonitor.d.ts +5 -5
  75. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  76. package/dist/performance/PerformanceMonitor.js +53 -52
  77. package/dist/performance/PerformanceMonitor.js.map +1 -1
  78. package/dist/performance/index.d.ts +6 -6
  79. package/dist/performance/index.d.ts.map +1 -1
  80. package/dist/performance/index.js +3 -3
  81. package/dist/security/InputValidator.d.ts +1 -1
  82. package/dist/security/InputValidator.d.ts.map +1 -1
  83. package/dist/security/InputValidator.js +111 -88
  84. package/dist/security/InputValidator.js.map +1 -1
  85. package/dist/security/SecurityConfig.d.ts +5 -5
  86. package/dist/security/SecurityConfig.js +92 -92
  87. package/dist/security/SecurityConfig.js.map +1 -1
  88. package/dist/server/ConnectionTester.d.ts +1 -1
  89. package/dist/server/ConnectionTester.d.ts.map +1 -1
  90. package/dist/server/ConnectionTester.js +4 -4
  91. package/dist/server/ConnectionTester.js.map +1 -1
  92. package/dist/server/ToolRegistry.d.ts +2 -2
  93. package/dist/server/ToolRegistry.d.ts.map +1 -1
  94. package/dist/server/ToolRegistry.js +35 -32
  95. package/dist/server/ToolRegistry.js.map +1 -1
  96. package/dist/server.d.ts +2 -2
  97. package/dist/server.js +2 -2
  98. package/dist/tools/BaseToolManager.js +5 -5
  99. package/dist/tools/auth.d.ts +2 -2
  100. package/dist/tools/auth.d.ts.map +1 -1
  101. package/dist/tools/auth.js +32 -31
  102. package/dist/tools/auth.js.map +1 -1
  103. package/dist/tools/cache.d.ts +1 -1
  104. package/dist/tools/cache.d.ts.map +1 -1
  105. package/dist/tools/cache.js +71 -71
  106. package/dist/tools/cache.js.map +1 -1
  107. package/dist/tools/comments.d.ts +2 -2
  108. package/dist/tools/comments.d.ts.map +1 -1
  109. package/dist/tools/comments.js +79 -79
  110. package/dist/tools/comments.js.map +1 -1
  111. package/dist/tools/index.d.ts +10 -10
  112. package/dist/tools/index.js +10 -10
  113. package/dist/tools/media.d.ts +2 -2
  114. package/dist/tools/media.js +80 -80
  115. package/dist/tools/pages.d.ts +2 -2
  116. package/dist/tools/pages.d.ts.map +1 -1
  117. package/dist/tools/pages.js +75 -75
  118. package/dist/tools/pages.js.map +1 -1
  119. package/dist/tools/performance.d.ts +1 -1
  120. package/dist/tools/performance.d.ts.map +1 -1
  121. package/dist/tools/performance.js +311 -287
  122. package/dist/tools/performance.js.map +1 -1
  123. package/dist/tools/posts.d.ts +2 -2
  124. package/dist/tools/posts.d.ts.map +1 -1
  125. package/dist/tools/posts.js +94 -94
  126. package/dist/tools/posts.js.map +1 -1
  127. package/dist/tools/site.d.ts +2 -2
  128. package/dist/tools/site.d.ts.map +1 -1
  129. package/dist/tools/site.js +60 -60
  130. package/dist/tools/site.js.map +1 -1
  131. package/dist/tools/taxonomies.d.ts +2 -2
  132. package/dist/tools/taxonomies.js +89 -89
  133. package/dist/tools/users.d.ts +2 -2
  134. package/dist/tools/users.js +68 -68
  135. package/dist/tools/users.js.map +1 -1
  136. package/dist/types/client.d.ts +13 -13
  137. package/dist/types/client.d.ts.map +1 -1
  138. package/dist/types/client.js +12 -12
  139. package/dist/types/client.js.map +1 -1
  140. package/dist/types/index.d.ts +19 -19
  141. package/dist/types/index.d.ts.map +1 -1
  142. package/dist/types/index.js +3 -3
  143. package/dist/types/mcp.d.ts +7 -7
  144. package/dist/types/wordpress.d.ts +21 -21
  145. package/dist/types/wordpress.d.ts.map +1 -1
  146. package/dist/utils/debug.d.ts +2 -2
  147. package/dist/utils/debug.js +28 -28
  148. package/dist/utils/error.d.ts.map +1 -1
  149. package/dist/utils/error.js +13 -13
  150. package/dist/utils/error.js.map +1 -1
  151. package/dist/utils/toolWrapper.d.ts.map +1 -1
  152. package/dist/utils/toolWrapper.js +5 -5
  153. package/dist/utils/toolWrapper.js.map +1 -1
  154. package/dist/utils/validation.d.ts.map +1 -1
  155. package/dist/utils/validation.js +41 -31
  156. package/dist/utils/validation.js.map +1 -1
  157. package/docs/CACHING.md +36 -2
  158. package/docs/DOCKER.md +24 -18
  159. package/docs/PERFORMANCE_MONITORING.md +49 -1
  160. package/docs/SECURITY_TESTING.md +30 -1
  161. package/docs/api/README.md +9 -1
  162. package/docs/api/summary.json +1 -1
  163. package/docs/contract-testing.md +24 -3
  164. package/docs/developer/GITHUB_ACTIONS_SETUP.md +8 -2
  165. package/docs/developer/MAINTENANCE.md +29 -3
  166. package/docs/developer/MIGRATION_GUIDE.md +13 -1
  167. package/docs/developer/NPM_AUTH_SETUP.md +13 -2
  168. package/docs/developer/REFACTORING.md +31 -1
  169. package/docs/releases/COMMUNITY_ANNOUNCEMENT_v1.1.2.md +18 -7
  170. package/docs/releases/RELEASE_NOTES_v1.1.2.md +31 -5
  171. package/docs/user-guides/DOCKER_SETUP.md +264 -0
  172. package/docs/user-guides/DTX_SETUP.md +327 -0
  173. package/docs/user-guides/NPM_SETUP.md +109 -0
  174. package/docs/user-guides/NPX_SETUP.md +281 -0
  175. package/docs/wordpress-rest-api-authentication-troubleshooting.md +13 -2
  176. package/package.json +27 -8
  177. package/src/cache/CacheInvalidation.ts +140 -132
  178. package/src/cache/CacheManager.ts +40 -29
  179. package/src/cache/HttpCacheWrapper.ts +105 -68
  180. package/src/cache/__tests__/CacheInvalidation.test.ts +123 -118
  181. package/src/cache/__tests__/CacheManager.test.ts +156 -152
  182. package/src/cache/__tests__/CachedWordPressClient.test.ts +131 -116
  183. package/src/cache/__tests__/HttpCacheWrapper.test.ts +118 -115
  184. package/src/cache/index.ts +13 -13
  185. package/src/client/CachedWordPressClient.ts +90 -80
  186. package/src/client/api.ts +205 -205
  187. package/src/client/auth.ts +80 -80
  188. package/src/client/managers/AuthenticationManager.ts +61 -61
  189. package/src/client/managers/BaseManager.ts +11 -11
  190. package/src/client/managers/RequestManager.ts +79 -47
  191. package/src/client/managers/index.ts +3 -3
  192. package/src/config/ConfigurationSchema.ts +44 -44
  193. package/src/config/ServerConfiguration.ts +39 -39
  194. package/src/docs/DocumentationGenerator.ts +402 -295
  195. package/src/docs/MarkdownFormatter.ts +94 -69
  196. package/src/docs/index.ts +4 -4
  197. package/src/index.ts +24 -21
  198. package/src/performance/MetricsCollector.ts +90 -58
  199. package/src/performance/PerformanceAnalytics.ts +386 -262
  200. package/src/performance/PerformanceMonitor.ts +152 -118
  201. package/src/performance/index.ts +9 -9
  202. package/src/security/InputValidator.ts +148 -91
  203. package/src/security/SecurityConfig.ts +94 -94
  204. package/src/server/ConnectionTester.ts +21 -15
  205. package/src/server/ToolRegistry.ts +64 -51
  206. package/src/server.ts +2 -2
  207. package/src/tools/BaseToolManager.ts +6 -6
  208. package/src/tools/auth.ts +42 -37
  209. package/src/tools/cache.ts +85 -81
  210. package/src/tools/comments.ts +93 -91
  211. package/src/tools/index.ts +10 -10
  212. package/src/tools/media.ts +89 -89
  213. package/src/tools/pages.ts +89 -87
  214. package/src/tools/performance.ts +443 -352
  215. package/src/tools/posts.ts +109 -107
  216. package/src/tools/site.ts +86 -77
  217. package/src/tools/taxonomies.ts +102 -102
  218. package/src/tools/users.ts +77 -77
  219. package/src/types/client.ts +157 -60
  220. package/src/types/index.ts +49 -27
  221. package/src/types/mcp.ts +15 -15
  222. package/src/types/wordpress.ts +57 -29
  223. package/src/utils/debug.ts +37 -37
  224. package/src/utils/error.ts +47 -25
  225. package/src/utils/toolWrapper.ts +12 -8
  226. package/src/utils/validation.ts +116 -65
  227. package/dist/client/WordPressClient.d.ts +0 -81
  228. package/dist/client/WordPressClient.d.ts.map +0 -1
  229. package/dist/client/WordPressClient.js +0 -354
  230. package/dist/client/WordPressClient.js.map +0 -1
  231. package/dist/performance/AnomalyDetector.d.ts +0 -63
  232. package/dist/performance/AnomalyDetector.d.ts.map +0 -1
  233. package/dist/performance/AnomalyDetector.js +0 -222
  234. package/dist/performance/AnomalyDetector.js.map +0 -1
  235. package/dist/performance/BenchmarkAnalyzer.d.ts +0 -67
  236. package/dist/performance/BenchmarkAnalyzer.d.ts.map +0 -1
  237. package/dist/performance/BenchmarkAnalyzer.js +0 -301
  238. package/dist/performance/BenchmarkAnalyzer.js.map +0 -1
  239. package/dist/performance/TrendAnalyzer.d.ts +0 -69
  240. package/dist/performance/TrendAnalyzer.d.ts.map +0 -1
  241. package/dist/performance/TrendAnalyzer.js +0 -203
  242. package/dist/performance/TrendAnalyzer.js.map +0 -1
  243. package/dist/tools/BaseToolClass.d.ts +0 -76
  244. package/dist/tools/BaseToolClass.d.ts.map +0 -1
  245. package/dist/tools/BaseToolClass.js +0 -104
  246. package/dist/tools/BaseToolClass.js.map +0 -1
  247. package/dist/tools/base.d.ts +0 -37
  248. package/dist/tools/base.d.ts.map +0 -1
  249. package/dist/tools/base.js +0 -60
  250. package/dist/tools/base.js.map +0 -1
  251. package/docs/user-guides/CLAUDE_DESKTOP_SETUP.md +0 -187
@@ -1,14 +1,14 @@
1
- import { z } from 'zod';
1
+ import { z } from "zod";
2
2
 
3
3
  /**
4
4
  * Zod schema for WordPress authentication methods
5
5
  */
6
6
  const AuthMethodSchema = z.enum([
7
- 'app-password',
8
- 'jwt',
9
- 'basic',
10
- 'api-key',
11
- 'cookie'
7
+ "app-password",
8
+ "jwt",
9
+ "basic",
10
+ "api-key",
11
+ "cookie",
12
12
  ] as const);
13
13
 
14
14
  /**
@@ -16,11 +16,11 @@ const AuthMethodSchema = z.enum([
16
16
  */
17
17
  const UrlSchema = z
18
18
  .string()
19
- .url('Must be a valid URL')
19
+ .url("Must be a valid URL")
20
20
  .refine((url) => {
21
21
  const parsed = new URL(url);
22
- return parsed.protocol === 'http:' || parsed.protocol === 'https:';
23
- }, 'URL must use http or https protocol');
22
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
23
+ }, "URL must use http or https protocol");
24
24
 
25
25
  /**
26
26
  * Zod schema for WordPress site configuration
@@ -29,18 +29,18 @@ const SiteConfigSchema = z.object({
29
29
  WORDPRESS_SITE_URL: UrlSchema,
30
30
  WORDPRESS_USERNAME: z
31
31
  .string()
32
- .min(1, 'Username is required')
33
- .max(60, 'Username must be 60 characters or less')
34
- .regex(/^[a-zA-Z0-9._@-]+$/, 'Username contains invalid characters'),
32
+ .min(1, "Username is required")
33
+ .max(60, "Username must be 60 characters or less")
34
+ .regex(/^[a-zA-Z0-9._@-]+$/, "Username contains invalid characters"),
35
35
  WORDPRESS_APP_PASSWORD: z
36
36
  .string()
37
- .min(1, 'Password is required')
37
+ .min(1, "Password is required")
38
38
  .refine((password) => {
39
39
  // WordPress app passwords are typically 24 characters with spaces
40
40
  // But we'll be flexible to support different auth methods
41
41
  return password.length >= 8;
42
- }, 'Password must be at least 8 characters'),
43
- WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default('app-password')
42
+ }, "Password must be at least 8 characters"),
43
+ WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default("app-password"),
44
44
  });
45
45
 
46
46
  /**
@@ -49,17 +49,17 @@ const SiteConfigSchema = z.object({
49
49
  const SiteSchema = z.object({
50
50
  id: z
51
51
  .string()
52
- .min(1, 'Site ID is required')
53
- .max(50, 'Site ID must be 50 characters or less')
52
+ .min(1, "Site ID is required")
53
+ .max(50, "Site ID must be 50 characters or less")
54
54
  .regex(
55
55
  /^[a-zA-Z0-9_-]+$/,
56
- 'Site ID can only contain letters, numbers, underscores, and hyphens'
56
+ "Site ID can only contain letters, numbers, underscores, and hyphens",
57
57
  ),
58
58
  name: z
59
59
  .string()
60
- .min(1, 'Site name is required')
61
- .max(100, 'Site name must be 100 characters or less'),
62
- config: SiteConfigSchema
60
+ .min(1, "Site name is required")
61
+ .max(100, "Site name must be 100 characters or less"),
62
+ config: SiteConfigSchema,
63
63
  });
64
64
 
65
65
  /**
@@ -68,23 +68,23 @@ const SiteSchema = z.object({
68
68
  const MultiSiteConfigSchema = z.object({
69
69
  sites: z
70
70
  .array(SiteSchema)
71
- .min(1, 'At least one site must be configured')
72
- .max(50, 'Maximum of 50 sites supported')
71
+ .min(1, "At least one site must be configured")
72
+ .max(50, "Maximum of 50 sites supported")
73
73
  .refine((sites) => {
74
74
  const ids = sites.map((site) => site.id);
75
75
  const uniqueIds = new Set(ids);
76
76
  return ids.length === uniqueIds.size;
77
- }, 'Site IDs must be unique')
77
+ }, "Site IDs must be unique")
78
78
  .refine((sites) => {
79
79
  const names = sites.map((site) => site.name);
80
80
  const uniqueNames = new Set(names);
81
81
  return names.length === uniqueNames.size;
82
- }, 'Site names must be unique')
82
+ }, "Site names must be unique")
83
83
  .refine((sites) => {
84
84
  const urls = sites.map((site) => site.config.WORDPRESS_SITE_URL);
85
85
  const uniqueUrls = new Set(urls);
86
86
  return urls.length === uniqueUrls.size;
87
- }, 'Site URLs must be unique')
87
+ }, "Site URLs must be unique"),
88
88
  });
89
89
 
90
90
  /**
@@ -94,12 +94,12 @@ const EnvironmentConfigSchema = z.object({
94
94
  WORDPRESS_SITE_URL: UrlSchema,
95
95
  WORDPRESS_USERNAME: SiteConfigSchema.shape.WORDPRESS_USERNAME,
96
96
  WORDPRESS_APP_PASSWORD: SiteConfigSchema.shape.WORDPRESS_APP_PASSWORD,
97
- WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default('app-password'),
97
+ WORDPRESS_AUTH_METHOD: AuthMethodSchema.optional().default("app-password"),
98
98
  // Optional environment variables
99
- NODE_ENV: z.enum(['development', 'production', 'test']).optional(),
99
+ NODE_ENV: z.enum(["development", "production", "test"]).optional(),
100
100
  DEBUG: z.string().optional(),
101
101
  DISABLE_CACHE: z.string().optional(),
102
- LOG_LEVEL: z.enum(['error', 'warn', 'info', 'debug']).optional()
102
+ LOG_LEVEL: z.enum(["error", "warn", "info", "debug"]).optional(),
103
103
  });
104
104
 
105
105
  /**
@@ -111,7 +111,7 @@ const McpConfigSchema = z
111
111
  wordpressUsername: SiteConfigSchema.shape.WORDPRESS_USERNAME.optional(),
112
112
  wordpressAppPassword:
113
113
  SiteConfigSchema.shape.WORDPRESS_APP_PASSWORD.optional(),
114
- wordpressAuthMethod: AuthMethodSchema.optional()
114
+ wordpressAuthMethod: AuthMethodSchema.optional(),
115
115
  })
116
116
  .optional();
117
117
 
@@ -137,10 +137,10 @@ export class ConfigurationValidator {
137
137
  } catch (error) {
138
138
  if (error instanceof z.ZodError) {
139
139
  const messages = error.errors
140
- .map((err) => `${err.path.join('.')}: ${err.message}`)
141
- .join('; ');
140
+ .map((err) => `${err.path.join(".")}: ${err.message}`)
141
+ .join("; ");
142
142
  throw new Error(
143
- `Multi-site configuration validation failed: ${messages}`
143
+ `Multi-site configuration validation failed: ${messages}`,
144
144
  );
145
145
  }
146
146
  throw error;
@@ -151,17 +151,17 @@ export class ConfigurationValidator {
151
151
  * Validate environment configuration for single-site mode
152
152
  */
153
153
  static validateEnvironmentConfig(
154
- env: Record<string, string | undefined>
154
+ env: Record<string, string | undefined>,
155
155
  ): EnvironmentConfigType {
156
156
  try {
157
157
  return EnvironmentConfigSchema.parse(env);
158
158
  } catch (error) {
159
159
  if (error instanceof z.ZodError) {
160
160
  const messages = error.errors
161
- .map((err) => `${err.path.join('.')}: ${err.message}`)
162
- .join('; ');
161
+ .map((err) => `${err.path.join(".")}: ${err.message}`)
162
+ .join("; ");
163
163
  throw new Error(
164
- `Environment configuration validation failed: ${messages}`
164
+ `Environment configuration validation failed: ${messages}`,
165
165
  );
166
166
  }
167
167
  throw error;
@@ -177,8 +177,8 @@ export class ConfigurationValidator {
177
177
  } catch (error) {
178
178
  if (error instanceof z.ZodError) {
179
179
  const messages = error.errors
180
- .map((err) => `${err.path.join('.')}: ${err.message}`)
181
- .join('; ');
180
+ .map((err) => `${err.path.join(".")}: ${err.message}`)
181
+ .join("; ");
182
182
  throw new Error(`MCP configuration validation failed: ${messages}`);
183
183
  }
184
184
  throw error;
@@ -194,8 +194,8 @@ export class ConfigurationValidator {
194
194
  } catch (error) {
195
195
  if (error instanceof z.ZodError) {
196
196
  const messages = error.errors
197
- .map((err) => `${err.path.join('.')}: ${err.message}`)
198
- .join('; ');
197
+ .map((err) => `${err.path.join(".")}: ${err.message}`)
198
+ .join("; ");
199
199
  throw new Error(`Site configuration validation failed: ${messages}`);
200
200
  }
201
201
  throw error;
@@ -214,7 +214,7 @@ export class ConfigurationValidator {
214
214
  * Check if environment configuration is valid without throwing
215
215
  */
216
216
  static isValidEnvironmentConfig(
217
- env: Record<string, string | undefined>
217
+ env: Record<string, string | undefined>,
218
218
  ): boolean {
219
219
  const result = EnvironmentConfigSchema.safeParse(env);
220
220
  return result.success;
@@ -229,7 +229,7 @@ export class ConfigurationValidator {
229
229
  return [];
230
230
  }
231
231
  return result.error.errors.map(
232
- (err) => `${err.path.join('.')}: ${err.message}`
232
+ (err) => `${err.path.join(".")}: ${err.message}`,
233
233
  );
234
234
  }
235
235
  }
@@ -242,5 +242,5 @@ export {
242
242
  EnvironmentConfigSchema,
243
243
  McpConfigSchema,
244
244
  AuthMethodSchema,
245
- UrlSchema
245
+ UrlSchema,
246
246
  };
@@ -1,17 +1,17 @@
1
- import dotenv from 'dotenv';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- import { fileURLToPath } from 'url';
5
- import { WordPressClient } from '../client/api.js';
6
- import { CachedWordPressClient } from '../client/CachedWordPressClient.js';
7
- import { WordPressClientConfig } from '../types/client.js';
8
- import { getErrorMessage } from '../utils/error.js';
1
+ import dotenv from "dotenv";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import { fileURLToPath } from "url";
5
+ import { WordPressClient } from "../client/api.js";
6
+ import { CachedWordPressClient } from "../client/CachedWordPressClient.js";
7
+ import { WordPressClientConfig } from "../types/client.js";
8
+ import { getErrorMessage } from "../utils/error.js";
9
9
  import {
10
10
  ConfigurationValidator,
11
11
  type SiteType as SiteConfig,
12
12
  type MultiSiteConfigType as MultiSiteConfig,
13
- type McpConfigType
14
- } from './ConfigurationSchema.js';
13
+ type McpConfigType,
14
+ } from "./ConfigurationSchema.js";
15
15
 
16
16
  // Re-export types from schema for backward compatibility
17
17
  export type { SiteConfig, MultiSiteConfig };
@@ -28,8 +28,8 @@ export class ServerConfiguration {
28
28
  constructor() {
29
29
  const __filename = fileURLToPath(import.meta.url);
30
30
  const __dirname = path.dirname(__filename);
31
- this.rootDir = path.resolve(__dirname, '../..');
32
- this.envPath = path.resolve(this.rootDir, '.env');
31
+ this.rootDir = path.resolve(__dirname, "../..");
32
+ this.envPath = path.resolve(this.rootDir, ".env");
33
33
 
34
34
  // Load environment variables
35
35
  dotenv.config({ path: this.envPath });
@@ -53,19 +53,19 @@ export class ServerConfiguration {
53
53
  clients: Map<string, WordPressClient>;
54
54
  configs: SiteConfig[];
55
55
  } {
56
- const configPath = path.resolve(this.rootDir, 'mcp-wordpress.config.json');
56
+ const configPath = path.resolve(this.rootDir, "mcp-wordpress.config.json");
57
57
 
58
58
  if (fs.existsSync(configPath)) {
59
- if (process.env.NODE_ENV !== 'test') {
59
+ if (process.env.NODE_ENV !== "test") {
60
60
  console.error(
61
- 'INFO: Found mcp-wordpress.config.json, loading multi-site configuration.'
61
+ "INFO: Found mcp-wordpress.config.json, loading multi-site configuration.",
62
62
  );
63
63
  }
64
64
  return this.loadMultiSiteConfig(configPath);
65
65
  } else {
66
- if (process.env.NODE_ENV !== 'test') {
66
+ if (process.env.NODE_ENV !== "test") {
67
67
  console.error(
68
- 'INFO: mcp-wordpress.config.json not found, falling back to environment variables for single-site mode.'
68
+ "INFO: mcp-wordpress.config.json not found, falling back to environment variables for single-site mode.",
69
69
  );
70
70
  }
71
71
  return this.loadSingleSiteFromEnv(mcpConfig);
@@ -80,7 +80,7 @@ export class ServerConfiguration {
80
80
  configs: SiteConfig[];
81
81
  } {
82
82
  try {
83
- const configFile = fs.readFileSync(configPath, 'utf-8');
83
+ const configFile = fs.readFileSync(configPath, "utf-8");
84
84
  const rawConfig = JSON.parse(configFile);
85
85
 
86
86
  // Validate configuration using Zod schema
@@ -93,23 +93,23 @@ export class ServerConfiguration {
93
93
  const clientConfig: WordPressClientConfig = {
94
94
  baseUrl: site.config.WORDPRESS_SITE_URL,
95
95
  auth: {
96
- method: site.config.WORDPRESS_AUTH_METHOD || 'app-password',
96
+ method: site.config.WORDPRESS_AUTH_METHOD || "app-password",
97
97
  username: site.config.WORDPRESS_USERNAME,
98
- appPassword: site.config.WORDPRESS_APP_PASSWORD
99
- }
98
+ appPassword: site.config.WORDPRESS_APP_PASSWORD,
99
+ },
100
100
  };
101
101
 
102
102
  // Use cached client for better performance
103
103
  const client =
104
- process.env.DISABLE_CACHE === 'true'
104
+ process.env.DISABLE_CACHE === "true"
105
105
  ? new WordPressClient(clientConfig)
106
106
  : new CachedWordPressClient(clientConfig, site.id);
107
107
  clients.set(site.id, client);
108
108
  validConfigs.push(site);
109
109
 
110
- if (process.env.NODE_ENV !== 'test') {
110
+ if (process.env.NODE_ENV !== "test") {
111
111
  console.error(
112
- `INFO: Initialized client for site: ${site.name} (ID: ${site.id})`
112
+ `INFO: Initialized client for site: ${site.name} (ID: ${site.id})`,
113
113
  );
114
114
  }
115
115
  }
@@ -117,7 +117,7 @@ export class ServerConfiguration {
117
117
  return { clients, configs: validConfigs };
118
118
  } catch (error) {
119
119
  console.error(
120
- `FATAL: Error reading or parsing mcp-wordpress.config.json: ${getErrorMessage(error)}`
120
+ `FATAL: Error reading or parsing mcp-wordpress.config.json: ${getErrorMessage(error)}`,
121
121
  );
122
122
  process.exit(1);
123
123
  }
@@ -150,11 +150,11 @@ export class ServerConfiguration {
150
150
  WORDPRESS_AUTH_METHOD:
151
151
  validatedMcpConfig?.wordpressAuthMethod ||
152
152
  process.env.WORDPRESS_AUTH_METHOD ||
153
- 'app-password',
153
+ "app-password",
154
154
  NODE_ENV: process.env.NODE_ENV,
155
155
  DEBUG: process.env.DEBUG,
156
156
  DISABLE_CACHE: process.env.DISABLE_CACHE,
157
- LOG_LEVEL: process.env.LOG_LEVEL
157
+ LOG_LEVEL: process.env.LOG_LEVEL,
158
158
  };
159
159
 
160
160
  // Validate environment configuration using Zod schema
@@ -166,41 +166,41 @@ export class ServerConfiguration {
166
166
  auth: {
167
167
  method: validatedConfig.WORDPRESS_AUTH_METHOD,
168
168
  username: validatedConfig.WORDPRESS_USERNAME,
169
- appPassword: validatedConfig.WORDPRESS_APP_PASSWORD
170
- }
169
+ appPassword: validatedConfig.WORDPRESS_APP_PASSWORD,
170
+ },
171
171
  };
172
172
 
173
173
  // Use cached client for better performance
174
174
  const client =
175
- process.env.DISABLE_CACHE === 'true'
175
+ process.env.DISABLE_CACHE === "true"
176
176
  ? new WordPressClient(clientConfig)
177
- : new CachedWordPressClient(clientConfig, 'default');
177
+ : new CachedWordPressClient(clientConfig, "default");
178
178
  const clients = new Map<string, WordPressClient>();
179
- clients.set('default', client);
179
+ clients.set("default", client);
180
180
 
181
181
  const siteConfig: SiteConfig = {
182
- id: 'default',
183
- name: 'Default Site',
182
+ id: "default",
183
+ name: "Default Site",
184
184
  config: {
185
185
  WORDPRESS_SITE_URL: validatedConfig.WORDPRESS_SITE_URL,
186
186
  WORDPRESS_USERNAME: validatedConfig.WORDPRESS_USERNAME,
187
187
  WORDPRESS_APP_PASSWORD: validatedConfig.WORDPRESS_APP_PASSWORD,
188
- WORDPRESS_AUTH_METHOD: validatedConfig.WORDPRESS_AUTH_METHOD
189
- }
188
+ WORDPRESS_AUTH_METHOD: validatedConfig.WORDPRESS_AUTH_METHOD,
189
+ },
190
190
  };
191
191
 
192
192
  console.error(
193
- 'INFO: Initialized client for default site in single-site mode.'
193
+ "INFO: Initialized client for default site in single-site mode.",
194
194
  );
195
195
 
196
196
  return { clients, configs: [siteConfig] };
197
197
  } catch (error) {
198
198
  console.error(
199
- 'ERROR: Configuration validation failed for single-site mode.'
199
+ "ERROR: Configuration validation failed for single-site mode.",
200
200
  );
201
201
  console.error(`Details: ${getErrorMessage(error)}`);
202
202
  console.error(
203
- 'Please check your environment variables or MCP configuration.'
203
+ "Please check your environment variables or MCP configuration.",
204
204
  );
205
205
  return { clients: new Map(), configs: [] };
206
206
  }