localwp-mcp 0.1.2 → 0.1.3

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 (44) hide show
  1. package/README.md +33 -0
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.js +2 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/local-graphql.d.ts +8 -0
  6. package/dist/local-graphql.js +78 -0
  7. package/dist/local-graphql.js.map +1 -0
  8. package/dist/site-files.d.ts +196 -0
  9. package/dist/site-files.js +411 -0
  10. package/dist/site-files.js.map +1 -0
  11. package/dist/site-lifecycle.d.ts +33 -0
  12. package/dist/site-lifecycle.js +66 -0
  13. package/dist/site-lifecycle.js.map +1 -0
  14. package/dist/tool-schemas.d.ts +1 -0
  15. package/dist/tool-schemas.js +4 -0
  16. package/dist/tool-schemas.js.map +1 -1
  17. package/dist/tools/delete-site-file.d.ts +2 -0
  18. package/dist/tools/delete-site-file.js +29 -0
  19. package/dist/tools/delete-site-file.js.map +1 -0
  20. package/dist/tools/index.js +16 -0
  21. package/dist/tools/index.js.map +1 -1
  22. package/dist/tools/list-site-files.d.ts +2 -0
  23. package/dist/tools/list-site-files.js +46 -0
  24. package/dist/tools/list-site-files.js.map +1 -0
  25. package/dist/tools/read-site-file.d.ts +2 -0
  26. package/dist/tools/read-site-file.js +30 -0
  27. package/dist/tools/read-site-file.js.map +1 -0
  28. package/dist/tools/restart-local-site.d.ts +2 -0
  29. package/dist/tools/restart-local-site.js +19 -0
  30. package/dist/tools/restart-local-site.js.map +1 -0
  31. package/dist/tools/search-site-files.d.ts +2 -0
  32. package/dist/tools/search-site-files.js +57 -0
  33. package/dist/tools/search-site-files.js.map +1 -0
  34. package/dist/tools/start-local-site.d.ts +2 -0
  35. package/dist/tools/start-local-site.js +19 -0
  36. package/dist/tools/start-local-site.js.map +1 -0
  37. package/dist/tools/stop-local-site.d.ts +2 -0
  38. package/dist/tools/stop-local-site.js +19 -0
  39. package/dist/tools/stop-local-site.js.map +1 -0
  40. package/dist/tools/write-site-file.d.ts +2 -0
  41. package/dist/tools/write-site-file.js +30 -0
  42. package/dist/tools/write-site-file.js.map +1 -0
  43. package/dist/types.d.ts +11 -0
  44. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
