LABSCO SUMMARY
Draft by default, which is the setting that saves you.
A server that can publish to a dozen client sites should not publish on the first try, and this one defaults to draft. The image pipeline is the genuine time-saver — prompt derived from the article, SEO-shaped filename, uploaded to the right site's media library and set as featured, with none of those steps left as manual follow-up. Budget for it: each image is a DALL-E 3 call against your own OpenAI account. The environment-variable collision on the OpenAI key is the most-reported setup problem and the README says exactly how to avoid it.
What it is
An MCP server for managing multiple WordPress sites through the REST API. Each site is declared once in a YAML file with its application password, and posts can then be created on any of them — optionally with a featured image generated from the article's own title and content and uploaded to that site's media library.
What you get
- Multi-site control: every configured site addressable by id from the same connection, so a post can go to one blog or several in sequence
- Article creation with full control over categories, tags and post status
- Featured images generated with DALL-E 3 — the prompt is derived from the title and content, the filename is SEO-shaped, and the image is uploaded and set as the featured image automatically
- Reading a site's existing categories and tags before publishing into them
- A connection test per site, which is how you find a bad application password before a publish fails
- Full Unicode handling, including right-to-left languages such as Hebrew and Arabic
Requirements
For each WordPress site: the REST API enabled (default since WordPress 5.0), a user with edit_posts, upload_files, manage_categories and manage_post_tags, and an Application Password generated from Users → Profile. Sites go in config/wordpress_sites.yaml with id, name, url, username and that password. Image generation additionally needs OPENAI_API_KEY — and if one is already set in your system environment it can override the .env value, so the README recommends putting it in the client config's env block instead. Python 3.8 or higher; clone, pip install -r requirements.txt, and launch python -m src.server with the repo as the working directory. Image cost runs about $0.04 per standard image and about $0.08 at HD. default_post_status is draft. MIT licensed.
Setup effort
Build from source — git clone https://github.com/seomentor/wpmcp.git
USE CASES
Publishing across a network of blogs
Write once and post to several configured sites in sequence, each with its own categories and tags.
Getting an article and its image in one step
Create the post and let the featured image be generated from its own content, uploaded and attached automatically.
Filing a post into the right taxonomy
Read the site's existing categories and tags first, then publish into them rather than creating near-duplicates.
Publishing in Hebrew or Arabic
Create the post with full Unicode support rather than fighting encoding in the editor.
Finding a broken connection early
Test access to a site before a publish attempt, so a rotated application password surfaces as a test failure.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.8 or later
- WordPress sites with the REST API enabled, and a user with an Application Password
- OpenAI API key — only for featured-image generation
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/seomentor/wpmcp.git
cd wpmcp
pip install -r requirements.txtEdit config/wordpress_sites.yaml: for each site set id, name, url, username and an Application Password (generated in WordPress under Users → Profile → Application Passwords)
Add the Claude Desktop block to Claude Desktop's config file (Windows: %APPDATA%\Claude\claude_desktop_config.json, Mac: ~/Library/Application Support/Claude/claude_desktop_config.json) and restart Claude Desktop
MCP Clients
Claude Desktop
{
"mcpServers": {
"wordpress": {
"command": "python",
"args": [
"-m",
"src.server"
],
"cwd": "<YOUR_PATH_TO_WORDPRESS_MCP_SERVER>",
"env": {
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}Set cwd to the full path of the wpmcp folder you cloned (the README's example path says wordpress-mcp-server, but the clone creates wpmcp). OPENAI_API_KEY is only needed for featured-image generation; the README recommends putting it here rather than in .env, because a key already set in your system environment overrides the .env one.