MCP Wordpress

io.github.crunchtoolsPublished by GitHub account crunchtoolsv0.4.1Updated Nov 3, 2026

Secure MCP server for WordPress content management

VerifiedSTDIODesktop onlyFiles & StorageBusiness & Commerce

Overview

AI-generated overview

Local MCP server that lets an assistant manage a WordPress site's posts, pages, media and comments through the REST API.

What you can do
  • Read site info and verify that the configured credentials work
  • List, search, read, create, update, edit, schedule and delete posts, plus categories, tags and revisions
  • List, read, create, update, edit and delete pages, and list page revisions
  • List, read, upload, update and delete media items and get their public URLs
  • List, read, create, update, delete and moderate comments
When to use it
Useful for developers who publish about their work and want an assistant to draft, schedule, edit or moderate content on their own WordPress site without copying posts back and forth. The edit tools and optional expected_version checks suit careful, targeted changes to existing content.
Requirements
Runs locally over stdio as a Python package (uvx or pip) or a container image. Needs the environment variables WORDPRESS_URL, WORDPRESS_USERNAME and WORDPRESS_APP_PASSWORD, plus an application password created in the WordPress user profile. Optional MCP_UPLOAD_DIR sets the upload directory; network access to the site is required.
Before you install
Requires a WordPress application password stored in WORDPRESS_APP_PASSWORD, which grants write access to the site; the README says credentials stay local and are never logged. Many tools create, update, delete or moderate content, and uploads read files from a local path, so review actions before running them. Deleting posts, pages, media or comments changes live site data.

Installation

In SourceWeft

  1. Open MCP Wordpress in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

MCP WordPress CrunchTools

A secure MCP (Model Context Protocol) server for WordPress content management. Designed for developers publishing about their work.

Overview

This MCP server is designed to be:

  • Secure by default - Input validation, credential protection, and SSRF prevention
  • No third-party services - Runs locally via stdio, your credentials never leave your machine
  • Cross-platform - Works on Linux, macOS, and Windows
  • Automatically updated - GitHub Actions monitor for CVEs and update dependencies
  • Containerized - Available at quay.io/crunchtools/mcp-wordpress

Naming Convention

ComponentName
GitHub repocrunchtools/mcp-wordpress
Containerquay.io/crunchtools/mcp-wordpress
Python package (PyPI)mcp-wordpress-crunchtools
CLI commandmcp-wordpress-crunchtools
Module importmcp_wordpress_crunchtools

Features

  • 33 Tools for posts, pages, media, and comments
  • Security-focused: Credentials protected, input validation, SSRF prevention
  • Developer workflow: Scheduled publishing, revisions, search
  • Easy integration: Works with Claude Code and other MCP clients

Installation

With uvx (recommended)

bash
uvx mcp-wordpress-crunchtools

With pip

bash
pip install mcp-wordpress-crunchtoolsmcp-wordpress-crunchtools

With Container

bash
# Create a shared upload directory (required before first run)mkdir -p ~/.local/share/mcp-uploads-downloads
podman run -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \  -e WORDPRESS_URL=https://example.com \  -e WORDPRESS_USERNAME=admin \  -e WORDPRESS_APP_PASSWORD='xxxx xxxx xxxx xxxx' \  quay.io/crunchtools/mcp-wordpress

SELinux note: Use :z (lowercase, shared) instead of :Z (uppercase, private). MCP servers run as long-lived stdio processes. With :Z, files copied into the directory after container start won't have the container's private MCS label and will be invisible inside the container. The :z flag sets a shared container_file_t context that all containers and the host can read/write.

Tip: Use the same shared directory (~/.local/share/mcp-uploads-downloads/) across multiple MCP container servers (e.g., mcp-wordpress and mcp-gemini) so generated files are immediately available for upload without copying.

From source

bash
git clone https://github.com/crunchtools/mcp-wordpress.gitcd mcp-wordpressuv sync --all-extrasuv run mcp-wordpress-crunchtools

Configuration

Set these environment variables:

VariableDescriptionExample
WORDPRESS_URLWordPress site URLhttps://example.com
WORDPRESS_USERNAMEWordPress usernameadmin
WORDPRESS_APP_PASSWORDApplication passwordxxxx xxxx xxxx xxxx
MCP_UPLOAD_DIRUpload directory inside container (optional)/tmp/mcp-uploads (default)

Creating an Application Password

  1. Log in to WordPress admin
  2. Go to Users → Profile
  3. Scroll to Application Passwords
  4. Enter a name (e.g., "MCP Server") and click Add New
  5. Copy the generated password (shown once)

Usage with Claude Code

Using uvx (recommended)

