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.
Files changed (348) hide show
  1. package/README.md +114 -48
  2. package/dist/ajv-patch.js +34 -0
  3. package/dist/cache/CacheInvalidation.d.ts +3 -1
  4. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  5. package/dist/cache/CacheInvalidation.js +10 -4
  6. package/dist/cache/CacheInvalidation.js.map +1 -1
  7. package/dist/cache/CacheManager.d.ts +3 -2
  8. package/dist/cache/CacheManager.d.ts.map +1 -1
  9. package/dist/cache/CacheManager.js +11 -3
  10. package/dist/cache/CacheManager.js.map +1 -1
  11. package/dist/cache/HttpCacheWrapper.d.ts +7 -6
  12. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  13. package/dist/cache/HttpCacheWrapper.js +8 -5
  14. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  15. package/dist/cache/__tests__/HttpCacheWrapper.test.js +6 -5
  16. package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
  17. package/dist/cache/index.d.ts +3 -3
  18. package/dist/cache/index.d.ts.map +1 -1
  19. package/dist/cache/index.js +1 -1
  20. package/dist/cache/index.js.map +1 -1
  21. package/dist/client/CachedWordPressClient.d.ts +23 -9
  22. package/dist/client/CachedWordPressClient.d.ts.map +1 -1
  23. package/dist/client/CachedWordPressClient.js +4 -1
  24. package/dist/client/CachedWordPressClient.js.map +1 -1
  25. package/dist/client/MockWordPressClient.d.ts +2 -1
  26. package/dist/client/MockWordPressClient.d.ts.map +1 -1
  27. package/dist/client/MockWordPressClient.js +3 -1
  28. package/dist/client/MockWordPressClient.js.map +1 -1
  29. package/dist/client/api.d.ts +17 -13
  30. package/dist/client/api.d.ts.map +1 -1
  31. package/dist/client/api.js +135 -30
  32. package/dist/client/api.js.map +1 -1
  33. package/dist/client/auth.d.ts.map +1 -1
  34. package/dist/client/auth.js +2 -3
  35. package/dist/client/auth.js.map +1 -1
  36. package/dist/client/managers/AuthenticationManager.d.ts +55 -2
  37. package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
  38. package/dist/client/managers/AuthenticationManager.js +269 -71
  39. package/dist/client/managers/AuthenticationManager.js.map +1 -1
  40. package/dist/client/managers/BaseManager.d.ts +3 -3
  41. package/dist/client/managers/BaseManager.d.ts.map +1 -1
  42. package/dist/client/managers/BaseManager.js +11 -5
  43. package/dist/client/managers/BaseManager.js.map +1 -1
  44. package/dist/client/managers/RequestManager.d.ts +2 -2
  45. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  46. package/dist/client/managers/RequestManager.js +25 -12
  47. package/dist/client/managers/RequestManager.js.map +1 -1
  48. package/dist/config/Config.d.ts +155 -0
  49. package/dist/config/Config.d.ts.map +1 -0
  50. package/dist/config/Config.js +215 -0
  51. package/dist/config/Config.js.map +1 -0
  52. package/dist/config/ConfigurationSchema.d.ts +21 -21
  53. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  54. package/dist/config/ConfigurationSchema.js +19 -2
  55. package/dist/config/ConfigurationSchema.js.map +1 -1
  56. package/dist/config/ServerConfiguration.d.ts +2 -1
  57. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  58. package/dist/config/ServerConfiguration.js +50 -41
  59. package/dist/config/ServerConfiguration.js.map +1 -1
  60. package/dist/docs/DocumentationGenerator.d.ts +9 -8
  61. package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
  62. package/dist/docs/DocumentationGenerator.js +10 -7
  63. package/dist/docs/DocumentationGenerator.js.map +1 -1
  64. package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
  65. package/dist/docs/MarkdownFormatter.js +3 -2
  66. package/dist/docs/MarkdownFormatter.js.map +1 -1
  67. package/dist/dxt-entry.cjs +81 -0
  68. package/dist/dxt-entry.js +15 -14
  69. package/dist/dxt-entry.js.map +1 -1
  70. package/dist/index.d.ts +3 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +37 -21
  73. package/dist/index.js.map +1 -1
  74. package/dist/performance/MetricsCollector.d.ts +13 -7
  75. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  76. package/dist/performance/MetricsCollector.js +69 -27
  77. package/dist/performance/MetricsCollector.js.map +1 -1
  78. package/dist/performance/PerformanceAnalytics.d.ts +8 -2
  79. package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
  80. package/dist/performance/PerformanceAnalytics.js +17 -47
  81. package/dist/performance/PerformanceAnalytics.js.map +1 -1
  82. package/dist/performance/PerformanceMonitor.d.ts +2 -1
  83. package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
  84. package/dist/performance/PerformanceMonitor.js +12 -13
  85. package/dist/performance/PerformanceMonitor.js.map +1 -1
  86. package/dist/performance/index.d.ts +2 -2
  87. package/dist/performance/index.d.ts.map +1 -1
  88. package/dist/security/AISecurityScanner.d.ts +1 -0
  89. package/dist/security/AISecurityScanner.d.ts.map +1 -1
  90. package/dist/security/AISecurityScanner.js +22 -12
  91. package/dist/security/AISecurityScanner.js.map +1 -1
  92. package/dist/security/AutomatedRemediation.d.ts +4 -3
  93. package/dist/security/AutomatedRemediation.d.ts.map +1 -1
  94. package/dist/security/AutomatedRemediation.js +46 -15
  95. package/dist/security/AutomatedRemediation.js.map +1 -1
  96. package/dist/security/InputValidator.d.ts +13 -9
  97. package/dist/security/InputValidator.d.ts.map +1 -1
  98. package/dist/security/InputValidator.js +4 -2
  99. package/dist/security/InputValidator.js.map +1 -1
  100. package/dist/security/SecurityCIPipeline.d.ts +1 -1
  101. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  102. package/dist/security/SecurityCIPipeline.js +38 -29
  103. package/dist/security/SecurityCIPipeline.js.map +1 -1
  104. package/dist/security/SecurityConfig.d.ts +3 -3
  105. package/dist/security/SecurityConfig.d.ts.map +1 -1
  106. package/dist/security/SecurityConfig.js +13 -9
  107. package/dist/security/SecurityConfig.js.map +1 -1
  108. package/dist/security/SecurityConfigManager.d.ts +2 -2
  109. package/dist/security/SecurityConfigManager.d.ts.map +1 -1
  110. package/dist/security/SecurityConfigManager.js +20 -15
  111. package/dist/security/SecurityConfigManager.js.map +1 -1
  112. package/dist/security/SecurityMonitoring.d.ts +2 -2
  113. package/dist/security/SecurityMonitoring.d.ts.map +1 -1
  114. package/dist/security/SecurityMonitoring.js +19 -17
  115. package/dist/security/SecurityMonitoring.js.map +1 -1
  116. package/dist/security/SecurityReviewer.d.ts.map +1 -1
  117. package/dist/security/SecurityReviewer.js +10 -7
  118. package/dist/security/SecurityReviewer.js.map +1 -1
  119. package/dist/security/index.d.ts +24 -23
  120. package/dist/security/index.d.ts.map +1 -1
  121. package/dist/security/index.js +52 -23
  122. package/dist/security/index.js.map +1 -1
  123. package/dist/server/ConnectionTester.d.ts +12 -4
  124. package/dist/server/ConnectionTester.d.ts.map +1 -1
  125. package/dist/server/ConnectionTester.js +96 -22
  126. package/dist/server/ConnectionTester.js.map +1 -1
  127. package/dist/server/ToolRegistry.d.ts +2 -2
  128. package/dist/server/ToolRegistry.d.ts.map +1 -1
  129. package/dist/server/ToolRegistry.js +10 -5
  130. package/dist/server/ToolRegistry.js.map +1 -1
  131. package/dist/tools/BaseToolManager.d.ts +47 -11
  132. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  133. package/dist/tools/BaseToolManager.js +168 -29
  134. package/dist/tools/BaseToolManager.js.map +1 -1
  135. package/dist/tools/auth.d.ts +16 -10
  136. package/dist/tools/auth.d.ts.map +1 -1
  137. package/dist/tools/auth.js +3 -2
  138. package/dist/tools/auth.js.map +1 -1
  139. package/dist/tools/cache.d.ts +30 -30
  140. package/dist/tools/cache.d.ts.map +1 -1
  141. package/dist/tools/cache.js +1 -6
  142. package/dist/tools/cache.js.map +1 -1
  143. package/dist/tools/comments.d.ts +20 -20
  144. package/dist/tools/comments.d.ts.map +1 -1
  145. package/dist/tools/comments.js +16 -9
  146. package/dist/tools/comments.js.map +1 -1
  147. package/dist/tools/media.d.ts +18 -16
  148. package/dist/tools/media.d.ts.map +1 -1
  149. package/dist/tools/media.js +16 -15
  150. package/dist/tools/media.js.map +1 -1
  151. package/dist/tools/pages.d.ts +19 -17
  152. package/dist/tools/pages.d.ts.map +1 -1
  153. package/dist/tools/pages.js +16 -12
  154. package/dist/tools/pages.js.map +1 -1
  155. package/dist/tools/performance.d.ts +11 -1
  156. package/dist/tools/performance.d.ts.map +1 -1
  157. package/dist/tools/performance.js +67 -34
  158. package/dist/tools/performance.js.map +1 -1
  159. package/dist/tools/posts/PostHandlers.d.ts +46 -0
  160. package/dist/tools/posts/PostHandlers.d.ts.map +1 -0
  161. package/dist/tools/posts/PostHandlers.js +400 -0
  162. package/dist/tools/posts/PostHandlers.js.map +1 -0
  163. package/dist/tools/posts/PostToolDefinitions.d.ts +37 -0
  164. package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -0
  165. package/dist/tools/posts/PostToolDefinitions.js +236 -0
  166. package/dist/tools/posts/PostToolDefinitions.js.map +1 -0
  167. package/dist/tools/posts/index.d.ts +138 -0
  168. package/dist/tools/posts/index.d.ts.map +1 -0
  169. package/dist/tools/posts/index.js +163 -0
  170. package/dist/tools/posts/index.js.map +1 -0
  171. package/dist/tools/posts.d.ts +10 -246
  172. package/dist/tools/posts.d.ts.map +1 -1
  173. package/dist/tools/posts.js +11 -723
  174. package/dist/tools/posts.js.map +1 -1
  175. package/dist/tools/site.d.ts +19 -18
  176. package/dist/tools/site.d.ts.map +1 -1
  177. package/dist/tools/site.js +14 -10
  178. package/dist/tools/site.js.map +1 -1
  179. package/dist/tools/taxonomies.d.ts +23 -24
  180. package/dist/tools/taxonomies.d.ts.map +1 -1
  181. package/dist/tools/taxonomies.js +24 -18
  182. package/dist/tools/taxonomies.js.map +1 -1
  183. package/dist/tools/users.d.ts +20 -15
  184. package/dist/tools/users.d.ts.map +1 -1
  185. package/dist/tools/users.js +12 -8
  186. package/dist/tools/users.js.map +1 -1
  187. package/dist/types/client.d.ts +48 -41
  188. package/dist/types/client.d.ts.map +1 -1
  189. package/dist/types/client.js +30 -5
  190. package/dist/types/client.js.map +1 -1
  191. package/dist/types/enhanced.d.ts +237 -0
  192. package/dist/types/enhanced.d.ts.map +1 -0
  193. package/dist/types/enhanced.js +49 -0
  194. package/dist/types/enhanced.js.map +1 -0
  195. package/dist/types/index.d.ts +15 -12
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/types/index.js +2 -0
  198. package/dist/types/index.js.map +1 -1
  199. package/dist/types/mcp.d.ts +12 -12
  200. package/dist/types/mcp.d.ts.map +1 -1
  201. package/dist/types/requests.d.ts +322 -0
  202. package/dist/types/requests.d.ts.map +1 -0
  203. package/dist/types/requests.js +8 -0
  204. package/dist/types/requests.js.map +1 -0
  205. package/dist/types/tools.d.ts +506 -0
  206. package/dist/types/tools.d.ts.map +1 -0
  207. package/dist/types/tools.js +8 -0
  208. package/dist/types/tools.js.map +1 -0
  209. package/dist/types/wordpress.d.ts +43 -15
  210. package/dist/types/wordpress.d.ts.map +1 -1
  211. package/dist/types/wordpress.js +8 -1
  212. package/dist/types/wordpress.js.map +1 -1
  213. package/dist/utils/debug.d.ts +19 -11
  214. package/dist/utils/debug.d.ts.map +1 -1
  215. package/dist/utils/debug.js +46 -10
  216. package/dist/utils/debug.js.map +1 -1
  217. package/dist/utils/enhancedError.d.ts +8 -8
  218. package/dist/utils/enhancedError.d.ts.map +1 -1
  219. package/dist/utils/enhancedError.js.map +1 -1
  220. package/dist/utils/error.d.ts +2 -4
  221. package/dist/utils/error.d.ts.map +1 -1
  222. package/dist/utils/error.js +42 -5
  223. package/dist/utils/error.js.map +1 -1
  224. package/dist/utils/logger.d.ts +106 -0
  225. package/dist/utils/logger.d.ts.map +1 -0
  226. package/dist/utils/logger.js +280 -0
  227. package/dist/utils/logger.js.map +1 -0
  228. package/dist/utils/streaming.d.ts +9 -9
  229. package/dist/utils/streaming.d.ts.map +1 -1
  230. package/dist/utils/streaming.js +71 -52
  231. package/dist/utils/streaming.js.map +1 -1
  232. package/dist/utils/toolWrapper.d.ts +9 -7
  233. package/dist/utils/toolWrapper.d.ts.map +1 -1
  234. package/dist/utils/toolWrapper.js.map +1 -1
  235. package/dist/utils/validation/core.d.ts +21 -0
  236. package/dist/utils/validation/core.d.ts.map +1 -0
  237. package/dist/utils/validation/core.js +71 -0
  238. package/dist/utils/validation/core.js.map +1 -0
  239. package/dist/utils/validation/index.d.ts +25 -0
  240. package/dist/utils/validation/index.d.ts.map +1 -0
  241. package/dist/utils/validation/index.js +29 -0
  242. package/dist/utils/validation/index.js.map +1 -0
  243. package/dist/utils/validation/network.d.ts +19 -0
  244. package/dist/utils/validation/network.d.ts.map +1 -0
  245. package/dist/utils/validation/network.js +93 -0
  246. package/dist/utils/validation/network.js.map +1 -0
  247. package/dist/utils/validation/rateLimit.d.ts +21 -0
  248. package/dist/utils/validation/rateLimit.d.ts.map +1 -0
  249. package/dist/utils/validation/rateLimit.js +43 -0
  250. package/dist/utils/validation/rateLimit.js.map +1 -0
  251. package/dist/utils/validation/security.d.ts +29 -0
  252. package/dist/utils/validation/security.d.ts.map +1 -0
  253. package/dist/utils/validation/security.js +327 -0
  254. package/dist/utils/validation/security.js.map +1 -0
  255. package/dist/utils/validation/wordpress.d.ts +31 -0
  256. package/dist/utils/validation/wordpress.d.ts.map +1 -0
  257. package/dist/utils/validation/wordpress.js +146 -0
  258. package/dist/utils/validation/wordpress.js.map +1 -0
  259. package/dist/utils/validation.d.ts +13 -82
  260. package/dist/utils/validation.d.ts.map +1 -1
  261. package/dist/utils/validation.js +25 -343
  262. package/dist/utils/validation.js.map +1 -1
  263. package/docs/BADGE_UPDATES.md +132 -0
  264. package/docs/CI_CD_IMPROVEMENTS.md +191 -0
  265. package/docs/INCREMENTAL_COVERAGE.md +183 -0
  266. package/docs/api/README.md +3 -1
  267. package/docs/api/openapi.json +5 -1
  268. package/docs/api/summary.json +1 -1
  269. package/docs/api/tools/wp_create_post.md +12 -14
  270. package/docs/examples/claude-desktop-config.md +1 -1
  271. package/docs/examples/docker-production.md +100 -93
  272. package/docs/examples/multi-site-setup.md +5 -4
  273. package/docs/examples/single-site-setup.md +3 -4
  274. package/docs/examples/use-case-workflows.md +4 -5
  275. package/docs/integrations/claude-desktop.md +31 -31
  276. package/docs/integrations/cline.md +4 -4
  277. package/docs/integrations/vs-code.md +9 -8
  278. package/docs/user-guides/SMITHERY_SETUP.md +10 -10
  279. package/package.json +44 -25
  280. package/src/cache/CacheInvalidation.ts +12 -5
  281. package/src/cache/CacheManager.ts +18 -15
  282. package/src/cache/HttpCacheWrapper.ts +30 -59
  283. package/src/cache/__tests__/HttpCacheWrapper.test.ts +6 -5
  284. package/src/cache/index.ts +3 -14
  285. package/src/client/CachedWordPressClient.ts +32 -30
  286. package/src/client/MockWordPressClient.ts +4 -2
  287. package/src/client/api.ts +186 -64
  288. package/src/client/auth.ts +15 -40
  289. package/src/client/managers/AuthenticationManager.ts +337 -77
  290. package/src/client/managers/BaseManager.ts +18 -30
  291. package/src/client/managers/RequestManager.ts +39 -44
  292. package/src/config/Config.ts +308 -0
  293. package/src/config/ConfigurationSchema.ts +23 -2
  294. package/src/config/ServerConfiguration.ts +51 -47
  295. package/src/docs/DocumentationGenerator.ts +50 -39
  296. package/src/docs/MarkdownFormatter.ts +19 -29
  297. package/src/dxt-entry.cjs +26 -16
  298. package/src/dxt-entry.ts +17 -27
  299. package/src/index.ts +42 -28
  300. package/src/performance/MetricsCollector.ts +108 -86
  301. package/src/performance/PerformanceAnalytics.ts +69 -164
  302. package/src/performance/PerformanceMonitor.ts +32 -47
  303. package/src/performance/index.ts +2 -10
  304. package/src/security/AISecurityScanner.ts +22 -12
  305. package/src/security/AutomatedRemediation.ts +49 -18
  306. package/src/security/InputValidator.ts +9 -6
  307. package/src/security/SecurityCIPipeline.ts +53 -37
  308. package/src/security/SecurityConfig.ts +22 -22
  309. package/src/security/SecurityConfigManager.ts +23 -19
  310. package/src/security/SecurityMonitoring.ts +24 -21
  311. package/src/security/SecurityReviewer.ts +10 -7
  312. package/src/security/index.ts +64 -29
  313. package/src/server/ConnectionTester.ts +120 -31
  314. package/src/server/ToolRegistry.ts +31 -21
  315. package/src/tools/BaseToolManager.ts +286 -33
  316. package/src/tools/auth.ts +20 -8
  317. package/src/tools/cache.ts +5 -15
  318. package/src/tools/comments.ts +34 -48
  319. package/src/tools/media.ts +41 -53
  320. package/src/tools/pages.ts +32 -54
  321. package/src/tools/performance.ts +141 -176
  322. package/src/tools/posts/PostHandlers.ts +474 -0
  323. package/src/tools/posts/PostToolDefinitions.ts +250 -0
  324. package/src/tools/posts/index.ts +192 -0
  325. package/src/tools/posts.ts +24 -780
  326. package/src/tools/site.ts +34 -19
  327. package/src/tools/taxonomies.ts +41 -57
  328. package/src/tools/users.ts +28 -16
  329. package/src/types/client.ts +114 -138
  330. package/src/types/enhanced.ts +318 -0
  331. package/src/types/index.ts +51 -30
  332. package/src/types/mcp.ts +20 -42
  333. package/src/types/requests.ts +378 -0
  334. package/src/types/tools.ts +608 -0
  335. package/src/types/wordpress.ts +56 -34
  336. package/src/utils/debug.ts +77 -59
  337. package/src/utils/enhancedError.ts +8 -8
  338. package/src/utils/error.ts +53 -31
  339. package/src/utils/logger.ts +351 -0
  340. package/src/utils/streaming.ts +86 -68
  341. package/src/utils/toolWrapper.ts +10 -12
  342. package/src/utils/validation/core.ts +108 -0
  343. package/src/utils/validation/index.ts +36 -0
  344. package/src/utils/validation/network.ts +132 -0
  345. package/src/utils/validation/rateLimit.ts +54 -0
  346. package/src/utils/validation/security.ts +361 -0
  347. package/src/utils/validation/wordpress.ts +180 -0
  348. package/src/utils/validation.ts +47 -470
