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
@@ -1,30 +1,26 @@
1
1
  import * as fs from "fs";
2
2
  import { WordPressClient } from "../client/api.js";
3
- import {
4
- MediaQueryParams,
5
- UpdateMediaRequest,
6
- UploadMediaRequest,
7
- } from "../types/wordpress.js";
3
+ import { MediaQueryParams, UpdateMediaRequest, UploadMediaRequest } from "../types/wordpress.js";
8
4
  import { getErrorMessage } from "../utils/error.js";
9
5
 
10
6
  /**
11
7
  * Comprehensive media management tools for WordPress sites.
12
- *
8
+ *
13
9
  * This class provides complete media library functionality including:
14
10
  * - Listing media items with advanced filtering and search
15
11
  * - Uploading new media files with validation and optimization
16
12
  * - Retrieving detailed media information and metadata
17
13
  * - Updating media properties like title, description, and alt text
18
14
  * - Deleting media items with safety checks
19
- *
15
+ *
20
16
  * Supports all WordPress media types including images, videos, audio files,
21
17
  * and documents with proper MIME type validation and security checks.
22
- *
18
+ *
23
19
  * @example
24
20
  * ```typescript
25
21
  * const mediaTools = new MediaTools();
26
22
  * const tools = mediaTools.getTools();
27
- *
23
+ *
28
24
  * // Upload an image
29
25
  * const client = new WordPressClient(config);
30
26
  * const result = await mediaTools.handleUploadMedia(client, {
@@ -33,29 +29,34 @@ import { getErrorMessage } from "../utils/error.js";
33
29
  * alt_text: "Description of the image"
34
30
  * });
35
31
  * ```
36
- *
32
+ *
37
33
  * @since 1.0.0
38
34
  * @author MCP WordPress Team
39
35
  */
