关于 MCP Wordpress
MCP WordPress CrunchTools 是供开发者管理 WordPress 文章、页面、媒体和评论的本地 MCP 服务。编辑工具基于已保存的源内容操作,并可在写入前检查版本,同时提供输入验证和 SSRF 防护。
主要功能
- 01管理文章、页面、媒体和评论
- 02安排文章发布并查看修订记录
- 03通过定点替换编辑已保存源内容
- 04更新前检查预期版本
- 05验证输入并防止 SSRF
适用场景
- 01起草或安排技术博客文章发布
- 02更新 WordPress 页面并避免覆盖过期内容
- 03上传媒体并审核评论
MCP 相关
该服务通过 stdio 在本地运行,使用站点 URL、用户名和应用程序密码将 MCP 客户端连接到 WordPress。它提供内容管理工具,凭证保留在本机。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP WordPress CrunchTools
用于 WordPress 内容管理的安全 MCP(Model Context Protocol)服务。专为发布工作成果的开发者设计。
概述
此 MCP 服务旨在实现:
- 默认安全——验证输入、保护凭据并防止 SSRF
- 无需第三方服务——通过 stdio 在本地运行,凭据绝不会离开你的设备
- 跨平台——支持 Linux、macOS 和 Windows
- 自动更新——GitHub Actions 监控 CVE 并更新依赖项
- 容器化——可通过
quay.io/crunchtools/mcp-wordpress获取
命名约定
| 组件 | 名称 |
|---|---|
| GitHub 仓库 | crunchtools/mcp-wordpress |
| 容器 | quay.io/crunchtools/mcp-wordpress |
| Python 包(PyPI) | mcp-wordpress-crunchtools |
| CLI 命令 | mcp-wordpress-crunchtools |
| 模块导入 | mcp_wordpress_crunchtools |
功能
- 面向文章、页面、媒体和评论的 33 个工具
- 注重安全:保护凭据、验证输入、防止 SSRF
- 开发者工作流:定时发布、修订、搜索
- 轻松集成:兼容 Claude Code 和其他 MCP 客户端
安装
使用 uvx(推荐)
uvx mcp-wordpress-crunchtools
使用 pip
pip install mcp-wordpress-crunchtools
mcp-wordpress-crunchtools
使用容器
# 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 提示: 请使用
:z(小写,共享),而不是:Z(大写,私有)。 MCP 服务以长时间运行的 stdio 进程形式运行。使用:Z时,容器启动后复制到 目录中的文件不会带有容器的私有 MCS 标签,因此在容器内不可见。:z标志会设置共享的container_file_t上下文,允许所有容器和主机读取/写入。提示: 在多个 MCP 容器服务(例如 mcp-wordpress 和 mcp-gemini)之间 使用相同的共享目录(
~/.local/share/mcp-uploads-downloads/),这样 生成的文件无需复制即可立即用于上传。
从源代码安装
git clone https://github.com/crunchtools/mcp-wordpress.git
cd mcp-wordpress
uv sync --all-extras
uv run mcp-wordpress-crunchtools
配置
设置以下环境变量:
| 变量 | 说明 | 示例 |
|---|---|---|
WORDPRESS_URL | WordPress 站点 URL | https://example.com |
WORDPRESS_USERNAME | WordPress 用户名 | admin |
WORDPRESS_APP_PASSWORD | 应用程序密码 | xxxx xxxx xxxx xxxx |
MCP_UPLOAD_DIR | 容器内的上传目录(可选) | /tmp/mcp-uploads(默认值) |
创建应用程序密码
- 登录 WordPress 管理后台
- 前往 用户 → 个人资料
- 滚动到 应用程序密码
- 输入名称(例如“MCP Server”)并点击 添加新密码
- 复制生成的密码(仅显示一次)
搭配 Claude Code 使用
使用 uvx(推荐)
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
使用 pip
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
使用容器
# 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
可用工具
站点工具
| 工具 | 说明 |
|---|---|
wordpress_get_site_info | 获取站点标题、描述、URL 和时区 |
wordpress_test_connection | 验证 API 凭据是否有效 |
编辑模型
读取操作会返回编辑器保存的源内容(context=edit),而不是渲染后的页面,因此 Agent 读取的内容可以安全地写回。修改通过 edit_* 工具进行:Agent 发送要替换的确切文本及其替换内容,服务会将其应用到当前源内容,文章不会经过 Agent 往返传递。文章和页面的更新及编辑工具接受可选的 expected_version(即 get_post 或 get_page 返回的 version);提供该值时,如果条目自获取后发生了变化,就会拒绝写入。update_* 会拒绝渲染后的内容。edit_draft 仅编辑草稿或待审核文章,因此网关可以授予修订权限,而无需授予更改已发布文章的权限。
文章工具
| 工具 | 描述 |
|---|---|
wordpress_list_posts | 按状态、分类、搜索条件筛选并列出文章 |
wordpress_get_post | 按 ID 获取单篇文章,包含已保存的源内容(包括区块标记)和版本 |
wordpress_search_posts | 按关键词搜索文章 |
wordpress_create_post | 创建新文章(支持定时发布) |
wordpress_update_post | 更新现有文章;拒绝已渲染的 HTML,并在提供过期的 expected_version 时拒绝更新 |
wordpress_edit_post | 替换文章源内容中的文本,无需重新发送整篇文章 |
wordpress_edit_draft | 与 edit_post 相同,但仅适用于草稿或待审核文章;其他状态均会被拒绝 |
wordpress_delete_post | 删除文章或将其移至回收站 |
wordpress_list_revisions | 列出文章的修订版本 |
wordpress_get_revision | 获取指定修订版本的内容 |
wordpress_list_categories | 列出可用分类 |
wordpress_list_tags | 列出可用标签 |
页面工具
| 工具 | 描述 |
|---|---|
wordpress_list_pages | 按条件筛选并列出页面 |
wordpress_get_page | 按 ID 获取单个页面,包含已保存的源内容和版本 |
wordpress_create_page | 创建新页面 |
wordpress_update_page | 更新现有页面;拒绝已渲染的 HTML,并在提供过期的 expected_version 时拒绝更新 |
wordpress_edit_page | 替换页面源内容中的文本,无需重新发送整个页面 |
wordpress_delete_page | 删除页面或将其移至回收站 |
wordpress_list_page_revisions | 列出页面修订版本 |
媒体工具
| 工具 | 描述 |
|---|---|
wordpress_list_media | 列出媒体项目 |
wordpress_get_media | 获取媒体项目详情 |
wordpress_upload_media | 从本地路径上传文件 |
wordpress_update_media | 更新媒体元数据 |
wordpress_delete_media | 删除媒体项目 |
wordpress_get_media_url | 获取媒体的公开 URL |
评论工具
| 工具 | 描述 |
|---|---|
wordpress_list_comments | 按条件筛选并列出评论 |
wordpress_get_comment | 获取单条评论 |
wordpress_create_comment | 为文章添加评论 |
wordpress_update_comment | 更新评论内容或状态 |
wordpress_delete_comment | 删除评论 |
wordpress_moderate_comment | 批准、暂缓、标记为垃圾评论或移至回收站 |
示例
创建草稿文章
Create a new WordPress post titled "My Technical Article" with the content below. Keep it as a draft.
定时发布文章
Update post ID 123 to publish on December 25, 2024 at 10:00 AM.
上传图片
Upload this image to WordPress and set the alt text to "Architecture diagram".
查找并审核评论
List all comments in "hold" status and approve the legitimate ones.
安全
- 凭据保护:所有凭据均以
SecretStr存储,绝不记录到日志中 - SSRF 防护:REST API 路径已硬编码,无法覆盖
- 输入验证:所有输入均通过 Pydantic 模型验证
- 速率限制:妥善处理 WordPress 速率限制
- TLS 强制加密:所有请求均使用 HTTPS,并验证证书
- 大小限制:响应大小限制为 10MB,以避免内存问题
- 超时:所有请求均在 30 秒后超时
开发
# Install dev dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check src tests
# Run type checking
uv run mypy src
# Format code
uv run ruff format src tests
许可证
AGPL-3.0-or-later
致谢
由 crunchtools.com 构建
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。