Atlas / MCP servers / docdyhr / mcp-wordpress

mcp-wordpressBLOCK

mcp/docdyhr/mcp-wordpress

MCP Server to manage a Wordpress CMS system.

Verdict
BLOCK
Grade
F
Trust score
51 /100
Exposed tools
75 45r · 21w · 9d
Transport
stdio
License
MIT
Stars
111
01

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

Read from source at commit 5761f033e4fcOBSERVED · 2026-10-13
02

Connect

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-code
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]
claude-desktop
{
  "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}"
      }
    }
  }
}
03

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.

ToolRiskDescription
CurrentreadSite administrator
WordPressPostwriteWordPress blog post object
adminuserreadSite administrator
wp_approve_commentreadApproves a pending comment.
wp_cache_cleardestructiveClear cache for a WordPress site.
wp_cache_inforeadGet detailed cache configuration and status information.
wp_cache_statsreadGet cache statistics for a WordPress site.
wp_cache_warmreadPre-warm cache with essential WordPress data.
wp_check_versionreadCheck if a newer version of mcp-wordpress is available. Returns current version, latest version, and download URL if update is available.
wp_create_application_passwordwriteCreates a new application password for a user.
wp_create_categorywriteCreates a new category.
wp_create_commentwriteCreates a new comment on a post.
wp_create_pagewriteCreates a new page.
wp_create_postwriteCreates a new WordPress post with comprehensive validation and detailed success feedback including management links.\n\n
wp_create_tagwriteCreates a new tag.
wp_create_userwriteCreates a new user.
wp_delete_application_passworddestructiveRevokes an existing application password.
wp_delete_categorydestructivePermanently deletes a category (WordPress terms have no trash).
wp_delete_commentdestructiveDeletes a comment.
wp_delete_mediadestructiveDeletes a media item.
wp_delete_pagedestructiveDeletes a page.
wp_delete_postdestructiveDeletes a WordPress post with options for trash or permanent deletion. Includes safety confirmations and detailed feedback on the deletion action.\n\n
wp_delete_tagdestructivePermanently deletes a tag (WordPress terms have no trash).
wp_delete_userdestructiveDeletes a user.
wp_get_application_passwordsreadGet application passwords
wp_get_auth_statusreadGet authentication status
wp_get_categoryreadRetrieves a single category by its ID.
wp_get_commentreadRetrieves a single comment by its ID.
wp_get_current_userreadGet current user
wp_get_mediareadRetrieves a single media item by its ID.
wp_get_pagereadRetrieves a single page by its ID, optionally including full content for editing.
wp_get_page_revisionsreadRetrieves revisions for a specific page.
wp_get_postwriteGet specific post
wp_get_post_revisionswriteRetrieves the revision history for a specific post, including details about changes, dates, and authors for content management and auditing purposes.
wp_get_site_settingsreadGet site settings
wp_get_tagreadRetrieves a single tag by its ID.
wp_get_userreadRetrieves a single user by their ID.
wp_list_categoriesreadList categories
wp_list_commentsreadList comments (limited to 2)
wp_list_mediareadList media files (limited to 2)
wp_list_pagesreadList pages (limited to 2)
wp_list_postsreadList posts (limited to 2)
wp_list_tagsreadList tags
wp_list_usersreadList users (limited to 2)
wp_performance_alertsreadGet performance alerts and anomaly detection results. summary.overallStatus covers every alert recorded this
wp_performance_benchmarkreadCompare current performance against industry benchmarks.
wp_performance_exportreadExport comprehensive performance report
wp_performance_historyreadGet historical performance data and trends
wp_performance_optimizereadGet optimization recommendations and insights
wp_performance_statsreadGet real-time performance statistics and metrics.
wp_search_sitereadSearch site content
wp_seo_analyze_contentwriteAnalyze WordPress post content for SEO optimization opportunities including readability, keyword density, structure, and technical factors
wp_seo_bulk_update_metadatawriteUpdate SEO metadata for multiple posts with progress tracking and error handling
wp_seo_generate_metadatareadGenerate SEO-optimized metadata including title tags, meta descriptions, OpenGraph, and Twitter Card data
wp_seo_generate_schemareadGenerate JSON-LD structured data schema for enhanced search results
wp_seo_get_live_datareadRetrieve live SEO data from WordPress including plugin-specific metadata and configurations
wp_seo_keyword_researchreadResearch keywords and get suggestions based on topic and competition analysis
wp_seo_site_auditreadPerform comprehensive SEO audit of the WordPress site including technical, content, and performance analysis
wp_seo_suggest_internal_linksreadAnalyze content and suggest relevant internal linking opportunities for better SEO
wp_seo_test_integrationreadTest SEO plugin integration and detect available SEO plugins on the WordPress site
wp_seo_track_serpreadTrack search engine result page positions for target keywords
wp_seo_validate_schemareadValidate JSON-LD schema markup for correctness and compliance
wp_spam_commentreadMarks a comment as spam.
wp_switch_auth_methodreadValidates an alternative authentication method for a site without mutating the shared
wp_test_authreadTest WordPress authentication
wp_test_toolreadA test tool
wp_update_categorywriteUpdates an existing category.
wp_update_commentwriteUpdates an existing comment.
wp_update_mediawriteUpdates the metadata of an existing media item.
wp_update_pagewriteUpdates an existing page.
wp_update_postwriteUpdates 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_settingswriteUpdates one or more general settings for a WordPress site. Requires administrator role (manage_options capability).
wp_update_tagwriteUpdates an existing tag.
wp_update_userwriteUpdates an existing user.
wp_upload_mediawriteUploads a file to the WordPress media library.
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/security/SecurityReviewer.ts:165
vulnerable: `exec("ls " + userInput);`,
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/security/SecurityReviewer.ts:562
if (/eval\s*\(/g.test(content)) negative.push("Uses dangerous eval() function");
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/security/SecurityReviewer.ts:600
if (patterns.negative.includes("Uses dangerous eval() function")) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/security/SecurityReviewer.ts:601
recommendations.push("Replace eval() with safer alternatives like JSON.parse()");
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/security/AISecurityScanner.ts:656
"id_rsa",
Why it matters. touches a credential store
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/utils/validation/network.ts:15
const DISALLOWED_HOSTNAMES = new Set(["localhost", "metadata.google.internal", "metadata.goog"]);
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/test-npm-config.js:32
console.log(`📏 Token length: ${process.env.NPM_TOKEN.length} characters`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
SECURITY.md:139
const password = "actual-password-here";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/performance/PerformanceMonitor.test.js:231
const secret = "/Users/me/private-notes.txt";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/security/SecurityReviewer.test.js:91
const filePath = await writeFile("creds.ts", 'const password = "supersecretpassword123";\n');
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/security/SecurityReviewer.test.js:105
const filePath = await writeFile("critical.ts", 'const password = "supersecretpassword123abc";\n');
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/security/SecurityReviewer.test.js:298
const filePath = await writeFile("crit-report.ts", 'const password = "supersecretpassword123abc";\n');
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
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
Why it matters. 9 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.c8rc.json
.c8rc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.claude-code.json
.claude-code.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.depcheckrc
.depcheckrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.dxtignore
.dxtignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.evaluation.example
.env.evaluation.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/cache/HttpCacheWrapper.ts:287
const hash = crypto.createHash("md5").update(JSON.stringify(data)).digest("hex");
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/security/SecurityReviewer.ts:209
pattern: /(md5|sha1|des|rc4|3des)/gi,
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/security/SecurityReviewer.ts:214
vulnerable: `const hash = crypto.createHash("md5");`,
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/tools/seo/providers/SearchConsoleProvider.ts:2
import type { SERPPositionData, KeywordSuggestion } from "../../../types/seo.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/bin/run-tests-safe.test.js:6
const { parseVitestSummary, evaluateBatch } = require("../../scripts/run-tests-safe.cjs");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/bin/setup.test.js:4
import { WordPressSetup, serializeEnvValue, serializeEnvFile, buildClaudeDesktopConfig } from "../../bin/setup.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/bin/status.test.js:4
import { WordPressStatus } from "../../bin/status.js";

Gates applied: no_behavioural_pass.

Audited 2026-10-13 · audit v0.4.1 · source sha 5761f033e4fcfull audit observations/trust-audit/mcp-server/docdyhr__mcp-wordpress.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-135761f033e4fcBLOCKF51first audit
06

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.

Advertisement