40
36
  export class MediaTools {
41
37
  /**
42
38
  * Retrieves the complete list of media management tools available for MCP.
43
- *
39
+ *
44
40
  * Returns an array of tool definitions for comprehensive media library management.
45
41
  * Each tool includes parameter validation, security checks, and detailed error handling.
46
- *
42
+ *
47
43
  * @returns {Array<MCPTool>} Array of MCPTool definitions for media management
48
- *
44
+ *
49
45
  * @example
50
46
  * ```typescript
51
47
  * const mediaTools = new MediaTools();
52
48
  * const tools = mediaTools.getTools();
53
49
  * console.log(tools.length); // 5 tools: list, get, upload, update, delete
54
50
  * ```
55
- *
51
+ *
56
52
  * @since 1.0.0
57
53
  */
58
- public getTools(): any[] {
54
+ public getTools(): Array<{
55
+ name: string;
56
+ description: string;
57
+ parameters?: Array<{ name: string; type?: string; description?: string; required?: boolean; enum?: string[]; items?: unknown }>;
58
+ handler: (client: WordPressClient, params: Record<string, unknown>) => Promise<unknown>;
59
+ }> {
59
60
  return [
60
61
  {
61
62
  name: "wp_list_media",
@@ -111,8 +112,7 @@ export class MediaTools {
111
112
  {
112
113
  name: "alt_text",
113
114
  type: "string",
114
- description:
115
- "Alternative text for the media item (for accessibility).",
115
+ description: "Alternative text for the media item (for accessibility).",
116
116
  },
117
117
  {
118
118
  name: "caption",
@@ -178,8 +178,7 @@ export class MediaTools {
178
178
  {
179
179
  name: "force",
180
180
  type: "boolean",
181
- description:
182
- "If true, permanently delete. If false, move to trash. Defaults to false.",
181
+ description: "If true, permanently delete. If false, move to trash. Defaults to false.",
183
182
  },
184
183
  ],
185
184
  handler: this.handleDeleteMedia.bind(this),
@@ -187,35 +186,26 @@ export class MediaTools {
187
186
  ];
188
187
  }
189
188
 
190
- public async handleListMedia(
191
- client: WordPressClient,
192
- params: MediaQueryParams,
193
- ): Promise<any> {
189
+ public async handleListMedia(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
190
+ const queryParams = params as MediaQueryParams;
194
191
  try {
195
- const media = await client.getMedia(params);
192
+ const media = await client.getMedia(queryParams);
196
193
  if (media.length === 0) {
197
194
  return "No media items found matching the criteria.";
198
195
  }
199
196
  const content =
200
197
  `Found ${media.length} media items:\n\n` +
201
- media
202
- .map(
203
- (m) =>
204
- `- ID ${m.id}: **${m.title.rendered}** (${m.mime_type})\n Link: ${m.source_url}`,
205
- )
206
- .join("\n");
198
+ media.map((m) => `- ID ${m.id}: **${m.title.rendered}** (${m.mime_type})\n Link: ${m.source_url}`).join("\n");
207
199
  return content;
208
200
  } catch (error) {
209
201
  throw new Error(`Failed to list media: ${getErrorMessage(error)}`);
210
202
  }
211
203
  }
212
204
 
213
- public async handleGetMedia(
214
- client: WordPressClient,
215
- params: { id: number },
216
- ): Promise<any> {
205
+ public async handleGetMedia(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
206
+ const { id } = params as { id: number };
217
207
  try {
218
- const media = await client.getMediaItem(params.id);
208
+ const media = await client.getMediaItem(id);
219
209
  const content =
220
210
  `**Media Details (ID: ${media.id})**\n\n` +
221
211
  `- **Title:** ${media.title.rendered}\n` +
@@ -223,9 +213,7 @@ export class MediaTools {
223
213
  `- **Type:** ${media.media_type} (${media.mime_type})\n` +
224
214
  `- **Date:** ${new Date(media.date).toLocaleString()}\n` +
225
215
  (media.alt_text ? `- **Alt Text:** ${media.alt_text}\n` : "") +
226
- (media.caption.rendered
227
- ? `- **Caption:** ${media.caption.rendered}\n`
228
- : "");
216
+ (media.caption.rendered ? `- **Caption:** ${media.caption.rendered}\n` : "");
229
217
  return content;
230
218
  } catch (error) {
231
219
  throw new Error(`Failed to get media item: ${getErrorMessage(error)}`);
@@ -234,14 +222,15 @@ export class MediaTools {
234
222
 
235
223
  public async handleUploadMedia(
236
224
  client: WordPressClient,
237
- params: UploadMediaRequest & { file_path: string },
238
- ): Promise<any> {
225
+ params: Record<string, unknown>,
226
+ ): Promise<unknown> {
227
+ const uploadParams = params as unknown as UploadMediaRequest & { file_path: string };
239
228
  try {
240
- if (!fs.existsSync(params.file_path)) {
241
- throw new Error(`File not found at path: ${params.file_path}`);
229
+ if (!fs.existsSync(uploadParams.file_path)) {
230
+ throw new Error(`File not found at path: ${uploadParams.file_path}`);
242
231
  }
243
232
 
244
- const media = await client.uploadMedia(params);
233
+ const media = await client.uploadMedia(uploadParams);
245
234
  return `✅ Media uploaded successfully!\n- ID: ${media.id}\n- Title: ${media.title.rendered}\n- URL: ${media.source_url}`;
246
235
  } catch (error) {
247
236
  throw new Error(`Failed to upload media: ${getErrorMessage(error)}`);
@@ -250,24 +239,23 @@ export class MediaTools {
250
239
 
251
240
  public async handleUpdateMedia(
252
241
  client: WordPressClient,
253
- params: UpdateMediaRequest & { id: number },
254
- ): Promise<any> {
242
+ params: Record<string, unknown>,
243
+ ): Promise<unknown> {
244
+ const updateParams = params as unknown as UpdateMediaRequest & { id: number };
255
245
  try {
256
- const media = await client.updateMedia(params);
246
+ const media = await client.updateMedia(updateParams);
257
247
  return `✅ Media ${media.id} updated successfully.`;
258
248
  } catch (error) {
259
249
  throw new Error(`Failed to update media: ${getErrorMessage(error)}`);
260
250
  }
261
251
  }
262
252
 
263
- public async handleDeleteMedia(
264
- client: WordPressClient,
265
- params: { id: number; force?: boolean },
266
- ): Promise<any> {
253
+ public async handleDeleteMedia(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
254
+ const { id, force } = params as { id: number; force?: boolean };
267
255
  try {
268
- await client.deleteMedia(params.id, params.force);
269
- const action = params.force ? "permanently deleted" : "moved to trash";
270
- return `✅ Media item ${params.id} has been ${action}.`;
256
+ await client.deleteMedia(id, force);
257
+ const action = force ? "permanently deleted" : "moved to trash";
258
+ return `✅ Media item ${id} has been ${action}`;
271
259
  } catch (error) {
272
260
  throw new Error(`Failed to delete media: ${getErrorMessage(error)}`);
273
261
  }
@@ -1,9 +1,5 @@
1
1
  import { WordPressClient } from "../client/api.js";
2
- import {
3
- CreatePostRequest,
4
- PostQueryParams,
5
- UpdatePostRequest,
6
- } from "../types/wordpress.js";
2
+ import { CreatePageRequest, PostQueryParams as PageQueryParams, UpdatePageRequest } from "../types/wordpress.js";
7
3
  import { getErrorMessage } from "../utils/error.js";
8
4
 
9
5
  /**
@@ -15,7 +11,12 @@ export class PageTools {
15
11
  * Retrieves the list of page management tools.
16
12
  * @returns An array of MCPTool definitions.
17
13
  */
18
- 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
+ }> {
19
20
  return [
20
21
  {
21
22
  name: "wp_list_pages",
@@ -119,8 +120,7 @@ export class PageTools {
119
120
  {
120
121
  name: "force",
121
122
  type: "boolean",
122
- description:
123
- "If true, permanently delete. If false, move to trash. Defaults to false.",
123
+ description: "If true, permanently delete. If false, move to trash. Defaults to false.",
124
124
  },
125
125
  ],
126
126
  handler: this.handleDeletePage.bind(this),
@@ -141,35 +141,26 @@ export class PageTools {
141
141
  ];
142
142
  }
143
143
 
144
- public async handleListPages(
145
- client: WordPressClient,
146
- params: PostQueryParams,
147
- ): Promise<any> {
144
+ public async handleListPages(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
145
+ const queryParams = params as unknown as PageQueryParams;
148
146
  try {
149
- const pages = await client.getPages(params);
147
+ const pages = await client.getPages(queryParams);
150
148
  if (pages.length === 0) {
151
149
  return "No pages found matching the criteria.";
152
150
  }
153
151
  const content =
154
152
  `Found ${pages.length} pages:\n\n` +
155
- pages
156
- .map(
157
- (p) =>
158
- `- ID ${p.id}: **${p.title.rendered}** (${p.status})\n Link: ${p.link}`,
159
- )
160
- .join("\n");
153
+ pages.map((p) => `- ID ${p.id}: **${p.title.rendered}** (${p.status})\n Link: ${p.link}`).join("\n");
161
154
  return content;
162
155
  } catch (error) {
163
156
  throw new Error(`Failed to list pages: ${getErrorMessage(error)}`);
164
157
  }
165
158
  }
166
159
 
167
- public async handleGetPage(
168
- client: WordPressClient,
169
- params: { id: number },
170
- ): Promise<any> {
160
+ public async handleGetPage(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
161
+ const { id } = params as { id: number };
171
162
  try {
172
- const page = await client.getPage(params.id);
163
+ const page = await client.getPage(id);
173
164
  const content =
174
165
  `**Page Details (ID: ${page.id})**\n\n` +
175
166
  `- **Title:** ${page.title.rendered}\n` +
@@ -182,65 +173,52 @@ export class PageTools {
182
173
  }
183
174
  }
184
175
 
185
- public async handleCreatePage(
186
- client: WordPressClient,
187
- params: CreatePostRequest,
188
- ): Promise<any> {
176
+ public async handleCreatePage(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
177
+ const createParams = params as unknown as CreatePageRequest;
189
178
  try {
190
- const page = await client.createPage(params);
179
+ const page = await client.createPage(createParams);
191
180
  return `✅ Page created successfully!\n- ID: ${page.id}\n- Title: ${page.title.rendered}\n- Link: ${page.link}`;
192
181
  } catch (error) {
193
182
  throw new Error(`Failed to create page: ${getErrorMessage(error)}`);
194
183
  }
195
184
  }
196
185
 
197
- public async handleUpdatePage(
198
- client: WordPressClient,
199
- params: UpdatePostRequest & { id: number },
200
- ): Promise<any> {
186
+ public async handleUpdatePage(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
187
+ const updateParams = params as unknown as UpdatePageRequest & { id: number };
201
188
  try {
202
- const page = await client.updatePage(params);
189
+ const page = await client.updatePage(updateParams);
203
190
  return `✅ Page ${page.id} updated successfully.`;
204
191
  } catch (error) {
205
192
  throw new Error(`Failed to update page: ${getErrorMessage(error)}`);
206
193
  }
207
194
  }
208
195
 
209
- public async handleDeletePage(
210
- client: WordPressClient,
211
- params: { id: number; force?: boolean },
212
- ): Promise<any> {
196
+ public async handleDeletePage(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
197
+ const { id, force } = params as { id: number; force?: boolean };
213
198
  try {
214
- await client.deletePage(params.id, params.force);
199
+ await client.deletePage(id, force);
215
200
  const action = params.force ? "permanently deleted" : "moved to trash";
216
- return `✅ Page ${params.id} has been ${action}.`;
201
+ return `✅ Page ${id} has been ${action}.`;
217
202
  } catch (error) {
218
203
  throw new Error(`Failed to delete page: ${getErrorMessage(error)}`);
219
204
  }
220
205
  }
221
206
 
222
- public async handleGetPageRevisions(
223
- client: WordPressClient,
224
- params: { id: number },
225
- ): Promise<any> {
207
+ public async handleGetPageRevisions(client: WordPressClient, params: Record<string, unknown>): Promise<unknown> {
208
+ const { id } = params as { id: number };
226
209
  try {
227
- const revisions = await client.getPageRevisions(params.id);
210
+ const revisions = await client.getPageRevisions(id);
228
211
  if (revisions.length === 0) {
229
- return `No revisions found for page ${params.id}.`;
212
+ return `No revisions found for page ${id}.`;
230
213
  }
231
214
  const content =
232
- `Found ${revisions.length} revisions for page ${params.id}:\n\n` +
215
+ `Found ${revisions.length} revisions for page ${id}:\n\n` +
233
216
  revisions
234
- .map(
235
- (r) =>
236
- `- Revision by user ID ${r.author} at ${new Date(r.modified).toLocaleString()}`,
237
- )
217
+ .map((r) => `- Revision by user ID ${r.author} at ${new Date(r.modified).toLocaleString()}`)
238
218
  .join("\n");
239
219
  return content;
240
220
  } catch (error) {
241
- throw new Error(
242
- `Failed to get page revisions: ${getErrorMessage(error)}`,
243
- );
221
+ throw new Error(`Failed to get page revisions: ${getErrorMessage(error)}`);
244
222
  }
245
223
  }
246
224
  }