@local-labs-jpollock/local-cli 0.0.1
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/addon-dist/bin/mcp-stdio.js +2808 -0
- package/addon-dist/lib/common/constants.d.ts +22 -0
- package/addon-dist/lib/common/constants.js +26 -0
- package/addon-dist/lib/common/theme.d.ts +68 -0
- package/addon-dist/lib/common/theme.js +126 -0
- package/addon-dist/lib/common/types.d.ts +298 -0
- package/addon-dist/lib/common/types.js +6 -0
- package/addon-dist/lib/main/config/ConnectionInfo.d.ts +25 -0
- package/addon-dist/lib/main/config/ConnectionInfo.js +82 -0
- package/addon-dist/lib/main/index.d.ts +12 -0
- package/addon-dist/lib/main/index.js +3322 -0
- package/addon-dist/lib/main/mcp/McpAuth.d.ts +37 -0
- package/addon-dist/lib/main/mcp/McpAuth.js +87 -0
- package/addon-dist/lib/main/mcp/McpServer.d.ts +67 -0
- package/addon-dist/lib/main/mcp/McpServer.js +343 -0
- package/addon-dist/lib/main/mcp/tools/changePhpVersion.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/changePhpVersion.js +81 -0
- package/addon-dist/lib/main/mcp/tools/cloneSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/cloneSite.js +66 -0
- package/addon-dist/lib/main/mcp/tools/createSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/createSite.js +137 -0
- package/addon-dist/lib/main/mcp/tools/deleteSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/deleteSite.js +72 -0
- package/addon-dist/lib/main/mcp/tools/exportDatabase.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/exportDatabase.js +72 -0
- package/addon-dist/lib/main/mcp/tools/exportSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/exportSite.js +103 -0
- package/addon-dist/lib/main/mcp/tools/getLocalInfo.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/getLocalInfo.js +72 -0
- package/addon-dist/lib/main/mcp/tools/getSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/getSite.js +68 -0
- package/addon-dist/lib/main/mcp/tools/getSiteLogs.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/getSiteLogs.js +149 -0
- package/addon-dist/lib/main/mcp/tools/helpers.d.ts +59 -0
- package/addon-dist/lib/main/mcp/tools/helpers.js +179 -0
- package/addon-dist/lib/main/mcp/tools/importDatabase.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/importDatabase.js +109 -0
- package/addon-dist/lib/main/mcp/tools/importSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/importSite.js +149 -0
- package/addon-dist/lib/main/mcp/tools/index.d.ts +26 -0
- package/addon-dist/lib/main/mcp/tools/index.js +117 -0
- package/addon-dist/lib/main/mcp/tools/listBlueprints.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/listBlueprints.js +54 -0
- package/addon-dist/lib/main/mcp/tools/listServices.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/listServices.js +112 -0
- package/addon-dist/lib/main/mcp/tools/listSites.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/listSites.js +62 -0
- package/addon-dist/lib/main/mcp/tools/openAdminer.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/openAdminer.js +59 -0
- package/addon-dist/lib/main/mcp/tools/openSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/openSite.js +62 -0
- package/addon-dist/lib/main/mcp/tools/renameSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/renameSite.js +70 -0
- package/addon-dist/lib/main/mcp/tools/restartSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/restartSite.js +56 -0
- package/addon-dist/lib/main/mcp/tools/saveBlueprint.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/saveBlueprint.js +89 -0
- package/addon-dist/lib/main/mcp/tools/startSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/startSite.js +54 -0
- package/addon-dist/lib/main/mcp/tools/stopSite.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/stopSite.js +54 -0
- package/addon-dist/lib/main/mcp/tools/toggleXdebug.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/toggleXdebug.js +69 -0
- package/addon-dist/lib/main/mcp/tools/trustSsl.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/trustSsl.js +59 -0
- package/addon-dist/lib/main/mcp/tools/wpCli.d.ts +7 -0
- package/addon-dist/lib/main/mcp/tools/wpCli.js +110 -0
- package/addon-dist/lib/main.d.ts +1 -0
- package/addon-dist/lib/main.js +10 -0
- package/addon-dist/lib/renderer/index.d.ts +7 -0
- package/addon-dist/lib/renderer/index.js +479 -0
- package/addon-dist/package.json +73 -0
- package/bin/lwp.js +10 -0
- package/lib/bootstrap/index.d.ts +98 -0
- package/lib/bootstrap/index.js +493 -0
- package/lib/bootstrap/paths.d.ts +28 -0
- package/lib/bootstrap/paths.js +96 -0
- package/lib/client/GraphQLClient.d.ts +38 -0
- package/lib/client/GraphQLClient.js +71 -0
- package/lib/client/index.d.ts +4 -0
- package/lib/client/index.js +10 -0
- package/lib/formatters/index.d.ts +75 -0
- package/lib/formatters/index.js +139 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +1173 -0
- package/package.json +72 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* import_database Tool
|
|
4
|
+
* Import SQL file into site database using WP-CLI
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.importDatabaseDefinition = void 0;
|
|
41
|
+
exports.importDatabase = importDatabase;
|
|
42
|
+
const helpers_1 = require("./helpers");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
exports.importDatabaseDefinition = {
|
|
45
|
+
name: 'import_database',
|
|
46
|
+
description: 'Import a SQL file into a site database',
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: 'object',
|
|
49
|
+
properties: {
|
|
50
|
+
site: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Site name or ID',
|
|
53
|
+
},
|
|
54
|
+
sqlPath: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'Path to the SQL file to import',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
required: ['site', 'sqlPath'],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
async function importDatabase(args, services) {
|
|
63
|
+
const { site: siteQuery, sqlPath } = args;
|
|
64
|
+
// Validate required parameters
|
|
65
|
+
const siteError = (0, helpers_1.validateRequiredParam)(siteQuery, 'site');
|
|
66
|
+
if (siteError)
|
|
67
|
+
return siteError;
|
|
68
|
+
const pathError = (0, helpers_1.validateRequiredParam)(sqlPath, 'sqlPath');
|
|
69
|
+
if (pathError)
|
|
70
|
+
return pathError;
|
|
71
|
+
// Security: Validate path is safe (no path traversal attacks)
|
|
72
|
+
if (!(0, helpers_1.isValidSqlPath)(sqlPath)) {
|
|
73
|
+
return (0, helpers_1.createErrorResult)('Error: Invalid SQL file path. Path must end in .sql and be within allowed directories (home, tmp).');
|
|
74
|
+
}
|
|
75
|
+
// Verify file exists
|
|
76
|
+
if (!fs.existsSync(sqlPath)) {
|
|
77
|
+
return (0, helpers_1.createErrorResult)(`SQL file not found: ${sqlPath}`);
|
|
78
|
+
}
|
|
79
|
+
// Find site or return error
|
|
80
|
+
const siteResult = (0, helpers_1.findSiteOrError)(siteQuery, services.siteData);
|
|
81
|
+
if ('error' in siteResult)
|
|
82
|
+
return siteResult.error;
|
|
83
|
+
const { site } = siteResult;
|
|
84
|
+
try {
|
|
85
|
+
// Run WP-CLI db import
|
|
86
|
+
const result = await services.wpCli.run(site, ['db', 'import', sqlPath]);
|
|
87
|
+
if (result === null) {
|
|
88
|
+
return {
|
|
89
|
+
content: [{ type: 'text', text: `Failed to import database for "${site.name}"` }],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
type: 'text',
|
|
97
|
+
text: `Successfully imported "${sqlPath}" into database for "${site.name}"`,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return {
|
|
104
|
+
content: [{ type: 'text', text: `Failed to import database: ${error.message}` }],
|
|
105
|
+
isError: true,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0RGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvaW1wb3J0RGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJILHdDQXVEQztBQWxGRCx1Q0FBc0c7QUFDdEcsdUNBQXlCO0FBRVosUUFBQSx3QkFBd0IsR0FBc0I7SUFDekQsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QixXQUFXLEVBQUUsd0NBQXdDO0lBQ3JELFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLGdDQUFnQzthQUM5QztTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztLQUM5QjtDQUNGLENBQUM7QUFPSyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFxQyxDQUFDO0lBRTNFLCtCQUErQjtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxJQUFJLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVoQyxNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFxQixFQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxJQUFJLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVoQyw4REFBOEQ7SUFDOUQsSUFBSSxDQUFDLElBQUEsd0JBQWMsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBQSwyQkFBaUIsRUFDdEIsb0dBQW9HLENBQ3JHLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFBLDJCQUFpQixFQUFDLHVCQUF1QixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBQSx5QkFBZSxFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsSUFBSSxPQUFPLElBQUksVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNuRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBRTVCLElBQUksQ0FBQztRQUNILHVCQUF1QjtRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV6RSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0NBQWtDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqRixPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsMEJBQTBCLE9BQU8sd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUc7aUJBQzVFO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsOEJBQThCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBpbXBvcnRfZGF0YWJhc2UgVG9vbFxuICogSW1wb3J0IFNRTCBmaWxlIGludG8gc2l0ZSBkYXRhYmFzZSB1c2luZyBXUC1DTElcbiAqL1xuXG5pbXBvcnQgeyBNY3BUb29sRGVmaW5pdGlvbiwgTWNwVG9vbFJlc3VsdCwgTG9jYWxTZXJ2aWNlcyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0sIGZpbmRTaXRlT3JFcnJvciwgaXNWYWxpZFNxbFBhdGgsIGNyZWF0ZUVycm9yUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcblxuZXhwb3J0IGNvbnN0IGltcG9ydERhdGFiYXNlRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdpbXBvcnRfZGF0YWJhc2UnLFxuICBkZXNjcmlwdGlvbjogJ0ltcG9ydCBhIFNRTCBmaWxlIGludG8gYSBzaXRlIGRhdGFiYXNlJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBzaXRlOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NpdGUgbmFtZSBvciBJRCcsXG4gICAgICB9LFxuICAgICAgc3FsUGF0aDoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQYXRoIHRvIHRoZSBTUUwgZmlsZSB0byBpbXBvcnQnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ3NpdGUnLCAnc3FsUGF0aCddLFxuICB9LFxufTtcblxuaW50ZXJmYWNlIEltcG9ydERhdGFiYXNlQXJncyB7XG4gIHNpdGU6IHN0cmluZztcbiAgc3FsUGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RGF0YWJhc2UoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKTogUHJvbWlzZTxNY3BUb29sUmVzdWx0PiB7XG4gIGNvbnN0IHsgc2l0ZTogc2l0ZVF1ZXJ5LCBzcWxQYXRoIH0gPSBhcmdzIGFzIHVua25vd24gYXMgSW1wb3J0RGF0YWJhc2VBcmdzO1xuXG4gIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnNcbiAgY29uc3Qgc2l0ZUVycm9yID0gdmFsaWRhdGVSZXF1aXJlZFBhcmFtKHNpdGVRdWVyeSwgJ3NpdGUnKTtcbiAgaWYgKHNpdGVFcnJvcikgcmV0dXJuIHNpdGVFcnJvcjtcblxuICBjb25zdCBwYXRoRXJyb3IgPSB2YWxpZGF0ZVJlcXVpcmVkUGFyYW0oc3FsUGF0aCwgJ3NxbFBhdGgnKTtcbiAgaWYgKHBhdGhFcnJvcikgcmV0dXJuIHBhdGhFcnJvcjtcblxuICAvLyBTZWN1cml0eTogVmFsaWRhdGUgcGF0aCBpcyBzYWZlIChubyBwYXRoIHRyYXZlcnNhbCBhdHRhY2tzKVxuICBpZiAoIWlzVmFsaWRTcWxQYXRoKHNxbFBhdGgpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yUmVzdWx0KFxuICAgICAgJ0Vycm9yOiBJbnZhbGlkIFNRTCBmaWxlIHBhdGguIFBhdGggbXVzdCBlbmQgaW4gLnNxbCBhbmQgYmUgd2l0aGluIGFsbG93ZWQgZGlyZWN0b3JpZXMgKGhvbWUsIHRtcCkuJ1xuICAgICk7XG4gIH1cblxuICAvLyBWZXJpZnkgZmlsZSBleGlzdHNcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNxbFBhdGgpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yUmVzdWx0KGBTUUwgZmlsZSBub3QgZm91bmQ6ICR7c3FsUGF0aH1gKTtcbiAgfVxuXG4gIC8vIEZpbmQgc2l0ZSBvciByZXR1cm4gZXJyb3JcbiAgY29uc3Qgc2l0ZVJlc3VsdCA9IGZpbmRTaXRlT3JFcnJvcihzaXRlUXVlcnksIHNlcnZpY2VzLnNpdGVEYXRhKTtcbiAgaWYgKCdlcnJvcicgaW4gc2l0ZVJlc3VsdCkgcmV0dXJuIHNpdGVSZXN1bHQuZXJyb3I7XG4gIGNvbnN0IHsgc2l0ZSB9ID0gc2l0ZVJlc3VsdDtcblxuICB0cnkge1xuICAgIC8vIFJ1biBXUC1DTEkgZGIgaW1wb3J0XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmljZXMud3BDbGkucnVuKHNpdGUsIFsnZGInLCAnaW1wb3J0Jywgc3FsUGF0aF0pO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgRmFpbGVkIHRvIGltcG9ydCBkYXRhYmFzZSBmb3IgXCIke3NpdGUubmFtZX1cImAgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYFN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBcIiR7c3FsUGF0aH1cIiBpbnRvIGRhdGFiYXNlIGZvciBcIiR7c2l0ZS5uYW1lfVwiYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gaW1wb3J0IGRhdGFiYXNlOiAke2Vycm9yLm1lc3NhZ2V9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import_site Tool
|
|
3
|
+
* Import a site from a zip file
|
|
4
|
+
*/
|
|
5
|
+
import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
|
|
6
|
+
export declare const importSiteDefinition: McpToolDefinition;
|
|
7
|
+
export declare function importSite(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* import_site Tool
|
|
4
|
+
* Import a site from a zip file
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.importSiteDefinition = void 0;
|
|
41
|
+
exports.importSite = importSite;
|
|
42
|
+
const helpers_1 = require("./helpers");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
exports.importSiteDefinition = {
|
|
46
|
+
name: 'import_site',
|
|
47
|
+
description: 'Import a WordPress site from a zip file (Local export, generic archive, or backup)',
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
zipPath: {
|
|
52
|
+
type: 'string',
|
|
53
|
+
description: 'Path to the zip file to import',
|
|
54
|
+
},
|
|
55
|
+
siteName: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: 'Name for the imported site (optional, derived from zip if not provided)',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
required: ['zipPath'],
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
async function importSite(args, services) {
|
|
64
|
+
const { zipPath, siteName } = args;
|
|
65
|
+
if (!zipPath) {
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: 'text', text: 'Error: zipPath parameter is required' }],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Security: Validate path is safe (no path traversal attacks)
|
|
72
|
+
if (!(0, helpers_1.isValidFilePath)(zipPath)) {
|
|
73
|
+
return {
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: 'text',
|
|
77
|
+
text: 'Error: Invalid zip file path. Path must be within allowed directories (home, tmp).',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
isError: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
// Verify file exists
|
|
85
|
+
if (!fs.existsSync(zipPath)) {
|
|
86
|
+
return {
|
|
87
|
+
content: [{ type: 'text', text: `Zip file not found: ${zipPath}` }],
|
|
88
|
+
isError: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Verify it's a zip file
|
|
92
|
+
if (!zipPath.toLowerCase().endsWith('.zip')) {
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: 'text', text: 'Error: File must be a .zip archive' }],
|
|
95
|
+
isError: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Check if importSite service exists
|
|
99
|
+
if (!services.importSite) {
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: 'text', text: 'Import site service not available' }],
|
|
102
|
+
isError: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Derive site name from zip filename if not provided
|
|
106
|
+
const derivedName = siteName || path.basename(zipPath, '.zip').replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
107
|
+
// Import the site
|
|
108
|
+
// The import service expects settings object
|
|
109
|
+
const importSettings = {
|
|
110
|
+
importType: 'localExport', // Default to Local export format
|
|
111
|
+
zipPath: zipPath,
|
|
112
|
+
siteName: derivedName,
|
|
113
|
+
};
|
|
114
|
+
const result = await services.importSite.run(importSettings);
|
|
115
|
+
if (!result) {
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: 'text', text: 'Import completed but no result returned' }],
|
|
118
|
+
isError: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
content: [
|
|
123
|
+
{
|
|
124
|
+
type: 'text',
|
|
125
|
+
text: `Successfully imported site "${derivedName}" from ${path.basename(zipPath)}. Site ID: ${result.id || 'unknown'}`,
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
// Provide helpful error messages
|
|
132
|
+
if (error.message?.includes('not a valid')) {
|
|
133
|
+
return {
|
|
134
|
+
content: [
|
|
135
|
+
{
|
|
136
|
+
type: 'text',
|
|
137
|
+
text: `The zip file does not appear to be a valid Local export or WordPress backup. Error: ${error.message}`,
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
isError: true,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
content: [{ type: 'text', text: `Failed to import site: ${error.message}` }],
|
|
145
|
+
isError: true,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0U2l0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluL21jcC90b29scy9pbXBvcnRTaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCSCxnQ0FpR0M7QUE3SEQsdUNBQTRDO0FBQzVDLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFaEIsUUFBQSxvQkFBb0IsR0FBc0I7SUFDckQsSUFBSSxFQUFFLGFBQWE7SUFDbkIsV0FBVyxFQUFFLG9GQUFvRjtJQUNqRyxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsZ0NBQWdDO2FBQzlDO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSx5RUFBeUU7YUFDdkY7U0FDRjtRQUNELFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztLQUN0QjtDQUNGLENBQUM7QUFPSyxLQUFLLFVBQVUsVUFBVSxDQUM5QixJQUE2QixFQUM3QixRQUF1QjtJQUV2QixNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQWlDLENBQUM7SUFFaEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsOERBQThEO0lBQzlELElBQUksQ0FBQyxJQUFBLHlCQUFlLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFN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IEltcG9ydCBhIHNpdGUgZnJvbSBhIHppcCBmaWxlXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgaXNWYWxpZEZpbGVQYXRoIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRTaXRlRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdpbXBvcnRfc2l0ZScsXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGEgV29yZFByZXNzIHNpdGUgZnJvbSBhIHppcCBmaWxlIChMb2NhbCBleHBvcnQsIGdlbmVyaWMgYXJjaGl2ZSwgb3IgYmFja3VwKScsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgemlwUGF0aDoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQYXRoIHRvIHRoZSB6aXAgZmlsZSB0byBpbXBvcnQnLFxuICAgICAgfSxcbiAgICAgIHNpdGVOYW1lOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ05hbWUgZm9yIHRoZSBpbXBvcnRlZCBzaXRlIChvcHRpb25hbCwgZGVyaXZlZCBmcm9tIHppcCBpZiBub3QgcHJvdmlkZWQpJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogWyd6aXBQYXRoJ10sXG4gIH0sXG59O1xuXG5pbnRlcmZhY2UgSW1wb3J0U2l0ZUFyZ3Mge1xuICB6aXBQYXRoOiBzdHJpbmc7XG4gIHNpdGVOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0U2l0ZShcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgeyB6aXBQYXRoLCBzaXRlTmFtZSB9ID0gYXJncyBhcyB1bmtub3duIGFzIEltcG9ydFNpdGVBcmdzO1xuXG4gIGlmICghemlwUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdFcnJvcjogemlwUGF0aCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnIH1dLFxuICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gU2VjdXJpdHk6IFZhbGlkYXRlIHBhdGggaXMgc2FmZSAobm8gcGF0aCB0cmF2ZXJzYWwgYXR0YWNrcylcbiAgaWYgKCFpc1ZhbGlkRmlsZVBhdGgoemlwUGF0aCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHRleHQ6ICdFcnJvcjogSW52YWxpZCB6aXAgZmlsZSBwYXRoLiBQYXRoIG11c3QgYmUgd2l0aGluIGFsbG93ZWQgZGlyZWN0b3JpZXMgKGhvbWUsIHRtcCkuJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFZlcmlmeSBmaWxlIGV4aXN0c1xuICAgIGlmICghZnMuZXhpc3RzU3luYyh6aXBQYXRoKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgWmlwIGZpbGUgbm90IGZvdW5kOiAke3ppcFBhdGh9YCB9XSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IGl0J3MgYSB6aXAgZmlsZVxuICAgIGlmICghemlwUGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuemlwJykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ0Vycm9yOiBGaWxlIG11c3QgYmUgYSAuemlwIGFyY2hpdmUnIH1dLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBpbXBvcnRTaXRlIHNlcnZpY2UgZXhpc3RzXG4gICAgaWYgKCFzZXJ2aWNlcy5pbXBvcnRTaXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdJbXBvcnQgc2l0ZSBzZXJ2aWNlIG5vdCBhdmFpbGFibGUnIH1dLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXJpdmUgc2l0ZSBuYW1lIGZyb20gemlwIGZpbGVuYW1lIGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGRlcml2ZWROYW1lID0gc2l0ZU5hbWUgfHwgcGF0aC5iYXNlbmFtZSh6aXBQYXRoLCAnLnppcCcpLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJyk7XG5cbiAgICAvLyBJbXBvcnQgdGhlIHNpdGVcbiAgICAvLyBUaGUgaW1wb3J0IHNlcnZpY2UgZXhwZWN0cyBzZXR0aW5ncyBvYmplY3RcbiAgICBjb25zdCBpbXBvcnRTZXR0aW5ncyA9IHtcbiAgICAgIGltcG9ydFR5cGU6ICdsb2NhbEV4cG9ydCcsIC8vIERlZmF1bHQgdG8gTG9jYWwgZXhwb3J0IGZvcm1hdFxuICAgICAgemlwUGF0aDogemlwUGF0aCxcbiAgICAgIHNpdGVOYW1lOiBkZXJpdmVkTmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmljZXMuaW1wb3J0U2l0ZS5ydW4oaW1wb3J0U2V0dGluZ3MpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6ICd0ZXh0JywgdGV4dDogJ0ltcG9ydCBjb21wbGV0ZWQgYnV0IG5vIHJlc3VsdCByZXR1cm5lZCcgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYFN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBzaXRlIFwiJHtkZXJpdmVkTmFtZX1cIiBmcm9tICR7cGF0aC5iYXNlbmFtZSh6aXBQYXRoKX0uIFNpdGUgSUQ6ICR7cmVzdWx0LmlkIHx8ICd1bmtub3duJ31gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgLy8gUHJvdmlkZSBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzXG4gICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdub3QgYSB2YWxpZCcpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGV4dDogYFRoZSB6aXAgZmlsZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBMb2NhbCBleHBvcnQgb3IgV29yZFByZXNzIGJhY2t1cC4gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgRmFpbGVkIHRvIGltcG9ydCBzaXRlOiAke2Vycm9yLm1lc3NhZ2V9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools Registry
|
|
3
|
+
* Central registry for all available MCP tools
|
|
4
|
+
*/
|
|
5
|
+
import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
|
|
6
|
+
export type ToolHandler = (args: Record<string, unknown>, services: LocalServices) => Promise<McpToolResult>;
|
|
7
|
+
/**
|
|
8
|
+
* Register all available tools
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerTools(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Get all tool definitions (for MCP tools/list response)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getToolDefinitions(): McpToolDefinition[];
|
|
15
|
+
/**
|
|
16
|
+
* Get tool names
|
|
17
|
+
*/
|
|
18
|
+
export declare function getToolNames(): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Execute a tool by name
|
|
21
|
+
*/
|
|
22
|
+
export declare function executeTool(name: string, args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a tool exists
|
|
25
|
+
*/
|
|
26
|
+
export declare function hasTool(name: string): boolean;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Tools Registry
|
|
4
|
+
* Central registry for all available MCP tools
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.registerTools = registerTools;
|
|
8
|
+
exports.getToolDefinitions = getToolDefinitions;
|
|
9
|
+
exports.getToolNames = getToolNames;
|
|
10
|
+
exports.executeTool = executeTool;
|
|
11
|
+
exports.hasTool = hasTool;
|
|
12
|
+
const listSites_1 = require("./listSites");
|
|
13
|
+
const startSite_1 = require("./startSite");
|
|
14
|
+
const stopSite_1 = require("./stopSite");
|
|
15
|
+
const restartSite_1 = require("./restartSite");
|
|
16
|
+
const wpCli_1 = require("./wpCli");
|
|
17
|
+
const getSite_1 = require("./getSite");
|
|
18
|
+
const createSite_1 = require("./createSite");
|
|
19
|
+
const deleteSite_1 = require("./deleteSite");
|
|
20
|
+
const getLocalInfo_1 = require("./getLocalInfo");
|
|
21
|
+
const openSite_1 = require("./openSite");
|
|
22
|
+
const cloneSite_1 = require("./cloneSite");
|
|
23
|
+
const exportSite_1 = require("./exportSite");
|
|
24
|
+
const listBlueprints_1 = require("./listBlueprints");
|
|
25
|
+
const saveBlueprint_1 = require("./saveBlueprint");
|
|
26
|
+
// Phase 8: WordPress Development Tools
|
|
27
|
+
const exportDatabase_1 = require("./exportDatabase");
|
|
28
|
+
const importDatabase_1 = require("./importDatabase");
|
|
29
|
+
const openAdminer_1 = require("./openAdminer");
|
|
30
|
+
const trustSsl_1 = require("./trustSsl");
|
|
31
|
+
const renameSite_1 = require("./renameSite");
|
|
32
|
+
const changePhpVersion_1 = require("./changePhpVersion");
|
|
33
|
+
const importSite_1 = require("./importSite");
|
|
34
|
+
// Phase 9: Site Configuration & Dev Tools
|
|
35
|
+
const toggleXdebug_1 = require("./toggleXdebug");
|
|
36
|
+
const getSiteLogs_1 = require("./getSiteLogs");
|
|
37
|
+
const listServices_1 = require("./listServices");
|
|
38
|
+
const tools = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Register all available tools
|
|
41
|
+
*/
|
|
42
|
+
function registerTools() {
|
|
43
|
+
// Core site management
|
|
44
|
+
tools.set('list_sites', { definition: listSites_1.listSitesDefinition, handler: listSites_1.listSites });
|
|
45
|
+
tools.set('get_site', { definition: getSite_1.getSiteDefinition, handler: getSite_1.getSite });
|
|
46
|
+
tools.set('start_site', { definition: startSite_1.startSiteDefinition, handler: startSite_1.startSite });
|
|
47
|
+
tools.set('stop_site', { definition: stopSite_1.stopSiteDefinition, handler: stopSite_1.stopSite });
|
|
48
|
+
tools.set('restart_site', { definition: restartSite_1.restartSiteDefinition, handler: restartSite_1.restartSite });
|
|
49
|
+
// Site operations
|
|
50
|
+
tools.set('create_site', { definition: createSite_1.createSiteDefinition, handler: createSite_1.createSite });
|
|
51
|
+
tools.set('delete_site', { definition: deleteSite_1.deleteSiteDefinition, handler: deleteSite_1.deleteSite });
|
|
52
|
+
tools.set('clone_site', { definition: cloneSite_1.cloneSiteDefinition, handler: cloneSite_1.cloneSite });
|
|
53
|
+
tools.set('export_site', { definition: exportSite_1.exportSiteDefinition, handler: exportSite_1.exportSite });
|
|
54
|
+
tools.set('open_site', { definition: openSite_1.openSiteDefinition, handler: openSite_1.openSite });
|
|
55
|
+
// WordPress CLI
|
|
56
|
+
tools.set('wp_cli', { definition: wpCli_1.wpCliDefinition, handler: wpCli_1.wpCli });
|
|
57
|
+
// Blueprints
|
|
58
|
+
tools.set('list_blueprints', { definition: listBlueprints_1.listBlueprintsDefinition, handler: listBlueprints_1.listBlueprints });
|
|
59
|
+
tools.set('save_blueprint', { definition: saveBlueprint_1.saveBlueprintDefinition, handler: saveBlueprint_1.saveBlueprint });
|
|
60
|
+
// System info
|
|
61
|
+
tools.set('get_local_info', { definition: getLocalInfo_1.getLocalInfoDefinition, handler: getLocalInfo_1.getLocalInfo });
|
|
62
|
+
// Phase 8: WordPress Development Tools
|
|
63
|
+
tools.set('export_database', { definition: exportDatabase_1.exportDatabaseDefinition, handler: exportDatabase_1.exportDatabase });
|
|
64
|
+
tools.set('import_database', { definition: importDatabase_1.importDatabaseDefinition, handler: importDatabase_1.importDatabase });
|
|
65
|
+
tools.set('open_adminer', { definition: openAdminer_1.openAdminerDefinition, handler: openAdminer_1.openAdminer });
|
|
66
|
+
tools.set('trust_ssl', { definition: trustSsl_1.trustSslDefinition, handler: trustSsl_1.trustSsl });
|
|
67
|
+
tools.set('rename_site', { definition: renameSite_1.renameSiteDefinition, handler: renameSite_1.renameSite });
|
|
68
|
+
tools.set('change_php_version', {
|
|
69
|
+
definition: changePhpVersion_1.changePhpVersionDefinition,
|
|
70
|
+
handler: changePhpVersion_1.changePhpVersion,
|
|
71
|
+
});
|
|
72
|
+
tools.set('import_site', { definition: importSite_1.importSiteDefinition, handler: importSite_1.importSite });
|
|
73
|
+
// Phase 9: Site Configuration & Dev Tools
|
|
74
|
+
tools.set('toggle_xdebug', { definition: toggleXdebug_1.toggleXdebugDefinition, handler: toggleXdebug_1.toggleXdebug });
|
|
75
|
+
tools.set('get_site_logs', { definition: getSiteLogs_1.getSiteLogsDefinition, handler: getSiteLogs_1.getSiteLogs });
|
|
76
|
+
tools.set('list_services', { definition: listServices_1.listServicesDefinition, handler: listServices_1.listServices });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get all tool definitions (for MCP tools/list response)
|
|
80
|
+
*/
|
|
81
|
+
function getToolDefinitions() {
|
|
82
|
+
return Array.from(tools.values()).map((t) => t.definition);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get tool names
|
|
86
|
+
*/
|
|
87
|
+
function getToolNames() {
|
|
88
|
+
return Array.from(tools.keys());
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Execute a tool by name
|
|
92
|
+
*/
|
|
93
|
+
async function executeTool(name, args, services) {
|
|
94
|
+
const tool = tools.get(name);
|
|
95
|
+
if (!tool) {
|
|
96
|
+
return {
|
|
97
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
98
|
+
isError: true,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
return await tool.handler(args, services);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: 'text', text: `Tool error: ${error.message}` }],
|
|
107
|
+
isError: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if a tool exists
|
|
113
|
+
*/
|
|
114
|
+
function hasTool(name) {
|
|
115
|
+
return tools.has(name);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUE2Q0gsc0NBeUNDO0FBS0QsZ0RBRUM7QUFLRCxvQ0FFQztBQUtELGtDQXNCQztBQUtELDBCQUVDO0FBbklELDJDQUE2RDtBQUM3RCwyQ0FBNkQ7QUFDN0QseUNBQTBEO0FBQzFELCtDQUFtRTtBQUNuRSxtQ0FBaUQ7QUFDakQsdUNBQXVEO0FBQ3ZELDZDQUFnRTtBQUNoRSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLHlDQUEwRDtBQUMxRCwyQ0FBNkQ7QUFDN0QsNkNBQWdFO0FBQ2hFLHFEQUE0RTtBQUM1RSxtREFBeUU7QUFDekUsdUNBQXVDO0FBQ3ZDLHFEQUE0RTtBQUM1RSxxREFBNEU7QUFDNUUsK0NBQW1FO0FBQ25FLHlDQUEwRDtBQUMxRCw2Q0FBZ0U7QUFDaEUseURBQWtGO0FBQ2xGLDZDQUFnRTtBQUNoRSwwQ0FBMEM7QUFDMUMsaURBQXNFO0FBQ3RFLCtDQUFtRTtBQUNuRSxpREFBc0U7QUFZdEUsTUFBTSxLQUFLLEdBQWtDLElBQUksR0FBRyxFQUFFLENBQUM7QUFFdkQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLHVCQUF1QjtJQUN2QixLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSwrQkFBbUIsRUFBRSxPQUFPLEVBQUUscUJBQVMsRUFBRSxDQUFDLENBQUM7SUFDakYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsMkJBQWlCLEVBQUUsT0FBTyxFQUFFLGlCQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLCtCQUFtQixFQUFFLE9BQU8sRUFBRSxxQkFBUyxFQUFFLENBQUMsQ0FBQztJ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SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakUsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxJQUFZO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNQ1AgVG9vbHMgUmVnaXN0cnlcbiAqIENlbnRyYWwgcmVnaXN0cnkgZm9yIGFsbCBhdmFpbGFibGUgTUNQIHRvb2xzXG4gKi9cblxuaW1wb3J0IHsgTWNwVG9vbERlZmluaXRpb24sIE1jcFRvb2xSZXN1bHQsIExvY2FsU2VydmljZXMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgbGlzdFNpdGVzLCBsaXN0U2l0ZXNEZWZpbml0aW9uIH0gZnJvbSAnLi9saXN0U2l0ZXMnO1xuaW1wb3J0IHsgc3RhcnRTaXRlLCBzdGFydFNpdGVEZWZpbml0aW9uIH0gZnJvbSAnLi9zdGFydFNpdGUnO1xuaW1wb3J0IHsgc3RvcFNpdGUsIHN0b3BTaXRlRGVmaW5pdGlvbiB9IGZyb20gJy4vc3RvcFNpdGUnO1xuaW1wb3J0IHsgcmVzdGFydFNpdGUsIHJlc3RhcnRTaXRlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVzdGFydFNpdGUnO1xuaW1wb3J0IHsgd3BDbGksIHdwQ2xpRGVmaW5pdGlvbiB9IGZyb20gJy4vd3BDbGknO1xuaW1wb3J0IHsgZ2V0U2l0ZSwgZ2V0U2l0ZURlZmluaXRpb24gfSBmcm9tICcuL2dldFNpdGUnO1xuaW1wb3J0IHsgY3JlYXRlU2l0ZSwgY3JlYXRlU2l0ZURlZmluaXRpb24gfSBmcm9tICcuL2NyZWF0ZVNpdGUnO1xuaW1wb3J0IHsgZGVsZXRlU2l0ZSwgZGVsZXRlU2l0ZURlZmluaXRpb24gfSBmcm9tICcuL2RlbGV0ZVNpdGUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxJbmZvLCBnZXRMb2NhbEluZm9EZWZpbml0aW9uIH0gZnJvbSAnLi9nZXRMb2NhbEluZm8nO1xuaW1wb3J0IHsgb3BlblNpdGUsIG9wZW5TaXRlRGVmaW5pdGlvbiB9IGZyb20gJy4vb3BlblNpdGUnO1xuaW1wb3J0IHsgY2xvbmVTaXRlLCBjbG9uZVNpdGVEZWZpbml0aW9uIH0gZnJvbSAnLi9jbG9uZVNpdGUnO1xuaW1wb3J0IHsgZXhwb3J0U2l0ZSwgZXhwb3J0U2l0ZURlZmluaXRpb24gfSBmcm9tICcuL2V4cG9ydFNpdGUnO1xuaW1wb3J0IHsgbGlzdEJsdWVwcmludHMsIGxpc3RCbHVlcHJpbnRzRGVmaW5pdGlvbiB9IGZyb20gJy4vbGlzdEJsdWVwcmludHMnO1xuaW1wb3J0IHsgc2F2ZUJsdWVwcmludCwgc2F2ZUJsdWVwcmludERlZmluaXRpb24gfSBmcm9tICcuL3NhdmVCbHVlcHJpbnQnO1xuLy8gUGhhc2UgODogV29yZFByZXNzIERldmVsb3BtZW50IFRvb2xzXG5pbXBvcnQgeyBleHBvcnREYXRhYmFzZSwgZXhwb3J0RGF0YWJhc2VEZWZpbml0aW9uIH0gZnJvbSAnLi9leHBvcnREYXRhYmFzZSc7XG5pbXBvcnQgeyBpbXBvcnREYXRhYmFzZSwgaW1wb3J0RGF0YWJhc2VEZWZpbml0aW9uIH0gZnJvbSAnLi9pbXBvcnREYXRhYmFzZSc7XG5pbXBvcnQgeyBvcGVuQWRtaW5lciwgb3BlbkFkbWluZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9vcGVuQWRtaW5lcic7XG5pbXBvcnQgeyB0cnVzdFNzbCwgdHJ1c3RTc2xEZWZpbml0aW9uIH0gZnJvbSAnLi90cnVzdFNzbCc7XG5pbXBvcnQgeyByZW5hbWVTaXRlLCByZW5hbWVTaXRlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVuYW1lU2l0ZSc7XG5pbXBvcnQgeyBjaGFuZ2VQaHBWZXJzaW9uLCBjaGFuZ2VQaHBWZXJzaW9uRGVmaW5pdGlvbiB9IGZyb20gJy4vY2hhbmdlUGhwVmVyc2lvbic7XG5pbXBvcnQgeyBpbXBvcnRTaXRlLCBpbXBvcnRTaXRlRGVmaW5pdGlvbiB9IGZyb20gJy4vaW1wb3J0U2l0ZSc7XG4vLyBQaGFzZSA5OiBTaXRlIENvbmZpZ3VyYXRpb24gJiBEZXYgVG9vbHNcbmltcG9ydCB7IHRvZ2dsZVhkZWJ1ZywgdG9nZ2xlWGRlYnVnRGVmaW5pdGlvbiB9IGZyb20gJy4vdG9nZ2xlWGRlYnVnJztcbmltcG9ydCB7IGdldFNpdGVMb2dzLCBnZXRTaXRlTG9nc0RlZmluaXRpb24gfSBmcm9tICcuL2dldFNpdGVMb2dzJztcbmltcG9ydCB7IGxpc3RTZXJ2aWNlcywgbGlzdFNlcnZpY2VzRGVmaW5pdGlvbiB9IGZyb20gJy4vbGlzdFNlcnZpY2VzJztcblxuZXhwb3J0IHR5cGUgVG9vbEhhbmRsZXIgPSAoXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZXJ2aWNlczogTG9jYWxTZXJ2aWNlc1xuKSA9PiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+O1xuXG5pbnRlcmZhY2UgVG9vbFJlZ2lzdHJhdGlvbiB7XG4gIGRlZmluaXRpb246IE1jcFRvb2xEZWZpbml0aW9uO1xuICBoYW5kbGVyOiBUb29sSGFuZGxlcjtcbn1cblxuY29uc3QgdG9vbHM6IE1hcDxzdHJpbmcsIFRvb2xSZWdpc3RyYXRpb24+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGFsbCBhdmFpbGFibGUgdG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVG9vbHMoKTogdm9pZCB7XG4gIC8vIENvcmUgc2l0ZSBtYW5hZ2VtZW50XG4gIHRvb2xzLnNldCgnbGlzdF9zaXRlcycsIHsgZGVmaW5pdGlvbjogbGlzdFNpdGVzRGVmaW5pdGlvbiwgaGFuZGxlcjogbGlzdFNpdGVzIH0pO1xuICB0b29scy5zZXQoJ2dldF9zaXRlJywgeyBkZWZpbml0aW9uOiBnZXRTaXRlRGVmaW5pdGlvbiwgaGFuZGxlcjogZ2V0U2l0ZSB9KTtcbiAgdG9vbHMuc2V0KCdzdGFydF9zaXRlJywgeyBkZWZpbml0aW9uOiBzdGFydFNpdGVEZWZpbml0aW9uLCBoYW5kbGVyOiBzdGFydFNpdGUgfSk7XG4gIHRvb2xzLnNldCgnc3RvcF9zaXRlJywgeyBkZWZpbml0aW9uOiBzdG9wU2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IHN0b3BTaXRlIH0pO1xuICB0b29scy5zZXQoJ3Jlc3RhcnRfc2l0ZScsIHsgZGVmaW5pdGlvbjogcmVzdGFydFNpdGVEZWZpbml0aW9uLCBoYW5kbGVyOiByZXN0YXJ0U2l0ZSB9KTtcblxuICAvLyBTaXRlIG9wZXJhdGlvbnNcbiAgdG9vbHMuc2V0KCdjcmVhdGVfc2l0ZScsIHsgZGVmaW5pdGlvbjogY3JlYXRlU2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IGNyZWF0ZVNpdGUgfSk7XG4gIHRvb2xzLnNldCgnZGVsZXRlX3NpdGUnLCB7IGRlZmluaXRpb246IGRlbGV0ZVNpdGVEZWZpbml0aW9uLCBoYW5kbGVyOiBkZWxldGVTaXRlIH0pO1xuICB0b29scy5zZXQoJ2Nsb25lX3NpdGUnLCB7IGRlZmluaXRpb246IGNsb25lU2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IGNsb25lU2l0ZSB9KTtcbiAgdG9vbHMuc2V0KCdleHBvcnRfc2l0ZScsIHsgZGVmaW5pdGlvbjogZXhwb3J0U2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IGV4cG9ydFNpdGUgfSk7XG4gIHRvb2xzLnNldCgnb3Blbl9zaXRlJywgeyBkZWZpbml0aW9uOiBvcGVuU2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IG9wZW5TaXRlIH0pO1xuXG4gIC8vIFdvcmRQcmVzcyBDTElcbiAgdG9vbHMuc2V0KCd3cF9jbGknLCB7IGRlZmluaXRpb246IHdwQ2xpRGVmaW5pdGlvbiwgaGFuZGxlcjogd3BDbGkgfSk7XG5cbiAgLy8gQmx1ZXByaW50c1xuICB0b29scy5zZXQoJ2xpc3RfYmx1ZXByaW50cycsIHsgZGVmaW5pdGlvbjogbGlzdEJsdWVwcmludHNEZWZpbml0aW9uLCBoYW5kbGVyOiBsaXN0Qmx1ZXByaW50cyB9KTtcbiAgdG9vbHMuc2V0KCdzYXZlX2JsdWVwcmludCcsIHsgZGVmaW5pdGlvbjogc2F2ZUJsdWVwcmludERlZmluaXRpb24sIGhhbmRsZXI6IHNhdmVCbHVlcHJpbnQgfSk7XG5cbiAgLy8gU3lzdGVtIGluZm9cbiAgdG9vbHMuc2V0KCdnZXRfbG9jYWxfaW5mbycsIHsgZGVmaW5pdGlvbjogZ2V0TG9jYWxJbmZvRGVmaW5pdGlvbiwgaGFuZGxlcjogZ2V0TG9jYWxJbmZvIH0pO1xuXG4gIC8vIFBoYXNlIDg6IFdvcmRQcmVzcyBEZXZlbG9wbWVudCBUb29sc1xuICB0b29scy5zZXQoJ2V4cG9ydF9kYXRhYmFzZScsIHsgZGVmaW5pdGlvbjogZXhwb3J0RGF0YWJhc2VEZWZpbml0aW9uLCBoYW5kbGVyOiBleHBvcnREYXRhYmFzZSB9KTtcbiAgdG9vbHMuc2V0KCdpbXBvcnRfZGF0YWJhc2UnLCB7IGRlZmluaXRpb246IGltcG9ydERhdGFiYXNlRGVmaW5pdGlvbiwgaGFuZGxlcjogaW1wb3J0RGF0YWJhc2UgfSk7XG4gIHRvb2xzLnNldCgnb3Blbl9hZG1pbmVyJywgeyBkZWZpbml0aW9uOiBvcGVuQWRtaW5lckRlZmluaXRpb24sIGhhbmRsZXI6IG9wZW5BZG1pbmVyIH0pO1xuICB0b29scy5zZXQoJ3RydXN0X3NzbCcsIHsgZGVmaW5pdGlvbjogdHJ1c3RTc2xEZWZpbml0aW9uLCBoYW5kbGVyOiB0cnVzdFNzbCB9KTtcbiAgdG9vbHMuc2V0KCdyZW5hbWVfc2l0ZScsIHsgZGVmaW5pdGlvbjogcmVuYW1lU2l0ZURlZmluaXRpb24sIGhhbmRsZXI6IHJlbmFtZVNpdGUgfSk7XG4gIHRvb2xzLnNldCgnY2hhbmdlX3BocF92ZXJzaW9uJywge1xuICAgIGRlZmluaXRpb246IGNoYW5nZVBocFZlcnNpb25EZWZpbml0aW9uLFxuICAgIGhhbmRsZXI6IGNoYW5nZVBocFZlcnNpb24sXG4gIH0pO1xuICB0b29scy5zZXQoJ2ltcG9ydF9zaXRlJywgeyBkZWZpbml0aW9uOiBpbXBvcnRTaXRlRGVmaW5pdGlvbiwgaGFuZGxlcjogaW1wb3J0U2l0ZSB9KTtcblxuICAvLyBQaGFzZSA5OiBTaXRlIENvbmZpZ3VyYXRpb24gJiBEZXYgVG9vbHNcbiAgdG9vbHMuc2V0KCd0b2dnbGVfeGRlYnVnJywgeyBkZWZpbml0aW9uOiB0b2dnbGVYZGVidWdEZWZpbml0aW9uLCBoYW5kbGVyOiB0b2dnbGVYZGVidWcgfSk7XG4gIHRvb2xzLnNldCgnZ2V0X3NpdGVfbG9ncycsIHsgZGVmaW5pdGlvbjogZ2V0U2l0ZUxvZ3NEZWZpbml0aW9uLCBoYW5kbGVyOiBnZXRTaXRlTG9ncyB9KTtcbiAgdG9vbHMuc2V0KCdsaXN0X3NlcnZpY2VzJywgeyBkZWZpbml0aW9uOiBsaXN0U2VydmljZXNEZWZpbml0aW9uLCBoYW5kbGVyOiBsaXN0U2VydmljZXMgfSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCB0b29sIGRlZmluaXRpb25zIChmb3IgTUNQIHRvb2xzL2xpc3QgcmVzcG9uc2UpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sRGVmaW5pdGlvbnMoKTogTWNwVG9vbERlZmluaXRpb25bXSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRvb2xzLnZhbHVlcygpKS5tYXAoKHQpID0+IHQuZGVmaW5pdGlvbik7XG59XG5cbi8qKlxuICogR2V0IHRvb2wgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2xOYW1lcygpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRvb2xzLmtleXMoKSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBhIHRvb2wgYnkgbmFtZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVRvb2woXG4gIG5hbWU6IHN0cmluZyxcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgY29uc3QgdG9vbCA9IHRvb2xzLmdldChuYW1lKTtcblxuICBpZiAoIXRvb2wpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgVW5rbm93biB0b29sOiAke25hbWV9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRvb2wuaGFuZGxlcihhcmdzLCBzZXJ2aWNlcyk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiBgVG9vbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAgfV0sXG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRvb2wgZXhpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNUb29sKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9vbHMuaGFzKG5hbWUpO1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_blueprints Tool
|
|
3
|
+
* List all available site blueprints
|
|
4
|
+
*/
|
|
5
|
+
import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
|
|
6
|
+
export declare const listBlueprintsDefinition: McpToolDefinition;
|
|
7
|
+
export declare function listBlueprints(_args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* list_blueprints Tool
|
|
4
|
+
* List all available site blueprints
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.listBlueprintsDefinition = void 0;
|
|
8
|
+
exports.listBlueprints = listBlueprints;
|
|
9
|
+
exports.listBlueprintsDefinition = {
|
|
10
|
+
name: 'list_blueprints',
|
|
11
|
+
description: 'List all available site blueprints (templates)',
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {},
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
async function listBlueprints(_args, services) {
|
|
18
|
+
try {
|
|
19
|
+
// Check if blueprints service exists
|
|
20
|
+
if (!services.blueprints) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: 'Blueprints service not available' }],
|
|
23
|
+
isError: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const blueprints = await services.blueprints.getBlueprints();
|
|
27
|
+
if (!blueprints || blueprints.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: 'text', text: 'No blueprints found. Create one using save_blueprint.' }],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const blueprintList = blueprints.map((bp) => ({
|
|
33
|
+
id: bp.id,
|
|
34
|
+
name: bp.name,
|
|
35
|
+
description: bp.description || '',
|
|
36
|
+
createdAt: bp.createdAt,
|
|
37
|
+
}));
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: JSON.stringify(blueprintList, null, 2),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: 'text', text: `Failed to list blueprints: ${error.message}` }],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdEJsdWVwcmludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWFpbi9tY3AvdG9vbHMvbGlzdEJsdWVwcmludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBYUgsd0NBMENDO0FBbkRZLFFBQUEsd0JBQXdCLEdBQXNCO0lBQ3pELElBQUksRUFBRSxpQkFBaUI7SUFDdkIsV0FBVyxFQUFFLGdEQUFnRDtJQUM3RCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRSxFQUFFO0tBQ2Y7Q0FDRixDQUFDO0FBRUssS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBOEIsRUFDOUIsUUFBdUI7SUFFdkIsSUFBSSxDQUFDO1FBQ0gscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLENBQUM7Z0JBQ3JFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSx1REFBdUQsRUFBRSxDQUFDO2FBQzNGLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDVCxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUk7WUFDYixXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ2pDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUztTQUN4QixDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQzdDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsOEJBQThCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsaXN0X2JsdWVwcmludHMgVG9vbFxuICogTGlzdCBhbGwgYXZhaWxhYmxlIHNpdGUgYmx1ZXByaW50c1xuICovXG5cbmltcG9ydCB7IE1jcFRvb2xEZWZpbml0aW9uLCBNY3BUb29sUmVzdWx0LCBMb2NhbFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGxpc3RCbHVlcHJpbnRzRGVmaW5pdGlvbjogTWNwVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6ICdsaXN0X2JsdWVwcmludHMnLFxuICBkZXNjcmlwdGlvbjogJ0xpc3QgYWxsIGF2YWlsYWJsZSBzaXRlIGJsdWVwcmludHMgKHRlbXBsYXRlcyknLFxuICBpbnB1dFNjaGVtYToge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIHByb3BlcnRpZXM6IHt9LFxuICB9LFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RCbHVlcHJpbnRzKFxuICBfYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlcnZpY2VzOiBMb2NhbFNlcnZpY2VzXG4pOiBQcm9taXNlPE1jcFRvb2xSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBpZiBibHVlcHJpbnRzIHNlcnZpY2UgZXhpc3RzXG4gICAgaWYgKCFzZXJ2aWNlcy5ibHVlcHJpbnRzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6ICdCbHVlcHJpbnRzIHNlcnZpY2Ugbm90IGF2YWlsYWJsZScgfV0sXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGJsdWVwcmludHMgPSBhd2FpdCBzZXJ2aWNlcy5ibHVlcHJpbnRzLmdldEJsdWVwcmludHMoKTtcblxuICAgIGlmICghYmx1ZXByaW50cyB8fCBibHVlcHJpbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiAnTm8gYmx1ZXByaW50cyBmb3VuZC4gQ3JlYXRlIG9uZSB1c2luZyBzYXZlX2JsdWVwcmludC4nIH1dLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBibHVlcHJpbnRMaXN0ID0gYmx1ZXByaW50cy5tYXAoKGJwOiBhbnkpID0+ICh7XG4gICAgICBpZDogYnAuaWQsXG4gICAgICBuYW1lOiBicC5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGJwLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgY3JlYXRlZEF0OiBicC5jcmVhdGVkQXQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShibHVlcHJpbnRMaXN0LCBudWxsLCAyKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbeyB0eXBlOiAndGV4dCcsIHRleHQ6IGBGYWlsZWQgdG8gbGlzdCBibHVlcHJpbnRzOiAke2Vycm9yLm1lc3NhZ2V9YCB9XSxcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* list_services Tool
|
|
3
|
+
* List available Lightning Services (PHP, MySQL, Nginx versions)
|
|
4
|
+
*/
|
|
5
|
+
import { McpToolDefinition, McpToolResult, LocalServices } from '../../../common/types';
|
|
6
|
+
export declare const listServicesDefinition: McpToolDefinition;
|
|
7
|
+
export declare function listServices(args: Record<string, unknown>, services: LocalServices): Promise<McpToolResult>;
|