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,11 +1,11 @@
1
- import { WordPressClient } from '../client/api.js';
1
+ import { WordPressClient } from "../client/api.js";
2
2
  import {
3
3
  CreateCategoryRequest,
4
4
  CreateTagRequest,
5
5
  UpdateCategoryRequest,
6
- UpdateTagRequest
7
- } from '../types/wordpress.js';
8
- import { getErrorMessage } from '../utils/error.js';
6
+ UpdateTagRequest,
7
+ } from "../types/wordpress.js";
8
+ import { getErrorMessage } from "../utils/error.js";
9
9
 
10
10
  /**
11
11
  * Provides tools for managing taxonomies (categories and tags) on a WordPress site.
@@ -20,171 +20,171 @@ export class TaxonomyTools {
20
20
  return [
21
21
  // Categories
22
22
  {
23
- name: 'wp_list_categories',
24
- description: 'Lists categories from a WordPress site.',
23
+ name: "wp_list_categories",
24
+ description: "Lists categories from a WordPress site.",
25
25
  parameters: [
26
26
  {
27
- name: 'search',
28
- type: 'string',
29
- description: 'Limit results to those matching a search term.'
27
+ name: "search",
28
+ type: "string",
29
+ description: "Limit results to those matching a search term.",
30
30
  },
31
31
  {
32
- name: 'hide_empty',
33
- type: 'boolean',
34
- description: 'Whether to hide categories with no posts.'
35
- }
32
+ name: "hide_empty",
33
+ type: "boolean",
34
+ description: "Whether to hide categories with no posts.",
35
+ },
36
36
  ],
37
- handler: this.handleListCategories.bind(this)
37
+ handler: this.handleListCategories.bind(this),
38
38
  },
39
39
  {
40
- name: 'wp_get_category',
41
- description: 'Retrieves a single category by its ID.',
40
+ name: "wp_get_category",
41
+ description: "Retrieves a single category by its ID.",
42
42
  parameters: [
43
43
  {
44
- name: 'id',
45
- type: 'number',
44
+ name: "id",
45
+ type: "number",
46
46
  required: true,
47
- description: 'The unique identifier for the category.'
48
- }
47
+ description: "The unique identifier for the category.",
48
+ },
49
49
  ],
50
- handler: this.handleGetCategory.bind(this)
50
+ handler: this.handleGetCategory.bind(this),
51
51
  },
52
52
  {
53
- name: 'wp_create_category',
54
- description: 'Creates a new category.',
53
+ name: "wp_create_category",
54
+ description: "Creates a new category.",
55
55
  parameters: [
56
56
  {
57
- name: 'name',
58
- type: 'string',
57
+ name: "name",
58
+ type: "string",
59
59
  required: true,
60
- description: 'The name of the category.'
60
+ description: "The name of the category.",
61
61
  },
62
62
  {
63
- name: 'description',
64
- type: 'string',
65
- description: 'The description for the category.'
66
- }
63
+ name: "description",
64
+ type: "string",
65
+ description: "The description for the category.",
66
+ },
67
67
  ],
68
- handler: this.handleCreateCategory.bind(this)
68
+ handler: this.handleCreateCategory.bind(this),
69
69
  },
70
70
  {
71
- name: 'wp_update_category',
72
- description: 'Updates an existing category.',
71
+ name: "wp_update_category",
72
+ description: "Updates an existing category.",
73
73
  parameters: [
74
74
  {
75
- name: 'id',
76
- type: 'number',
75
+ name: "id",
76
+ type: "number",
77
77
  required: true,
78
- description: 'The ID of the category to update.'
78
+ description: "The ID of the category to update.",
79
79
  },
80
80
  {
81
- name: 'name',
82
- type: 'string',
83
- description: 'The new name for the category.'
84
- }
81
+ name: "name",
82
+ type: "string",
83
+ description: "The new name for the category.",
84
+ },
85
85
  ],
86
- handler: this.handleUpdateCategory.bind(this)
86
+ handler: this.handleUpdateCategory.bind(this),
87
87
  },
88
88
  {
89
- name: 'wp_delete_category',
90
- description: 'Deletes a category.',
89
+ name: "wp_delete_category",
90
+ description: "Deletes a category.",
91
91
  parameters: [
92
92
  {
93
- name: 'id',
94
- type: 'number',
93
+ name: "id",
94
+ type: "number",
95
95
  required: true,
96
- description: 'The ID of the category to delete.'
97
- }
96
+ description: "The ID of the category to delete.",
97
+ },
98
98
  ],
99
- handler: this.handleDeleteCategory.bind(this)
99
+ handler: this.handleDeleteCategory.bind(this),
100
100
  },
101
101
  // Tags
102
102
  {
103
- name: 'wp_list_tags',
104
- description: 'Lists tags from a WordPress site.',
103
+ name: "wp_list_tags",
104
+ description: "Lists tags from a WordPress site.",
105
105
  parameters: [
106
106
  {
107
- name: 'search',
108
- type: 'string',
109
- description: 'Limit results to those matching a search term.'
110
- }
107
+ name: "search",
108
+ type: "string",
109
+ description: "Limit results to those matching a search term.",
110
+ },
111
111
  ],
112
- handler: this.handleListTags.bind(this)
112
+ handler: this.handleListTags.bind(this),
113
113
  },
114
114
  {
115
- name: 'wp_get_tag',
116
- description: 'Retrieves a single tag by its ID.',
115
+ name: "wp_get_tag",
116
+ description: "Retrieves a single tag by its ID.",
117
117
  parameters: [
118
118
  {
119
- name: 'id',
120
- type: 'number',
119
+ name: "id",
120
+ type: "number",
121
121
  required: true,
122
- description: 'The unique identifier for the tag.'
123
- }
122
+ description: "The unique identifier for the tag.",
123
+ },
124
124
  ],
125
- handler: this.handleGetTag.bind(this)
125
+ handler: this.handleGetTag.bind(this),
126
126
  },
127
127
  {
128
- name: 'wp_create_tag',
129
- description: 'Creates a new tag.',
128
+ name: "wp_create_tag",
129
+ description: "Creates a new tag.",
130
130
  parameters: [
131
131
  {
132
- name: 'name',
133
- type: 'string',
132
+ name: "name",
133
+ type: "string",
134
134
  required: true,
135
- description: 'The name of the tag.'
136
- }
135
+ description: "The name of the tag.",
136
+ },
137
137
  ],
138
- handler: this.handleCreateTag.bind(this)
138
+ handler: this.handleCreateTag.bind(this),
139
139
  },
140
140
  {
141
- name: 'wp_update_tag',
142
- description: 'Updates an existing tag.',
141
+ name: "wp_update_tag",
142
+ description: "Updates an existing tag.",
143
143
  parameters: [
144
144
  {
145
- name: 'id',
146
- type: 'number',
145
+ name: "id",
146
+ type: "number",
147
147
  required: true,
148
- description: 'The ID of the tag to update.'
148
+ description: "The ID of the tag to update.",
149
149
  },
150
150
  {
151
- name: 'name',
152
- type: 'string',
153
- description: 'The new name for the tag.'
154
- }
151
+ name: "name",
152
+ type: "string",
153
+ description: "The new name for the tag.",
154
+ },
155
155
  ],
156
- handler: this.handleUpdateTag.bind(this)
156
+ handler: this.handleUpdateTag.bind(this),
157
157
  },
158
158
  {
159
- name: 'wp_delete_tag',
160
- description: 'Deletes a tag.',
159
+ name: "wp_delete_tag",
160
+ description: "Deletes a tag.",
161
161
  parameters: [
162
162
  {
163
- name: 'id',
164
- type: 'number',
163
+ name: "id",
164
+ type: "number",
165
165
  required: true,
166
- description: 'The ID of the tag to delete.'
167
- }
166
+ description: "The ID of the tag to delete.",
167
+ },
168
168
  ],
169
- handler: this.handleDeleteTag.bind(this)
170
- }
169
+ handler: this.handleDeleteTag.bind(this),
170
+ },
171
171
  ];
172
172
  }
173
173
 
174
174
  public async handleListCategories(
175
175
  client: WordPressClient,
176
- params: any
176
+ params: any,
177
177
  ): Promise<any> {
178
178
  try {
179
179
  const categories = await client.getCategories(params);
180
180
  if (categories.length === 0) {
181
- return 'No categories found.';
181
+ return "No categories found.";
182
182
  }
183
183
  const content =
184
184
  `Found ${categories.length} categories:\n\n` +
185
185
  categories
186
186
  .map((c) => `- ID ${c.id}: **${c.name}** (Posts: ${c.count})`)
187
- .join('\n');
187
+ .join("\n");
188
188
  return content;
189
189
  } catch (error) {
190
190
  throw new Error(`Failed to list categories: ${getErrorMessage(error)}`);
@@ -193,7 +193,7 @@ export class TaxonomyTools {
193
193
 
194
194
  public async handleGetCategory(
195
195
  client: WordPressClient,
196
- params: { id: number }
196
+ params: { id: number },
197
197
  ): Promise<any> {
198
198
  try {
199
199
  const category = await client.getCategory(params.id);
@@ -201,7 +201,7 @@ export class TaxonomyTools {
201
201
  `**Category Details (ID: ${category.id})**\n\n` +
202
202
  `- **Name:** ${category.name}\n` +
203
203
  `- **Slug:** ${category.slug}\n` +
204
- `- **Description:** ${category.description || 'None'}\n` +
204
+ `- **Description:** ${category.description || "None"}\n` +
205
205
  `- **Post Count:** ${category.count}`;
206
206
  return content;
207
207
  } catch (error) {
@@ -211,7 +211,7 @@ export class TaxonomyTools {
211
211
 
212
212
  public async handleCreateCategory(
213
213
  client: WordPressClient,
214
- params: CreateCategoryRequest
214
+ params: CreateCategoryRequest,
215
215
  ): Promise<any> {
216
216
  try {
217
217
  const category = await client.createCategory(params);
@@ -223,7 +223,7 @@ export class TaxonomyTools {
223
223
 
224
224
  public async handleUpdateCategory(
225
225
  client: WordPressClient,
226
- params: UpdateCategoryRequest & { id: number }
226
+ params: UpdateCategoryRequest & { id: number },
227
227
  ): Promise<any> {
228
228
  try {
229
229
  const category = await client.updateCategory(params);
@@ -235,7 +235,7 @@ export class TaxonomyTools {
235
235
 
236
236
  public async handleDeleteCategory(
237
237
  client: WordPressClient,
238
- params: { id: number }
238
+ params: { id: number },
239
239
  ): Promise<any> {
240
240
  try {
241
241
  await client.deleteCategory(params.id);
@@ -247,18 +247,18 @@ export class TaxonomyTools {
247
247
 
248
248
  public async handleListTags(
249
249
  client: WordPressClient,
250
- params: any
250
+ params: any,
251
251
  ): Promise<any> {
252
252
  try {
253
253
  const tags = await client.getTags(params);
254
254
  if (tags.length === 0) {
255
- return 'No tags found.';
255
+ return "No tags found.";
256
256
  }
257
257
  const content =
258
258
  `Found ${tags.length} tags:\n\n` +
259
259
  tags
260
260
  .map((t) => `- ID ${t.id}: **${t.name}** (Posts: ${t.count})`)
261
- .join('\n');
261
+ .join("\n");
262
262
  return content;
263
263
  } catch (error) {
264
264
  throw new Error(`Failed to list tags: ${getErrorMessage(error)}`);
@@ -267,7 +267,7 @@ export class TaxonomyTools {
267
267
 
268
268
  public async handleGetTag(
269
269
  client: WordPressClient,
270
- params: { id: number }
270
+ params: { id: number },
271
271
  ): Promise<any> {
272
272
  try {
273
273
  const tag = await client.getTag(params.id);
@@ -284,7 +284,7 @@ export class TaxonomyTools {
284
284
 
285
285
  public async handleCreateTag(
286
286
  client: WordPressClient,
287
- params: CreateTagRequest
287
+ params: CreateTagRequest,
288
288
  ): Promise<any> {
289
289
  try {
290
290
  const tag = await client.createTag(params);
@@ -296,7 +296,7 @@ export class TaxonomyTools {
296
296
 
297
297
  public async handleUpdateTag(
298
298
  client: WordPressClient,
299
- params: UpdateTagRequest & { id: number }
299
+ params: UpdateTagRequest & { id: number },
300
300
  ): Promise<any> {
301
301
  try {
302
302
  const tag = await client.updateTag(params);
@@ -308,7 +308,7 @@ export class TaxonomyTools {
308
308
 
309
309
  public async handleDeleteTag(
310
310
  client: WordPressClient,
311
- params: { id: number }
311
+ params: { id: number },
312
312
  ): Promise<any> {
313
313
  try {
314
314
  await client.deleteTag(params.id);
@@ -1,10 +1,10 @@
1
- import { WordPressClient } from '../client/api.js';
1
+ import { WordPressClient } from "../client/api.js";
2
2
  import {
3
3
  CreateUserRequest,
4
4
  UpdateUserRequest,
5
- UserQueryParams
6
- } from '../types/wordpress.js';
7
- import { getErrorMessage } from '../utils/error.js';
5
+ UserQueryParams,
6
+ } from "../types/wordpress.js";
7
+ import { getErrorMessage } from "../utils/error.js";
8
8
 
9
9
  /**
10
10
  * Provides tools for managing users on a WordPress site.
@@ -18,135 +18,135 @@ export class UserTools {
18
18
  public getTools(): any[] {
19
19
  return [
20
20
  {
21
- name: 'wp_list_users',
22
- description: 'Lists users from a WordPress site, with filters.',
21
+ name: "wp_list_users",
22
+ description: "Lists users from a WordPress site, with filters.",
23
23
  parameters: [
24
24
  {
25
- name: 'search',
26
- type: 'string',
27
- description: 'Limit results to those matching a search term.'
25
+ name: "search",
26
+ type: "string",
27
+ description: "Limit results to those matching a search term.",
28
28
  },
29
29
  {
30
- name: 'roles',
31
- type: 'array',
32
- items: { type: 'string' },
33
- description: 'Limit results to users with specific roles.'
34
- }
30
+ name: "roles",
31
+ type: "array",
32
+ items: { type: "string" },
33
+ description: "Limit results to users with specific roles.",
34
+ },
35
35
  ],
36
- handler: this.handleListUsers.bind(this)
36
+ handler: this.handleListUsers.bind(this),
37
37
  },
38
38
  {
39
- name: 'wp_get_user',
40
- description: 'Retrieves a single user by their ID.',
39
+ name: "wp_get_user",
40
+ description: "Retrieves a single user by their ID.",
41
41
  parameters: [
42
42
  {
43
- name: 'id',
44
- type: 'number',
43
+ name: "id",
44
+ type: "number",
45
45
  required: true,
46
- description: 'The unique identifier for the user.'
47
- }
46
+ description: "The unique identifier for the user.",
47
+ },
48
48
  ],
49
- handler: this.handleGetUser.bind(this)
49
+ handler: this.handleGetUser.bind(this),
50
50
  },
51
51
  {
52
- name: 'wp_get_current_user',
53
- description: 'Retrieves the currently authenticated user.',
52
+ name: "wp_get_current_user",
53
+ description: "Retrieves the currently authenticated user.",
54
54
  parameters: [],
55
- handler: this.handleGetCurrentUser.bind(this)
55
+ handler: this.handleGetCurrentUser.bind(this),
56
56
  },
57
57
  {
58
- name: 'wp_create_user',
59
- description: 'Creates a new user.',
58
+ name: "wp_create_user",
59
+ description: "Creates a new user.",
60
60
  parameters: [
61
61
  {
62
- name: 'username',
63
- type: 'string',
62
+ name: "username",
63
+ type: "string",
64
64
  required: true,
65
- description: 'The username for the new user.'
65
+ description: "The username for the new user.",
66
66
  },
67
67
  {
68
- name: 'email',
69
- type: 'string',
68
+ name: "email",
69
+ type: "string",
70
70
  required: true,
71
- description: 'The email address for the new user.'
71
+ description: "The email address for the new user.",
72
72
  },
73
73
  {
74
- name: 'password',
75
- type: 'string',
74
+ name: "password",
75
+ type: "string",
76
76
  required: true,
77
- description: 'The password for the new user.'
77
+ description: "The password for the new user.",
78
78
  },
79
79
  {
80
- name: 'roles',
81
- type: 'array',
82
- items: { type: 'string' },
83
- description: 'An array of roles to assign to the user.'
84
- }
80
+ name: "roles",
81
+ type: "array",
82
+ items: { type: "string" },
83
+ description: "An array of roles to assign to the user.",
84
+ },
85
85
  ],
86
- handler: this.handleCreateUser.bind(this)
86
+ handler: this.handleCreateUser.bind(this),
87
87
  },
88
88
  {
89
- name: 'wp_update_user',
90
- description: 'Updates an existing user.',
89
+ name: "wp_update_user",
90
+ description: "Updates an existing user.",
91
91
  parameters: [
92
92
  {
93
- name: 'id',
94
- type: 'number',
93
+ name: "id",
94
+ type: "number",
95
95
  required: true,
96
- description: 'The ID of the user to update.'
96
+ description: "The ID of the user to update.",
97
97
  },
98
98
  {
99
- name: 'email',
100
- type: 'string',
101
- description: 'The new email address for the user.'
99
+ name: "email",
100
+ type: "string",
101
+ description: "The new email address for the user.",
102
102
  },
103
103
  {
104
- name: 'name',
105
- type: 'string',
106
- description: 'The new display name for the user.'
107
- }
104
+ name: "name",
105
+ type: "string",
106
+ description: "The new display name for the user.",
107
+ },
108
108
  ],
109
- handler: this.handleUpdateUser.bind(this)
109
+ handler: this.handleUpdateUser.bind(this),
110
110
  },
111
111
  {
112
- name: 'wp_delete_user',
113
- description: 'Deletes a user.',
112
+ name: "wp_delete_user",
113
+ description: "Deletes a user.",
114
114
  parameters: [
115
115
  {
116
- name: 'id',
117
- type: 'number',
116
+ name: "id",
117
+ type: "number",
118
118
  required: true,
119
- description: 'The ID of the user to delete.'
119
+ description: "The ID of the user to delete.",
120
120
  },
121
121
  {
122
- name: 'reassign',
123
- type: 'number',
122
+ name: "reassign",
123
+ type: "number",
124
124
  description:
125
- 'The ID of a user to reassign the deleted user\'s content to.'
126
- }
125
+ "The ID of a user to reassign the deleted user's content to.",
126
+ },
127
127
  ],
128
- handler: this.handleDeleteUser.bind(this)
129
- }
128
+ handler: this.handleDeleteUser.bind(this),
129
+ },
130
130
  ];
131
131
  }
132
132
 
133
133
  public async handleListUsers(
134
134
  client: WordPressClient,
135
- params: UserQueryParams
135
+ params: UserQueryParams,
136
136
  ): Promise<any> {
137
137
  try {
138
138
  const users = await client.getUsers(params);
139
139
  if (users.length === 0) {
140
- return 'No users found matching the criteria.';
140
+ return "No users found matching the criteria.";
141
141
  }
142
142
  const content =
143
143
  `Found ${users.length} users:\n\n` +
144
144
  users
145
145
  .map(
146
146
  (u) =>
147
- `- ID ${u.id}: **${u.name}** (@${u.slug}) - ${u.email}\n Roles: ${u.roles?.join(', ') || 'N/A'}`
147
+ `- ID ${u.id}: **${u.name}** (@${u.slug}) - ${u.email}\n Roles: ${u.roles?.join(", ") || "N/A"}`,
148
148
  )
149
- .join('\n');
149
+ .join("\n");
150
150
  return content;
151
151
  } catch (error) {
152
152
  throw new Error(`Failed to list users: ${getErrorMessage(error)}`);
@@ -155,7 +155,7 @@ export class UserTools {
155
155
 
156
156
  public async handleGetUser(
157
157
  client: WordPressClient,
158
- params: { id: number }
158
+ params: { id: number },
159
159
  ): Promise<any> {
160
160
  try {
161
161
  const user = await client.getUser(params.id);
@@ -164,7 +164,7 @@ export class UserTools {
164
164
  `- **Name:** ${user.name}\n` +
165
165
  `- **Username:** ${user.slug}\n` +
166
166
  `- **Email:** ${user.email}\n` +
167
- `- **Roles:** ${user.roles?.join(', ') || 'N/A'}`;
167
+ `- **Roles:** ${user.roles?.join(", ") || "N/A"}`;
168
168
  return content;
169
169
  } catch (error) {
170
170
  throw new Error(`Failed to get user: ${getErrorMessage(error)}`);
@@ -173,7 +173,7 @@ export class UserTools {
173
173
 
174
174
  public async handleGetCurrentUser(
175
175
  client: WordPressClient,
176
- params: any
176
+ params: any,
177
177
  ): Promise<any> {
178
178
  try {
179
179
  const user = await client.getCurrentUser();
@@ -182,7 +182,7 @@ export class UserTools {
182
182
  `- **Name:** ${user.name}\n` +
183
183
  `- **Username:** ${user.slug}\n` +
184
184
  `- **Email:** ${user.email}\n` +
185
- `- **Roles:** ${user.roles?.join(', ') || 'N/A'}`;
185
+ `- **Roles:** ${user.roles?.join(", ") || "N/A"}`;
186
186
  return content;
187
187
  } catch (error) {
188
188
  throw new Error(`Failed to get current user: ${getErrorMessage(error)}`);
@@ -191,7 +191,7 @@ export class UserTools {
191
191
 
192
192
  public async handleCreateUser(
193
193
  client: WordPressClient,
194
- params: CreateUserRequest
194
+ params: CreateUserRequest,
195
195
  ): Promise<any> {
196
196
  try {
197
197
  const user = await client.createUser(params);
@@ -203,7 +203,7 @@ export class UserTools {
203
203
 
204
204
  public async handleUpdateUser(
205
205
  client: WordPressClient,
206
- params: UpdateUserRequest & { id: number }
206
+ params: UpdateUserRequest & { id: number },
207
207
  ): Promise<any> {
208
208
  try {
209
209
  const user = await client.updateUser(params);
@@ -215,7 +215,7 @@ export class UserTools {
215
215
 
216
216
  public async handleDeleteUser(
217
217
  client: WordPressClient,
218
- params: { id: number; reassign?: number }
218
+ params: { id: number; reassign?: number },
219
219
  ): Promise<any> {
220
220
  try {
221
221
  await client.deleteUser(params.id, params.reassign);