wp-opsBLOCK
CLI and MCP server for WordPress operations — Trellis/Bedrock deployments, backups, security scanning, and monitoring — plus the scripts and guides they wrap
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
WP OPS
[](https://github.com/imagewize/wp-ops/releases) [](https://github.com/imagewize/wp-ops/releases) [](LICENSE.md)
wp-ops is a CLI for WordPress operations — deployments, database and files backup, security scanning, monitoring, and content workflows — backed by manifest-driven scripts, Ansible playbooks, and guides, optimized for Trellis/Bedrock workflows.
Contents
- wp-ops CLI
- Trellis
- Bedrock
- WP-CLI
- Nginx
- Scripts
- MCP Server
- WordPress Utilities
- Troubleshooting
wp-ops CLI
The single entry point for everything in this repo — a single binary that auto-discovers commands across every category, groups them by domain, and renders real --help, guided prompts, and shell completions from each command's manifest.
# Recommended: Homebrew brew install imagewize/tap/wp-ops wp-ops init # install shell completions (one-time) # Without Homebrew, build from source (needs Go 1.26+): git clone https://github.com/imagewize/wp-ops.git && cd wp-ops go build -o wp-ops ./go sudo mv wp-ops /usr/local/bin/ # or ~/.local/bin, or anywhere on your PATH wp-ops init wp-ops # interactive picker wp-ops --help # list all categories wp-ops ba
d18f39d2f775OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add wp-ops-pattern-screenshots --env WP_OPS_ABUSEIPDB_KEY=${WP_OPS_ABUSEIPDB_KEY} --env WP_OPS_MCP_TOKEN=${WP_OPS_MCP_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"wp-ops-pattern-screenshots": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"WP_OPS_ABUSEIPDB_KEY": "${WP_OPS_ABUSEIPDB_KEY}",
"WP_OPS_MCP_TOKEN": "${WP_OPS_MCP_TOKEN}"
}
}
}
}Exposed tools (20)
11 read · 9 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
admin_user_create | write | Create a temporary WordPress administrator via WP-CLI — for lockout recovery (lost admin password, |
broken_link_audit | read | Check a site |
command_run | write | Run a wp-ops catalog command found via command_search, passing args as separate tokens. |
command_search | read | Search the full wp-ops command catalog (~74 commands: backups, monitoring, SEO and security |
db_backup | read | Export and gzip the WordPress database for a configured site/environment. Local sites are exported |
db_pull | read | Pull a site |
files_pull | write | Sync a site |
ip_reputation_check | read | Check IP addresses against AbuseIPDB threat intelligence (score, report count, ISP, Tor). Pass |
monitor | write | Run combined traffic, security, AI-crawler, and error-log monitoring against a site |
publish_post | write | Publish or update a WordPress blog post from a local HTML draft carrying the |
redirect_audit | read | Audit one or more URLs for redirect-chain issues: HTTPS status/redirect count, HTTP→HTTPS and |
remote_ttfb_audit | read | Measure TTFB (time to first byte) from the server itself — via SSH, so DNS/network distance from |
schema_audit | read | Audit JSON-LD schema markup (Organization, LocalBusiness, Product, Article, etc.) across key pages |
scp_file | read | Copy a single file to (direction |
security_scan | write | Run the wp-ops WordPress security scanners (targeted and/or general malware detection) |
server_status | read | Live CPU, memory, disk, top processes, PHP-FPM, MySQL/MariaDB, Nginx, and recent OOM-killer snapshot |
ssh_command | write | Run one ad-hoc shell command on the registered remote host over SSH. Commands are split into |
url_audit | read | Audit wp_posts.post_content for hardcoded dev URLs (e.g. |
verify_post | write | Verify that a published WordPress post survived the write intact: compares what is STORED in |
wp_cli | write | Run a WP-CLI command against a configured site/environment. Pass args as separate tokens |
Trust audit
BLOCKgrade F · trust 54/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (16 observation(s))
- Network
- declared (12 observation(s))
- Shell
- declared (4 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
const importResult = await exec(
exec($command . ' > /dev/null 2>&1 &');
exec( 'diff -u ' . escapeshellarg( $old_file ) . ' ' . escapeshellarg( $new_file ), $output );
exec( $cmd, $output, $code );
/(^|\/)id_rsa/,
/(^|\/)id_ed25519/,
/(^|\/)id_ecdsa/,
/(^|\/)authorized_keys$/,
/(^|\/)\.netrc$/,
/.env" ... curl
api_base = "http://127.0.0.1:8080/v1"
.goreleaser.yml
repoRoot := "../../.." // go/internal/manifest -> repo root
errs := Lint(cmd, "../../..")
errs := Lint(cmd, "../../..")
errs := Lint(cmd, "../../..")
const SCRIPT_PATH = path.resolve(__dirname, "../../../scripts/monitoring/404-checker.sh");
@modelcontextprotocol/sdk, express, zod, @types/express, @types/node, tsx, typescript
playwright, sharp
WordPress sends emails to the configured admin email address (e.g., site registration notifications, password resets, user notifications). If this email address doesn't exist, emails will bounce with
`cat web/wp-config.php` or `cat ~/.ssh/id_rsa` through with no `confirm: true` step,
describes: "once it has local file access, it can find your ssh credential... the
the VM, so the host's `wp` read the site's `.env` credentials, aimed them at
- No sudo access (passwordless)
- Full sudo access with password
Gates applied: no_behavioural_pass.
d18f39d2f775full audit observations/trust-audit/mcp-server/imagewize__wp-ops.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | d18f39d2f775 | BLOCK | F | 54 | first audit |
Questions
What is the wp-ops MCP server?
CLI and MCP server for WordPress operations — Trellis/Bedrock deployments, backups, security scanning, and monitoring — plus the scripts and guides they wrap
What tools does wp-ops expose?
20 in total: 11 read-only, 9 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is wp-ops safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (54/100) and found 10 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does wp-ops need?
It reads WP_OPS_ABUSEIPDB_KEY and WP_OPS_MCP_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does wp-ops run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as wp-ops-pattern-screenshots at 1.0.0.
How current is this page?
The grade is for one exact copy of the source (d18f39d2f775), read on 2026-10-11. The repository is watched and re-audited when it changes.