MCP Wordpress

io.github.crunchtools由 GitHub 账号 crunchtools 发布v0.4.1更新于 Nov 3, 2026

Secure MCP server for WordPress content management

已验证STDIO仅桌面文件与存储商业与电商

概览

AI 生成的概览

本地 MCP 服务器,让助手通过 REST API 管理 WordPress 站点的文章、页面、媒体和评论。

可以做什么
  • 读取站点信息并验证配置的凭据是否可用
  • 列出、搜索、读取、创建、更新、编辑、定时发布和删除文章,以及分类、标签和修订版本
  • 列出、读取、创建、更新、编辑和删除页面,并列出页面修订
  • 列出、读取、上传、更新和删除媒体项,并获取其公开链接
  • 列出、读取、创建、更新、删除和审核评论
适用场景
适合在自有 WordPress 站点上发布工作内容的开发者,让助手起草、定时发布、编辑或审核内容,无需来回复制文章。编辑类工具和可选的 expected_version 校验适合对已有内容做谨慎、局部的修改。
运行要求
以 Python 包(uvx 或 pip)或容器镜像在本地通过 stdio 运行。需要环境变量 WORDPRESS_URL、WORDPRESS_USERNAME 和 WORDPRESS_APP_PASSWORD,并在 WordPress 用户资料中创建应用密码。可选 MCP_UPLOAD_DIR 指定上传目录;需要能访问该站点的网络。
安装前请注意
需要存放在 WORDPRESS_APP_PASSWORD 中的 WordPress 应用密码,该密码具有站点写入权限;README 称凭据仅保存在本机且不会被记录。许多工具会创建、更新、删除或审核内容,上传功能会读取本地路径的文件,执行前请确认操作。删除文章、页面、媒体或评论会改动线上站点数据。

安装

在 SourceWeft 中

  1. 打开 控制台中的 MCP Wordpress,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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

来源:README.md,提交 671b7a2

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.4.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分