3
+ import { listSiteFiles } from "../site-files.js";
4
+ import { siteRelativePathSchema, siteSelectorSchema } from "../tool-schemas.js";
5
+ export function registerListSiteFilesTool(server) {
6
+ server.registerTool("list_site_files", {
7
+ description: "Lists files and directories inside the selected LocalWP site. Paths are scoped to that site's root directory.",
8
+ inputSchema: {
9
+ ...siteSelectorSchema,
10
+ directoryPath: siteRelativePathSchema
11
+ .optional()
12
+ .describe("Optional directory path relative to the selected site's root. Defaults to the site root."),
13
+ recursive: z
14
+ .boolean()
15
+ .optional()
16
+ .describe("When true, walk child directories recursively."),
17
+ maxDepth: z
18
+ .number()
19
+ .int()
20
+ .nonnegative()
21
+ .optional()
22
+ .describe("Maximum recursion depth when recursive=true."),
23
+ maxEntries: z
24
+ .number()
25
+ .int()
26
+ .positive()
27
+ .optional()
28
+ .describe("Maximum number of entries to return."),
29
+ includeHidden: z
30
+ .boolean()
31
+ .optional()
32
+ .describe("When true, include dotfiles and hidden directories."),
33
+ },
34
+ annotations: {
35
+ readOnlyHint: true,
36
+ },
37
+ }, async ({ siteId, siteName, directoryPath, recursive, maxDepth, maxEntries, includeHidden, }) => {
38
+ try {
39
+ return createJsonToolResult(await listSiteFiles({ siteId, siteName }, { directoryPath, recursive, maxDepth, maxEntries, includeHidden }));
40
+ }
41
+ catch (error) {
42
+ return createErrorToolResult(error);
43
+ }
44
+ });
45
+ }
46
+ //# sourceMappingURL=list-site-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-site-files.js","sourceRoot":"","sources":["../../src/tools/list-site-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,+GAA+G;QACjH,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,aAAa,EAAE,sBAAsB;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CACP,0FAA0F,CAC3F;YACH,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CAAC,sCAAsC,CAAC;YACnD,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,qDAAqD,CAAC;SACnE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,KAAK,EAAE,EACL,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,GACd,EAAE,EAAE;QACH,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,aAAa,CACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,CAClE,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerReadSiteFileTool(server: McpServer): void;
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
3
+ import { readSiteFile } from "../site-files.js";
4
+ import { siteRelativePathSchema, siteSelectorSchema } from "../tool-schemas.js";
5
+ export function registerReadSiteFileTool(server) {
6
+ server.registerTool("read_site_file", {
7
+ description: "Reads a text file inside the selected LocalWP site. The path must stay inside that site's root directory.",
8
+ inputSchema: {
9
+ ...siteSelectorSchema,
10
+ filePath: siteRelativePathSchema.describe("File path relative to the selected site's root directory."),
11
+ maxBytes: z
12
+ .number()
13
+ .int()
14
+ .positive()
15
+ .optional()
16
+ .describe("Maximum number of bytes to return from the file."),
17
+ },
18
+ annotations: {
19
+ readOnlyHint: true,
20
+ },
21
+ }, async ({ siteId, siteName, filePath, maxBytes }) => {
22
+ try {
23
+ return createJsonToolResult(await readSiteFile({ siteId, siteName }, { filePath, maxBytes }));
24
+ }
25
+ catch (error) {
26
+ return createErrorToolResult(error);
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=read-site-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-site-file.js","sourceRoot":"","sources":["../../src/tools/read-site-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,CACvC,2DAA2D,CAC5D;YACD,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CAAC,kDAAkD,CAAC;SAChE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CACjE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRestartLocalSiteTool(server: McpServer): void;
@@ -0,0 +1,19 @@
1
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
2
+ import { runSiteLifecycleAction } from "../site-lifecycle.js";
3
+ import { siteSelectorSchema } from "../tool-schemas.js";
4
+ export function registerRestartLocalSiteTool(server) {
5
+ server.registerTool("restart_local_site", {
6
+ description: "Restarts the selected LocalWP site. If the site is halted, this starts it.",
7
+ inputSchema: {
8
+ ...siteSelectorSchema,
9
+ },
10
+ }, async ({ siteId, siteName }) => {
11
+ try {
12
+ return createJsonToolResult(await runSiteLifecycleAction("restart", { siteId, siteName }));
13
+ }
14
+ catch (error) {
15
+ return createErrorToolResult(error);
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=restart-local-site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-local-site.js","sourceRoot":"","sources":["../../src/tools/restart-local-site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,4EAA4E;QAC9E,WAAW,EAAE;YACX,GAAG,kBAAkB;SACtB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,sBAAsB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAC9D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSearchSiteFilesTool(server: McpServer): void;
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
3
+ import { searchSiteFiles } from "../site-files.js";
4
+ import { siteRelativePathSchema, siteSelectorSchema } from "../tool-schemas.js";
5
+ export function registerSearchSiteFilesTool(server) {
6
+ server.registerTool("search_site_files", {
7
+ description: "Searches text files inside the selected LocalWP site for a literal string match.",
8
+ inputSchema: {
9
+ ...siteSelectorSchema,
10
+ query: z
11
+ .string()
12
+ .min(1)
13
+ .describe("Literal text to search for inside site files."),
14
+ directoryPath: siteRelativePathSchema
15
+ .optional()
16
+ .describe("Optional directory path relative to the selected site's root. Defaults to the site root."),
17
+ caseSensitive: z
18
+ .boolean()
19
+ .optional()
20
+ .describe("When true, search with exact case."),
21
+ includeHidden: z
22
+ .boolean()
23
+ .optional()
24
+ .describe("When true, include dotfiles and hidden directories."),
25
+ maxDepth: z
26
+ .number()
27
+ .int()
28
+ .nonnegative()
29
+ .optional()
30
+ .describe("Maximum directory depth to search."),
31
+ maxMatches: z
32
+ .number()
33
+ .int()
34
+ .positive()
35
+ .optional()
36
+ .describe("Maximum number of matches to return."),
37
+ },
38
+ annotations: {
39
+ readOnlyHint: true,
40
+ },
41
+ }, async ({ siteId, siteName, query, directoryPath, caseSensitive, includeHidden, maxDepth, maxMatches, }) => {
42
+ try {
43
+ return createJsonToolResult(await searchSiteFiles({ siteId, siteName }, {
44
+ query,
45
+ directoryPath,
46
+ caseSensitive,
47
+ includeHidden,
48
+ maxDepth,
49
+ maxMatches,
50
+ }));
51
+ }
52
+ catch (error) {
53
+ return createErrorToolResult(error);
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=search-site-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-site-files.js","sourceRoot":"","sources":["../../src/tools/search-site-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,kFAAkF;QACpF,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,aAAa,EAAE,sBAAsB;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CACP,0FAA0F,CAC3F;YACH,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,oCAAoC,CAAC;YACjD,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,qDAAqD,CAAC;YAClE,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CAAC,oCAAoC,CAAC;YACjD,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CAAC,sCAAsC,CAAC;SACpD;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,KAAK,EAAE,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,GACX,EAAE,EAAE;QACH,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,eAAe,CACnB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB;gBACE,KAAK;gBACL,aAAa;gBACb,aAAa;gBACb,aAAa;gBACb,QAAQ;gBACR,UAAU;aACX,CACF,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerStartLocalSiteTool(server: McpServer): void;
@@ -0,0 +1,19 @@
1
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
2
+ import { runSiteLifecycleAction } from "../site-lifecycle.js";
3
+ import { siteSelectorSchema } from "../tool-schemas.js";
4
+ export function registerStartLocalSiteTool(server) {
5
+ server.registerTool("start_local_site", {
6
+ description: "Starts the selected LocalWP site and all of its services.",
7
+ inputSchema: {
8
+ ...siteSelectorSchema,
9
+ },
10
+ }, async ({ siteId, siteName }) => {
11
+ try {
12
+ return createJsonToolResult(await runSiteLifecycleAction("start", { siteId, siteName }));
13
+ }
14
+ catch (error) {
15
+ return createErrorToolResult(error);
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=start-local-site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-local-site.js","sourceRoot":"","sources":["../../src/tools/start-local-site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,2DAA2D;QAC7D,WAAW,EAAE;YACX,GAAG,kBAAkB;SACtB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,sBAAsB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerStopLocalSiteTool(server: McpServer): void;
@@ -0,0 +1,19 @@
1
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
2
+ import { runSiteLifecycleAction } from "../site-lifecycle.js";
3
+ import { siteSelectorSchema } from "../tool-schemas.js";
4
+ export function registerStopLocalSiteTool(server) {
5
+ server.registerTool("stop_local_site", {
6
+ description: "Stops the selected LocalWP site and all of its services.",
7
+ inputSchema: {
8
+ ...siteSelectorSchema,
9
+ },
10
+ }, async ({ siteId, siteName }) => {
11
+ try {
12
+ return createJsonToolResult(await runSiteLifecycleAction("stop", { siteId, siteName }));
13
+ }
14
+ catch (error) {
15
+ return createErrorToolResult(error);
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=stop-local-site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-local-site.js","sourceRoot":"","sources":["../../src/tools/stop-local-site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,0DAA0D;QAC5D,WAAW,EAAE;YACX,GAAG,kBAAkB;SACtB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAC3D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerWriteSiteFileTool(server: McpServer): void;
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { createErrorToolResult, createJsonToolResult } from "../results.js";
3
+ import { writeSiteFile } from "../site-files.js";
4
+ import { siteRelativePathSchema, siteSelectorSchema } from "../tool-schemas.js";
5
+ export function registerWriteSiteFileTool(server) {
6
+ server.registerTool("write_site_file", {
7
+ description: "Writes a text file inside the selected LocalWP site. Requires the 'full-access' profile.",
8
+ inputSchema: {
9
+ ...siteSelectorSchema,
10
+ filePath: siteRelativePathSchema.describe("File path relative to the selected site's root directory."),
11
+ content: z.string().describe("Text content to write to the file."),
12
+ createDirectories: z
13
+ .boolean()
14
+ .optional()
15
+ .describe("When true or omitted, create parent directories automatically."),
16
+ overwrite: z
17
+ .boolean()
18
+ .optional()
19
+ .describe("When true or omitted, replace an existing file at the same path."),
20
+ },
21
+ }, async ({ siteId, siteName, filePath, content, createDirectories, overwrite, }) => {
22
+ try {
23
+ return createJsonToolResult(await writeSiteFile({ siteId, siteName }, { filePath, content, createDirectories, overwrite }));
24
+ }
25
+ catch (error) {
26
+ return createErrorToolResult(error);
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=write-site-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-site-file.js","sourceRoot":"","sources":["../../src/tools/write-site-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,0FAA0F;QAC5F,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,CACvC,2DAA2D,CAC5D;YACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAClE,iBAAiB,EAAE,CAAC;iBACjB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,gEAAgE,CACjE;YACH,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,kEAAkE,CACnE;SACJ;KACF,EACD,KAAK,EAAE,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,SAAS,GACV,EAAE,EAAE;QACH,IAAI,CAAC;YACH,OAAO,oBAAoB,CACzB,MAAM,aAAa,CACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CACpD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -74,6 +74,17 @@ export interface SpawnResult {
74
74
  exitCode: number;
75
75
  timedOut: boolean;
76
76
  }
77
+ export interface LocalGraphqlConnectionInfo {
78
+ port: number;
79
+ authToken: string;
80
+ url: string;
81
+ subscriptionUrl?: string;
82
+ }
83
+ export interface LocalSiteLifecycleMutationResult {
84
+ id: string;
85
+ name: string;
86
+ status: LocalSiteStatus;
87
+ }
77
88
  export interface MysqlQueryResult {
78
89
  columns: string[];
79
90
  rows: Record<string, unknown>[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "localwp-mcp",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "A LocalWP-aware MCP server for WordPress developers with simple safe and full-access profiles, logs, doctor diagnostics, SQL access, backups, restore flows, MCP resources/prompts, and site-aware WP-CLI.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.32.1",