localwp-mcp 0.1.7 → 0.1.9
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 +143 -29
- 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 +2 -0
- package/dist/tools/wp-runtime-call.js +114 -0
- package/dist/tools/wp-runtime-call.js.map +1 -0
- package/dist/wp-cli.d.ts +10 -0
- package/dist/wp-cli.js +48 -30
- package/dist/wp-cli.js.map +1 -1
- package/dist/wp-runtime.d.ts +48 -0
- package/dist/wp-runtime.js +350 -0
- package/dist/wp-runtime.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,22 +45,118 @@ If you want the MCP to focus on one site by default, set:
|
|
|
45
45
|
|
|
46
46
|
## Client Setup
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Use these settings across supported clients:
|
|
49
49
|
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
50
|
+
- transport: `STDIO`
|
|
51
|
+
- command: `npx`
|
|
52
|
+
- arguments: `-y`, `localwp-mcp`
|
|
53
|
+
- default environment variable: `LOCALWP_MCP_PROFILE=safe`
|
|
54
|
+
- optional environment variables:
|
|
55
|
+
- `LOCAL_SITE_NAME`
|
|
56
|
+
- `LOCAL_SITE_ID`
|
|
57
|
+
- `LOCALWP_MCP_BACKUPS_DIR`
|
|
58
|
+
|
|
59
|
+
Do not choose `Streamable HTTP`. `localwp-mcp` currently runs as a local stdio MCP server.
|
|
60
|
+
|
|
61
|
+
### Codex Desktop
|
|
62
|
+
|
|
63
|
+
In Codex Desktop:
|
|
64
|
+
|
|
65
|
+
1. Open `Settings`
|
|
66
|
+
2. Open `MCP servers`
|
|
67
|
+
3. Add a custom MCP
|
|
68
|
+
4. Choose `STDIO`
|
|
69
|
+
|
|
70
|
+
Then enter:
|
|
71
|
+
|
|
72
|
+
- Name: `localwp`
|
|
73
|
+
- Command to launch: `npx`
|
|
74
|
+
- Arguments:
|
|
75
|
+
- `-y`
|
|
76
|
+
- `localwp-mcp`
|
|
77
|
+
- Environment variables:
|
|
78
|
+
- `LOCALWP_MCP_PROFILE` = `safe`
|
|
79
|
+
- optional: `LOCAL_SITE_NAME` = `your-site-name`
|
|
80
|
+
|
|
81
|
+
### Cursor
|
|
82
|
+
|
|
83
|
+
Add this to your Cursor MCP config, for example `.cursor/mcp.json`:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"mcpServers": {
|
|
88
|
+
"localwp": {
|
|
89
|
+
"command": "npx",
|
|
90
|
+
"args": ["-y", "localwp-mcp"],
|
|
91
|
+
"env": {
|
|
92
|
+
"LOCALWP_MCP_PROFILE": "safe"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Claude Code
|
|
100
|
+
|
|
101
|
+
Add the MCP through the Claude Code CLI.
|
|
102
|
+
|
|
103
|
+
macOS and Linux:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
claude mcp add localwp -- npx -y localwp-mcp
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Windows:
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
claude mcp add localwp -- cmd /c npx -y localwp-mcp
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The space before and after `--` is intentional. `--` is the separator between the Claude command and the command Claude should launch.
|
|
116
|
+
|
|
117
|
+
After adding the server, configure:
|
|
118
|
+
|
|
119
|
+
- `LOCALWP_MCP_PROFILE=safe`
|
|
120
|
+
- optional: `LOCAL_SITE_NAME=your-site-name`
|
|
121
|
+
|
|
122
|
+
### OpenCode
|
|
123
|
+
|
|
124
|
+
Use a local MCP server entry in your OpenCode config:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"$schema": "https://opencode.ai/config.json",
|
|
129
|
+
"mcp": {
|
|
130
|
+
"localwp": {
|
|
131
|
+
"type": "local",
|
|
132
|
+
"command": ["npx", "-y", "localwp-mcp"],
|
|
133
|
+
"enabled": true,
|
|
134
|
+
"environment": {
|
|
135
|
+
"LOCALWP_MCP_PROFILE": "safe"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Other STDIO MCP Clients
|
|
143
|
+
|
|
144
|
+
If your MCP client supports launching a local server over `STDIO`, use:
|
|
145
|
+
|
|
146
|
+
- command: `npx`
|
|
147
|
+
- arguments: `-y`, `localwp-mcp`
|
|
148
|
+
- environment: `LOCALWP_MCP_PROFILE=safe`
|
|
149
|
+
|
|
150
|
+
If a client only accepts an MCP URL and cannot launch a local command, it cannot use `localwp-mcp` yet.
|
|
55
151
|
|
|
56
152
|
## Access Modes
|
|
57
153
|
|
|
58
154
|
`localwp-mcp` has 2 access modes:
|
|
59
155
|
|
|
60
|
-
- `safe`
|
|
61
|
-
Best default for most people. Safe WordPress inspection commands, diagnostics, logs, database reads, and backup/export flows.
|
|
62
|
-
- `full-access`
|
|
63
|
-
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.
|
|
64
160
|
|
|
65
161
|
`safe` is the default.
|
|
66
162
|
|
|
@@ -127,18 +223,29 @@ Use:
|
|
|
127
223
|
- `stop_local_site`
|
|
128
224
|
- `restart_local_site`
|
|
129
225
|
|
|
130
|
-
### Work With WordPress
|
|
131
|
-
|
|
132
|
-
Use:
|
|
133
|
-
|
|
134
|
-
- `execute_wp_cli`
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
-
|
|
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.
|
|
142
249
|
|
|
143
250
|
### Work With the Database
|
|
144
251
|
|
|
@@ -198,9 +305,12 @@ Use `preview_restore_backup` when you want to inspect the restore plan, effectiv
|
|
|
198
305
|
- `read_site_file`
|
|
199
306
|
- `search_site_files`
|
|
200
307
|
- `write_site_file`
|
|
201
|
-
- `delete_site_file`
|
|
202
|
-
- `execute_wp_cli`
|
|
203
|
-
- `
|
|
308
|
+
- `delete_site_file`
|
|
309
|
+
- `execute_wp_cli`
|
|
310
|
+
- `wp_call_function`
|
|
311
|
+
- `wp_call_static_method`
|
|
312
|
+
- `execute_wp_php`
|
|
313
|
+
- `mysql_query`
|
|
204
314
|
- `mysql_execute`
|
|
205
315
|
- `mysql_schema`
|
|
206
316
|
- `db_export`
|
|
@@ -259,15 +369,19 @@ If the MCP does not find your site or cannot run WP-CLI/MySQL:
|
|
|
259
369
|
1. Start the site in Local.
|
|
260
370
|
2. Run `local_environment_check`.
|
|
261
371
|
3. Run `local_doctor`.
|
|
262
|
-
4. Check `local_logs`.
|
|
263
|
-
|
|
264
|
-
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:
|
|
265
375
|
|
|
266
376
|
- site selection
|
|
267
377
|
- Local metadata resolution
|
|
268
378
|
- WP-CLI resolution
|
|
269
379
|
- MySQL connectivity
|
|
270
|
-
- 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.
|
|
271
385
|
|
|
272
386
|
## For Contributors
|
|
273
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":"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"}
|
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"}
|