claude-plugin-wordpress-manager 1.4.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 (142) hide show
  1. package/.claude-plugin/plugin.json +19 -0
  2. package/.mcp.json +19 -0
  3. package/CHANGELOG.md +62 -0
  4. package/LICENSE +69 -0
  5. package/README.md +213 -0
  6. package/agents/wp-content-strategist.md +148 -0
  7. package/agents/wp-deployment-engineer.md +93 -0
  8. package/agents/wp-performance-optimizer.md +198 -0
  9. package/agents/wp-security-auditor.md +161 -0
  10. package/agents/wp-site-manager.md +109 -0
  11. package/commands/wp-audit.md +37 -0
  12. package/commands/wp-backup.md +45 -0
  13. package/commands/wp-deploy.md +38 -0
  14. package/commands/wp-setup.md +64 -0
  15. package/commands/wp-status.md +53 -0
  16. package/docs/GUIDE.md +1190 -0
  17. package/hooks/hooks.json +57 -0
  18. package/hooks/scripts/backup-reminder.sh +29 -0
  19. package/hooks/scripts/pre-deploy-check.sh +49 -0
  20. package/package.json +46 -0
  21. package/scripts/health-check.sh +110 -0
  22. package/scripts/validate-wp-operation.sh +115 -0
  23. package/servers/wp-rest-bridge/build/server.d.ts +2 -0
  24. package/servers/wp-rest-bridge/build/server.js +74 -0
  25. package/servers/wp-rest-bridge/build/tools/comments.d.ts +227 -0
  26. package/servers/wp-rest-bridge/build/tools/comments.js +192 -0
  27. package/servers/wp-rest-bridge/build/tools/index.d.ts +919 -0
  28. package/servers/wp-rest-bridge/build/tools/index.js +30 -0
  29. package/servers/wp-rest-bridge/build/tools/media.d.ts +174 -0
  30. package/servers/wp-rest-bridge/build/tools/media.js +247 -0
  31. package/servers/wp-rest-bridge/build/tools/plugin-repository.d.ts +62 -0
  32. package/servers/wp-rest-bridge/build/tools/plugin-repository.js +149 -0
  33. package/servers/wp-rest-bridge/build/tools/plugins.d.ts +153 -0
  34. package/servers/wp-rest-bridge/build/tools/plugins.js +175 -0
  35. package/servers/wp-rest-bridge/build/tools/search.d.ts +44 -0
  36. package/servers/wp-rest-bridge/build/tools/search.js +44 -0
  37. package/servers/wp-rest-bridge/build/tools/unified-content.d.ts +328 -0
  38. package/servers/wp-rest-bridge/build/tools/unified-content.js +628 -0
  39. package/servers/wp-rest-bridge/build/tools/unified-taxonomies.d.ts +244 -0
  40. package/servers/wp-rest-bridge/build/tools/unified-taxonomies.js +492 -0
  41. package/servers/wp-rest-bridge/build/tools/users.d.ts +269 -0
  42. package/servers/wp-rest-bridge/build/tools/users.js +226 -0
  43. package/servers/wp-rest-bridge/build/types.d.ts +151 -0
  44. package/servers/wp-rest-bridge/build/types.js +2 -0
  45. package/servers/wp-rest-bridge/build/wordpress.d.ts +48 -0
  46. package/servers/wp-rest-bridge/build/wordpress.js +305 -0
  47. package/servers/wp-rest-bridge/package.json +27 -0
  48. package/skills/wordpress-router/SKILL.md +78 -0
  49. package/skills/wordpress-router/references/decision-tree.md +88 -0
  50. package/skills/wp-abilities-api/SKILL.md +97 -0
  51. package/skills/wp-abilities-api/references/php-registration.md +67 -0
  52. package/skills/wp-abilities-api/references/rest-api.md +13 -0
  53. package/skills/wp-audit/SKILL.md +114 -0
  54. package/skills/wp-audit/references/performance-checklist.md +113 -0
  55. package/skills/wp-audit/references/security-checklist.md +95 -0
  56. package/skills/wp-audit/references/seo-checklist.md +128 -0
  57. package/skills/wp-backup/SKILL.md +87 -0
  58. package/skills/wp-backup/references/backup-strategies.md +116 -0
  59. package/skills/wp-backup/references/restore-procedures.md +129 -0
  60. package/skills/wp-block-development/SKILL.md +176 -0
  61. package/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
  62. package/skills/wp-block-development/references/block-json.md +49 -0
  63. package/skills/wp-block-development/references/creating-new-blocks.md +46 -0
  64. package/skills/wp-block-development/references/debugging.md +36 -0
  65. package/skills/wp-block-development/references/deprecations.md +24 -0
  66. package/skills/wp-block-development/references/dynamic-rendering.md +23 -0
  67. package/skills/wp-block-development/references/inner-blocks.md +25 -0
  68. package/skills/wp-block-development/references/registration.md +30 -0
  69. package/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
  70. package/skills/wp-block-development/references/tooling-and-testing.md +21 -0
  71. package/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
  72. package/skills/wp-block-themes/SKILL.md +118 -0
  73. package/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
  74. package/skills/wp-block-themes/references/debugging.md +24 -0
  75. package/skills/wp-block-themes/references/patterns.md +18 -0
  76. package/skills/wp-block-themes/references/style-variations.md +14 -0
  77. package/skills/wp-block-themes/references/templates-and-parts.md +16 -0
  78. package/skills/wp-block-themes/references/theme-json.md +59 -0
  79. package/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
  80. package/skills/wp-content/SKILL.md +103 -0
  81. package/skills/wp-content/references/content-templates.md +230 -0
  82. package/skills/wp-content/references/seo-optimization.md +169 -0
  83. package/skills/wp-deploy/SKILL.md +52 -0
  84. package/skills/wp-deploy/references/hostinger-deploy.md +51 -0
  85. package/skills/wp-deploy/references/ssh-deploy.md +63 -0
  86. package/skills/wp-interactivity-api/SKILL.md +181 -0
  87. package/skills/wp-interactivity-api/references/debugging.md +29 -0
  88. package/skills/wp-interactivity-api/references/directives-quickref.md +30 -0
  89. package/skills/wp-interactivity-api/references/server-side-rendering.md +310 -0
  90. package/skills/wp-migrate/SKILL.md +100 -0
  91. package/skills/wp-migrate/references/cross-platform.md +104 -0
  92. package/skills/wp-migrate/references/hostinger-migration.md +86 -0
  93. package/skills/wp-performance/SKILL.md +148 -0
  94. package/skills/wp-performance/references/autoload-options.md +24 -0
  95. package/skills/wp-performance/references/cron.md +20 -0
  96. package/skills/wp-performance/references/database.md +20 -0
  97. package/skills/wp-performance/references/http-api.md +15 -0
  98. package/skills/wp-performance/references/measurement.md +21 -0
  99. package/skills/wp-performance/references/object-cache.md +24 -0
  100. package/skills/wp-performance/references/query-monitor-headless.md +38 -0
  101. package/skills/wp-performance/references/server-timing.md +22 -0
  102. package/skills/wp-performance/references/wp-cli-doctor.md +24 -0
  103. package/skills/wp-performance/references/wp-cli-profile.md +32 -0
  104. package/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
  105. package/skills/wp-phpstan/SKILL.md +99 -0
  106. package/skills/wp-phpstan/references/configuration.md +52 -0
  107. package/skills/wp-phpstan/references/third-party-classes.md +76 -0
  108. package/skills/wp-phpstan/references/wordpress-annotations.md +124 -0
  109. package/skills/wp-phpstan/scripts/phpstan_inspect.mjs +263 -0
  110. package/skills/wp-playground/SKILL.md +103 -0
  111. package/skills/wp-playground/references/blueprints.md +36 -0
  112. package/skills/wp-playground/references/cli-commands.md +39 -0
  113. package/skills/wp-playground/references/debugging.md +16 -0
  114. package/skills/wp-plugin-development/SKILL.md +114 -0
  115. package/skills/wp-plugin-development/references/data-and-cron.md +19 -0
  116. package/skills/wp-plugin-development/references/debugging.md +19 -0
  117. package/skills/wp-plugin-development/references/lifecycle.md +33 -0
  118. package/skills/wp-plugin-development/references/security.md +29 -0
  119. package/skills/wp-plugin-development/references/settings-api.md +22 -0
  120. package/skills/wp-plugin-development/references/structure.md +16 -0
  121. package/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
  122. package/skills/wp-project-triage/SKILL.md +40 -0
  123. package/skills/wp-project-triage/references/triage.schema.json +143 -0
  124. package/skills/wp-project-triage/scripts/detect_wp_project.mjs +592 -0
  125. package/skills/wp-rest-api/SKILL.md +116 -0
  126. package/skills/wp-rest-api/references/authentication.md +18 -0
  127. package/skills/wp-rest-api/references/custom-content-types.md +20 -0
  128. package/skills/wp-rest-api/references/discovery-and-params.md +20 -0
  129. package/skills/wp-rest-api/references/responses-and-fields.md +30 -0
  130. package/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
  131. package/skills/wp-rest-api/references/schema.md +22 -0
  132. package/skills/wp-wpcli-and-ops/SKILL.md +125 -0
  133. package/skills/wp-wpcli-and-ops/references/automation.md +30 -0
  134. package/skills/wp-wpcli-and-ops/references/cron-and-cache.md +23 -0
  135. package/skills/wp-wpcli-and-ops/references/debugging.md +17 -0
  136. package/skills/wp-wpcli-and-ops/references/multisite.md +22 -0
  137. package/skills/wp-wpcli-and-ops/references/packages-and-updates.md +22 -0
  138. package/skills/wp-wpcli-and-ops/references/safety.md +30 -0
  139. package/skills/wp-wpcli-and-ops/references/search-replace.md +40 -0
  140. package/skills/wp-wpcli-and-ops/scripts/wpcli_inspect.mjs +90 -0
  141. package/skills/wpds/SKILL.md +60 -0
  142. package/skills/wpds/references/wpds-mcp-setup.md +59 -0
