MCP, MCP server
wpxmcp
The open-source MCP server that runs your WordPress sites like a senior admin would — content, design, plugins, SEO, performance, security and the whole fleet, from Claude, ChatGPT, Cursor or any MCP client.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
audit/run2.mjs, line 90
const html = await fetch("http://127.0.0.1:8090/").then((r) => r.text()).catch(() => "");
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
src/platform-node.ts, line 105
fs.unlinkSync(file);
src/platform-node.ts, line 151
fs.unlinkSync(file);
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
audit/run2.mjs, line 90
const html = await fetch("http://127.0.0.1:8090/").then((r) => r.text()).catch(() => "");
audit/worker.mjs, line 50
const res = await fetch(`${BASE}${path}`, init);
audit/worker.mjs, line 55
const health = await fetch(`${BASE}/health`).then((r) => r.json());
Show more
src/worker.ts, line 151
async fetch(request: Request, env: Env): Promise<Response> {
src/lib/client.ts, line 260
res = await fetch(current, {
src/lib/http-transport.ts, line 68
return withHeaders(await handler.fetch(request), headers);
src/tools/growth.ts, line 57
res = await fetch(current.toString(), {
src/tools/growth.ts, line 115
res = await fetch(current, { method, headers, redirect: "manual", signal: AbortSignal.timeout(env.timeoutMs) });
src/tools/growth.ts, line 638
const res = await fetch(httpUrl.toString(), { method: "GET", redirect: "manual", headers: { "User-Agent": UA }, signal: AbortSignal.timeout(15_000) });
src/tools/media.ts, line 175
res = await fetch(current.toString(), { signal: controller.signal, redirect: "manual", headers: { "User-Agent": "wpxmcp/2.0" } });
src/tools/media.ts, line 548
const res = await fetch(url, { headers: { Authorization: `Client-ID ${unsplashKey}`, "Accept-Version": "v1" } });
src/tools/media.ts, line 572
const res = await fetch(url, { headers: { Authorization: pexelsKey! } });
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
audit/worker.mjs, line 14
const TOKEN = process.env.WPX_AUTH_TOKEN;
src/generated/skills.ts, line 359
en PHP runs as the owner); deny `.git`, `.env` and `*.bak` at the server; `Options -I
src/tools/growth.ts, line 267
try { return platform().env.WPX_ALLOW_PRIVATE_URLS === "true"; } catch { return false; }
Show more
src/tools/media.ts, line 162
const allowPrivate = platform().env.WPX_ALLOW_PRIVATE_URLS === "true";
src/tools/media.ts, line 530
const runtimeEnv = platform().env;
src/tools/ops.ts, line 118
{ path: ".env", kind: "env" },
src/tools/ops.ts, line 260
id: "exposed_env", severity: secrets ? "critical" : "high", title: "/.env is publicly downloadable",
src/tools/ops.ts, line 262
fix: "Move .env outside the web root or deny dotfiles at the web server, then rotate every credential it contains.",
src/tools/ops.ts, line 464
.log, exposed wp-config backups / .git / .env, uploads directory listing, security he
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit e206cf9cd4d5. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: e206cf9cd4d5e3a675c5ff94723cad31bb8e71f2
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.