mcp-wordpressBLOCK
MCP Server to manage a Wordpress CMS system.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://mcptoplist.com/server/glama%2Fdocdyhr%2Fmcp-wordpress)
The Most Comprehensive WordPress MCP Server
Manage WordPress sites with natural language through AI tools like Claude Desktop
Quick Start • Why This MCP Server? Installation Options • Documentation • Examples
[](https://github.com/docdyhr/mcp-wordpress/actions/workflows/main-ci.yml) [](https://github.com/docdyhr/mcp-wordpress/stargazers) [](https://www.npmjs.com/package/mcp-wordpress) [](https://www.npmjs.com/package/mcp-wordpress) [](https://www.npmjs.com/package/mcp-wordpress) [](https://hub.docker.com/r/docdyhr/mcp-wordpress) [](https://codecov.io/gh/docdyhr/mcp-wordpress)
[](https://gi
5761f033e4fcOBSERVED · 2026-10-13Connect
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 mcp-wordpress --env DB_PASSWORD=${DB_PASSWORD} --env DEBUG_TEST_PASSWORD=${DEBUG_TEST_PASSWORD} --env ENCRYPTION_KEY=${ENCRYPTION_KEY} --env GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} -- npx -y [email protected]{
"mcpServers": {
"mcp-wordpress": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"DB_PASSWORD": "${DB_PASSWORD}",
"DEBUG_TEST_PASSWORD": "${DEBUG_TEST_PASSWORD}",
"ENCRYPTION_KEY": "${ENCRYPTION_KEY}",
"GOOGLE_CLIENT_SECRET": "${GOOGLE_CLIENT_SECRET}"
}
}
}
}Exposed tools (75)
45 read · 21 write · 9 destructive. Blast radius: 9 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Current | read | Site administrator |
WordPressPost | write | WordPress blog post object |
adminuser | read | Site administrator |
wp_approve_comment | read | Approves a pending comment. |
wp_cache_clear | destructive | Clear cache for a WordPress site. |
wp_cache_info | read | Get detailed cache configuration and status information. |
wp_cache_stats | read | Get cache statistics for a WordPress site. |
wp_cache_warm | read | Pre-warm cache with essential WordPress data. |
wp_check_version | read | Check if a newer version of mcp-wordpress is available. Returns current version, latest version, and download URL if update is available. |
wp_create_application_password | write | Creates a new application password for a user. |
wp_create_category | write | Creates a new category. |
wp_create_comment | write | Creates a new comment on a post. |
wp_create_page | write | Creates a new page. |
wp_create_post | write | Creates a new WordPress post with comprehensive validation and detailed success feedback including management links.\n\n |
wp_create_tag | write | Creates a new tag. |
wp_create_user | write | Creates a new user. |
wp_delete_application_password | destructive | Revokes an existing application password. |
wp_delete_category | destructive | Permanently deletes a category (WordPress terms have no trash). |
wp_delete_comment | destructive | Deletes a comment. |
wp_delete_media | destructive | Deletes a media item. |
wp_delete_page | destructive | Deletes a page. |
wp_delete_post | destructive | Deletes a WordPress post with options for trash or permanent deletion. Includes safety confirmations and detailed feedback on the deletion action.\n\n |
wp_delete_tag | destructive | Permanently deletes a tag (WordPress terms have no trash). |
wp_delete_user | destructive | Deletes a user. |
wp_get_application_passwords | read | Get application passwords |
wp_get_auth_status | read | Get authentication status |
wp_get_category | read | Retrieves a single category by its ID. |
wp_get_comment | read | Retrieves a single comment by its ID. |
wp_get_current_user | read | Get current user |
wp_get_media | read | Retrieves a single media item by its ID. |
wp_get_page | read | Retrieves a single page by its ID, optionally including full content for editing. |
wp_get_page_revisions | read | Retrieves revisions for a specific page. |
wp_get_post | write | Get specific post |
wp_get_post_revisions | write | Retrieves the revision history for a specific post, including details about changes, dates, and authors for content management and auditing purposes. |
wp_get_site_settings | read | Get site settings |
wp_get_tag | read | Retrieves a single tag by its ID. |
wp_get_user | read | Retrieves a single user by their ID. |
wp_list_categories | read | List categories |
wp_list_comments | read | List comments (limited to 2) |
wp_list_media | read | List media files (limited to 2) |
wp_list_pages | read | List pages (limited to 2) |
wp_list_posts | read | List posts (limited to 2) |
wp_list_tags | read | List tags |
wp_list_users | read | List users (limited to 2) |
wp_performance_alerts | read | Get performance alerts and anomaly detection results. summary.overallStatus covers every alert recorded this |
wp_performance_benchmark | read | Compare current performance against industry benchmarks. |
wp_performance_export | read | Export comprehensive performance report |
wp_performance_history | read | Get historical performance data and trends |
wp_performance_optimize | read | Get optimization recommendations and insights |
wp_performance_stats | read | Get real-time performance statistics and metrics. |
wp_search_site | read | Search site content |
wp_seo_analyze_content | write | Analyze WordPress post content for SEO optimization opportunities including readability, keyword density, structure, and technical factors |
wp_seo_bulk_update_metadata | write | Update SEO metadata for multiple posts with progress tracking and error handling |
wp_seo_generate_metadata | read | Generate SEO-optimized metadata including title tags, meta descriptions, OpenGraph, and Twitter Card data |
wp_seo_generate_schema | read | Generate JSON-LD structured data schema for enhanced search results |
wp_seo_get_live_data | read | Retrieve live SEO data from WordPress including plugin-specific metadata and configurations |
wp_seo_keyword_research | read | Research keywords and get suggestions based on topic and competition analysis |
wp_seo_site_audit | read | Perform comprehensive SEO audit of the WordPress site including technical, content, and performance analysis |
wp_seo_suggest_internal_links | read | Analyze content and suggest relevant internal linking opportunities for better SEO |
wp_seo_test_integration | read | Test SEO plugin integration and detect available SEO plugins on the WordPress site |
wp_seo_track_serp | read | Track search engine result page positions for target keywords |
wp_seo_validate_schema | read | Validate JSON-LD schema markup for correctness and compliance |
wp_spam_comment | read | Marks a comment as spam. |
wp_switch_auth_method | read | Validates an alternative authentication method for a site without mutating the shared |
wp_test_auth | read | Test WordPress authentication |
wp_test_tool | read | A test tool |
wp_update_category | write | Updates an existing category. |
wp_update_comment | write | Updates an existing comment. |
wp_update_media | write | Updates the metadata of an existing media item. |
wp_update_page | write | Updates an existing page. |
wp_update_post | write | Updates an existing WordPress post with comprehensive validation and change tracking. All parameters except ID are optional - only provided fields will be updated.\n\n |
wp_update_site_settings | write | Updates one or more general settings for a WordPress site. Requires administrator role (manage_options capability). |
wp_update_tag | write | Updates an existing tag. |
wp_update_user | write | Updates an existing user. |
wp_upload_media | write | Uploads a file to the WordPress media library. |
Trust audit
BLOCKgrade F · trust 51/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 | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (8 observation(s))
- Network
- declared (10 observation(s))
- Shell
- declared (9 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
vulnerable: `exec("ls " + userInput);`,if (/eval\s*\(/g.test(content)) negative.push("Uses dangerous eval() function");if (patterns.negative.includes("Uses dangerous eval() function")) {recommendations.push("Replace eval() with safer alternatives like JSON.parse()");"id_rsa",
const DISALLOWED_HOSTNAMES = new Set(["localhost", "metadata.google.internal", "metadata.goog"]);
console.log(`📏 Token length: ${process.env.NPM_TOKEN.length} characters`);const password = "actual-password-here";
const secret = "/Users/me/private-notes.txt";
const filePath = await writeFile("creds.ts", 'const password = "supersecretpassword123";\n');const filePath = await writeFile("critical.ts", 'const password = "supersecretpassword123abc";\n');const filePath = await writeFile("crit-report.ts", 'const password = "supersecretpassword123abc";\n');wp_cache_clear, wp_delete_application_password, wp_delete_category, wp_delete_comment, wp_delete_media, wp_delete_page, wp_delete_post, wp_delete_tag, wp_delete_user
.c8rc.json
.claude-code.json
.depcheckrc
.dxtignore
.env.evaluation.example
const hash = crypto.createHash("md5").update(JSON.stringify(data)).digest("hex");pattern: /(md5|sha1|des|rc4|3des)/gi,
vulnerable: `const hash = crypto.createHash("md5");`,import type { SERPPositionData, KeywordSuggestion } from "../../../types/seo.js";const { parseVitestSummary, evaluateBatch } = require("../../scripts/run-tests-safe.cjs");import { WordPressSetup, serializeEnvValue, serializeEnvFile, buildClaudeDesktopConfig } from "../../bin/setup.js";import { WordPressStatus } from "../../bin/status.js";Gates applied: no_behavioural_pass.
5761f033e4fcfull audit observations/trust-audit/mcp-server/docdyhr__mcp-wordpress.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-13 | 5761f033e4fc | BLOCK | F | 51 | first audit |
Questions
What is the mcp-wordpress MCP server?
MCP Server to manage a Wordpress CMS system.
What tools does mcp-wordpress expose?
75 in total: 45 read-only, 21 that write, and 9 that can delete or overwrite (wp_cache_clear, wp_delete_application_password, wp_delete_category, wp_delete_comment, wp_delete_media). Every one is listed on this page with its risk.
Is mcp-wordpress safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (51/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 9 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does mcp-wordpress need?
It reads DB_PASSWORD, DEBUG_TEST_PASSWORD, ENCRYPTION_KEY, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN, JWT_SECRET, NPM_TOKEN, SEO_CACHE_KEYWORDS_TTL, SEO_MAX_KEYWORD_DENSITY, SEO_TARGET_KEYWORD_DENSITY, WORDPRESS_API_KEY and WORDPRESS_APP_PASSWORD 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 mcp-wordpress run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as mcp-wordpress at 4.1.6.
How current is this page?
The grade is for one exact copy of the source (5761f033e4fc), read on 2026-10-13. The repository is watched and re-audited when it changes.