localwp-mcp 0.1.8 → 0.1.10
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 +41 -23
- package/dist/errors.d.ts +9 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/mysql.d.ts +6 -0
- package/dist/mysql.js +24 -16
- package/dist/mysql.js.map +1 -1
- package/dist/permissions.js +186 -14
- package/dist/permissions.js.map +1 -1
- package/dist/results.d.ts +8 -0
- package/dist/results.js +13 -0
- package/dist/results.js.map +1 -1
- package/dist/tools/execute-wp-php.d.ts +2 -0
- package/dist/tools/execute-wp-php.js +69 -0
- package/dist/tools/execute-wp-php.js.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/local-site-info.js +47 -4
- package/dist/tools/local-site-info.js.map +1 -1
- package/dist/tools/wp-runtime-call.d.ts +11 -0
- package/dist/tools/wp-runtime-call.js +135 -0
- package/dist/tools/wp-runtime-call.js.map +1 -0
- package/dist/wp-cli.d.ts +13 -0
- package/dist/wp-cli.js +66 -39
- package/dist/wp-cli.js.map +1 -1
- package/dist/wp-runtime.d.ts +53 -0
- package/dist/wp-runtime.js +363 -0
- package/dist/wp-runtime.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -153,10 +153,10 @@ If a client only accepts an MCP URL and cannot launch a local command, it cannot
|
|
|
153
153
|
|
|
154
154
|
`localwp-mcp` has 2 access modes:
|
|
155
155
|
|
|
156
|
-
- `safe`
|
|
157
|
-
Best default for most people. Safe WordPress inspection commands, diagnostics, logs, database reads, and backup/export flows.
|
|
158
|
-
- `full-access`
|
|
159
|
-
Best when you want the agent to fully work on your local site, including SQL writes, imports, and
|
|
156
|
+
- `safe`
|
|
157
|
+
Best default for most people. Safe WordPress inspection commands, read-oriented runtime calls, diagnostics, logs, database reads, and backup/export flows.
|
|
158
|
+
- `full-access`
|
|
159
|
+
Best when you want the agent to fully work on your local site, including SQL writes, imports, restore operations, and explicit WordPress runtime PHP execution.
|
|
160
160
|
|
|
161
161
|
`safe` is the default.
|
|
162
162
|
|
|
@@ -223,18 +223,29 @@ Use:
|
|
|
223
223
|
- `stop_local_site`
|
|
224
224
|
- `restart_local_site`
|
|
225
225
|
|
|
226
|
-
### Work With WordPress
|
|
227
|
-
|
|
228
|
-
Use:
|
|
229
|
-
|
|
230
|
-
- `execute_wp_cli`
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
-
|
|
226
|
+
### Work With WordPress
|
|
227
|
+
|
|
228
|
+
Use:
|
|
229
|
+
|
|
230
|
+
- `execute_wp_cli`
|
|
231
|
+
- `wp_call_function`
|
|
232
|
+
- `wp_call_static_method`
|
|
233
|
+
- `execute_wp_php`
|
|
234
|
+
|
|
235
|
+
Examples:
|
|
236
|
+
|
|
237
|
+
- list plugins
|
|
238
|
+
- inspect options
|
|
239
|
+
- list posts or users
|
|
240
|
+
- run plugin-specific WP-CLI commands
|
|
241
|
+
- call a function or static method inside the loaded WordPress runtime with explicit JSON args
|
|
242
|
+
- run high-trust PHP snippets or PHP files inside the loaded WordPress runtime in `full-access`
|
|
243
|
+
|
|
244
|
+
`execute_wp_cli` is for ordinary WP-CLI commands. It intentionally blocks `eval`, `eval-file`, `shell`, and `db query`, and blocked commands return structured policy details with suggested alternatives.
|
|
245
|
+
|
|
246
|
+
`wp_call_function` and `wp_call_static_method` are read-oriented runtime inspection tools. They run inside the loaded WordPress runtime with explicit JSON arguments and add best-effort read-only guardrails around common SQL writes, HTTP requests, and outgoing email.
|
|
247
|
+
|
|
248
|
+
`execute_wp_php` is the explicit high-trust runtime path for `full-access`. It runs a PHP snippet or workspace/site `.php` file inside the selected site's loaded WordPress runtime using a file-based `eval-file` flow.
|
|
238
249
|
|
|
239
250
|
### Work With the Database
|
|
240
251
|
|
|
@@ -294,9 +305,12 @@ Use `preview_restore_backup` when you want to inspect the restore plan, effectiv
|
|
|
294
305
|
- `read_site_file`
|
|
295
306
|
- `search_site_files`
|
|
296
307
|
- `write_site_file`
|
|
297
|
-
- `delete_site_file`
|
|
298
|
-
- `execute_wp_cli`
|
|
299
|
-
- `
|
|
308
|
+
- `delete_site_file`
|
|
309
|
+
- `execute_wp_cli`
|
|
310
|
+
- `wp_call_function`
|
|
311
|
+
- `wp_call_static_method`
|
|
312
|
+
- `execute_wp_php`
|
|
313
|
+
- `mysql_query`
|
|
300
314
|
- `mysql_execute`
|
|
301
315
|
- `mysql_schema`
|
|
302
316
|
- `db_export`
|
|
@@ -355,15 +369,19 @@ If the MCP does not find your site or cannot run WP-CLI/MySQL:
|
|
|
355
369
|
1. Start the site in Local.
|
|
356
370
|
2. Run `local_environment_check`.
|
|
357
371
|
3. Run `local_doctor`.
|
|
358
|
-
4. Check `local_logs`.
|
|
359
|
-
|
|
360
|
-
Those tools are the fastest way to see whether the problem is:
|
|
372
|
+
4. Check `local_logs`.
|
|
373
|
+
|
|
374
|
+
Those tools are the fastest way to see whether the problem is:
|
|
361
375
|
|
|
362
376
|
- site selection
|
|
363
377
|
- Local metadata resolution
|
|
364
378
|
- WP-CLI resolution
|
|
365
379
|
- MySQL connectivity
|
|
366
|
-
- missing or stopped Local services
|
|
380
|
+
- missing or stopped Local services
|
|
381
|
+
|
|
382
|
+
If plain shell `wp` behaves differently from MCP, call `local_site_info`.
|
|
383
|
+
|
|
384
|
+
`local_site_info` now includes `wpCliRuntime`, `mysqlRuntime`, and `shellReproduction` sections that show the exact Local-managed binaries, working directory, environment overrides, and command arrays this MCP uses. MCP does not rely on your ambient shell `wp`; it resolves the selected site's Local runtime directly.
|
|
367
385
|
|
|
368
386
|
## For Contributors
|
|
369
387
|
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface StructuredToolErrorPayload {
|
|
2
|
+
error: string;
|
|
3
|
+
message: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export declare class StructuredToolError extends Error {
|
|
7
|
+
readonly payload: StructuredToolErrorPayload;
|
|
8
|
+
constructor(payload: StructuredToolErrorPayload);
|
|
9
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,OAAO,CAA6B;IAE7C,YAAY,OAAmC;QAC7C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
package/dist/mysql.d.ts
CHANGED
|
@@ -8,6 +8,12 @@ export declare function executeMysqlStatement(context: SiteContext, sql: string,
|
|
|
8
8
|
truncated: boolean;
|
|
9
9
|
stderr: string | null;
|
|
10
10
|
}>;
|
|
11
|
+
export declare function describeMysqlExecution(context: SiteContext): {
|
|
12
|
+
command: string;
|
|
13
|
+
argsPrefix: string[];
|
|
14
|
+
database: string;
|
|
15
|
+
cwd: string;
|
|
16
|
+
};
|
|
11
17
|
export declare function validateSafeSqlQuery(sql: string): string;
|
|
12
18
|
export declare function validateFullAccessSql(sql: string): string;
|
|
13
19
|
export declare function normalizeSqlStatement(sql: string): string;
|
package/dist/mysql.js
CHANGED
|
@@ -19,22 +19,8 @@ export async function ensureMysqlReady(context) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
export async function executeMysqlStatement(context, sql, maxRows) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
"--batch",
|
|
25
|
-
"--default-character-set=utf8mb4",
|
|
26
|
-
`--execute=${sql}`,
|
|
27
|
-
];
|
|
28
|
-
if (context.mysqlSocket) {
|
|
29
|
-
args.push("--protocol=SOCKET", `--socket=${context.mysqlSocket}`);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
args.push("--protocol=TCP", `--host=${context.mysqlHost || config.defaultMysqlHost}`);
|
|
33
|
-
if (context.mysqlPort) {
|
|
34
|
-
args.push(`--port=${context.mysqlPort}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
args.push(context.database);
|
|
22
|
+
const execution = describeMysqlExecution(context);
|
|
23
|
+
const args = [...execution.argsPrefix, `--execute=${sql}`, execution.database];
|
|
38
24
|
const result = await spawnCommand(context.mysql.binaryPath, args, {
|
|
39
25
|
cwd: context.wpRoot,
|
|
40
26
|
env: process.env,
|
|
@@ -61,6 +47,28 @@ export async function executeMysqlStatement(context, sql, maxRows) {
|
|
|
61
47
|
stderr: result.stderr || null,
|
|
62
48
|
};
|
|
63
49
|
}
|
|
50
|
+
export function describeMysqlExecution(context) {
|
|
51
|
+
const argsPrefix = [
|
|
52
|
+
`--defaults-file=${context.mysqlDefaultsFile}`,
|
|
53
|
+
"--batch",
|
|
54
|
+
"--default-character-set=utf8mb4",
|
|
55
|
+
];
|
|
56
|
+
if (context.mysqlSocket) {
|
|
57
|
+
argsPrefix.push("--protocol=SOCKET", `--socket=${context.mysqlSocket}`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
argsPrefix.push("--protocol=TCP", `--host=${context.mysqlHost || config.defaultMysqlHost}`);
|
|
61
|
+
if (context.mysqlPort) {
|
|
62
|
+
argsPrefix.push(`--port=${context.mysqlPort}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
command: context.mysql.binaryPath,
|
|
67
|
+
argsPrefix,
|
|
68
|
+
database: context.database,
|
|
69
|
+
cwd: context.wpRoot,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
64
72
|
export function validateSafeSqlQuery(sql) {
|
|
65
73
|
const normalizedSql = normalizeSqlStatement(sql);
|
|
66
74
|
const verb = getSqlVerb(normalizedSql);
|
package/dist/mysql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../src/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAoB;IACzD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,+DAA+D,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,cAAc,CAClB,OAAO,CAAC,WAAW,EACnB,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAChE,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,sDAAsD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAoB,EACpB,GAAW,EACX,OAAe;IAEf,MAAM,
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../src/mysql.ts"],"names":[],"mappings":"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"}
|
package/dist/permissions.js
CHANGED
|
@@ -1,13 +1,135 @@
|
|
|
1
1
|
import { config } from "./config.js";
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
[
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
import { StructuredToolError } from "./errors.js";
|
|
3
|
+
const restrictedWpFlags = new Map([
|
|
4
|
+
[
|
|
5
|
+
"--path",
|
|
6
|
+
{
|
|
7
|
+
policyCode: "wp_cli_site_selection_flag_blocked",
|
|
8
|
+
message: "The '--path' flag is not allowed here because the MCP selects the Local site for you.",
|
|
9
|
+
reason: "Site-selection flags are controlled by the MCP so the selected Local site stays authoritative.",
|
|
10
|
+
suggestedAlternatives: [
|
|
11
|
+
"Pass siteName or siteId in the tool call instead.",
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
"--ssh",
|
|
17
|
+
{
|
|
18
|
+
policyCode: "wp_cli_site_selection_flag_blocked",
|
|
19
|
+
message: "The '--ssh' flag is not allowed here because the MCP selects the Local site for you.",
|
|
20
|
+
reason: "Site-selection flags are controlled by the MCP so the selected Local site stays authoritative.",
|
|
21
|
+
suggestedAlternatives: [
|
|
22
|
+
"Pass siteName or siteId in the tool call instead.",
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"--http",
|
|
28
|
+
{
|
|
29
|
+
policyCode: "wp_cli_site_selection_flag_blocked",
|
|
30
|
+
message: "The '--http' flag is not allowed here because the MCP selects the Local site for you.",
|
|
31
|
+
reason: "Site-selection flags are controlled by the MCP so the selected Local site stays authoritative.",
|
|
32
|
+
suggestedAlternatives: [
|
|
33
|
+
"Pass siteName or siteId in the tool call instead.",
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
"--require",
|
|
39
|
+
{
|
|
40
|
+
policyCode: "wp_cli_require_flag_blocked",
|
|
41
|
+
message: "The '--require' flag is not allowed here because it can load arbitrary PHP before WP-CLI runs.",
|
|
42
|
+
reason: "The --require flag can load arbitrary PHP before WP-CLI runs, so it is reserved for dedicated MCP runtime tools.",
|
|
43
|
+
suggestedAlternatives: [
|
|
44
|
+
"Use execute_wp_php for high-trust runtime PHP.",
|
|
45
|
+
"Use wp_call_function or wp_call_static_method for read-oriented runtime inspection.",
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
"--exec",
|
|
51
|
+
{
|
|
52
|
+
policyCode: "wp_cli_exec_flag_blocked",
|
|
53
|
+
message: "The '--exec' flag is not allowed here because it can execute arbitrary PHP before WP-CLI runs.",
|
|
54
|
+
reason: "The --exec flag can execute arbitrary PHP before WP-CLI runs, so it is reserved for dedicated MCP runtime tools.",
|
|
55
|
+
suggestedAlternatives: [
|
|
56
|
+
"Use execute_wp_php for high-trust runtime PHP.",
|
|
57
|
+
"Use wp_call_function or wp_call_static_method for read-oriented runtime inspection.",
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
"--config",
|
|
63
|
+
{
|
|
64
|
+
policyCode: "wp_cli_config_flag_blocked",
|
|
65
|
+
message: "The '--config' flag is not allowed here because it can replace the managed WP-CLI configuration.",
|
|
66
|
+
reason: "The --config flag can replace the managed WP-CLI configuration and weaken MCP guardrails.",
|
|
67
|
+
suggestedAlternatives: [
|
|
68
|
+
"Use local_site_info to inspect the managed WP-CLI runtime context.",
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
]);
|
|
73
|
+
const wpCliAlwaysBlockedRules = [
|
|
74
|
+
{
|
|
75
|
+
prefix: ["db", "query"],
|
|
76
|
+
policyCode: "wp_cli_db_query_blocked",
|
|
77
|
+
blockedFeature: "db query",
|
|
78
|
+
reason: "WP-CLI database query execution is disabled here because it bypasses the MCP's SQL access controls.",
|
|
79
|
+
suggestedAlternatives: ["mysql_query", "mysql_execute in full-access"],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
prefix: ["eval"],
|
|
83
|
+
policyCode: "wp_cli_eval_blocked",
|
|
84
|
+
blockedFeature: "eval",
|
|
85
|
+
reason: "Inline WP-CLI eval is disabled because it enables arbitrary PHP execution through the general WP-CLI tool.",
|
|
86
|
+
suggestedAlternatives: [
|
|
87
|
+
"execute_wp_php in full-access",
|
|
88
|
+
"execute_wp_cli with standard WP-CLI commands",
|
|
89
|
+
"mysql_query for read-only SQL inspection",
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
prefix: ["eval-file"],
|
|
94
|
+
policyCode: "wp_cli_eval_file_blocked",
|
|
95
|
+
blockedFeature: "eval-file",
|
|
96
|
+
reason: "WP-CLI eval-file is reserved for the dedicated runtime PHP tool so file-based execution can stay explicit and easier to audit.",
|
|
97
|
+
suggestedAlternatives: [
|
|
98
|
+
"execute_wp_php in full-access",
|
|
99
|
+
"execute_wp_cli with standard WP-CLI commands",
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
prefix: ["package", "install"],
|
|
104
|
+
policyCode: "wp_cli_package_install_blocked",
|
|
105
|
+
blockedFeature: "package install",
|
|
106
|
+
reason: "WP-CLI package installation is blocked because it mutates shared tooling outside the selected Local site.",
|
|
107
|
+
suggestedAlternatives: ["package browse", "package list"],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
prefix: ["package", "uninstall"],
|
|
111
|
+
policyCode: "wp_cli_package_uninstall_blocked",
|
|
112
|
+
blockedFeature: "package uninstall",
|
|
113
|
+
reason: "WP-CLI package removal is blocked because it mutates shared tooling outside the selected Local site.",
|
|
114
|
+
suggestedAlternatives: ["package browse", "package list"],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
prefix: ["package", "update"],
|
|
118
|
+
policyCode: "wp_cli_package_update_blocked",
|
|
119
|
+
blockedFeature: "package update",
|
|
120
|
+
reason: "WP-CLI package updates are blocked because they mutate shared tooling outside the selected Local site.",
|
|
121
|
+
suggestedAlternatives: ["package browse", "package list"],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
prefix: ["shell"],
|
|
125
|
+
policyCode: "wp_cli_shell_blocked",
|
|
126
|
+
blockedFeature: "shell",
|
|
127
|
+
reason: "Interactive WP-CLI shell access is blocked because it would bypass the MCP's non-interactive guardrails.",
|
|
128
|
+
suggestedAlternatives: [
|
|
129
|
+
"execute_wp_cli with standard commands",
|
|
130
|
+
"execute_wp_php in full-access",
|
|
131
|
+
],
|
|
132
|
+
},
|
|
11
133
|
];
|
|
12
134
|
const wpCliSafePrefixes = [
|
|
13
135
|
["cap", "list"],
|
|
@@ -94,8 +216,20 @@ const wpCliSafePrefixes = [
|
|
|
94
216
|
export function assertAllowedWpFlags(args) {
|
|
95
217
|
for (const arg of args) {
|
|
96
218
|
const flag = arg.split("=")[0];
|
|
97
|
-
|
|
98
|
-
|
|
219
|
+
const restrictedFlag = restrictedWpFlags.get(flag);
|
|
220
|
+
if (restrictedFlag) {
|
|
221
|
+
throw new StructuredToolError({
|
|
222
|
+
error: "blocked_command",
|
|
223
|
+
message: restrictedFlag.message,
|
|
224
|
+
policyCode: restrictedFlag.policyCode,
|
|
225
|
+
policy_code: restrictedFlag.policyCode,
|
|
226
|
+
blockedFeature: flag,
|
|
227
|
+
blocked_feature: flag,
|
|
228
|
+
reason: restrictedFlag.reason,
|
|
229
|
+
args,
|
|
230
|
+
suggestedAlternatives: restrictedFlag.suggestedAlternatives,
|
|
231
|
+
suggested_alternatives: restrictedFlag.suggestedAlternatives,
|
|
232
|
+
});
|
|
99
233
|
}
|
|
100
234
|
}
|
|
101
235
|
}
|
|
@@ -103,8 +237,22 @@ export function assertWpCliPermissions(args) {
|
|
|
103
237
|
return assertWpCliPermissionsForProfile(config.profile, args);
|
|
104
238
|
}
|
|
105
239
|
export function assertWpCliPermissionsForProfile(profile, args) {
|
|
106
|
-
|
|
107
|
-
|
|
240
|
+
const blockedRule = findMatchingPrefixRule(args, wpCliAlwaysBlockedRules);
|
|
241
|
+
if (blockedRule) {
|
|
242
|
+
throw new StructuredToolError({
|
|
243
|
+
error: "blocked_command",
|
|
244
|
+
message: `This WP-CLI command is blocked in this MCP. ${blockedRule.reason}`,
|
|
245
|
+
policyCode: blockedRule.policyCode,
|
|
246
|
+
policy_code: blockedRule.policyCode,
|
|
247
|
+
blockedFeature: blockedRule.blockedFeature,
|
|
248
|
+
blocked_feature: blockedRule.blockedFeature,
|
|
249
|
+
reason: blockedRule.reason,
|
|
250
|
+
args,
|
|
251
|
+
accessProfile: profile,
|
|
252
|
+
access_profile: profile,
|
|
253
|
+
suggestedAlternatives: blockedRule.suggestedAlternatives,
|
|
254
|
+
suggested_alternatives: blockedRule.suggestedAlternatives,
|
|
255
|
+
});
|
|
108
256
|
}
|
|
109
257
|
if (profile === "full-access") {
|
|
110
258
|
return;
|
|
@@ -114,12 +262,36 @@ export function assertWpCliPermissionsForProfile(profile, args) {
|
|
|
114
262
|
return;
|
|
115
263
|
}
|
|
116
264
|
if (!matchesAnyPrefix(args, wpCliSafePrefixes)) {
|
|
117
|
-
throw new
|
|
265
|
+
throw new StructuredToolError({
|
|
266
|
+
error: "blocked_command",
|
|
267
|
+
message: "This WP-CLI command is not allowed in the 'safe' profile. Switch to LOCALWP_MCP_PROFILE=full-access for broad WP-CLI access.",
|
|
268
|
+
policyCode: "wp_cli_safe_profile_blocked",
|
|
269
|
+
policy_code: "wp_cli_safe_profile_blocked",
|
|
270
|
+
blockedFeature: args.slice(0, 2).join(" ") || args[0] || "unknown",
|
|
271
|
+
blocked_feature: args.slice(0, 2).join(" ") || args[0] || "unknown",
|
|
272
|
+
reason: "The 'safe' profile only allows the curated set of inspection-oriented WP-CLI commands.",
|
|
273
|
+
args,
|
|
274
|
+
accessProfile: profile,
|
|
275
|
+
access_profile: profile,
|
|
276
|
+
requiredProfile: "full-access",
|
|
277
|
+
required_profile: "full-access",
|
|
278
|
+
suggestedAlternatives: [
|
|
279
|
+
"Use one of the read-oriented WP-CLI commands allowed in safe mode.",
|
|
280
|
+
"Switch to LOCALWP_MCP_PROFILE=full-access for broader WP-CLI access.",
|
|
281
|
+
],
|
|
282
|
+
suggested_alternatives: [
|
|
283
|
+
"Use one of the read-oriented WP-CLI commands allowed in safe mode.",
|
|
284
|
+
"Switch to LOCALWP_MCP_PROFILE=full-access for broader WP-CLI access.",
|
|
285
|
+
],
|
|
286
|
+
});
|
|
118
287
|
}
|
|
119
288
|
}
|
|
120
289
|
function matchesAnyPrefix(args, prefixes) {
|
|
121
290
|
return prefixes.some((prefix) => startsWithCommand(args, prefix));
|
|
122
291
|
}
|
|
292
|
+
function findMatchingPrefixRule(args, rules) {
|
|
293
|
+
return rules.find((rule) => startsWithCommand(args, [...rule.prefix]));
|
|
294
|
+
}
|
|
123
295
|
function startsWithCommand(args, prefix) {
|
|
124
296
|
if (prefix.length > args.length) {
|
|
125
297
|
return false;
|
package/dist/permissions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC;QACE,QAAQ;QACR;YACE,UAAU,EAAE,oCAAoC;YAChD,OAAO,EACL,uFAAuF;YACzF,MAAM,EACJ,gGAAgG;YAClG,qBAAqB,EAAE;gBACrB,mDAAmD;aACpD;SACF;KACF;IACD;QACE,OAAO;QACP;YACE,UAAU,EAAE,oCAAoC;YAChD,OAAO,EACL,sFAAsF;YACxF,MAAM,EACJ,gGAAgG;YAClG,qBAAqB,EAAE;gBACrB,mDAAmD;aACpD;SACF;KACF;IACD;QACE,QAAQ;QACR;YACE,UAAU,EAAE,oCAAoC;YAChD,OAAO,EACL,uFAAuF;YACzF,MAAM,EACJ,gGAAgG;YAClG,qBAAqB,EAAE;gBACrB,mDAAmD;aACpD;SACF;KACF;IACD;QACE,WAAW;QACX;YACE,UAAU,EAAE,6BAA6B;YACzC,OAAO,EACL,gGAAgG;YAClG,MAAM,EACJ,kHAAkH;YACpH,qBAAqB,EAAE;gBACrB,gDAAgD;gBAChD,qFAAqF;aACtF;SACF;KACF;IACD;QACE,QAAQ;QACR;YACE,UAAU,EAAE,0BAA0B;YACtC,OAAO,EACL,gGAAgG;YAClG,MAAM,EACJ,kHAAkH;YACpH,qBAAqB,EAAE;gBACrB,gDAAgD;gBAChD,qFAAqF;aACtF;SACF;KACF;IACD;QACE,UAAU;QACV;YACE,UAAU,EAAE,4BAA4B;YACxC,OAAO,EACL,kGAAkG;YACpG,MAAM,EACJ,2FAA2F;YAC7F,qBAAqB,EAAE;gBACrB,oEAAoE;aACrE;SACF;KACF;CACF,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG;IAC9B;QACE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,UAAU,EAAE,yBAAyB;QACrC,cAAc,EAAE,UAAU;QAC1B,MAAM,EACJ,qGAAqG;QACvG,qBAAqB,EAAE,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACvE;IACD;QACE,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,UAAU,EAAE,qBAAqB;QACjC,cAAc,EAAE,MAAM;QACtB,MAAM,EACJ,4GAA4G;QAC9G,qBAAqB,EAAE;YACrB,+BAA+B;YAC/B,8CAA8C;YAC9C,0CAA0C;SAC3C;KACF;IACD;QACE,MAAM,EAAE,CAAC,WAAW,CAAC;QACrB,UAAU,EAAE,0BAA0B;QACtC,cAAc,EAAE,WAAW;QAC3B,MAAM,EACJ,gIAAgI;QAClI,qBAAqB,EAAE;YACrB,+BAA+B;YAC/B,8CAA8C;SAC/C;KACF;IACD;QACE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,UAAU,EAAE,gCAAgC;QAC5C,cAAc,EAAE,iBAAiB;QACjC,MAAM,EACJ,2GAA2G;QAC7G,qBAAqB,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;KAC1D;IACD;QACE,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;QAChC,UAAU,EAAE,kCAAkC;QAC9C,cAAc,EAAE,mBAAmB;QACnC,MAAM,EACJ,sGAAsG;QACxG,qBAAqB,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;KAC1D;IACD;QACE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC7B,UAAU,EAAE,+BAA+B;QAC3C,cAAc,EAAE,gBAAgB;QAChC,MAAM,EACJ,wGAAwG;QAC1G,qBAAqB,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;KAC1D;IACD;QACE,MAAM,EAAE,CAAC,OAAO,CAAC;QACjB,UAAU,EAAE,sBAAsB;QAClC,cAAc,EAAE,OAAO;QACvB,MAAM,EACJ,0GAA0G;QAC5G,qBAAqB,EAAE;YACrB,uCAAuC;YACvC,+BAA+B;SAChC;KACF;CACO,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACxB,CAAC,KAAK,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,cAAc,CAAC;IACvB,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,YAAY,CAAC;IACrB,CAAC,KAAK,EAAE,SAAS,CAAC;IAClB,CAAC,SAAS,EAAE,KAAK,CAAC;IAClB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC5B,CAAC,MAAM,EAAE,SAAS,CAAC;IACnB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IACzB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,IAAI,EAAE,OAAO,CAAC;IACf,CAAC,IAAI,EAAE,SAAS,CAAC;IACjB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,IAAI,EAAE,MAAM,CAAC;IACd,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;IAC5B,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC9B,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;IAC7B,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,CAAC,OAAO,EAAE,YAAY,CAAC;IACvB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACxB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;IAC1B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;IAC3B,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,QAAQ,EAAE,KAAK,CAAC;IACjB,CAAC,QAAQ,EAAE,WAAW,CAAC;IACvB,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IAC9B,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,SAAS,EAAE,OAAO,CAAC;IACpB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;IAC3B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IACzB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IACvB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACxB,CAAC,aAAa,EAAE,MAAM,CAAC;IACvB,CAAC,UAAU,EAAE,KAAK,CAAC;IACnB,CAAC,UAAU,EAAE,MAAM,CAAC;IACpB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,OAAO,EAAE,cAAc,CAAC;IACzB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC;IACxC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IACvB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IACvB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACxB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;IAC3B,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,mBAAmB,CAAC;gBAC5B,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,UAAU,EAAE,cAAc,CAAC,UAAU;gBACrC,WAAW,EAAE,cAAc,CAAC,UAAU;gBACtC,cAAc,EAAE,IAAI;gBACpB,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,IAAI;gBACJ,qBAAqB,EAAE,cAAc,CAAC,qBAAqB;gBAC3D,sBAAsB,EAAE,cAAc,CAAC,qBAAqB;aAC7D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,OAAO,gCAAgC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,OAAsB,EACtB,IAAc;IAEd,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC1E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,mBAAmB,CAAC;YAC5B,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,+CAA+C,WAAW,CAAC,MAAM,EAAE;YACrE,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,WAAW,EAAE,WAAW,CAAC,UAAU;YACnC,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,eAAe,EAAE,WAAW,CAAC,cAAc;YAC3C,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,IAAI;YACJ,aAAa,EAAE,OAAO;YACtB,cAAc,EAAE,OAAO;YACvB,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;YACxD,sBAAsB,EAAE,WAAW,CAAC,qBAAqB;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IACE,iBAAiB,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC1B,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,mBAAmB,CAAC;YAC5B,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,8HAA8H;YAChI,UAAU,EAAE,6BAA6B;YACzC,WAAW,EAAE,6BAA6B;YAC1C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS;YAClE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS;YACnE,MAAM,EACJ,wFAAwF;YAC1F,IAAI;YACJ,aAAa,EAAE,OAAO;YACtB,cAAc,EAAE,OAAO;YACvB,eAAe,EAAE,aAAa;YAC9B,gBAAgB,EAAE,aAAa;YAC/B,qBAAqB,EAAE;gBACrB,oEAAoE;gBACpE,sEAAsE;aACvE;YACD,sBAAsB,EAAE;gBACtB,oEAAoE;gBACpE,sEAAsE;aACvE;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,QAAoB;IAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,sBAAsB,CAI7B,IAAc,EAAE,KAAmB;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAc,EAAE,MAAgB;IACzD,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AAC/D,CAAC"}
|
package/dist/results.d.ts
CHANGED
|
@@ -7,9 +7,17 @@ export declare function createJsonToolResult<T extends Record<string, unknown>>(
|
|
|
7
7
|
};
|
|
8
8
|
export declare function createErrorToolResult(error: unknown): {
|
|
9
9
|
isError: boolean;
|
|
10
|
+
structuredContent: import("./errors.js").StructuredToolErrorPayload;
|
|
10
11
|
content: {
|
|
11
12
|
type: "text";
|
|
12
13
|
text: string;
|
|
13
14
|
}[];
|
|
15
|
+
} | {
|
|
16
|
+
isError: boolean;
|
|
17
|
+
content: {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
structuredContent?: undefined;
|
|
14
22
|
};
|
|
15
23
|
export declare function formatError(error: unknown): string;
|
package/dist/results.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StructuredToolError } from "./errors.js";
|
|
1
2
|
export function createJsonToolResult(payload) {
|
|
2
3
|
return {
|
|
3
4
|
structuredContent: payload,
|
|
@@ -10,6 +11,18 @@ export function createJsonToolResult(payload) {
|
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
export function createErrorToolResult(error) {
|
|
14
|
+
if (error instanceof StructuredToolError) {
|
|
15
|
+
return {
|
|
16
|
+
isError: true,
|
|
17
|
+
structuredContent: error.payload,
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: "text",
|
|
21
|
+
text: JSON.stringify(error.payload, null, 2),
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
13
26
|
return {
|
|
14
27
|
isError: true,
|
|
15
28
|
content: [
|
package/dist/results.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results.js","sourceRoot":"","sources":["../src/results.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAClC,OAAU;IAEV,OAAO;QACL,iBAAiB,EAAE,OAAO;QAC1B,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aACvC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;aACzB;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../src/results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,UAAU,oBAAoB,CAClC,OAAU;IAEV,OAAO;QACL,iBAAiB,EAAE,OAAO;QAC1B,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aACvC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,KAAK,CAAC,OAAO;YAChC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC7C;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;aACzB;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { rm } from "fs/promises";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { config } from "../config.js";
|
|
4
|
+
import { StructuredToolError } from "../errors.js";
|
|
5
|
+
import { buildSiteContext, summarizeSite } from "../local-sites.js";
|
|
6
|
+
import { createErrorToolResult, createJsonToolResult } from "../results.js";
|
|
7
|
+
import { siteSelectorSchema } from "../tool-schemas.js";
|
|
8
|
+
import { runWpCliArgs } from "../wp-cli.js";
|
|
9
|
+
import { prepareWpPhpSource } from "../wp-runtime.js";
|
|
10
|
+
export function registerExecuteWpPhpTool(server) {
|
|
11
|
+
server.registerTool("execute_wp_php", {
|
|
12
|
+
description: "Runs a high-trust PHP snippet or PHP file inside the selected LocalWP site's loaded WordPress runtime using a file-based eval flow. Requires the 'full-access' profile.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
...siteSelectorSchema,
|
|
15
|
+
phpCode: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Optional inline PHP to run after WordPress loads. If you omit '<?php', the tool will prepend it for you."),
|
|
19
|
+
filePath: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Optional absolute path or working-directory-relative path to a readable .php file inside the current workspace or selected Local site."),
|
|
23
|
+
},
|
|
24
|
+
}, async ({ siteId, siteName, phpCode, filePath }) => {
|
|
25
|
+
try {
|
|
26
|
+
if (config.profile !== "full-access") {
|
|
27
|
+
throw new StructuredToolError({
|
|
28
|
+
error: "profile_required",
|
|
29
|
+
message: "execute_wp_php requires LOCALWP_MCP_PROFILE=full-access because it executes PHP inside the loaded WordPress runtime.",
|
|
30
|
+
requiredProfile: "full-access",
|
|
31
|
+
accessProfile: config.profile,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const context = await buildSiteContext({ siteId, siteName });
|
|
35
|
+
const source = await prepareWpPhpSource({
|
|
36
|
+
siteRoot: context.site.absolutePath,
|
|
37
|
+
phpCode,
|
|
38
|
+
filePath,
|
|
39
|
+
});
|
|
40
|
+
try {
|
|
41
|
+
const result = await runWpCliArgs(context, ["eval-file", source.absolutePath], {
|
|
42
|
+
skipPermissionCheck: true,
|
|
43
|
+
});
|
|
44
|
+
return createJsonToolResult({
|
|
45
|
+
site: summarizeSite(context.site),
|
|
46
|
+
selectionMethod: context.selectionMethod,
|
|
47
|
+
accessProfile: config.profile,
|
|
48
|
+
executionEngine: "wp eval-file",
|
|
49
|
+
sourceMode: source.mode,
|
|
50
|
+
sourcePath: source.sourcePath,
|
|
51
|
+
stdout: result.stdout,
|
|
52
|
+
stderr: result.stderr,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
if (source.cleanupPath) {
|
|
57
|
+
await rm(source.cleanupPath, {
|
|
58
|
+
recursive: true,
|
|
59
|
+
force: true,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return createErrorToolResult(error);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=execute-wp-php.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-wp-php.js","sourceRoot":"","sources":["../../src/tools/execute-wp-php.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,yKAAyK;QAC3K,WAAW,EAAE;YACX,GAAG,kBAAkB;YACrB,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,0GAA0G,CAC3G;YACH,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,wIAAwI,CACzI;SACJ;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChD,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,mBAAmB,CAAC;oBAC5B,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EACL,sHAAsH;oBACxH,eAAe,EAAE,aAAa;oBAC9B,aAAa,EAAE,MAAM,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACtC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;gBACnC,OAAO;gBACP,QAAQ;aACT,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,OAAO,EACP,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAClC;oBACE,mBAAmB,EAAE,IAAI;iBAC1B,CACF,CAAC;gBAEF,OAAO,oBAAoB,CAAC;oBAC1B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oBACjC,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,aAAa,EAAE,MAAM,CAAC,OAAO;oBAC7B,eAAe,EAAE,cAAc;oBAC/B,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;wBAC3B,SAAS,EAAE,IAAI;wBACf,KAAK,EAAE,IAAI;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,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
|
@@ -5,6 +5,7 @@ import { registerDbImportTool } from "./db-import.js";
|
|
|
5
5
|
import { registerDeleteBackupTool } from "./delete-backup.js";
|
|
6
6
|
import { registerDeleteSiteFileTool } from "./delete-site-file.js";
|
|
7
7
|
import { registerExecuteWpCliTool } from "./execute-wp-cli.js";
|
|
8
|
+
import { registerExecuteWpPhpTool } from "./execute-wp-php.js";
|
|
8
9
|
import { registerListBackupsTool } from "./list-backups.js";
|
|
9
10
|
import { registerListSiteFilesTool } from "./list-site-files.js";
|
|
10
11
|
import { registerLocalDoctorTool } from "./local-doctor.js";
|
|
@@ -22,6 +23,7 @@ import { registerRestoreBackupTool } from "./restore-backup.js";
|
|
|
22
23
|
import { registerSearchSiteFilesTool } from "./search-site-files.js";
|
|
23
24
|
import { registerStartLocalSiteTool } from "./start-local-site.js";
|
|
24
25
|
import { registerStopLocalSiteTool } from "./stop-local-site.js";
|
|
26
|
+
import { registerWpRuntimeCallTools } from "./wp-runtime-call.js";
|
|
25
27
|
import { registerWriteSiteFileTool } from "./write-site-file.js";
|
|
26
28
|
export function registerTools(server) {
|
|
27
29
|
registerListLocalSitesTool(server);
|
|
@@ -49,5 +51,7 @@ export function registerTools(server) {
|
|
|
49
51
|
registerMysqlExecuteTool(server);
|
|
50
52
|
registerMysqlSchemaTool(server);
|
|
51
53
|
registerExecuteWpCliTool(server);
|
|
54
|
+
registerExecuteWpPhpTool(server);
|
|
55
|
+
registerWpRuntimeCallTools(server);
|
|
52
56
|
}
|
|
53
57
|
//# sourceMappingURL=index.js.map
|