WordPress MCP server providing tools for Claude to manage WordPress sites including posts, media, comments, users, plugins, themes, and settings with granular permission controls and security features.
Server has 24 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (posts_list, media_upload, etc.). Descriptions average ~120 chars, meeting baseline. However, 3 tools (terms_list, users_list, themes_list) lack visible descriptions entirely. Parameter descriptions are present but sparse, many lack format/constraint guidance. Output schemas are not documented. Error handling is basic (validation only, no recovery guidance). Security model is sound (capability checks, sanitization via wp_kses_post), but no audit logging visible. Composition is good, tools are single-responsibility and chainable via IDs.
List comments filtered by status (approve, hold, spam, trash). Returns author name (PII), email is omitted unless caller has moderate_comments.
Change moderation status of a comment: approve, hold (unapprove), spam, trash, or untrash.
Permanently delete an attachment from the media library along with its files. Requires "Allow destructive operations" to be enabled in plugin settings.
List media library attachments with id, title, mime type, URL and thumbnail.
Download an image or file from a public URL and add it to the media library. Returns the new attachment ID and URL. Private/internal hosts are blocked.
List installed plugins. Returns plugin file, name, version, active state, network active state and whether an update is available.
Four tools lack visible descriptions (terms_list, users_list, users_create, users_update, themes_list, themes_activate). This violates pattern:tool-description and forces LLMs to guess when/why to call these tools.
Output schemas are not documented. Tools return structured data (JSON via wp_json_encode), but the response format is not declared in tool definitions. LLMs cannot plan downstream calls or extract fields without knowing what fields exist.
Parameter descriptions lack format/constraint guidance. E.g., 'date' in posts_create says 'GMT datetime, ISO-8601' but no example or regex. 'slug' has no length/character constraints. LLMs cannot validate inputs without explicit format hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Activate or deactivate a plugin by its plugin file (e.g. "akismet/akismet.php"). Refuses to deactivate Sayed WP Conductor itself.
Create a new post (or page / custom post type). Returns the new ID and edit/view URLs. HTML in content is allowed but sanitised through wp_kses_post.
Move a post to trash. Set permanent=true to delete forever (requires "Allow destructive operations" to be enabled in plugin settings).
Fetch a single post by ID. Returns full content (cleaned of shortcodes). Only published posts are accessible unless caller has edit_posts capability.
List published posts. Returns id, title, excerpt, date, link, and author. Supports paging and post type.
Full-text search across published posts and pages. Returns the top matches with id, title, excerpt and link.
Update an existing post or page. Only supplied fields are changed. Caller must have edit_post capability for the target.
Read whitelisted WordPress site settings (general, reading, discussion, permalinks). Pass specific keys or omit to get all readable settings.
Update one or more whitelisted WordPress options. Sensitive options (URLs, admin email, permalinks) only work with destructive operations enabled.
Return a technical health snapshot: WP/PHP/MySQL versions, debug flags, multisite status, theme, active plugin count, disk free, memory limit, available updates.
Return basic information about this WordPress site: title, tagline, URL, language, and timezone.
Create a new term (category, tag, etc.) in the given taxonomy.
Error handling is validation-only. No recovery guidance. E.g., if posts_get fails with 'Post not found', the LLM has no hint to try posts_search. Per pattern:recovery-guide, errors should suggest next steps.
No audit logging visible in code. Tools execute capability checks but do not log who called what, when, or with what parameters. Per pattern:audit-trail, agent-initiated actions must be traceable for compliance.