WordPress MCP Server
Manage a self-hosted WordPress site through MCP tools for posts, users, media, categories, tags, authentication, and site settings.
Posts: list, retrieve, create, update, and delete posts; filter by status, dates, authors, categories, and tags; schedule future posts; trash or permanently delete.
Users and auth: list users (admin), get current user profile and capabilities, and validate WordPress application-password credentials.
Media: list and filter media files, update metadata such as title/slug/author, and delete media.
Categories: list/search/filter categories, create/update/delete categories with hierarchy support.
Tags: list/search/filter tags, create/update/delete tags.
Site: retrieve WordPress site settings (admin required).
Run as a FastMCP stdio server or containerized Streamable HTTP service with health and readiness probes.
Provides tools for managing WordPress sites via the REST API, including posts, users, media, categories, tags, and site settings.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WordPress MCP Server list my published posts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WordPress MCP Server
A Model Context Protocol (MCP) server for managing WordPress sites via the REST API. This server provides 20 tools for managing posts, users, media, categories, tags, and site settings.
Features
Posts Management (5 tools)
list_posts: List posts with filtering options (status, date, author, categories, tags)
retrieve_post: Get detailed information about a specific post
create_post: Create new posts with full metadata support
update_post: Update existing posts with selective field updates
delete_post: Delete posts (with trash/permanent delete options)
Users Management (3 tools)
list_users: List site users (admin permission required)
get_me: Get current user information and capabilities
validate_credential: Test WordPress authentication
Media Management (3 tools)
list_media: List media files with filtering options
update_media: Update media metadata (title, slug, author)
delete_media: Delete media files
Categories Management (4 tools)
list_categories: List categories with search and filtering
create_category: Create new categories with hierarchy support
update_category: Update existing category information
delete_category: Remove categories
Tags Management (4 tools)
list_tags: List tags with search and filtering
create_tag: Create new tags
update_tag: Update existing tag information
delete_tag: Remove tags
Site Management (1 tool)
get_site_settings: Get WordPress site settings (admin required)
Related MCP server: WordPressMCP Server
Prerequisites
WordPress Site Requirements
WordPress.com sites are NOT supported - only self-hosted WordPress sites (TODO: verify this)
Permalinks must be configured - go to Settings > Permalinks and choose any structure other than "Plain"
Application Password required - regular WordPress passwords won't work
Setting up Application Password
Go to your WordPress admin dashboard
Navigate to Users > Your Profile
Scroll to "Application Passwords" section
Click "Add New Application Password"
Give it a name (e.g., "MCP Server") and click "Add New Application Password"
Copy the generated password - you'll need this for the
WORDPRESS_PASSWORDenvironment variable
Installation
Clone or download this project
Install dependencies using uv:
uv syncEnvironment Variables
WORDPRESS_SITE: The full URL to your WordPress site (with https:// or http://)WORDPRESS_USERNAME: Your WordPress username (not email)WORDPRESS_PASSWORD: The application password you created (NOT your regular WordPress password)
Usage
Running the MCP Server
uv run python main.pyThis runs FastMCP over stdio.
Running the container
The container uses mmmcp to expose the
same tools over Streamable HTTP at http://localhost:8099/.
Export the three WordPress environment variables above, then run:
docker build -t wordpress-mcp .
docker run --rm -p 127.0.0.1:8099:8099 \
-e WORDPRESS_SITE -e WORDPRESS_USERNAME -e WORDPRESS_PASSWORD \
wordpress-mcpPython dependencies are installed from uv.lock during the image build;
starting the container does not download dependencies. The container runs as
UID/GID 1000:1000. mmmcp stores its SQLite event database in
/var/lib/mmmcp, which must remain writable. Mount a named volume there if
event storage should persist across container replacements.
/healthz checks liveness and /readyz checks the MCP catalog and event store.
These probes do not validate WordPress credentials; use validate_credential
for that. Existing MCP sessions reconnect when the container is replaced.
Development
Run the unit test and, optionally, the container integration suite:
uv sync --frozen
uv run --frozen python -m unittest discover -s tests -v
docker build -t wordpress-mcp:test .
WORDPRESS_TEST_IMAGE=wordpress-mcp:test uv run --frozen python -m unittest discover -s tests -vContainer tests use an isolated Docker network and a mock WordPress API. They do not need real credentials or access to a WordPress site. PR CI runs them on both amd64 and arm64.
The project structure:
wordpress-mcp/
├── src/
│ ├── config.py # Configuration and WordPress client
│ ├── server.py # FastMCP server setup
│ └── tools/ # Individual tool implementations
│ ├── posts.py # Posts management
│ ├── users.py # Users management
│ ├── media.py # Media management
│ ├── categories.py # Categories management
│ ├── tags.py # Tags management
│ └── site.py # Site settings
├── main.py # Server entry point
└── pyproject.toml # Dependencies and configurationAvailable Tools
20 toolscreate_categoryB
Create a new category in WordPress site.
Inputs: category_name (required), slug, parent_id, description. Returns: object
create_postA
Create a post in WordPress site.
Use HTML tags to format the content, for example, Bold Text for bold text. By default, the post will be created as a draft. Do NOT set status to publish unless it is confirmed by the user.
Date must be ISO 8601 format. Future dates will schedule the post.
Inputs: date, slug, tags, title, +11 more. Returns: object
create_tagB
Create a new tag in WordPress site.
Inputs: name (required), slug, description. Returns: object
delete_categoryA
Delete a category in WordPress site.
Posts previously assigned to this category will be moved to 'Uncategorized'.
Inputs: category_id (required). Returns: object
delete_mediaB
Delete a media file in WordPress site.
Inputs: media_id (required). Returns: object
delete_postA
Delete a post in WordPress site.
If force=false, post is moved to trash. If force=true, post is permanently deleted.
Inputs: post_id (required), force. Returns: object
delete_tagA
Delete a tag in WordPress site.
Posts previously assigned to this tag will no longer have it.
Inputs: tag_id (required). Returns: object
get_meA
Get all metadata of the current user in WordPress site, including roles and capabilities.
Failed to get user info indicates authentication is not working correctly.
Inputs: context. Returns: object
get_site_settingsA
Get the settings of the WordPress site. Only admin users have permission to do this.
Returns basic site information and settings that are publicly available or accessible to authenticated users with appropriate permissions.
Inputs: no named parameters. Returns: object
list_categoriesC
List available categories in WordPress site.
Inputs: page, slug, order, context, +4 more. Returns: object
list_mediaB
List media files in WordPress site and get basic information of each media file.
Date parameters must be valid ISO 8601 date strings (YYYY-MM-DDTHH:MM:SS).
Inputs: page, order, context, per_page, +7 more. Returns: object
list_postsA
List posts in WordPress site and get basic information of each post.
Date parameters must be valid ISO 8601 date strings (YYYY-MM-DDTHH:MM:SS).
Inputs: page, tags, order, context, +9 more. Returns: object
list_tagsC
List available tags in WordPress site.
Inputs: page, slug, order, context, +3 more. Returns: object
list_usersA
List users in WordPress site. Only admin users have permission to do this.
Inputs: context, has_published_posts. Returns: object
retrieve_postB
Retrieve all metadata of a post in WordPress site.
Inputs: post_id (required), context, password. Returns: object
update_categoryA
Update an existing category in WordPress site. Only provided fields will be updated.
At least one field must be provided to update.
Inputs: category_id (required), name, slug, parent_id, +1 more. Returns: object
update_mediaA
Update the metadata of a media file in WordPress site.
At least one field must be provided to update.
Inputs: media_id (required), slug, title, author_id. Returns: object
update_postA
Update a post in WordPress site. Only provided fields will be updated.
Use HTML tags for content formatting. Date must be ISO 8601 format.
Inputs: post_id (required), date, slug, tags, +12 more. Returns: object
update_tagA
Update an existing tag in WordPress site. Only provided fields will be updated.
At least one field must be provided to update.
Inputs: tag_id (required), name, slug, description. Returns: object
validate_credentialA
Validate WordPress credentials by attempting to get current user profile. This is useful for testing authentication before performing other operations.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Each tool targets a distinct resource (post, user, media, category, tag, settings) with a unique action. There is no ambiguity—tools clearly differ by resource and operation.
All tool names follow a consistent verb_noun snake_case pattern (e.g., list_posts, create_category), making them predictable and easy for an agent to understand.
With 20 tools, the server covers essential CRUD for posts, categories, tags, and media, plus user info and settings. The scope is appropriate for a WordPress management server without being bloated.
Posts, categories, and tags have full CRUD, but media lacks a create (upload) tool, and user management is limited to listing and current user info—missing user creation, update, and deletion.
Maintenance
Related MCP Connectors
Manage your WordPress site from your AI assistant: posts, pages, media, comments and WooCommerce.
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
Manage a WordPress site from your AI assistant: read, search, propose edits, Search Console data.
Run all of WordPress from Claude, ChatGPT or Cursor: SEO, security, your WooCommerce shop and Elementor pages, on up to 10 websites in one connector. Start free. SEO: titles, descriptions and focus keywords for every page, post and product. Security & updates: core, plugin and theme updates with a live test, site health and HTTPS checks, users and roles. WooCommerce shop: products, prices, orders, coupons and customers. Elementor and many more page builders: texts, links and images. Blog posts, pages, media, comments and menus. 10 websites in one connector: all your sites in the same chat. Deploy (Agency): build a site locally and push it to your own server. Just say it: "Write SEO titles for every product." "Install all updates and check that the site still works." "Show today's orders and create a weekend coupon." You choose what your AI may change, with one switch. Install the free AlphaBridge MCP plugin from WordPress.org, connect and approve on your own site. No account, no key to copy.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables comprehensive management of WordPress sites and WooCommerce stores through REST APIs, including content management, e-commerce operations, user administration, and store analytics.4-
- AlicenseNot gradedqualityFmaintenanceEnables interaction with WordPress sites through the REST API, supporting content management for posts, pages, users, plugins, and custom post types with Application Password authentication.1,950 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables management of WordPress posts and pages including creating, updating, deleting, duplicating, scheduling, and bulk editing content through the WordPress REST API.MIT
- AlicenseNot gradedqualityBmaintenanceEnables interaction with WordPress sites through the WordPress REST API via natural language, supporting single and multi-site management, content and taxonomy operations, media uploads, and more.154 npm99GPL 3.0