bash
claude mcp add mcp-wordpress-crunchtools \    --env WORDPRESS_URL=https://example.com \    --env WORDPRESS_USERNAME=admin \    --env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \    -- uvx mcp-wordpress-crunchtools

Using pip

bash
pip install mcp-wordpress-crunchtools
claude mcp add mcp-wordpress-crunchtools \    --env WORDPRESS_URL=https://example.com \    --env WORDPRESS_USERNAME=admin \    --env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \    -- mcp-wordpress-crunchtools

Using Container

bash
# Create a shared upload directory (required before first run)mkdir -p ~/.local/share/mcp-uploads-downloads
claude mcp add mcp-wordpress-crunchtools \    --env WORDPRESS_URL=https://example.com \    --env WORDPRESS_USERNAME=admin \    --env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \    -- podman run -i --rm \        -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \        -e WORDPRESS_URL \        -e WORDPRESS_USERNAME \        -e WORDPRESS_APP_PASSWORD \        quay.io/crunchtools/mcp-wordpress

Available Tools

Site Tools

ToolDescription
wordpress_get_site_infoGet site title, description, URL, timezone
wordpress_test_connectionVerify API credentials work

Editing Model

Reads return the source the editor saved (context=edit), never the rendered page, so what an agent reads is safe to write back. Changes go through the edit_* tools: the agent sends the exact text to replace and its replacement, the server applies it to the current source, and the post never round-trips through the agent. The post and page update and edit tools take an optional expected_version (the version get_post or get_page returned); when it is given, the write is refused if the item changed since. update_* refuses content that is rendered output. edit_draft edits only draft or pending posts, so a gateway can grant revision rights without the power to change published posts.

Post Tools

ToolDescription
wordpress_list_postsList posts with filtering (status, category, search)
wordpress_get_postGet single post by ID with its saved source (block markup included) and version
wordpress_search_postsSearch posts by keyword
wordpress_create_postCreate new post (supports scheduling)
wordpress_update_postUpdate existing post; refuses rendered HTML, and a stale expected_version when given
wordpress_edit_postReplace text in a post's source without resending the post
wordpress_edit_draftSame as edit_post, for draft or pending posts only; refuses any other status
wordpress_delete_postDelete/trash a post
wordpress_list_revisionsList revisions for a post
wordpress_get_revisionGet specific revision content
wordpress_list_categoriesList available categories
wordpress_list_tagsList available tags

Page Tools

ToolDescription
wordpress_list_pagesList pages with filtering
wordpress_get_pageGet single page by ID with its saved source and version
wordpress_create_pageCreate new page
wordpress_update_pageUpdate existing page; refuses rendered HTML, and a stale expected_version when given
wordpress_edit_pageReplace text in a page's source without resending the page
wordpress_delete_pageDelete/trash a page
wordpress_list_page_revisionsList page revisions

Media Tools

ToolDescription
wordpress_list_mediaList media items
wordpress_get_mediaGet media item details
wordpress_upload_mediaUpload file from local path
wordpress_update_mediaUpdate media metadata
wordpress_delete_mediaDelete media item
wordpress_get_media_urlGet public URL for media

Comment Tools

ToolDescription
wordpress_list_commentsList comments with filtering
wordpress_get_commentGet single comment
wordpress_create_commentAdd a comment to a post
wordpress_update_commentUpdate comment content/status
wordpress_delete_commentDelete a comment
wordpress_moderate_commentApprove, hold, spam, or trash

Examples

Create a Draft Post

Create a new WordPress post titled "My Technical Article" with the content below. Keep it as a draft.

Schedule a Post

Update post ID 123 to publish on December 25, 2024 at 10:00 AM.

Upload an Image

Upload this image to WordPress and set the alt text to "Architecture diagram".

Find and Moderate Comments

List all comments in "hold" status and approve the legitimate ones.

Security

  • Credential Protection: All credentials stored as SecretStr, never logged
  • SSRF Prevention: REST API path hardcoded, cannot be overridden
  • Input Validation: All inputs validated via Pydantic models
  • Rate Limiting: Handles WordPress rate limits gracefully
  • TLS Enforcement: All requests use HTTPS with certificate validation
  • Size Limits: Response size limited to 10MB to prevent memory issues
  • Timeout: All requests timeout after 30 seconds

Development

bash
# Install dev dependenciesuv sync --all-extras
# Run testsuv run pytest
# Run lintinguv run ruff check src tests
# Run type checkinguv run mypy src
# Format codeuv run ruff format src tests

License

AGPL-3.0-or-later

Credits

Built by crunchtools.com

Source: README.md at commit 671b7a2

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.4.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts