@adsim/wordpress-mcp-server 1.0.0 → 3.1.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 (67) hide show
  1. package/.env.example +8 -0
  2. package/.github/workflows/ci.yml +20 -0
  3. package/LICENSE +1 -1
  4. package/README.md +596 -135
  5. package/dxt/build-mcpb.sh +7 -0
  6. package/dxt/manifest.json +112 -0
  7. package/index.js +1367 -0
  8. package/package.json +22 -33
  9. package/src/auth/bearer.js +72 -0
  10. package/src/transport/http.js +264 -0
  11. package/tests/helpers/mockWpRequest.js +135 -0
  12. package/tests/unit/dxt/manifest.test.js +78 -0
  13. package/tests/unit/governance.test.js +260 -0
  14. package/tests/unit/tools/comments.test.js +170 -0
  15. package/tests/unit/tools/media.test.js +279 -0
  16. package/tests/unit/tools/pages.test.js +222 -0
  17. package/tests/unit/tools/plugins.test.js +268 -0
  18. package/tests/unit/tools/posts.test.js +310 -0
  19. package/tests/unit/tools/revisions.test.js +299 -0
  20. package/tests/unit/tools/search.test.js +190 -0
  21. package/tests/unit/tools/seo.test.js +248 -0
  22. package/tests/unit/tools/site.test.js +133 -0
  23. package/tests/unit/tools/taxonomies.test.js +220 -0
  24. package/tests/unit/tools/themes.test.js +163 -0
  25. package/tests/unit/tools/users.test.js +113 -0
  26. package/tests/unit/transport/http.test.js +300 -0
  27. package/vitest.config.js +12 -0
  28. package/dist/constants.d.ts +0 -13
  29. package/dist/constants.d.ts.map +0 -1
  30. package/dist/constants.js +0 -10
  31. package/dist/constants.js.map +0 -1
  32. package/dist/index.d.ts +0 -3
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/index.js +0 -33
  35. package/dist/index.js.map +0 -1
  36. package/dist/schemas/index.d.ts +0 -308
  37. package/dist/schemas/index.d.ts.map +0 -1
  38. package/dist/schemas/index.js +0 -191
  39. package/dist/schemas/index.js.map +0 -1
  40. package/dist/services/formatters.d.ts +0 -22
  41. package/dist/services/formatters.d.ts.map +0 -1
  42. package/dist/services/formatters.js +0 -52
  43. package/dist/services/formatters.js.map +0 -1
  44. package/dist/services/wp-client.d.ts +0 -38
  45. package/dist/services/wp-client.d.ts.map +0 -1
  46. package/dist/services/wp-client.js +0 -102
  47. package/dist/services/wp-client.js.map +0 -1
  48. package/dist/tools/content.d.ts +0 -4
  49. package/dist/tools/content.d.ts.map +0 -1
  50. package/dist/tools/content.js +0 -196
  51. package/dist/tools/content.js.map +0 -1
  52. package/dist/tools/posts.d.ts +0 -4
  53. package/dist/tools/posts.d.ts.map +0 -1
  54. package/dist/tools/posts.js +0 -179
  55. package/dist/tools/posts.js.map +0 -1
  56. package/dist/tools/seo.d.ts +0 -4
  57. package/dist/tools/seo.d.ts.map +0 -1
  58. package/dist/tools/seo.js +0 -241
  59. package/dist/tools/seo.js.map +0 -1
  60. package/dist/tools/taxonomy.d.ts +0 -4
  61. package/dist/tools/taxonomy.d.ts.map +0 -1
  62. package/dist/tools/taxonomy.js +0 -82
  63. package/dist/tools/taxonomy.js.map +0 -1
  64. package/dist/types.d.ts +0 -160
  65. package/dist/types.d.ts.map +0 -1
  66. package/dist/types.js +0 -3
  67. package/dist/types.js.map +0 -1
