A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with WordPress sites through the WordPress REST API. This server provides tools for managing all aspects of WordPress programmatically, including posts, users, comments, categories, tags, and custom endpoints.
- Create, retrieve, update, and delete WordPress posts
- Filter posts by various parameters
- Pagination support for post listings
- Retrieve user information by ID or login
- Update user details
- Delete users
- Create, retrieve, update, and delete comments
- Filter comments by post
- Pagination support for comment listings
- Manage categories and tags
- Create, retrieve, update, and delete taxonomies
- Find categories and tags by slug
- Retrieve general WordPress site information
- Support for custom REST API endpoints
- Custom HTTP methods (GET, POST, PUT, DELETE)
- Custom data and parameters
- Node.js v18 or higher
- A WordPress site with REST API enabled
- WordPress application password for authentication
- Clone this repository:
git clone [repository-url]
cd wordpress-mcp-server- Install dependencies:
npm install- Build the server:
npm run buildBefore using the server, you need to set up your WordPress site:
- Ensure your WordPress site has REST API enabled (enabled by default in WordPress 4.7+)
- Create an application password:
- Log in to your WordPress admin panel
- Go to Users → Profile
- Scroll down to "Application Passwords"
- Enter a name for the application (e.g., "MCP Server")
- Click "Add New Application Password"
- Copy the generated password (you won't be able to see it again)
Add the server to your MCP settings file (usually located at ~/AppData/Roaming/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json):
{
"mcpServers": {
"wordpress": {
"command": "node",
"args": ["path/to/wordpress-mcp-server/build/index.js"]
}
}
}Creates a new WordPress post.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordtitle(required): Post titlecontent(required): Post contentstatus(optional): Post status ('draft', 'publish', or 'private', defaults to 'draft')
Example:
{
"tool": "create_post",
"siteUrl": "https://example.com",
"username": "admin",
"password": "xxxx xxxx xxxx xxxx",
"title": "My First Post",
"content": "Hello, world!",
"status": "draft"
}Retrieves WordPress posts with pagination.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordperPage(optional): Number of posts per page (default: 10)page(optional): Page number (default: 1)customParams(optional): Additional query parameters
Example:
{
"tool": "get_posts",
"siteUrl": "https://example.com",
"username": "admin",
"password": "xxxx xxxx xxxx xxxx",
"perPage": 5,
"page": 1
}Updates an existing WordPress post.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordpostId(required): ID of the post to updatetitle(optional): New post titlecontent(optional): New post contentstatus(optional): New post status ('draft', 'publish', or 'private')
Example:
{
"tool": "update_post",
"siteUrl": "https://example.com",
"username": "admin",
"password": "xxxx xxxx xxxx xxxx",
"postId": 123,
"title": "Updated Title",
"content": "Updated content",
"status": "publish"
}Deletes a WordPress post.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordpostId(required): ID of the post to delete
Example:
{
"tool": "delete_post",
"siteUrl": "https://example.com",
"username": "admin",
"password": "xxxx xxxx xxxx xxxx",
"postId": 123
}Retrieves WordPress users.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordperPage(optional): Number of users per page (default: 10)page(optional): Page number (default: 1)
Retrieves a specific WordPress user by ID.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passworduserId(required): ID of the user to retrieve
Retrieves a WordPress user by login name.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passworduserLogin(required): Login name of the user to retrieve
Retrieves WordPress comments.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordperPage(optional): Number of comments per page (default: 10)page(optional): Page number (default: 1)postIdForComment(optional): Filter comments by post ID
Creates a new comment on a post.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordpostIdForComment(required): ID of the post to comment oncommentContent(required): Content of the commentcustomData(optional): Additional comment data
Retrieves WordPress categories.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordperPage(optional): Number of categories per page (default: 10)page(optional): Page number (default: 1)
Creates a new WordPress category.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordcategoryName(required): Name of the category to createcustomData(optional): Additional category data (description, parent, etc.)
Makes a custom request to any WordPress REST API endpoint.
Parameters:
siteUrl(required): Your WordPress site URLusername(required): WordPress usernamepassword(required): WordPress application passwordcustomEndpoint(required): API endpoint pathcustomMethod(optional): HTTP method ('GET', 'POST', 'PUT', 'DELETE', default: 'GET')customData(optional): Data for POST/PUT requestscustomParams(optional): URL parameters for GET requests
Example:
{
"tool": "custom_request",
"siteUrl": "https://example.com",
"username": "admin",
"password": "xxxx xxxx xxxx xxxx",
"customEndpoint": "wp/v2/media",
"customMethod": "GET",
"customParams": {
"per_page": 5
}
}All tools return responses in the following format:
{
"success": true,
"data": {
// WordPress API response data
},
"meta": {
// Optional metadata (pagination info, etc.)
}
}{
"success": false,
"error": "Error message here"
}- Always use HTTPS URLs for your WordPress site
- Use application passwords instead of your main WordPress password
- Keep your application passwords secure and don't share them
- Consider using WordPress roles and capabilities to limit access
- Regularly rotate application passwords
To contribute to the development:
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests (when available)
- Submit a pull request
For development mode with automatic recompilation:
npm run devThis project is licensed under the ISC License.
Contributions are welcome! Please feel free to submit a Pull Request.