package/src/tools/site.ts CHANGED
@@ -11,7 +11,12 @@ export class SiteTools {
11
11
  * Retrieves the list of site management tools.
12
12
  * @returns An array of MCPTool definitions.
13
13
  */
14
- public getTools(): any[] {
14
+ public getTools(): Array<{
15
+ name: string;
16
+ description: string;
17
+ parameters?: Array<{ name: string; type?: string; description?: string; required?: boolean; enum?: string[]; items?: unknown }>;
18
+ handler: (client: WordPressClient, params: Record<string, unknown>) => Promise<unknown>;
19
+ }> {
15
20
  return [
16
21
  {
17
22
  name: "wp_get_site_settings",
@@ -121,7 +126,10 @@ export class SiteTools {
121
126
  ];
122
127
  }
123
128
 
124
- public async handleGetSiteSettings(client: WordPressClient, params: any): Promise<any> {
129
+ public async handleGetSiteSettings(
130
+ client: WordPressClient,
131
+ _params: Record<string, unknown>,
132
+ ): Promise<unknown> {
125
133
  try {
126
134
  const settings = await client.getSiteSettings();
127
135
  const siteUrl = client.getSiteUrl();
@@ -179,7 +187,10 @@ export class SiteTools {
179
187
  }
180
188
  }
181
189
 
182
- public async handleUpdateSiteSettings(client: WordPressClient, params: any): Promise<any> {
190
+ public async handleUpdateSiteSettings(
191
+ client: WordPressClient,
192
+ params: Record<string, unknown>,
193
+ ): Promise<unknown> {
183
194
  try {
184
195
  const updatedSettings = await client.updateSiteSettings(params);
185
196
  return `✅ Site settings updated successfully. New title: ${updatedSettings.title}`;
@@ -190,15 +201,16 @@ export class SiteTools {
190
201
 
191
202
  public async handleSearchSite(
192
203
  client: WordPressClient,
193
- params: { term: string; type?: "posts" | "pages" | "media" },
194
- ): Promise<any> {
204
+ params: Record<string, unknown>,
205
+ ): Promise<unknown> {
195
206
  try {
196
- const results = await client.search(params.term, params.type ? [params.type] : undefined);
207
+ const { term, type } = params as { term: string; type?: "posts" | "pages" | "media" };
208
+ const results = await client.search(term, type ? [type] : undefined);
197
209
  if (results.length === 0) {
198
- return `No results found for "${params.term}".`;
210
+ return `No results found for "${term}".`;
199
211
  }
200
212
  const content =
201
- `Found ${results.length} results for "${params.term}":\n\n` +
213
+ `Found ${results.length} results for "${term}":\n\n` +
202
214
  results.map((r) => `- [${r.type}] **${r.title}**\n Link: ${r.url}`).join("\n");
203
215
  return content;
204
216
  } catch (error) {
@@ -206,14 +218,15 @@ export class SiteTools {
206
218
  }
207
219
  }
208
220
 
209
- public async handleGetApplicationPasswords(client: WordPressClient, params: { user_id: number }): Promise<any> {
221
+ public async handleGetApplicationPasswords(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
210
222
  try {
211
- const passwords = await client.getApplicationPasswords(params.user_id);
223
+ const { user_id } = params as { user_id: number };
224
+ const passwords = await client.getApplicationPasswords(user_id);
212
225
  if (passwords.length === 0) {
213
- return `No application passwords found for user ID ${params.user_id}.`;
226
+ return `No application passwords found for user ID ${user_id}.`;
214
227
  }
215
228
  const content =
216
- `Found ${passwords.length} application passwords for user ID ${params.user_id}:\n\n` +
229
+ `Found ${passwords.length} application passwords for user ID ${user_id}:\n\n` +
217
230
  passwords
218
231
  .map(
219
232
  (p: WordPressApplicationPassword) =>
@@ -228,10 +241,11 @@ export class SiteTools {
228
241
 
229
242
  public async handleCreateApplicationPassword(
230
243
  client: WordPressClient,
231
- params: { user_id: number; app_name: string },
232
- ): Promise<any> {
244
+ params: Record<string, unknown>,
245
+ ): Promise<unknown> {
233
246
  try {
234
- const result = await client.createApplicationPassword(params.user_id, params.app_name);
247
+ const { user_id, app_name } = params as { user_id: number; app_name: string };
248
+ const result = await client.createApplicationPassword(user_id, app_name);
235
249
  const content =
236
250
  "✅ **Application password created successfully!**\n\n" +
237
251
  `**Name:** ${result.name}\n` +
@@ -245,11 +259,12 @@ export class SiteTools {
245
259
 
246
260
  public async handleDeleteApplicationPassword(
247
261
  client: WordPressClient,
248
- params: { user_id: number; uuid: string },
249
- ): Promise<any> {
262
+ params: Record<string, unknown>,
263
+ ): Promise<unknown> {
250
264
  try {
251
- await client.deleteApplicationPassword(params.user_id, params.uuid);
252
- return `✅ Application password with UUID ${params.uuid} has been revoked.`;
265
+ const { user_id, uuid } = params as { user_id: number; uuid: string };
266
+ await client.deleteApplicationPassword(user_id, uuid);
267
+ return `✅ Application password with UUID ${uuid} has been revoked.`;
253
268
  } catch (error) {
254
269
  throw new Error(`Failed to delete application password: ${getErrorMessage(error)}`);
255
270
  }
@@ -16,7 +16,12 @@ export class TaxonomyTools {
16
16
  * Retrieves the list of taxonomy management tools.
17
17
  * @returns An array of MCPTool definitions.
18
18
  */
19
- public getTools(): any[] {
19
+ public getTools(): Array<{
20
+ name: string;
21
+ description: string;
22
+ parameters?: Array<{ name: string; type?: string; description?: string; required?: boolean; enum?: string[]; items?: unknown }>;
23
+ handler: (client: WordPressClient, params: Record<string, unknown>) => Promise<unknown>;
24
+ }> {
20
25
  return [
21
26
  // Categories
22
27
  {
@@ -171,32 +176,26 @@ export class TaxonomyTools {
171
176
  ];
172
177
  }
173
178
 
174
- public async handleListCategories(
175
- client: WordPressClient,
176
- params: any,
177
- ): Promise<any> {
179
+ public async handleListCategories(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
180
+ const queryParams = params as Record<string, string | number | boolean>;
178
181
  try {
179
- const categories = await client.getCategories(params);
182
+ const categories = await client.getCategories(queryParams);
180
183
  if (categories.length === 0) {
181
184
  return "No categories found.";
182
185
  }
183
186
  const content =
184
187
  `Found ${categories.length} categories:\n\n` +
185
- categories
186
- .map((c) => `- ID ${c.id}: **${c.name}** (Posts: ${c.count})`)
187
- .join("\n");
188
+ categories.map((c) => `- ID ${c.id}: **${c.name}** (Posts: ${c.count})`).join("\n");
188
189
  return content;
189
190
  } catch (error) {
190
191
  throw new Error(`Failed to list categories: ${getErrorMessage(error)}`);
191
192
  }
192
193
  }
193
194
 
194
- public async handleGetCategory(
195
- client: WordPressClient,
196
- params: { id: number },
197
- ): Promise<any> {
195
+ public async handleGetCategory(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
196
+ const { id } = params as { id: number };
198
197
  try {
199
- const category = await client.getCategory(params.id);
198
+ const category = await client.getCategory(id);
200
199
  const content =
201
200
  `**Category Details (ID: ${category.id})**\n\n` +
202
201
  `- **Name:** ${category.name}\n` +
@@ -209,12 +208,10 @@ export class TaxonomyTools {
209
208
  }
210
209
  }
211
210
 
212
- public async handleCreateCategory(
213
- client: WordPressClient,
214
- params: CreateCategoryRequest,
215
- ): Promise<any> {
211
+ public async handleCreateCategory(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
212
+ const createParams = params as unknown as CreateCategoryRequest;
216
213
  try {
217
- const category = await client.createCategory(params);
214
+ const category = await client.createCategory(createParams);
218
215
  return `✅ Category "${category.name}" created successfully with ID: ${category.id}.`;
219
216
  } catch (error) {
220
217
  throw new Error(`Failed to create category: ${getErrorMessage(error)}`);
@@ -223,54 +220,47 @@ export class TaxonomyTools {
223
220
 
224
221
  public async handleUpdateCategory(
225
222
  client: WordPressClient,
226
- params: UpdateCategoryRequest & { id: number },
227
- ): Promise<any> {
223
+ params: Record<string, unknown>,
224
+ ): Promise<unknown> {
225
+ const updateParams = params as unknown as UpdateCategoryRequest;
228
226
  try {
229
- const category = await client.updateCategory(params);
227
+ const category = await client.updateCategory(updateParams);
230
228
  return `✅ Category ${category.id} updated successfully.`;
231
229
  } catch (error) {
232
230
  throw new Error(`Failed to update category: ${getErrorMessage(error)}`);
233
231
  }
234
232
  }
235
233
 
236
- public async handleDeleteCategory(
237
- client: WordPressClient,
238
- params: { id: number },
239
- ): Promise<any> {
234
+ public async handleDeleteCategory(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
235
+ const { id } = params as { id: number };
240
236
  try {
241
- await client.deleteCategory(params.id);
242
- return `✅ Category ${params.id} has been deleted.`;
237
+ await client.deleteCategory(id);
238
+ return `✅ Category ${id} has been deleted.`;
243
239
  } catch (error) {
244
240
  throw new Error(`Failed to delete category: ${getErrorMessage(error)}`);
245
241
  }
246
242
  }
247
243
 
248
- public async handleListTags(
249
- client: WordPressClient,
250
- params: any,
251
- ): Promise<any> {
244
+ public async handleListTags(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
245
+ const queryParams = params as Record<string, string | number | boolean>;
252
246
  try {
253
- const tags = await client.getTags(params);
247
+ const tags = await client.getTags(queryParams);
254
248
  if (tags.length === 0) {
255
249
  return "No tags found.";
256
250
  }
257
251
  const content =
258
252
  `Found ${tags.length} tags:\n\n` +
259
- tags
260
- .map((t) => `- ID ${t.id}: **${t.name}** (Posts: ${t.count})`)
261
- .join("\n");
253
+ tags.map((t) => `- ID ${t.id}: **${t.name}** (Posts: ${t.count})`).join("\n");
262
254
  return content;
263
255
  } catch (error) {
264
256
  throw new Error(`Failed to list tags: ${getErrorMessage(error)}`);
265
257
  }
266
258
  }
267
259
 
268
- public async handleGetTag(
269
- client: WordPressClient,
270
- params: { id: number },
271
- ): Promise<any> {
260
+ public async handleGetTag(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
261
+ const { id } = params as { id: number };
272
262
  try {
273
- const tag = await client.getTag(params.id);
263
+ const tag = await client.getTag(id);
274
264
  const content =
275
265
  `**Tag Details (ID: ${tag.id})**\n\n` +
276
266
  `- **Name:** ${tag.name}\n` +
@@ -282,37 +272,31 @@ export class TaxonomyTools {
282
272
  }
283
273
  }
284
274
 
285
- public async handleCreateTag(
286
- client: WordPressClient,
287
- params: CreateTagRequest,
288
- ): Promise<any> {
275
+ public async handleCreateTag(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
276
+ const createParams = params as unknown as CreateTagRequest;
289
277
  try {
290
- const tag = await client.createTag(params);
278
+ const tag = await client.createTag(createParams);
291
279
  return `✅ Tag "${tag.name}" created successfully with ID: ${tag.id}.`;
292
280
  } catch (error) {
293
281
  throw new Error(`Failed to create tag: ${getErrorMessage(error)}`);
294
282
  }
295
283
  }
296
284
 
297
- public async handleUpdateTag(
298
- client: WordPressClient,
299
- params: UpdateTagRequest & { id: number },
300
- ): Promise<any> {
285
+ public async handleUpdateTag(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
286
+ const updateParams = params as unknown as UpdateTagRequest;
301
287
  try {
302
- const tag = await client.updateTag(params);
288
+ const tag = await client.updateTag(updateParams);
303
289
  return `✅ Tag ${tag.id} updated successfully.`;
304
290
  } catch (error) {
305
291
  throw new Error(`Failed to update tag: ${getErrorMessage(error)}`);
306
292
  }
307
293
  }
308
294
 
309
- public async handleDeleteTag(
310
- client: WordPressClient,
311
- params: { id: number },
312
- ): Promise<any> {
295
+ public async handleDeleteTag(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
296
+ const { id } = params as { id: number };
313
297
  try {
314
- await client.deleteTag(params.id);
315
- return `✅ Tag ${params.id} has been deleted.`;
298
+ await client.deleteTag(id);
299
+ return `✅ Tag ${id} has been deleted.`;
316
300
  } catch (error) {
317
301
  throw new Error(`Failed to delete tag: ${getErrorMessage(error)}`);
318
302
  }
@@ -12,7 +12,12 @@ export class UserTools {
12
12
  * Retrieves the list of user management tools.
13
13
  * @returns An array of MCPTool definitions.
14
14
  */
15
- public getTools(): any[] {
15
+ public getTools(): Array<{
16
+ name: string;
17
+ description: string;
18
+ parameters?: Array<{ name: string; type?: string; description?: string; required?: boolean; enum?: string[]; items?: unknown }>;
19
+ handler: (client: WordPressClient, params: Record<string, unknown>) => Promise<unknown>;
20
+ }> {
16
21
  return [
17
22
  {
18
23
  name: "wp_list_users",
@@ -139,7 +144,7 @@ export class UserTools {
139
144
  ];
140
145
  }
141
146
 
142
- public async handleListUsers(client: WordPressClient, params: UserQueryParams): Promise<any> {
147
+ public async handleListUsers(client: WordPressClient, params: UserQueryParams): Promise<unknown> {
143
148
  try {
144
149
  const users = await client.getUsers(params);
145
150
  if (users.length === 0) {
@@ -148,7 +153,7 @@ export class UserTools {
148
153
 
149
154
  // Use streaming for large user result sets (>30 users)
150
155
  if (users.length > 30) {
151
- const streamResults: StreamingResult<any>[] = [];
156
+ const streamResults: StreamingResult<unknown>[] = [];
152
157
 
153
158
  for await (const result of WordPressDataStreamer.streamUsers(users, {
154
159
  includeRoles: true,
@@ -218,9 +223,10 @@ export class UserTools {
218
223
  }
219
224
  }
220
225
 
221
- public async handleGetUser(client: WordPressClient, params: { id: number }): Promise<any> {
226
+ public async handleGetUser(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
227
+ const { id } = params as { id: number };
222
228
  try {
223
- const user = await client.getUser(params.id);
229
+ const user = await client.getUser(id);
224
230
  const content =
225
231
  `**User Details (ID: ${user.id})**\n\n` +
226
232
  `- **Name:** ${user.name}\n` +
@@ -233,7 +239,10 @@ export class UserTools {
233
239
  }
234
240
  }
235
241
 
236
- public async handleGetCurrentUser(client: WordPressClient, params: any): Promise<any> {
242
+ public async handleGetCurrentUser(
243
+ client: WordPressClient,
244
+ params: Record<string, unknown>,
245
+ ): Promise<Record<string, unknown>> {
237
246
  try {
238
247
  const user = await client.getCurrentUser();
239
248
  const siteUrl = client.getSiteUrl();
@@ -290,36 +299,39 @@ export class UserTools {
290
299
  `- **Key Capabilities:** ${userCapabilities || "None"}\n` +
291
300
  `- **Profile Link:** ${user.link || `${siteUrl}/wp-admin/profile.php`}`;
292
301
 
293
- return content;
302
+ return { content };
294
303
  } catch (error) {
295
304
  throw new Error(`Failed to get current user: ${getErrorMessage(error)}`);
296
305
  }
297
306
  }
298
307
 
299
- public async handleCreateUser(client: WordPressClient, params: CreateUserRequest): Promise<any> {
308
+ public async handleCreateUser(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
309
+ const createParams = params as unknown as CreateUserRequest;
300
310
  try {
301
- const user = await client.createUser(params);
311
+ const user = await client.createUser(createParams);
302
312
  return `✅ User "${user.name}" created successfully with ID: ${user.id}.`;
303
313
  } catch (error) {
304
314
  throw new Error(`Failed to create user: ${getErrorMessage(error)}`);
305
315
  }
306
316
  }
307
317
 
308
- public async handleUpdateUser(client: WordPressClient, params: UpdateUserRequest & { id: number }): Promise<any> {
318
+ public async handleUpdateUser(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
319
+ const updateParams = params as unknown as UpdateUserRequest;
309
320
  try {
310
- const user = await client.updateUser(params);
321
+ const user = await client.updateUser(updateParams);
311
322
  return `✅ User ${user.id} updated successfully.`;
312
323
  } catch (error) {
313
324
  throw new Error(`Failed to update user: ${getErrorMessage(error)}`);
314
325
  }
315
326
  }
316
327
 
317
- public async handleDeleteUser(client: WordPressClient, params: { id: number; reassign?: number }): Promise<any> {
328
+ public async handleDeleteUser(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
329
+ const { id, reassign } = params as { id: number; reassign?: number };
318
330
  try {
319
- await client.deleteUser(params.id, params.reassign);
320
- let content = `✅ User ${params.id} has been deleted.`;
321
- if (params.reassign) {
322
- content += ` Their content has been reassigned to user ID ${params.reassign}.`;
331
+ await client.deleteUser(id, reassign);
332
+ let content = `✅ User ${id} has been deleted.`;
333
+ if (reassign) {
334
+ content += ` Their content has been reassigned to user ID ${reassign}.`;
323
335
  }
324
336
  return content;
325
337
  } catch (error) {