@@ -1,102 +0,0 @@
1
- import { WP_REST_BASE } from "../constants.js";
2
- export class WordPressClient {
3
- baseUrl;
4
- authHeader;
5
- constructor(config) {
6
- // Remove trailing slash
7
- this.baseUrl = config.baseUrl.replace(/\/+$/, "");
8
- this.authHeader = `Basic ${Buffer.from(`${config.username}:${config.password}`).toString("base64")}`;
9
- }
10
- async request(endpoint, options = {}) {
11
- const { method = "GET", body, params } = options;
12
- // Build URL with query parameters
13
- const url = new URL(`${this.baseUrl}${WP_REST_BASE}${endpoint}`);
14
- if (params) {
15
- for (const [key, value] of Object.entries(params)) {
16
- if (value !== undefined && value !== null) {
17
- url.searchParams.set(key, String(value));
18
- }
19
- }
20
- }
21
- const headers = {
22
- Authorization: this.authHeader,
23
- "Content-Type": "application/json",
24
- Accept: "application/json",
25
- };
26
- const fetchOptions = { method, headers };
27
- if (body && method !== "GET") {
28
- fetchOptions.body = JSON.stringify(body);
29
- }
30
- const response = await fetch(url.toString(), fetchOptions);
31
- if (!response.ok) {
32
- const errorText = await response.text();
33
- let errorMessage;
34
- try {
35
- const errorJson = JSON.parse(errorText);
36
- errorMessage = errorJson.message || errorJson.code || errorText;
37
- }
38
- catch {
39
- errorMessage = errorText;
40
- }
41
- throw new Error(`WordPress API Error (${response.status}): ${errorMessage}. ` +
42
- `Endpoint: ${method} ${endpoint}. ` +
43
- `Check your WP_API_URL, credentials, and ensure the REST API is enabled.`);
44
- }
45
- const data = (await response.json());
46
- return {
47
- data,
48
- totalPages: parseInt(response.headers.get("X-WP-TotalPages") || "0", 10) || undefined,
49
- total: parseInt(response.headers.get("X-WP-Total") || "0", 10) || undefined,
50
- };
51
- }
52
- /** GET shorthand */
53
- async get(endpoint, params) {
54
- return this.request(endpoint, { params });
55
- }
56
- /** POST shorthand */
57
- async post(endpoint, body, params) {
58
- return this.request(endpoint, { method: "POST", body, params });
59
- }
60
- /** PUT shorthand */
61
- async put(endpoint, body) {
62
- return this.request(endpoint, { method: "PUT", body });
63
- }
64
- /** DELETE shorthand */
65
- async delete(endpoint, params) {
66
- return this.request(endpoint, { method: "DELETE", params });
67
- }
68
- /** Test connection by fetching site info */
69
- async testConnection() {
70
- try {
71
- const url = `${this.baseUrl}/wp-json`;
72
- const response = await fetch(url, {
73
- headers: { Authorization: this.authHeader },
74
- });
75
- return response.ok;
76
- }
77
- catch {
78
- return false;
79
- }
80
- }
81
- }
82
- /** Create a client from environment variables */
83
- export function createClientFromEnv() {
84
- const baseUrl = process.env.WP_API_URL;
85
- const username = process.env.WP_API_USERNAME;
86
- const password = process.env.WP_API_PASSWORD;
87
- if (!baseUrl) {
88
- throw new Error("Missing WP_API_URL environment variable. " +
89
- 'Set it to your WordPress site URL (e.g., "https://example.com").');
90
- }
91
- if (!username) {
92
- throw new Error("Missing WP_API_USERNAME environment variable. " +
93
- "Set it to your WordPress username.");
94
- }
95
- if (!password) {
96
- throw new Error("Missing WP_API_PASSWORD environment variable. " +
97
- "Set it to a WordPress Application Password " +
98
- "(Users → Your Profile → Application Passwords).");
99
- }
100
- return new WordPressClient({ baseUrl, username, password });
101
- }
102
- //# sourceMappingURL=wp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wp-client.js","sourceRoot":"","sources":["../../src/services/wp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,OAAO,eAAe;IAClB,OAAO,CAAS;IAChB,UAAU,CAAS;IAE3B,YAAY,MAAmB;QAC7B,wBAAwB;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,UAII,EAAE;QAEN,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAEjD,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,YAAY,GAAG,QAAQ,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,IAAI,CAAC,UAAU;YAC9B,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;QAEF,MAAM,YAAY,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACtD,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,YAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,YAAY,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,CAAC,MAAM,MAAM,YAAY,IAAI;gBAC3D,aAAa,MAAM,IAAI,QAAQ,IAAI;gBACnC,yEAAyE,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QAE1C,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,SAAS;YACrF,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,SAAS;SAC5E,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,GAAG,CACP,QAAgB,EAChB,MAA8D;QAE9D,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,IAAI,CACR,QAAgB,EAChB,IAA6B,EAC7B,MAA8D;QAE9D,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,GAAG,CACP,QAAgB,EAChB,IAA6B;QAE7B,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,MAAM,CACV,QAAgB,EAChB,MAA8D;QAE9D,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,UAAU,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE;aAC5C,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,2CAA2C;YACzC,kEAAkE,CACrE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,gDAAgD;YAC9C,oCAAoC,CACvC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,gDAAgD;YAC9C,6CAA6C;YAC7C,iDAAiD,CACpD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9D,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { WordPressClient } from "../services/wp-client.js";
3
- export declare function registerContentTools(server: McpServer, client: WordPressClient): void;
4
- //# sourceMappingURL=content.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAYhE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CA8OrF"}
@@ -1,196 +0,0 @@
1
- import { ListPagesSchema, ListMediaSchema, SearchSchema, ListCommentsSchema, ListUsersSchema, SiteInfoSchema, } from "../schemas/index.js";
2
- import { paginationInfo, stripHtml, truncateIfNeeded } from "../services/formatters.js";
3
- export function registerContentTools(server, client) {
4
- // ---- wp_list_pages ----
5
- server.registerTool("wp_list_pages", {
6
- title: "List WordPress Pages",
7
- description: `List WordPress pages with filtering and pagination.
8
-
9
- Args:
10
- - per_page, page, status, parent, orderby, order, search
11
-
12
- Returns: Array of page summaries.`,
13
- inputSchema: ListPagesSchema,
14
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
15
- }, async (params) => {
16
- const { data: pages, total, totalPages } = await client.get("/pages", {
17
- per_page: params.per_page,
18
- page: params.page,
19
- status: params.status,
20
- parent: params.parent,
21
- orderby: params.orderby,
22
- order: params.order,
23
- search: params.search,
24
- });
25
- const results = pages.map((p) => ({
26
- id: p.id,
27
- title: stripHtml(p.title.rendered),
28
- date: p.date,
29
- slug: p.slug,
30
- status: p.status,
31
- link: p.link,
32
- parent: p.parent,
33
- menu_order: p.menu_order,
34
- }));
35
- const pagination = paginationInfo(params.page, params.per_page, total, totalPages);
36
- const text = truncateIfNeeded(JSON.stringify({ pages: results, pagination }, null, 2));
37
- return { content: [{ type: "text", text }] };
38
- });
39
- // ---- wp_list_media ----
40
- server.registerTool("wp_list_media", {
41
- title: "List WordPress Media",
42
- description: `List media files in the WordPress library.
43
-
44
- Args:
45
- - per_page, page, media_type (image/video/audio/application), search
46
-
47
- Returns: Array of media items with URLs and metadata.`,
48
- inputSchema: ListMediaSchema,
49
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
50
- }, async (params) => {
51
- const { data: media, total, totalPages } = await client.get("/media", {
52
- per_page: params.per_page,
53
- page: params.page,
54
- media_type: params.media_type,
55
- search: params.search,
56
- });
57
- const results = media.map((m) => ({
58
- id: m.id,
59
- title: stripHtml(m.title.rendered),
60
- date: m.date,
61
- media_type: m.media_type,
62
- mime_type: m.mime_type,
63
- source_url: m.source_url,
64
- alt_text: m.alt_text,
65
- width: m.media_details?.width,
66
- height: m.media_details?.height,
67
- }));
68
- const pagination = paginationInfo(params.page, params.per_page, total, totalPages);
69
- const text = truncateIfNeeded(JSON.stringify({ media: results, pagination }, null, 2));
70
- return { content: [{ type: "text", text }] };
71
- });
72
- // ---- wp_search ----
73
- server.registerTool("wp_search", {
74
- title: "Search WordPress Content",
75
- description: `Search across WordPress content (posts, pages, categories, tags).
76
-
77
- Args:
78
- - search (string): Search term (required)
79
- - per_page (number): Results per page (default: 10)
80
- - type (string): Filter by content type — post, page, category, tag
81
- - subtype (string): Filter by subtype
82
-
83
- Returns: Array of search results with id, title, url, type.`,
84
- inputSchema: SearchSchema,
85
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
86
- }, async (params) => {
87
- const { data: results } = await client.get("/search", {
88
- search: params.search,
89
- per_page: params.per_page,
90
- type: params.type,
91
- subtype: params.subtype,
92
- });
93
- const formatted = results.map((r) => ({
94
- id: r.id,
95
- title: r.title,
96
- url: r.url,
97
- type: r.type,
98
- subtype: r.subtype,
99
- }));
100
- const text = JSON.stringify({ results: formatted, count: formatted.length }, null, 2);
101
- return { content: [{ type: "text", text }] };
102
- });
103
- // ---- wp_list_comments ----
104
- server.registerTool("wp_list_comments", {
105
- title: "List WordPress Comments",
106
- description: `List comments with filtering by post and status.
107
-
108
- Args:
109
- - per_page, page, post (post ID), status (approve/hold/spam/trash)
110
-
111
- Returns: Array of comments.`,
112
- inputSchema: ListCommentsSchema,
113
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
114
- }, async (params) => {
115
- const { data: comments, total, totalPages } = await client.get("/comments", {
116
- per_page: params.per_page,
117
- page: params.page,
118
- post: params.post,
119
- status: params.status,
120
- });
121
- const results = comments.map((c) => ({
122
- id: c.id,
123
- post: c.post,
124
- author_name: c.author_name,
125
- date: c.date,
126
- content: stripHtml(c.content.rendered).substring(0, 300),
127
- status: c.status,
128
- parent: c.parent,
129
- }));
130
- const pagination = paginationInfo(params.page, params.per_page, total, totalPages);
131
- const text = truncateIfNeeded(JSON.stringify({ comments: results, pagination }, null, 2));
132
- return { content: [{ type: "text", text }] };
133
- });
134
- // ---- wp_list_users ----
135
- server.registerTool("wp_list_users", {
136
- title: "List WordPress Users",
137
- description: `List WordPress users with filtering.
138
-
139
- Args:
140
- - per_page, page, roles (comma-separated), search
141
-
142
- Returns: Array of users with id, name, slug, description.`,
143
- inputSchema: ListUsersSchema,
144
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
145
- }, async (params) => {
146
- const { data: users, total, totalPages } = await client.get("/users", {
147
- per_page: params.per_page,
148
- page: params.page,
149
- roles: params.roles,
150
- search: params.search,
151
- });
152
- const results = users.map((u) => ({
153
- id: u.id,
154
- name: u.name,
155
- slug: u.slug,
156
- description: u.description || null,
157
- link: u.link,
158
- }));
159
- const pagination = paginationInfo(params.page, params.per_page, total, totalPages);
160
- const text = JSON.stringify({ users: results, pagination }, null, 2);
161
- return { content: [{ type: "text", text }] };
162
- });
163
- // ---- wp_site_info ----
164
- server.registerTool("wp_site_info", {
165
- title: "Get WordPress Site Info",
166
- description: `Get WordPress site information including name, description, URL, and timezone.
167
-
168
- Returns: Site name, description, URL, GMT offset, timezone.`,
169
- inputSchema: SiteInfoSchema,
170
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
171
- }, async () => {
172
- // Fetch from /wp-json root (not /wp/v2)
173
- const url = `${process.env.WP_API_URL}/wp-json`;
174
- const auth = `Basic ${Buffer.from(`${process.env.WP_API_USERNAME}:${process.env.WP_API_PASSWORD}`).toString("base64")}`;
175
- const response = await fetch(url, { headers: { Authorization: auth } });
176
- if (!response.ok) {
177
- throw new Error(`Failed to fetch site info: ${response.status}`);
178
- }
179
- const data = (await response.json());
180
- return {
181
- content: [
182
- {
183
- type: "text",
184
- text: JSON.stringify({
185
- name: data.name,
186
- description: data.description,
187
- url: data.url,
188
- home: data.home,
189
- timezone: data.timezone_string || `GMT${data.gmt_offset >= 0 ? "+" : ""}${data.gmt_offset}`,
190
- }, null, 2),
191
- },
192
- ],
193
- };
194
- });
195
- }
196
- //# sourceMappingURL=content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { WordPressClient } from "../services/wp-client.js";
3
- export declare function registerPostsTools(server: McpServer, client: WordPressClient): void;
4
- //# sourceMappingURL=posts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAKhE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAiOnF"}
@@ -1,179 +0,0 @@
1
- import { ListPostsSchema, GetPostSchema, CreatePostSchema, UpdatePostSchema, DeletePostSchema } from "../schemas/index.js";
2
- import { formatPostSummary, paginationInfo, stripHtml, truncateIfNeeded } from "../services/formatters.js";
3
- export function registerPostsTools(server, client) {
4
- // ---- wp_list_posts ----
5
- server.registerTool("wp_list_posts", {
6
- title: "List WordPress Posts",
7
- description: `List WordPress posts with filtering, sorting, and pagination.
8
-
9
- Args:
10
- - per_page (number): Items per page, 1-100 (default: 10)
11
- - page (number): Page number (default: 1)
12
- - status (string): Filter by status — publish, draft, pending, private, future, trash
13
- - orderby (string): Sort by — date, id, title, slug, modified, author, relevance
14
- - order (string): Sort direction — asc or desc (default: desc)
15
- - categories (string): Comma-separated category IDs
16
- - tags (string): Comma-separated tag IDs
17
- - search (string): Search keyword
18
-
19
- Returns: Array of post summaries with id, title, date, status, link, excerpt.`,
20
- inputSchema: ListPostsSchema,
21
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
22
- }, async (params) => {
23
- const queryParams = {
24
- per_page: params.per_page,
25
- page: params.page,
26
- status: params.status,
27
- orderby: params.orderby,
28
- order: params.order,
29
- categories: params.categories,
30
- tags: params.tags,
31
- search: params.search,
32
- };
33
- const { data: posts, total, totalPages } = await client.get("/posts", queryParams);
34
- const results = posts.map(formatPostSummary);
35
- const pagination = paginationInfo(params.page, params.per_page, total, totalPages);
36
- const text = truncateIfNeeded(JSON.stringify({ posts: results, pagination }, null, 2));
37
- return { content: [{ type: "text", text }] };
38
- });
39
- // ---- wp_get_post ----
40
- server.registerTool("wp_get_post", {
41
- title: "Get WordPress Post",
42
- description: `Get a single WordPress post by ID with full content, metadata, and SEO fields.
43
-
44
- Args:
45
- - id (number): WordPress post ID
46
-
47
- Returns: Complete post data including title, content, excerpt, SEO metadata, categories, tags.`,
48
- inputSchema: GetPostSchema,
49
- annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
50
- }, async (params) => {
51
- const { data: post } = await client.get(`/posts/${params.id}`);
52
- const result = {
53
- id: post.id,
54
- title: stripHtml(post.title.rendered),
55
- content: stripHtml(post.content.rendered),
56
- excerpt: stripHtml(post.excerpt.rendered),
57
- date: post.date,
58
- modified: post.modified,
59
- slug: post.slug,
60
- status: post.status,
61
- link: post.link,
62
- author: post.author,
63
- categories: post.categories,
64
- tags: post.tags,
65
- featured_media: post.featured_media,
66
- seo: {
67
- rank_math_title: post.rank_math_title || null,
68
- rank_math_description: post.rank_math_description || null,
69
- rank_math_focus_keyword: post.rank_math_focus_keyword || null,
70
- yoast: post.yoast_head_json || null,
71
- },
72
- meta: post.meta,
73
- };
74
- const text = truncateIfNeeded(JSON.stringify(result, null, 2));
75
- return { content: [{ type: "text", text }] };
76
- });
77
- // ---- wp_create_post ----
78
- server.registerTool("wp_create_post", {
79
- title: "Create WordPress Post",
80
- description: `Create a new WordPress post. Defaults to 'draft' status for safety.
81
-
82
- Args:
83
- - title (string): Post title (required)
84
- - content (string): Post content, HTML supported (required)
85
- - status (string): publish, draft, pending, private, future (default: draft)
86
- - excerpt (string): Post excerpt/summary
87
- - categories (number[]): Category IDs
88
- - tags (number[]): Tag IDs
89
- - featured_media (number): Featured image media ID
90
- - slug (string): URL slug
91
-
92
- Returns: Created post ID, title, and link.`,
93
- inputSchema: CreatePostSchema,
94
- annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
95
- }, async (params) => {
96
- const { data: post } = await client.post("/posts", params);
97
- return {
98
- content: [
99
- {
100
- type: "text",
101
- text: JSON.stringify({
102
- success: true,
103
- id: post.id,
104
- title: stripHtml(post.title.rendered),
105
- status: post.status,
106
- link: post.link,
107
- }, null, 2),
108
- },
109
- ],
110
- };
111
- });
112
- // ---- wp_update_post ----
113
- server.registerTool("wp_update_post", {
114
- title: "Update WordPress Post",
115
- description: `Update an existing WordPress post. Only specified fields are changed.
116
-
117
- Args:
118
- - id (number): Post ID to update (required)
119
- - title (string): New title
120
- - content (string): New content (HTML)
121
- - status (string): New status
122
- - excerpt (string): New excerpt
123
- - categories (number[]): New category IDs
124
- - tags (number[]): New tag IDs
125
- - featured_media (number): New featured image ID
126
- - slug (string): New URL slug
127
- - meta (object): Meta fields to update (e.g., rank_math_title, rank_math_description)
128
-
129
- Returns: Updated post ID, title, and link.`,
130
- inputSchema: UpdatePostSchema,
131
- annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
132
- }, async (params) => {
133
- const { id, ...updates } = params;
134
- const { data: post } = await client.post(`/posts/${id}`, updates);
135
- return {
136
- content: [
137
- {
138
- type: "text",
139
- text: JSON.stringify({
140
- success: true,
141
- id: post.id,
142
- title: stripHtml(post.title.rendered),
143
- status: post.status,
144
- link: post.link,
145
- }, null, 2),
146
- },
147
- ],
148
- };
149
- });
150
- // ---- wp_delete_post ----
151
- server.registerTool("wp_delete_post", {
152
- title: "Delete WordPress Post",
153
- description: `Delete a WordPress post. By default moves to trash; use force=true to permanently delete.
154
-
155
- Args:
156
- - id (number): Post ID to delete (required)
157
- - force (boolean): Permanently delete if true, trash if false (default: false)
158
-
159
- Returns: Confirmation with deleted post ID and status.`,
160
- inputSchema: DeletePostSchema,
161
- annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
162
- }, async (params) => {
163
- const { data } = await client.delete(`/posts/${params.id}`, { force: params.force });
164
- return {
165
- content: [
166
- {
167
- type: "text",
168
- text: JSON.stringify({
169
- success: true,
170
- id: params.id,
171
- action: params.force ? "permanently deleted" : "moved to trash",
172
- status: data.status,
173
- }, null, 2),
174
- },
175
- ],
176
- };
177
- });
178
- }
179
- //# sourceMappingURL=posts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { WordPressClient } from "../services/wp-client.js";
3
- export declare function registerSEOTools(server: McpServer, client: WordPressClient): void;
4
- //# sourceMappingURL=seo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/tools/seo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAyHhE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAyJjF"}