mcp-wordpress
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MODE | No | Operational mode: read-only, safe, or full | safe |
| WP_URL | Yes | Base URL of your WordPress site | |
| WP_USER | Yes | WordPress username | |
| TOOLSETS | No | Comma-separated list of tool sets: posts,pages,media,taxonomies,search,seo,bulk,system | |
| LOG_LEVEL | No | Log level: debug, info, warn, error | info |
| TIMEOUT_MS | No | Per-request timeout | 30000 |
| SEO_PROVIDER | No | SEO provider: auto, bridge, yoast, rankmath, null | auto |
| AUDIT_LOG_PATH | No | Where write ops are logged | ~/.local/state/mcp-wordpress/audit.log |
| RATE_LIMIT_RPS | No | Requests per second cap | 10 |
| WP_APP_PASSWORD | Yes | Application Password (24 chars, with or without spaces) | |
| CACHE_TTL_SECONDS | No | In-memory cache TTL | 300 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| wp_health_checkA | Verify connectivity, authentication, and capabilities of the configured WordPress site. Returns reachability, REST API namespaces, and whether the MCP Bridge companion plugin is installed. |
| wp_get_site_infoA | Read site-level configuration: title, tagline, URL, language, timezone, date/time formats, posts-per-page, sitemap URL, and admin email (if accessible). Combines /wp-json/ root with /wp-json/wp/v2/settings (admin-only). Sitemap URL points to the native /wp-sitemap.xml (WP 5.5+). |
| wp_detect_page_builderA | Detect whether Elementor, Divi, Beaver Builder, or WPBakery (visual page builders) are active. These store content outside of post_content, which limits what the MCP can edit. Requires the mcp-wordpress-bridge companion plugin to enumerate plugins. |
| wp_update_site_settingsA | Update site-wide settings (title, tagline, URL, language, timezone, default category, posts_per_page, etc.). Requires manage_options capability. Treats this as a publish-tier change because it affects every visitor to the site. |
| wp_posts_listA | List blog posts with filters: status, search, author, categories, tags, date range, ordering. Returns normalized post summaries (id, title, excerpt, slug, status, dates, author, taxonomies). Use wp_posts_get to fetch full content. |
| wp_posts_getA | Fetch a single blog post by ID. Returns the normalized post with full content (rendered HTML). Use context=edit (default) to include raw fields when available; context=view for the public-facing rendered version only. |
| wp_posts_createA | Create a new blog post. Default status is "draft" (safe). Use status="publish" to publish immediately (requires publish tier), or status="future" with |
| wp_posts_updateA | Partially update an existing post by id. Only fields provided are changed. Status transitions to publish/future/private require the publish tier. |
| wp_posts_publishA | Publish an existing post by id (sets status to "publish"). Shortcut for wp_posts_update with status="publish". Requires publish tier. |
| wp_posts_scheduleA | Schedule a post for future publication by setting status="future" and date. The date must be in the future. Requires publish tier. |
| wp_posts_deleteA | Delete a post. Default sends it to the trash (recoverable). Pass force=true with confirm="DELETE_PERMANENTLY_" to permanently delete (requires MODE=full). |
| wp_posts_get_revisionsA | List revisions of a post (autosaves + manual revisions). Returns each revision with id, parent post id, author, dates, and rendered title/content/excerpt. Read-only. |
| wp_posts_get_revisionA | Fetch a single revision of a post by id. Use wp_posts_get_revisions to list revisions, then this to read a specific one's content for diffing or restoration. |
| wp_posts_restore_revisionA | Restore a previous revision of a post. Reads the revision content + title + excerpt, then writes them back to the parent post. The previous state of the parent becomes a new revision automatically. |
| wp_pages_listA | List pages with filters. Pages support a hierarchy via parent (use parent=N to list direct children of page N, parent=0 for top-level). Default orders by menu_order ascending — the typical navigation order. |
| wp_pages_getA | Fetch a single page by ID with full content. Use context=edit (default) for raw fields, context=view for the public rendered version only. |
| wp_pages_createA | Create a new page. Default status="draft" (safe). Supports hierarchy via parent (page id) and ordering via menu_order. Publish/future/private require publish tier. |
| wp_pages_updateA | Partially update an existing page by id. Only provided fields are changed. Status transitions to publish/future/private require the publish tier. Use parent to re-parent the page in the hierarchy. |
| wp_pages_deleteA | Delete a page. Default sends it to the trash (recoverable). Pass force=true with confirm="DELETE_PERMANENTLY_" to permanently delete (requires MODE=full). Deleting a parent page with children: WP behavior is to orphan children (their parent becomes 0); the MCP does not auto-cascade. |
| wp_pages_get_revisionsA | List revisions/autosaves of a page. |
| wp_pages_get_revisionC | Fetch a single revision of a page by id. |
| wp_pages_restore_revisionA | Restore a previous revision of a page (writes revision title/content/excerpt back to the parent page). |
| wp_media_listA | List media library items with filters. Filter by media_type (image/video/audio/file), exact mime_type (e.g. "image/png"), search text, date range, or parent post. Returns normalized media including source_url and thumbnails. |
| wp_media_uploadA | Upload a file to the WordPress media library. Provide EITHER |
| wp_media_set_alt_textA | Update accessibility and descriptive metadata of a media item: alt_text (required), caption and description (optional). Useful for bulk SEO improvements on existing media. Empty alt_text is allowed (explicitly clearing). |
| wp_media_deleteA | Delete a media item. Default sends to trash (recoverable). Pass force=true with confirm="DELETE_PERMANENTLY_" to permanently delete (requires MODE=full). Note: WP's native UI offers no trash recovery for media by default — many sites have ATTACHMENT_DEFAULT_TRASH disabled. Verify your site's behavior before relying on the trash. |
| wp_media_getA | Fetch a single media item by id with all metadata: dimensions, file size, thumbnails, alt text, caption, attached post. |
| wp_media_updateA | Generic partial update of media item fields: title, alt_text, caption, description, attached post, slug, status. Use wp_media_set_alt_text for the focused alt+caption+description tool when that's all you need. |
| wp_taxonomies_list_categoriesA | List blog categories with filters: search, parent (for hierarchical children), hide_empty (categories with no posts), ordering. Returns terms with post counts. |
| wp_taxonomies_get_categoryB | Fetch a single category by id. |
| wp_taxonomies_create_categoryA | Create a new blog category. Supports hierarchy via parent (category id). The name is required; slug auto-generated from name if omitted. |
| wp_taxonomies_update_categoryA | Update a category. Can change name, slug, description, or re-parent. |
| wp_taxonomies_delete_categoryA | Delete a category (WP REST has no trash for terms — always permanent). Required: confirm="DELETE_CATEGORY_". Requires MODE=full. Posts in this category are NOT deleted; they lose the category assignment. |
| wp_taxonomies_list_tagsA | List blog tags. Tags are flat (no hierarchy). Returns terms with post counts. Filter by search text or hide tags with zero posts. |
| wp_taxonomies_get_tagA | Fetch a single tag by id. |
| wp_taxonomies_create_tagA | Create a new blog tag. Tags are flat (no parent). The name is required; slug auto-generated from name if omitted. |
| wp_taxonomies_update_tagA | Update a tag. Can change name, slug, or description. |
| wp_taxonomies_delete_tagA | Delete a tag (always permanent — no trash). Required: confirm="DELETE_TAG_". Requires MODE=full. |
| wp_taxonomies_assign_to_postA | Replace the categories and/or tags of a post. The arrays REPLACE existing taxonomies (use wp_posts_get first if you want to preserve existing terms and add to them). |
| wp_search_postsA | Full-text search across posts, pages, custom post types, and terms via the WP /wp/v2/search endpoint. Returns a lightweight result shape (id, title, url, type, subtype). Filter by type=post (default search target) or type=term (taxonomies). For richer content fetch the hit by id via wp_posts_get / wp_pages_get. |
| wp_seo_detect_providerA | Detect which SEO provider is active for this WordPress site (bridge / yoast / rankmath / null) and report its capabilities. Use this before calling wp_seo_set_meta to know what fields will actually be persisted and rendered. |
| wp_seo_get_metaA | Read the current SEO meta for a post (title, description, OG, Twitter, canonical, robots, JSON-LD, focus_keyword). The meta is read from whichever SEO provider is active — call wp_seo_detect_provider first to know which one. |
| wp_seo_set_metaA | Write SEO meta for a post via the active provider. Pass any subset of: title, description, og_title, og_description, og_image (URL), og_type, twitter_card, canonical (URL), robots ({noindex,nofollow,noarchive,nosnippet,noimageindex}), json_ld_article (object), focus_keyword. Fields not supported by the active provider are silently ignored — call wp_seo_detect_provider to know which features apply. |
| wp_seo_analyze_postA | Run SEO/content analysis on a post: readability (Flesch-Kincaid in ES/EN/PT), keyword density, headings hierarchy lint, content length stats. Optionally pass focus_keyword to get presence stats (in title, first paragraph, headings) and density of that exact term. |
| wp_seo_suggest_internal_linksA | Suggest internal links: given a keyword or a post_id, returns a ranked list of related published posts to link to. Ranking weights: title matches (3x) > excerpt matches (1x) + recency boost. The source post is excluded when post_id is provided. |
| wp_bulk_find_replaceA | Find and replace a literal substring across post content. Requires MODE=full. Dry-run by default (returns count + sample of changes). To apply, set dry_run=false and provide the confirm token returned by the dry-run. Operates on rendered post_content only; does not touch titles, excerpts, or meta. |
| wp_bulk_update_seoA | Apply the same SEO meta to many posts at once. Requires MODE=full. Dry-run by default (returns count + sample). To apply, set dry_run=false with the confirm token from dry-run. Writes via the active SEO provider — fields unsupported by the provider are silently dropped. |
| wp_comments_listA | List comments with filters: post, parent, author, status (approved/hold/spam/trash/any), type, search, ordering. Hold status = pending moderation. |
| wp_comments_getA | Fetch a single comment by id, including author email (edit context). |
| wp_comments_createA | Create a comment (or reply via parent). When author is omitted, author_name + author_email are required. |
| wp_comments_updateA | Update a comment. Moderation actions: status=approved (publish), hold (pending), spam, trash. Can also edit content and author fields. |
| wp_comments_deleteA | Delete a comment. Default to trash (recoverable). force=true with confirm="DELETE_PERMANENTLY_" permanently deletes (requires MODE=full). |
| wp_users_listA | List users. Filter by search text, roles (comma-separated array), who=authors (only users who have published posts). Context=edit returns email + locale + capabilities (requires manage_options). |
| wp_users_getA | Fetch a single user by id. Edit context returns email, locale, capabilities (requires manage_options). |
| wp_users_get_currentA | Return the user associated with the Application Password used to authenticate. Useful for "whoami" checks and discovering current role/capabilities. |
| wp_users_createA | Create a new WordPress user. Required: username, email, password. Optional: name, first_name, last_name, url, description, roles. Roles default to subscriber. |
| wp_users_updateA | Partially update a user by id. Can change profile fields, password, or roles. Self-update permitted; updating other users requires elevated capabilities. |
| wp_users_deleteA | Delete a user (WP REST has no trash for users — always permanent). Required: id, reassign (user id to inherit deleted user's content), confirm="DELETE_USER_". Requires MODE=full. |
| wp_get_post_typesA | List all post types registered on this site, including built-in (post, page) and custom (WooCommerce products, ACF CPTs, etc.). Returns rest_base, hierarchy, supported features, taxonomies. Use this before wp_cpt_* tools. |
| wp_get_taxonomiesA | List all taxonomies registered on this site, including custom (e.g., product_cat for WooCommerce). Optional type filter to list only taxonomies associated with a given post type. |
| wp_get_post_statusesA | List all available post statuses (built-in: publish/draft/pending/private/future and any custom statuses). |
| wp_get_site_capabilitiesA | High-level summary of what this WP install supports: list of post types (slugs only), taxonomies (slugs only), REST API namespaces, whether the mcp-wordpress-bridge plugin is installed. Useful as a single "what can I do here?" probe. |
| wp_cpt_listA | List items of any registered Custom Post Type. The post_type parameter must match the rest_base value returned by wp_get_post_types (e.g., "product" for WooCommerce, "event" for The Events Calendar). For built-in posts/pages, prefer wp_posts_list / wp_pages_list. |
| wp_cpt_getA | Fetch a single item of a Custom Post Type by id. post_type must match rest_base from wp_get_post_types. |
| wp_cpt_createA | Create a new item of any Custom Post Type. Required: post_type, title. Defaults to draft status. Pass meta object to set custom fields (subject to register_post_meta + show_in_rest registration on the WP side). |
| wp_cpt_updateB | Partially update an item of any CPT. Only fields provided are changed. |
| wp_cpt_deleteA | Delete an item of any CPT. Default to trash. force=true with confirm="DELETE_PERMANENTLY_" for hard delete (requires MODE=full). |
| wp_blocks_listB | List reusable Gutenberg blocks (post type wp_block). These are user-created reusable block compositions, used to insert the same content across multiple posts/pages. |
| wp_blocks_getA | Fetch a single reusable block by id with full content (Gutenberg block markup). |
| wp_blocks_createA | Create a new reusable block. Content should be Gutenberg block markup (e.g., text). Status defaults to publish (reusable blocks are typically immediately available for embedding). |
| wp_blocks_updateA | Partially update a reusable block. NOTE: editing a reusable block updates its content in every post/page that uses it. |
| wp_blocks_deleteA | Delete a reusable block. Default trash. force=true with confirm="DELETE_PERMANENTLY_" hard-deletes (MODE=full). WARNING: posts/pages referencing this block will show an empty block placeholder. |
| wp_batchA | Execute up to 25 WP REST requests in a single round-trip via /wp/v2/batch/v1. Use for performance when applying many independent writes. validation="require-all-validate" (default) rejects the batch if any request fails validation; "normal" runs everything best-effort. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/iamsamuelfraga/mcp-wordpress'
If you have feedback or need assistance with the MCP directory API, please join our Discord server