WordPress Self-Hosted MCP Server
A small FastMCP server that lets an AI client create drafts, publish/update posts, upload media, set featured images, and manage categories/tags on a self-hosted WordPress.org site via the REST API + Application Passwords.
README
WordPress Self-Hosted MCP Server
A small FastMCP server that lets an AI client create drafts, publish/update posts, upload media, set featured images, and manage categories/tags on a self-hosted WordPress.org site via the REST API + Application Passwords.
Runs over streamable-HTTP (for Docker / Horizon / remote hosting) or stdio.
Tools
| Tool | What it does |
|---|---|
whoami |
Verify credentials; returns the authed WP user. Call this first. |
create_post |
Create a post as draft or publish (title, HTML content, slug, excerpt, categories, tags, featured image). |
update_post |
Update any field of a post by ID (e.g. flip a draft to publish). |
get_post |
Fetch a post's key fields by ID. |
list_posts |
List posts, filter by status/search. |
delete_post |
Trash or permanently delete a post. |
upload_media_from_url |
Upload an image from a URL to the media library; returns the media ID for featured_media. |
list_categories / list_tags |
Resolve names to IDs. |
create_category |
Create a category. |
1. Prerequisites
- WordPress 5.6+ on HTTPS, REST API enabled (visit
https://your-site.com/wp-json/— you should see JSON). - An admin/editor/author user.
- Some security plugins/hosts strip the HTTP
Authorizationheader or block the REST API — allow Basic Auth / Application Passwords ifwhoamireturns 401/403.
2. Create an Application Password
In wp-admin: Users → Profile → Application Passwords → enter a name (e.g. mcp) → Add New. Copy the generated password (looks like xxxx xxxx xxxx xxxx xxxx xxxx). This is NOT your login password.
3. Configure
Copy .env.example to .env and fill in:
WP_BASE_URL=https://your-site.com # no trailing slash
WP_USERNAME=your_wp_username # login name, not email
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
4. Run with Docker
# build + run via compose (reads .env)
docker compose up -d --build
# OR plain docker
docker build -t wp-selfhosted-mcp .
docker run -d --name wp-mcp -p 8000:8000 --env-file .env wp-selfhosted-mcp
The MCP endpoint is served at: http://<host>:8000/mcp/
Quick health check (container logs should show "Uvicorn running"):
docker logs wp-mcp
5. Run locally without Docker
pip install -r requirements.txt
# HTTP (default):
python server.py
# or stdio (for a desktop client that launches the process):
MCP_TRANSPORT=stdio python server.py
6. Deploy on a FastMCP host (e.g. Horizon)
This is a standard FastMCP app exposing mcp in server.py.
- Entrypoint / start command:
python server.py - The app listens on
$PORT(defaults to 8000) and$HOST0.0.0.0. - Required env vars:
WP_BASE_URL,WP_USERNAME,WP_APP_PASSWORD. - Keep
MCP_TRANSPORT=http. - Public MCP URL will be
https://<your-deployment-domain>/mcp/.
FASTMCP_CHECK_FOR_UPDATES=off is set in code so startup never blocks on an
outbound PyPI call in locked-down networks.
7. Connect it to Claude
Add it as a custom/remote MCP connector pointing at your deployed URL:
https://<your-deployment-domain>/mcp/
In the Claude desktop/Cowork connector settings, add a custom MCP server with
that URL. Once connected, tools like create_post become available and you can
say "publish the WooCommerce post as a draft" and it will run create_post
with status="draft".
Security notes
- Never commit
.env; it's gitignored/dockerignored. - The Application Password can be revoked anytime from the same wp-admin screen.
- Prefer an Editor/Author account over a full Admin if you only need publishing.
- Always serve WordPress over HTTPS so the Basic Auth header isn't sent in clear text.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.