localwp-mcp 0.1.4 → 0.1.5
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.
- package/README.md +45 -23
- package/dist/backup-management.d.ts +121 -0
- package/dist/backup-management.js +211 -0
- package/dist/backup-management.js.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +21 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/cleanup-backups.d.ts +2 -0
- package/dist/tools/cleanup-backups.js +55 -0
- package/dist/tools/cleanup-backups.js.map +1 -0
- package/dist/tools/delete-backup.d.ts +2 -0
- package/dist/tools/delete-backup.js +38 -0
- package/dist/tools/delete-backup.js.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-backups.d.ts +2 -0
- package/dist/tools/list-backups.js +29 -0
- package/dist/tools/list-backups.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -153,21 +153,33 @@ Use:
|
|
|
153
153
|
- `mysql_schema`
|
|
154
154
|
Table listing and table description helpers
|
|
155
155
|
|
|
156
|
-
### Back Up or Restore a Site
|
|
157
|
-
|
|
158
|
-
Use:
|
|
159
|
-
|
|
160
|
-
- `backup_site`
|
|
161
|
-
- `
|
|
162
|
-
- `
|
|
163
|
-
- `
|
|
156
|
+
### Back Up or Restore a Site
|
|
157
|
+
|
|
158
|
+
Use:
|
|
159
|
+
|
|
160
|
+
- `backup_site`
|
|
161
|
+
- `list_backups`
|
|
162
|
+
- `delete_backup`
|
|
163
|
+
- `cleanup_backups`
|
|
164
|
+
- `db_export`
|
|
165
|
+
- `db_import`
|
|
166
|
+
- `restore_backup`
|
|
164
167
|
|
|
165
168
|
`backup_site` supports:
|
|
166
169
|
|
|
167
170
|
- `database`
|
|
168
171
|
- `full`
|
|
169
172
|
|
|
170
|
-
The `full` backup format is folder-based and includes the site's `app`, `conf`, and `logs` directories plus a fresh SQL dump.
|
|
173
|
+
The `full` backup format is folder-based and includes the site's `app`, `conf`, and `logs` directories plus a fresh SQL dump.
|
|
174
|
+
|
|
175
|
+
If you want to manage backup storage over time:
|
|
176
|
+
|
|
177
|
+
- `list_backups`
|
|
178
|
+
Shows the managed backup directories and SQL artifacts for a site.
|
|
179
|
+
- `delete_backup`
|
|
180
|
+
Removes one managed backup artifact in `full-access`.
|
|
181
|
+
- `cleanup_backups`
|
|
182
|
+
Cleans up older backups by age and/or retention count in `full-access`.
|
|
171
183
|
|
|
172
184
|
## Built-In Capabilities
|
|
173
185
|
|
|
@@ -189,11 +201,14 @@ The `full` backup format is folder-based and includes the site's `app`, `conf`,
|
|
|
189
201
|
- `execute_wp_cli`
|
|
190
202
|
- `mysql_query`
|
|
191
203
|
- `mysql_execute`
|
|
192
|
-
- `mysql_schema`
|
|
193
|
-
- `db_export`
|
|
194
|
-
- `db_import`
|
|
195
|
-
- `backup_site`
|
|
196
|
-
- `
|
|
204
|
+
- `mysql_schema`
|
|
205
|
+
- `db_export`
|
|
206
|
+
- `db_import`
|
|
207
|
+
- `backup_site`
|
|
208
|
+
- `list_backups`
|
|
209
|
+
- `delete_backup`
|
|
210
|
+
- `cleanup_backups`
|
|
211
|
+
- `restore_backup`
|
|
197
212
|
|
|
198
213
|
### MCP Resources
|
|
199
214
|
|
|
@@ -207,15 +222,22 @@ The `full` backup format is folder-based and includes the site's `app`, `conf`,
|
|
|
207
222
|
- `diagnose_local_site`
|
|
208
223
|
- `restore_local_site`
|
|
209
224
|
|
|
210
|
-
## Platform Support
|
|
211
|
-
|
|
212
|
-
`localwp-mcp` is designed for:
|
|
213
|
-
|
|
214
|
-
- macOS
|
|
215
|
-
- Windows
|
|
216
|
-
- Linux
|
|
217
|
-
|
|
218
|
-
It supports both current Local `lightning-services` layouts and older `site-binaries` layouts.
|
|
225
|
+
## Platform Support
|
|
226
|
+
|
|
227
|
+
`localwp-mcp` is designed for:
|
|
228
|
+
|
|
229
|
+
- macOS
|
|
230
|
+
- Windows
|
|
231
|
+
- Linux
|
|
232
|
+
|
|
233
|
+
It supports both current Local `lightning-services` layouts and older `site-binaries` layouts.
|
|
234
|
+
|
|
235
|
+
Live validation has been completed on:
|
|
236
|
+
|
|
237
|
+
- macOS
|
|
238
|
+
- Windows
|
|
239
|
+
|
|
240
|
+
Linux support is implemented in the code paths and tests, but has not yet been live-validated on a machine with LocalWP.
|
|
219
241
|
|
|
220
242
|
## Useful Environment Variables
|
|
221
243
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { BackupArtifactCategory, BackupScope, SiteContext } from "./types.js";
|
|
2
|
+
export declare const backupArtifactCategories: readonly ["full_backup", "database_backup", "pre_restore_backup", "database_export", "pre_import_backup", "sql_file"];
|
|
3
|
+
interface BackupArtifact {
|
|
4
|
+
path: string;
|
|
5
|
+
absolutePath: string;
|
|
6
|
+
kind: "file" | "directory";
|
|
7
|
+
category: BackupArtifactCategory;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
modifiedAt: string;
|
|
10
|
+
sizeBytes: number;
|
|
11
|
+
manifestPath: string | null;
|
|
12
|
+
manifestCreatedAt: string | null;
|
|
13
|
+
scope: BackupScope | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function listManagedBackups(context: SiteContext, options?: {
|
|
16
|
+
rootPath?: string;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
site: {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
status: string;
|
|
22
|
+
domain: string | undefined;
|
|
23
|
+
path: string;
|
|
24
|
+
wpRoot: string;
|
|
25
|
+
localVersion: string | undefined;
|
|
26
|
+
phpVersion: string | null;
|
|
27
|
+
mysqlVersion: string | null;
|
|
28
|
+
httpPort: number | null;
|
|
29
|
+
mysqlPort: number | null;
|
|
30
|
+
};
|
|
31
|
+
selectionMethod: string | undefined;
|
|
32
|
+
accessProfile: import("./types.js").AccessProfile;
|
|
33
|
+
backupRoot: string;
|
|
34
|
+
artifacts: BackupArtifact[];
|
|
35
|
+
}>;
|
|
36
|
+
export declare function deleteManagedBackup(context: SiteContext, options: {
|
|
37
|
+
backupPath: string;
|
|
38
|
+
rootPath?: string;
|
|
39
|
+
missingOk?: boolean;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
targetPath: string;
|
|
42
|
+
deleted: boolean;
|
|
43
|
+
existedBefore: boolean;
|
|
44
|
+
missingOk: boolean;
|
|
45
|
+
site: {
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
status: string;
|
|
49
|
+
domain: string | undefined;
|
|
50
|
+
path: string;
|
|
51
|
+
wpRoot: string;
|
|
52
|
+
localVersion: string | undefined;
|
|
53
|
+
phpVersion: string | null;
|
|
54
|
+
mysqlVersion: string | null;
|
|
55
|
+
httpPort: number | null;
|
|
56
|
+
mysqlPort: number | null;
|
|
57
|
+
};
|
|
58
|
+
selectionMethod: string | undefined;
|
|
59
|
+
accessProfile: import("./types.js").AccessProfile;
|
|
60
|
+
backupRoot: string;
|
|
61
|
+
artifacts: BackupArtifact[];
|
|
62
|
+
} | {
|
|
63
|
+
targetPath: string;
|
|
64
|
+
deleted: boolean;
|
|
65
|
+
existedBefore: boolean;
|
|
66
|
+
deletedArtifact: BackupArtifact;
|
|
67
|
+
missingOk: boolean;
|
|
68
|
+
site: {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
status: string;
|
|
72
|
+
domain: string | undefined;
|
|
73
|
+
path: string;
|
|
74
|
+
wpRoot: string;
|
|
75
|
+
localVersion: string | undefined;
|
|
76
|
+
phpVersion: string | null;
|
|
77
|
+
mysqlVersion: string | null;
|
|
78
|
+
httpPort: number | null;
|
|
79
|
+
mysqlPort: number | null;
|
|
80
|
+
};
|
|
81
|
+
selectionMethod: string | undefined;
|
|
82
|
+
accessProfile: import("./types.js").AccessProfile;
|
|
83
|
+
backupRoot: string;
|
|
84
|
+
artifacts: BackupArtifact[];
|
|
85
|
+
}>;
|
|
86
|
+
export declare function cleanupManagedBackups(context: SiteContext, options?: {
|
|
87
|
+
rootPath?: string;
|
|
88
|
+
categories?: BackupArtifactCategory[];
|
|
89
|
+
olderThanDays?: number;
|
|
90
|
+
keepLatest?: number;
|
|
91
|
+
dryRun?: boolean;
|
|
92
|
+
}): Promise<{
|
|
93
|
+
categories: BackupArtifactCategory[];
|
|
94
|
+
olderThanDays: number | null;
|
|
95
|
+
keepLatest: number | null;
|
|
96
|
+
dryRun: boolean;
|
|
97
|
+
deletedCount: number;
|
|
98
|
+
reclaimedBytesEstimate: number;
|
|
99
|
+
deletedArtifacts: BackupArtifact[];
|
|
100
|
+
candidateArtifacts: BackupArtifact[];
|
|
101
|
+
retainedArtifacts: BackupArtifact[];
|
|
102
|
+
site: {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
status: string;
|
|
106
|
+
domain: string | undefined;
|
|
107
|
+
path: string;
|
|
108
|
+
wpRoot: string;
|
|
109
|
+
localVersion: string | undefined;
|
|
110
|
+
phpVersion: string | null;
|
|
111
|
+
mysqlVersion: string | null;
|
|
112
|
+
httpPort: number | null;
|
|
113
|
+
mysqlPort: number | null;
|
|
114
|
+
};
|
|
115
|
+
selectionMethod: string | undefined;
|
|
116
|
+
accessProfile: import("./types.js").AccessProfile;
|
|
117
|
+
backupRoot: string;
|
|
118
|
+
artifacts: BackupArtifact[];
|
|
119
|
+
}>;
|
|
120
|
+
export declare function resolveManagedBackupRoot(context: SiteContext, rootPath?: string): string;
|
|
121
|
+
export {};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { lstat, readFile, readdir, rm } from "fs/promises";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { config } from "./config.js";
|
|
4
|
+
import { summarizeSite } from "./local-sites.js";
|
|
5
|
+
import { isReadablePath } from "./process-utils.js";
|
|
6
|
+
export const backupArtifactCategories = [
|
|
7
|
+
"full_backup",
|
|
8
|
+
"database_backup",
|
|
9
|
+
"pre_restore_backup",
|
|
10
|
+
"database_export",
|
|
11
|
+
"pre_import_backup",
|
|
12
|
+
"sql_file",
|
|
13
|
+
];
|
|
14
|
+
export async function listManagedBackups(context, options = {}) {
|
|
15
|
+
const backupRoot = resolveManagedBackupRoot(context, options.rootPath);
|
|
16
|
+
if (!(await isReadablePath(backupRoot))) {
|
|
17
|
+
return {
|
|
18
|
+
site: summarizeSite(context.site),
|
|
19
|
+
selectionMethod: context.selectionMethod,
|
|
20
|
+
accessProfile: config.profile,
|
|
21
|
+
backupRoot,
|
|
22
|
+
artifacts: [],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const artifacts = await discoverBackupArtifacts(backupRoot);
|
|
26
|
+
return {
|
|
27
|
+
site: summarizeSite(context.site),
|
|
28
|
+
selectionMethod: context.selectionMethod,
|
|
29
|
+
accessProfile: config.profile,
|
|
30
|
+
backupRoot,
|
|
31
|
+
artifacts,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function deleteManagedBackup(context, options) {
|
|
35
|
+
const inventory = await listManagedBackups(context, {
|
|
36
|
+
rootPath: options.rootPath,
|
|
37
|
+
});
|
|
38
|
+
const normalizedBackupPath = normalizeBackupRelativePath(options.backupPath);
|
|
39
|
+
const artifact = inventory.artifacts.find((candidate) => candidate.path === normalizedBackupPath);
|
|
40
|
+
if (!artifact) {
|
|
41
|
+
if (options.missingOk) {
|
|
42
|
+
return {
|
|
43
|
+
...inventory,
|
|
44
|
+
targetPath: normalizedBackupPath,
|
|
45
|
+
deleted: false,
|
|
46
|
+
existedBefore: false,
|
|
47
|
+
missingOk: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`No managed backup artifact matched '${options.backupPath}' under '${inventory.backupRoot}'.`);
|
|
51
|
+
}
|
|
52
|
+
await rm(artifact.absolutePath, { recursive: true, force: false });
|
|
53
|
+
return {
|
|
54
|
+
...inventory,
|
|
55
|
+
targetPath: artifact.path,
|
|
56
|
+
deleted: true,
|
|
57
|
+
existedBefore: true,
|
|
58
|
+
deletedArtifact: artifact,
|
|
59
|
+
missingOk: options.missingOk ?? false,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function cleanupManagedBackups(context, options = {}) {
|
|
63
|
+
if (options.olderThanDays === undefined && options.keepLatest === undefined) {
|
|
64
|
+
throw new Error("cleanup_backups requires olderThanDays, keepLatest, or both.");
|
|
65
|
+
}
|
|
66
|
+
const inventory = await listManagedBackups(context, {
|
|
67
|
+
rootPath: options.rootPath,
|
|
68
|
+
});
|
|
69
|
+
const categories = new Set(options.categories || backupArtifactCategories);
|
|
70
|
+
const eligibleArtifacts = inventory.artifacts.filter((artifact) => categories.has(artifact.category));
|
|
71
|
+
const keepLatest = options.keepLatest ? Math.max(options.keepLatest, 0) : 0;
|
|
72
|
+
const thresholdMs = options.olderThanDays !== undefined
|
|
73
|
+
? Date.now() - options.olderThanDays * 24 * 60 * 60 * 1000
|
|
74
|
+
: null;
|
|
75
|
+
const retainedPaths = new Set(eligibleArtifacts.slice(0, keepLatest).map((artifact) => artifact.path));
|
|
76
|
+
const cleanupCandidates = eligibleArtifacts.filter((artifact) => {
|
|
77
|
+
if (retainedPaths.has(artifact.path)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (thresholdMs === null) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return Date.parse(artifact.createdAt) < thresholdMs;
|
|
84
|
+
});
|
|
85
|
+
if (!options.dryRun) {
|
|
86
|
+
for (const artifact of cleanupCandidates) {
|
|
87
|
+
await rm(artifact.absolutePath, { recursive: true, force: false });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
...inventory,
|
|
92
|
+
categories: Array.from(categories),
|
|
93
|
+
olderThanDays: options.olderThanDays ?? null,
|
|
94
|
+
keepLatest: options.keepLatest ?? null,
|
|
95
|
+
dryRun: options.dryRun ?? false,
|
|
96
|
+
deletedCount: options.dryRun ? 0 : cleanupCandidates.length,
|
|
97
|
+
reclaimedBytesEstimate: cleanupCandidates.reduce((total, artifact) => total + artifact.sizeBytes, 0),
|
|
98
|
+
deletedArtifacts: options.dryRun ? [] : cleanupCandidates,
|
|
99
|
+
candidateArtifacts: cleanupCandidates,
|
|
100
|
+
retainedArtifacts: eligibleArtifacts.filter((artifact) => retainedPaths.has(artifact.path)),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function resolveManagedBackupRoot(context, rootPath) {
|
|
104
|
+
if (rootPath) {
|
|
105
|
+
return path.resolve(rootPath);
|
|
106
|
+
}
|
|
107
|
+
if (config.backupsDirOverride) {
|
|
108
|
+
return path.resolve(config.backupsDirOverride);
|
|
109
|
+
}
|
|
110
|
+
return path.join(context.site.absolutePath, "localwp-mcp-backups");
|
|
111
|
+
}
|
|
112
|
+
async function discoverBackupArtifacts(backupRoot) {
|
|
113
|
+
const entries = await readdir(backupRoot, { withFileTypes: true });
|
|
114
|
+
const artifacts = [];
|
|
115
|
+
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
116
|
+
const absoluteEntryPath = path.join(backupRoot, entry.name);
|
|
117
|
+
if (entry.isDirectory()) {
|
|
118
|
+
const manifestPath = path.join(absoluteEntryPath, "manifest.json");
|
|
119
|
+
if (await isReadablePath(manifestPath)) {
|
|
120
|
+
artifacts.push(await buildBackupDirectoryArtifact(backupRoot, absoluteEntryPath));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (entry.name === "database-exports" || entry.name === "pre-import") {
|
|
124
|
+
artifacts.push(...(await collectSqlFileArtifacts(backupRoot, absoluteEntryPath, entry.name === "pre-import" ? "pre_import_backup" : "database_export")));
|
|
125
|
+
}
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (entry.isFile() && path.extname(entry.name).toLowerCase() === ".sql") {
|
|
129
|
+
artifacts.push(await buildSqlFileArtifact(backupRoot, absoluteEntryPath, "sql_file"));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return artifacts.sort((left, right) => Date.parse(right.createdAt) - Date.parse(left.createdAt) ||
|
|
133
|
+
left.path.localeCompare(right.path));
|
|
134
|
+
}
|
|
135
|
+
async function collectSqlFileArtifacts(backupRoot, directoryPath, category) {
|
|
136
|
+
const sqlArtifacts = [];
|
|
137
|
+
const entries = await readdir(directoryPath, { withFileTypes: true });
|
|
138
|
+
for (const entry of entries) {
|
|
139
|
+
const absoluteEntryPath = path.join(directoryPath, entry.name);
|
|
140
|
+
if (entry.isDirectory()) {
|
|
141
|
+
sqlArtifacts.push(...(await collectSqlFileArtifacts(backupRoot, absoluteEntryPath, category)));
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (entry.isFile() && path.extname(entry.name).toLowerCase() === ".sql") {
|
|
145
|
+
sqlArtifacts.push(await buildSqlFileArtifact(backupRoot, absoluteEntryPath, category));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return sqlArtifacts;
|
|
149
|
+
}
|
|
150
|
+
async function buildBackupDirectoryArtifact(backupRoot, absolutePath) {
|
|
151
|
+
const manifestPath = path.join(absolutePath, "manifest.json");
|
|
152
|
+
const manifest = await readManifest(manifestPath);
|
|
153
|
+
const stats = await lstat(absolutePath);
|
|
154
|
+
return {
|
|
155
|
+
path: normalizeBackupRelativePath(path.relative(backupRoot, absolutePath)),
|
|
156
|
+
absolutePath,
|
|
157
|
+
kind: "directory",
|
|
158
|
+
category: inferDirectoryCategory(absolutePath, manifest.scope),
|
|
159
|
+
createdAt: manifest.createdAt || stats.mtime.toISOString(),
|
|
160
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
161
|
+
sizeBytes: await calculatePathSize(absolutePath),
|
|
162
|
+
manifestPath,
|
|
163
|
+
manifestCreatedAt: manifest.createdAt || null,
|
|
164
|
+
scope: manifest.scope || null,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async function buildSqlFileArtifact(backupRoot, absolutePath, category) {
|
|
168
|
+
const stats = await lstat(absolutePath);
|
|
169
|
+
return {
|
|
170
|
+
path: normalizeBackupRelativePath(path.relative(backupRoot, absolutePath)),
|
|
171
|
+
absolutePath,
|
|
172
|
+
kind: "file",
|
|
173
|
+
category,
|
|
174
|
+
createdAt: stats.mtime.toISOString(),
|
|
175
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
176
|
+
sizeBytes: stats.size,
|
|
177
|
+
manifestPath: null,
|
|
178
|
+
manifestCreatedAt: null,
|
|
179
|
+
scope: null,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async function readManifest(manifestPath) {
|
|
183
|
+
const raw = await readFile(manifestPath, "utf8");
|
|
184
|
+
return JSON.parse(raw);
|
|
185
|
+
}
|
|
186
|
+
function inferDirectoryCategory(absolutePath, scope) {
|
|
187
|
+
const directoryName = path.basename(absolutePath).toLowerCase();
|
|
188
|
+
if (directoryName.includes("pre-restore")) {
|
|
189
|
+
return "pre_restore_backup";
|
|
190
|
+
}
|
|
191
|
+
if (scope === "full") {
|
|
192
|
+
return "full_backup";
|
|
193
|
+
}
|
|
194
|
+
return "database_backup";
|
|
195
|
+
}
|
|
196
|
+
async function calculatePathSize(absolutePath) {
|
|
197
|
+
const stats = await lstat(absolutePath);
|
|
198
|
+
if (!stats.isDirectory()) {
|
|
199
|
+
return stats.size;
|
|
200
|
+
}
|
|
201
|
+
const entries = await readdir(absolutePath, { withFileTypes: true });
|
|
202
|
+
let total = 0;
|
|
203
|
+
for (const entry of entries) {
|
|
204
|
+
total += await calculatePathSize(path.join(absolutePath, entry.name));
|
|
205
|
+
}
|
|
206
|
+
return total;
|
|
207
|
+
}
|
|
208
|
+
function normalizeBackupRelativePath(relativePath) {
|
|
209
|
+
return relativePath.replaceAll(path.sep, "/");
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=backup-management.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-management.js","sourceRoot":"","sources":["../src/backup-management.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
package/dist/server.js
CHANGED
|
@@ -1,13 +1,32 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
1
4
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
5
|
import { registerPrompts } from "./prompts.js";
|
|
3
6
|
import { registerResources } from "./resources.js";
|
|
4
7
|
import { registerTools } from "./tools/index.js";
|
|
5
8
|
const SERVER_NAME = "localwp-mcp";
|
|
6
|
-
|
|
9
|
+
export function resolveServerVersion() {
|
|
10
|
+
if (process.env.npm_package_version) {
|
|
11
|
+
return process.env.npm_package_version;
|
|
12
|
+
}
|
|
13
|
+
const currentFilePath = fileURLToPath(import.meta.url);
|
|
14
|
+
const packageJsonPath = path.resolve(path.dirname(currentFilePath), "..", "package.json");
|
|
15
|
+
try {
|
|
16
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
17
|
+
if (typeof packageJson.version === "string" && packageJson.version.trim()) {
|
|
18
|
+
return packageJson.version;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Fall through to the hard-coded safety net below.
|
|
23
|
+
}
|
|
24
|
+
return "0.1.0";
|
|
25
|
+
}
|
|
7
26
|
export function createServer() {
|
|
8
27
|
const server = new McpServer({
|
|
9
28
|
name: SERVER_NAME,
|
|
10
|
-
version:
|
|
29
|
+
version: resolveServerVersion(),
|
|
11
30
|
}, {
|
|
12
31
|
capabilities: {
|
|
13
32
|
prompts: {},
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzC,CAAC;IAED,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAE1F,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CACb,CAAC;QAE3B,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1E,OAAO,WAAW,CAAC,OAAO,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,oBAAoB,EAAE;KAChC,EACD;QACE,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { backupArtifactCategories, cleanupManagedBackups, } from "../backup-management.js";
|
|
3
|
+
import { config } from "../config.js";
|
|
4
|
+
import { buildSiteContext } from "../local-sites.js";
|
|
5
|
+
import { createErrorToolResult, createJsonToolResult } from "../results.js";
|
|
6
|
+
import { siteSelectorSchema } from "../tool-schemas.js";
|
|
7
|
+
export function registerCleanupBackupsTool(server) {
|
|
8
|
+
server.registerTool("cleanup_backups", {
|
|
9
|
+
description: "Deletes managed backup artifacts for the selected LocalWP site based on age and/or retention. Requires the 'full-access' profile.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
...siteSelectorSchema,
|
|
12
|
+
rootPath: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe("Optional custom backup root directory to clean. If omitted, the site's managed localwp-mcp backup root is used."),
|
|
16
|
+
categories: z
|
|
17
|
+
.array(z.enum(backupArtifactCategories))
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Optional backup categories to target, such as full_backup, pre_restore_backup, or database_export."),
|
|
20
|
+
olderThanDays: z
|
|
21
|
+
.number()
|
|
22
|
+
.nonnegative()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Delete only artifacts older than this many days. Use 0 to target everything older than now."),
|
|
25
|
+
keepLatest: z
|
|
26
|
+
.number()
|
|
27
|
+
.int()
|
|
28
|
+
.nonnegative()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Keep this many newest matching artifacts and clean up older ones beyond that retention count."),
|
|
31
|
+
dryRun: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("When true, only report which artifacts would be deleted without deleting them."),
|
|
35
|
+
},
|
|
36
|
+
}, async ({ siteId, siteName, rootPath, categories, olderThanDays, keepLatest, dryRun, }) => {
|
|
37
|
+
try {
|
|
38
|
+
if (config.profile !== "full-access") {
|
|
39
|
+
throw new Error("cleanup_backups requires LOCALWP_MCP_PROFILE=full-access.");
|
|
40
|
+
}
|
|
41
|
+
const context = await buildSiteContext({ siteId, siteName });
|
|
42
|
+
return createJsonToolResult(await cleanupManagedBackups(context, {
|
|
43
|
+
rootPath,
|
|
44
|
+
categories,
|
|
45
|
+
olderThanDays,
|
|
46
|
+
keepLatest,
|
|
47
|
+
dryRun,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return createErrorToolResult(error);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=cleanup-backups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup-backups.js","sourceRoot":"","sources":["../../src/tools/cleanup-backups.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,mIAAmI;QACrI,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,iHAAiH,CAClH;YACH,UAAU,EAAE,CAAC;iBACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;iBACvC,QAAQ,EAAE;iBACV,QAAQ,CACP,oGAAoG,CACrG;YACH,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CACP,6FAA6F,CAC9F;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CACP,+FAA+F,CAChG;YACH,MAAM,EAAE,CAAC;iBACN,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,gFAAgF,CACjF;SACJ;KACF,EACD,KAAK,EAAE,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,UAAU,EACV,MAAM,GACP,EAAE,EAAE;QACH,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CACzB,MAAM,qBAAqB,CAAC,OAAO,EAAE;gBACnC,QAAQ;gBACR,UAAU;gBACV,aAAa;gBACb,UAAU;gBACV,MAAM;aACP,CAAC,CACH,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,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { deleteManagedBackup } from "../backup-management.js";
|
|
3
|
+
import { config } from "../config.js";
|
|
4
|
+
import { buildSiteContext } from "../local-sites.js";
|
|
5
|
+
import { createErrorToolResult, createJsonToolResult } from "../results.js";
|
|
6
|
+
import { siteSelectorSchema } from "../tool-schemas.js";
|
|
7
|
+
export function registerDeleteBackupTool(server) {
|
|
8
|
+
server.registerTool("delete_backup", {
|
|
9
|
+
description: "Deletes one managed backup artifact for the selected LocalWP site. Requires the 'full-access' profile.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
...siteSelectorSchema,
|
|
12
|
+
backupPath: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.describe("Relative backup path from list_backups, for example 'woo-full-20260401-162738-restore-test' or 'pre-import/woo-before-import-20260401-120000.sql'."),
|
|
16
|
+
rootPath: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Optional custom backup root directory if the artifact lives outside the default managed backup root."),
|
|
20
|
+
missingOk: z
|
|
21
|
+
.boolean()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("When true, return success even if the requested artifact is already gone."),
|
|
24
|
+
},
|
|
25
|
+
}, async ({ siteId, siteName, backupPath, rootPath, missingOk }) => {
|
|
26
|
+
try {
|
|
27
|
+
if (config.profile !== "full-access") {
|
|
28
|
+
throw new Error("delete_backup requires LOCALWP_MCP_PROFILE=full-access.");
|
|
29
|
+
}
|
|
30
|
+
const context = await buildSiteContext({ siteId, siteName });
|
|
31
|
+
return createJsonToolResult(await deleteManagedBackup(context, { backupPath, rootPath, missingOk }));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return createErrorToolResult(error);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=delete-backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-backup.js","sourceRoot":"","sources":["../../src/tools/delete-backup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,oJAAoJ,CACrJ;YACH,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,sGAAsG,CACvG;YACH,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,2EAA2E,CAC5E;SACJ;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CACzB,MAAM,mBAAmB,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CACxE,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/tools/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { registerBackupSiteTool } from "./backup-site.js";
|
|
2
|
+
import { registerCleanupBackupsTool } from "./cleanup-backups.js";
|
|
2
3
|
import { registerDbExportTool } from "./db-export.js";
|
|
3
4
|
import { registerDbImportTool } from "./db-import.js";
|
|
5
|
+
import { registerDeleteBackupTool } from "./delete-backup.js";
|
|
4
6
|
import { registerDeleteSiteFileTool } from "./delete-site-file.js";
|
|
5
7
|
import { registerExecuteWpCliTool } from "./execute-wp-cli.js";
|
|
8
|
+
import { registerListBackupsTool } from "./list-backups.js";
|
|
6
9
|
import { registerListSiteFilesTool } from "./list-site-files.js";
|
|
7
10
|
import { registerLocalDoctorTool } from "./local-doctor.js";
|
|
8
11
|
import { registerLocalEnvironmentCheckTool } from "./local-environment-check.js";
|
|
@@ -34,6 +37,9 @@ export function registerTools(server) {
|
|
|
34
37
|
registerWriteSiteFileTool(server);
|
|
35
38
|
registerDeleteSiteFileTool(server);
|
|
36
39
|
registerBackupSiteTool(server);
|
|
40
|
+
registerListBackupsTool(server);
|
|
41
|
+
registerDeleteBackupTool(server);
|
|
42
|
+
registerCleanupBackupsTool(server);
|
|
37
43
|
registerDbExportTool(server);
|
|
38
44
|
registerDbImportTool(server);
|
|
39
45
|
registerRestoreBackupTool(server);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { listManagedBackups } from "../backup-management.js";
|
|
3
|
+
import { buildSiteContext } from "../local-sites.js";
|
|
4
|
+
import { createErrorToolResult, createJsonToolResult } from "../results.js";
|
|
5
|
+
import { siteSelectorSchema } from "../tool-schemas.js";
|
|
6
|
+
export function registerListBackupsTool(server) {
|
|
7
|
+
server.registerTool("list_backups", {
|
|
8
|
+
description: "Lists backup directories and SQL export artifacts managed for the selected LocalWP site.",
|
|
9
|
+
inputSchema: {
|
|
10
|
+
...siteSelectorSchema,
|
|
11
|
+
rootPath: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Optional custom backup root directory to inspect. If omitted, the site's managed localwp-mcp backup root is used."),
|
|
15
|
+
},
|
|
16
|
+
annotations: {
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
},
|
|
19
|
+
}, async ({ siteId, siteName, rootPath }) => {
|
|
20
|
+
try {
|
|
21
|
+
const context = await buildSiteContext({ siteId, siteName });
|
|
22
|
+
return createJsonToolResult(await listManagedBackups(context, { rootPath }));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return createErrorToolResult(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=list-backups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-backups.js","sourceRoot":"","sources":["../../src/tools/list-backups.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,0FAA0F;QAC5F,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,mHAAmH,CACpH;SACJ;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,oBAAoB,CACzB,MAAM,kBAAkB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAChD,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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type AccessProfile = "safe" | "full-access";
|
|
2
2
|
export type LogScope = "site" | "global" | "all";
|
|
3
3
|
export type BackupScope = "database" | "full";
|
|
4
|
+
export type BackupArtifactCategory = "full_backup" | "database_backup" | "pre_restore_backup" | "database_export" | "pre_import_backup" | "sql_file";
|
|
4
5
|
export type LocalSiteStatus = "running" | "halted" | "unknown" | string;
|
|
5
6
|
export interface LocalSiteServices {
|
|
6
7
|
nginx?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "localwp-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
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",
|