@@ -0,0 +1,227 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { z } from 'zod';
3
+ declare const listCommentsSchema: z.ZodObject<{
4
+ page: z.ZodOptional<z.ZodNumber>;
5
+ per_page: z.ZodOptional<z.ZodNumber>;
6
+ search: z.ZodOptional<z.ZodString>;
7
+ after: z.ZodOptional<z.ZodString>;
8
+ author: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodArray<z.ZodNumber, "many">]>>;
9
+ author_email: z.ZodOptional<z.ZodString>;
10
+ author_exclude: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
11
+ post: z.ZodOptional<z.ZodNumber>;
12
+ status: z.ZodOptional<z.ZodEnum<["approve", "hold", "spam", "trash"]>>;
13
+ type: z.ZodOptional<z.ZodString>;
14
+ orderby: z.ZodOptional<z.ZodEnum<["date", "date_gmt", "id", "include", "post", "parent", "type"]>>;
15
+ order: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
16
+ _embed: z.ZodOptional<z.ZodBoolean>;
17
+ _fields: z.ZodOptional<z.ZodString>;
18
+ include_pagination: z.ZodOptional<z.ZodBoolean>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ post?: number | undefined;
21
+ page?: number | undefined;
22
+ per_page?: number | undefined;
23
+ search?: string | undefined;
24
+ status?: "approve" | "hold" | "spam" | "trash" | undefined;
25
+ type?: string | undefined;
26
+ author?: number | number[] | undefined;
27
+ orderby?: "post" | "type" | "date" | "parent" | "id" | "include" | "date_gmt" | undefined;
28
+ order?: "asc" | "desc" | undefined;
29
+ after?: string | undefined;
30
+ _embed?: boolean | undefined;
31
+ _fields?: string | undefined;
32
+ include_pagination?: boolean | undefined;
33
+ author_email?: string | undefined;
34
+ author_exclude?: number[] | undefined;
35
+ }, {
36
+ post?: number | undefined;
37
+ page?: number | undefined;
38
+ per_page?: number | undefined;
39
+ search?: string | undefined;
40
+ status?: "approve" | "hold" | "spam" | "trash" | undefined;
41
+ type?: string | undefined;
42
+ author?: number | number[] | undefined;
43
+ orderby?: "post" | "type" | "date" | "parent" | "id" | "include" | "date_gmt" | undefined;
44
+ order?: "asc" | "desc" | undefined;
45
+ after?: string | undefined;
46
+ _embed?: boolean | undefined;
47
+ _fields?: string | undefined;
48
+ include_pagination?: boolean | undefined;
49
+ author_email?: string | undefined;
50
+ author_exclude?: number[] | undefined;
51
+ }>;
52
+ declare const getCommentSchema: z.ZodObject<{
53
+ id: z.ZodNumber;
54
+ _embed: z.ZodOptional<z.ZodBoolean>;
55
+ _fields: z.ZodOptional<z.ZodString>;
56
+ }, "strict", z.ZodTypeAny, {
57
+ id: number;
58
+ _embed?: boolean | undefined;
59
+ _fields?: string | undefined;
60
+ }, {
61
+ id: number;
62
+ _embed?: boolean | undefined;
63
+ _fields?: string | undefined;
64
+ }>;
65
+ declare const createCommentSchema: z.ZodObject<{
66
+ post: z.ZodNumber;
67
+ author: z.ZodOptional<z.ZodNumber>;
68
+ author_name: z.ZodOptional<z.ZodString>;
69
+ author_email: z.ZodOptional<z.ZodString>;
70
+ author_url: z.ZodOptional<z.ZodString>;
71
+ content: z.ZodString;
72
+ parent: z.ZodOptional<z.ZodNumber>;
73
+ status: z.ZodOptional<z.ZodEnum<["approve", "hold"]>>;
74
+ }, "strict", z.ZodTypeAny, {
75
+ post: number;
76
+ content: string;
77
+ status?: "approve" | "hold" | undefined;
78
+ author?: number | undefined;
79
+ parent?: number | undefined;
80
+ author_email?: string | undefined;
81
+ author_name?: string | undefined;
82
+ author_url?: string | undefined;
83
+ }, {
84
+ post: number;
85
+ content: string;
86
+ status?: "approve" | "hold" | undefined;
87
+ author?: number | undefined;
88
+ parent?: number | undefined;
89
+ author_email?: string | undefined;
90
+ author_name?: string | undefined;
91
+ author_url?: string | undefined;
92
+ }>;
93
+ declare const updateCommentSchema: z.ZodObject<{
94
+ id: z.ZodNumber;
95
+ post: z.ZodOptional<z.ZodNumber>;
96
+ author: z.ZodOptional<z.ZodNumber>;
97
+ author_name: z.ZodOptional<z.ZodString>;
98
+ author_email: z.ZodOptional<z.ZodString>;
99
+ author_url: z.ZodOptional<z.ZodString>;
100
+ content: z.ZodOptional<z.ZodString>;
101
+ parent: z.ZodOptional<z.ZodNumber>;
102
+ status: z.ZodOptional<z.ZodEnum<["approve", "hold", "spam", "trash"]>>;
103
+ }, "strict", z.ZodTypeAny, {
104
+ id: number;
105
+ post?: number | undefined;
106
+ status?: "approve" | "hold" | "spam" | "trash" | undefined;
107
+ author?: number | undefined;
108
+ parent?: number | undefined;
109
+ content?: string | undefined;
110
+ author_email?: string | undefined;
111
+ author_name?: string | undefined;
112
+ author_url?: string | undefined;
113
+ }, {
114
+ id: number;
115
+ post?: number | undefined;
116
+ status?: "approve" | "hold" | "spam" | "trash" | undefined;
117
+ author?: number | undefined;
118
+ parent?: number | undefined;
119
+ content?: string | undefined;
120
+ author_email?: string | undefined;
121
+ author_name?: string | undefined;
122
+ author_url?: string | undefined;
123
+ }>;
124
+ declare const deleteCommentSchema: z.ZodObject<{
125
+ id: z.ZodNumber;
126
+ force: z.ZodOptional<z.ZodBoolean>;
127
+ }, "strict", z.ZodTypeAny, {
128
+ id: number;
129
+ force?: boolean | undefined;
130
+ }, {
131
+ id: number;
132
+ force?: boolean | undefined;
133
+ }>;
134
+ type ListCommentsParams = z.infer<typeof listCommentsSchema>;
135
+ type GetCommentParams = z.infer<typeof getCommentSchema>;
136
+ type CreateCommentParams = z.infer<typeof createCommentSchema>;
137
+ type UpdateCommentParams = z.infer<typeof updateCommentSchema>;
138
+ type DeleteCommentParams = z.infer<typeof deleteCommentSchema>;
139
+ export declare const commentTools: Tool[];
140
+ export declare const commentHandlers: {
141
+ list_comments: (params: ListCommentsParams) => Promise<{
142
+ toolResult: {
143
+ content: {
144
+ type: string;
145
+ text: string;
146
+ }[];
147
+ isError?: undefined;
148
+ };
149
+ } | {
150
+ toolResult: {
151
+ isError: boolean;
152
+ content: {
153
+ type: string;
154
+ text: string;
155
+ }[];
156
+ };
157
+ }>;
158
+ get_comment: (params: GetCommentParams) => Promise<{
159
+ toolResult: {
160
+ content: {
161
+ type: string;
162
+ text: string;
163
+ }[];
164
+ isError?: undefined;
165
+ };
166
+ } | {
167
+ toolResult: {
168
+ isError: boolean;
169
+ content: {
170
+ type: string;
171
+ text: string;
172
+ }[];
173
+ };
174
+ }>;
175
+ create_comment: (params: CreateCommentParams) => Promise<{
176
+ toolResult: {
177
+ content: {
178
+ type: string;
179
+ text: string;
180
+ }[];
181
+ isError?: undefined;
182
+ };
183
+ } | {
184
+ toolResult: {
185
+ isError: boolean;
186
+ content: {
187
+ type: string;
188
+ text: string;
189
+ }[];
190
+ };
191
+ }>;
192
+ update_comment: (params: UpdateCommentParams) => Promise<{
193
+ toolResult: {
194
+ content: {
195
+ type: string;
196
+ text: string;
197
+ }[];
198
+ isError?: undefined;
199
+ };
200
+ } | {
201
+ toolResult: {
202
+ isError: boolean;
203
+ content: {
204
+ type: string;
205
+ text: string;
206
+ }[];
207
+ };
208
+ }>;
209
+ delete_comment: (params: DeleteCommentParams) => Promise<{
210
+ toolResult: {
211
+ content: {
212
+ type: string;
213
+ text: string;
214
+ }[];
215
+ isError?: undefined;
216
+ };
217
+ } | {
218
+ toolResult: {
219
+ isError: boolean;
220
+ content: {
221
+ type: string;
222
+ text: string;
223
+ }[];
224
+ };
225
+ }>;
226
+ };
227
+ export {};
@@ -0,0 +1,192 @@
1
+ import { makeWordPressRequest } from '../wordpress.js';
2
+ import { z } from 'zod';
3
+ // Schema for listing comments
4
+ const listCommentsSchema = z.object({
5
+ page: z.number().optional().describe("Page number (default 1)"),
6
+ per_page: z.number().min(1).max(100).optional().describe("Items per page (default 10, max 100)"),
7
+ search: z.string().optional().describe("Search term for comment content"),
8
+ after: z.string().optional().describe("ISO8601 date string to get comments published after this date"),
9
+ author: z.union([z.number(), z.array(z.number())]).optional().describe("Author ID or array of IDs"),
10
+ author_email: z.string().email().optional().describe("Author email address"),
11
+ author_exclude: z.array(z.number()).optional().describe("Array of author IDs to exclude"),
12
+ post: z.number().optional().describe("Post ID to retrieve comments for"),
13
+ status: z.enum(['approve', 'hold', 'spam', 'trash']).optional().describe("Comment status"),
14
+ type: z.string().optional().describe("Comment type"),
15
+ orderby: z.enum(['date', 'date_gmt', 'id', 'include', 'post', 'parent', 'type']).optional().describe("Sort comments by parameter"),
16
+ order: z.enum(['asc', 'desc']).optional().describe("Order sort attribute ascending or descending"),
17
+ _embed: z.boolean().optional().describe("Inline related resources"),
18
+ _fields: z.string().optional().describe("Comma-separated list of fields to return"),
19
+ include_pagination: z.boolean().optional().describe("Include pagination metadata in response")
20
+ });
21
+ // Schema for getting a single comment
22
+ const getCommentSchema = z.object({
23
+ id: z.number().describe("Comment ID"),
24
+ _embed: z.boolean().optional().describe("Inline related resources"),
25
+ _fields: z.string().optional().describe("Comma-separated list of fields to return")
26
+ }).strict();
27
+ // Schema for creating a comment
28
+ const createCommentSchema = z.object({
29
+ post: z.number().describe("The ID of the post object the comment is for"),
30
+ author: z.number().optional().describe("The ID of the user object, if the author is a registered user"),
31
+ author_name: z.string().optional().describe("Display name for the comment author"),
32
+ author_email: z.string().email().optional().describe("Email address for the comment author"),
33
+ author_url: z.string().url().optional().describe("URL for the comment author"),
34
+ content: z.string().describe("The content of the comment"),
35
+ parent: z.number().optional().describe("The ID of the parent comment"),
36
+ status: z.enum(['approve', 'hold']).optional().describe("State of the comment")
37
+ }).strict();
38
+ // Schema for updating a comment
39
+ const updateCommentSchema = z.object({
40
+ id: z.number().describe("Comment ID"),
41
+ post: z.number().optional().describe("The ID of the post object the comment is for"),
42
+ author: z.number().optional().describe("The ID of the user object, if the author is a registered user"),
43
+ author_name: z.string().optional().describe("Display name for the comment author"),
44
+ author_email: z.string().email().optional().describe("Email address for the comment author"),
45
+ author_url: z.string().url().optional().describe("URL for the comment author"),
46
+ content: z.string().optional().describe("The content of the comment"),
47
+ parent: z.number().optional().describe("The ID of the parent comment"),
48
+ status: z.enum(['approve', 'hold', 'spam', 'trash']).optional().describe("State of the comment")
49
+ }).strict();
50
+ // Schema for deleting a comment
51
+ const deleteCommentSchema = z.object({
52
+ id: z.number().describe("Comment ID"),
53
+ force: z.boolean().optional().describe("Whether to bypass trash and force deletion")
54
+ }).strict();
55
+ // Define the tools
56
+ export const commentTools = [
57
+ {
58
+ name: "list_comments",
59
+ description: "Lists comments with filtering, sorting, and pagination options",
60
+ inputSchema: { type: "object", properties: listCommentsSchema.shape }
61
+ },
62
+ {
63
+ name: "get_comment",
64
+ description: "Gets a comment by ID",
65
+ inputSchema: { type: "object", properties: getCommentSchema.shape }
66
+ },
67
+ {
68
+ name: "create_comment",
69
+ description: "Creates a new comment",
70
+ inputSchema: { type: "object", properties: createCommentSchema.shape }
71
+ },
72
+ {
73
+ name: "update_comment",
74
+ description: "Updates an existing comment",
75
+ inputSchema: { type: "object", properties: updateCommentSchema.shape }
76
+ },
77
+ {
78
+ name: "delete_comment",
79
+ description: "Deletes a comment",
80
+ inputSchema: { type: "object", properties: deleteCommentSchema.shape }
81
+ }
82
+ ];
83
+ // Implement the handlers
84
+ export const commentHandlers = {
85
+ list_comments: async (params) => {
86
+ try {
87
+ const { include_pagination, ...queryParams } = params;
88
+ const response = await makeWordPressRequest('GET', "comments", queryParams, {
89
+ includePagination: include_pagination,
90
+ });
91
+ return {
92
+ toolResult: {
93
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
94
+ },
95
+ };
96
+ }
97
+ catch (error) {
98
+ const errorMessage = error.response?.data?.message || error.message;
99
+ return {
100
+ toolResult: {
101
+ isError: true,
102
+ content: [{ type: 'text', text: `Error listing comments: ${errorMessage}` }],
103
+ },
104
+ };
105
+ }
106
+ },
107
+ get_comment: async (params) => {
108
+ try {
109
+ const queryParams = {};
110
+ if (params._embed)
111
+ queryParams._embed = true;
112
+ if (params._fields)
113
+ queryParams._fields = params._fields;
114
+ const response = await makeWordPressRequest('GET', `comments/${params.id}`, queryParams);
115
+ return {
116
+ toolResult: {
117
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
118
+ },
119
+ };
120
+ }
121
+ catch (error) {
122
+ const errorMessage = error.response?.data?.message || error.message;
123
+ return {
124
+ toolResult: {
125
+ isError: true,
126
+ content: [{ type: 'text', text: `Error getting comment: ${errorMessage}` }],
127
+ },
128
+ };
129
+ }
130
+ },
131
+ create_comment: async (params) => {
132
+ try {
133
+ const response = await makeWordPressRequest('POST', "comments", params);
134
+ const comment = response;
135
+ return {
136
+ toolResult: {
137
+ content: [{ type: 'text', text: JSON.stringify(comment, null, 2) }],
138
+ },
139
+ };
140
+ }
141
+ catch (error) {
142
+ const errorMessage = error.response?.data?.message || error.message;
143
+ return {
144
+ toolResult: {
145
+ isError: true,
146
+ content: [{ type: 'text', text: `Error creating comment: ${errorMessage}` }],
147
+ },
148
+ };
149
+ }
150
+ },
151
+ update_comment: async (params) => {
152
+ try {
153
+ const { id, ...updateData } = params;
154
+ const response = await makeWordPressRequest('POST', `comments/${id}`, updateData);
155
+ const comment = response;
156
+ return {
157
+ toolResult: {
158
+ content: [{ type: 'text', text: JSON.stringify(comment, null, 2) }],
159
+ },
160
+ };
161
+ }
162
+ catch (error) {
163
+ const errorMessage = error.response?.data?.message || error.message;
164
+ return {
165
+ toolResult: {
166
+ isError: true,
167
+ content: [{ type: 'text', text: `Error updating comment: ${errorMessage}` }],
168
+ },
169
+ };
170
+ }
171
+ },
172
+ delete_comment: async (params) => {
173
+ try {
174
+ const response = await makeWordPressRequest('DELETE', `comments/${params.id}`, { force: params.force });
175
+ const comment = response;
176
+ return {
177
+ toolResult: {
178
+ content: [{ type: 'text', text: JSON.stringify(comment, null, 2) }],
179
+ },
180
+ };
181
+ }
182
+ catch (error) {
183
+ const errorMessage = error.response?.data?.message || error.message;
184
+ return {
185
+ toolResult: {
186
+ isError: true,
187
+ content: [{ type: 'text', text: `Error deleting comment: ${errorMessage}` }],
188
+ },
189
+ };
190
+ }
191
+ }
192
+ };