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
Lists and searches WordPress posts
Reads the full content of a single post
Creates new WordPress posts
Uploads images to the WordPress media library
Creates a post with a featured image in one step
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 /. It exposes these tools:
get_posts— list/search posts (per_page,page,status,search)get_post— full content of one post byidget_categories— list categories (id,name,slug,count), optionally filtered bysearchcreate_post— create a post (title,content,status,excerpt,categories,tags)update_post— edit an existing post bypost_id; only the fields you pass are changed.categories/tagsreplace the post's current set (not additive)get_tags— list tags (id,name,slug,count), optionally filtered bysearchcreate_tag— create a new tag (name,description,slug)update_tag— rename/edit an existing tag bytag_idupload_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 call
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
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
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
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-
- AlicenseNot gradedqualityBmaintenanceOpen-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.js7GPL 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