WordPress MCP Server
Allows creating, updating WordPress posts, uploading images, and setting featured images via WordPress REST API.
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 ServerCreate a draft post titled 'Hello' with content 'Testing'."
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 Node.js MCP server that exposes WordPress operations as tools for Claude.
What this does
Full CRUD for WordPress posts, categories, and tags
Uploads images to the WordPress media library, with optional AI image generation
SEO/AEO-optimized post creation (schema markup, FAQ blocks, internal linking, keyword checks)
Related MCP server: ItchWPMCP
Setup
Install dependencies locally if you want to run outside Docker:
npm installCopy the example environment file and configure your credentials:
cp .env.example .envFill in
.env:
WP_URL: your self-hosted WordPress base URL, e.g.https://example.comWP_USERNAME: WordPress usernameWP_APP_PASSWORD: WordPress application passwordMCP_BEARER_TOKEN: a random secret (openssl rand -hex 32) that Claude must present to use this serverPORT: local port for the MCP server (default9809)
Start the server locally:
npm startUsing Docker
Build and run with Docker Compose:
docker compose up --buildThis uses the .env file to provide credentials into the container.
If you want to run only the Docker image:
docker build -t wordpress-mcp .
docker run --env-file .env -p 9809:9809 wordpress-mcpTools
The server speaks MCP over JSON-RPC at a single endpoint: POST /.
Posts (CRUD)
get_posts— list/search posts (per_page,page,status,search)get_post— full content of one post byidcreate_post— create a post (title,content,status,excerpt,categories,tags,featured_media)update_post— edit an existing post bypost_id; only the fields you pass are changed.categories/tagsreplace the post's current set (not additive). Setstatus: "draft"or"private"to unpublish.delete_post— delete a post bypost_id; moves to Trash by default, passforce: trueto permanently delete
Categories (CRUD)
get_categories— list categories (id,name,slug,count), optionally filtered bysearchget_category— details of one category bycategory_idcreate_category— create a category (name,description,slug,parent)update_category— edit a category bycategory_iddelete_category— permanently delete a category bycategory_id(categories don't support Trash)
Tags (CRUD)
get_tags— list tags (id,name,slug,count), optionally filtered bysearchget_tag— details of one tag bytag_idcreate_tag— create a tag (name,description,slug)update_tag— edit a tag bytag_iddelete_tag— permanently delete a tag bytag_id(tags don't support Trash)
Media & specialized post creation
upload_image— upload an image to the media library (image_urlorimage_base64,filename,mime_type)create_post_with_image— upload a featured image and create the post in one callgenerate_image/generate_image_for_post— AI image generation (Pollinations.ai / Google Imagen 3) uploaded straight to the media library, optionally bundled into a new postcreate_post_with_ai_images— auto-generates and embeds one AI image per H2 sectioncreate_seo_post/create_seo_post_with_ai_images/create_seo_post_with_canva— SEO/AEO-optimized post creation (TOC, FAQ schema, Article schema, keyword checks) with different image sourcing strategiesget_related_posts_for_linking— find existing posts suitable for internal linking, for use with thecreate_seo_post*tools
Health check: GET /health
Claude / MCP integration
Connecting from Claude
Start the server locally or in Docker:
docker compose up -d --buildConfirm it's up:
curl http://127.0.0.1:9809/healthIn Claude, add a Custom Connector with:
URL:
http://localhost:9809if Claude runs on the same machine, or your tunnel hostname (e.g.https://mcp.yourdomain.com)Authentication: No sign-in
Under Request headers, add:
Header name:
AuthorizationValue:
Bearer <your MCP_BEARER_TOKEN>(the same value set in.env)
The server checks this header on every request — no OAuth flow, no per-user sign-in.
Note: Keep your
.envprivate.MCP_BEARER_TOKENgrants full access to your WordPress site through this server, andWP_APP_PASSWORDauthenticates to WordPress itself.
Example requests
List posts:
curl http://localhost:9809/ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your MCP_BEARER_TOKEN>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_posts","arguments":{"per_page":5}}}'Create a new post:
curl http://localhost:9809/ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your MCP_BEARER_TOKEN>" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_post","arguments":{"title":"Hello from Claude","content":"This is a generated blog post.","status":"draft"}}}'Upload an image and create a post with it:
curl http://localhost:9809/ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your MCP_BEARER_TOKEN>" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"create_post_with_image","arguments":{"title":"Post with image","content":"Blog content","image_url":"https://example.com/image.jpg","filename":"image.jpg"}}}'This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted WordPress MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
WordPress MCP server: publish posts, AI images, SEO and full site management, self-hosted
WordPress MCP server: generate SEO posts, AI images, autoblog & WooCommerce on your self-hosted site
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA server that enables integration between Claude Desktop and WordPress, allowing for AI-assisted blogging through a Message Control Protocol implementation.MIT
- FlicenseBqualityDmaintenanceLocal MCP server for Codex/Claude to query and edit WordPress content through the WordPress REST API.26-
- AlicenseAqualityAmaintenanceOpen-source WordPress plugin that turns any site into a Streamable HTTP MCP server. Manage posts, WooCommerce, and more from Claude Code, Codex, or Cursor — no Node.js6216GPL 2.0
- AlicenseAqualityDmaintenanceA Model Context Protocol server that gives Claude (or any MCP-compatible LLM) direct access to a self-hosted WordPress site over its REST API.73MIT