wp-mcp

wp-mcp

MCP server for WordPress content management via REST API, supporting posts, pages, media, comments, and terms through natural language interfaces like Cursor, ChatGPT, Codex, and Claude.

Category
访问服务器

README

WordPress MCP Server

一个面向 Cursor、ChatGPT、Codex、Claude 等 MCP 客户端的 WordPress 内容管理服务。它直接调用 WordPress 原生 REST API,不要求在 WordPress 内安装本项目的插件。

核心能力

  • 零 WordPress 插件:默认使用 WordPress 5.6+ 原生 Application Password。
  • Docker 一键部署:./deploy.sh 或 docker compose up -d --build。
  • 双传输:远程 Streamable HTTP(/mcp)和本地 stdio。
  • 内容管理:文章、页面、自定义 REST 内容类型、分类、标签、媒体、评论。
  • AI 检索兼容:实现标准 search / fetch 工具,返回可引用的 WordPress 永久链接。
  • 安全默认值:新内容默认草稿;文章、媒体、评论默认软删除;内容类型有显式白名单。
  • 两种 WordPress 鉴权:Application Password 与已有 JWT Bearer Token。

重要的鉴权边界

“零插件”和“JWT”需要区分清楚:

  • application_password 是推荐默认值。它从 WordPress 5.6 起属于核心功能,不需要额外插件。
  • WordPress Core 本身不签发通用 REST JWT。jwt 模式只用于你的站点已经通过现有插件、反向代理或身份网关接受 JWT 的情况。本项目不会要求你额外安装插件,但也不会伪装成 WordPress 原生 JWT。
  • MCP_API_KEY 保护的是 AI 客户端到本 MCP 服务的连接;WP_* 凭据保护的是 MCP 服务到 WordPress 的连接,两者互相独立。

工具

工具 作用 风险属性
search / fetch 标准检索与完整内容读取 只读
wp_site_info 检查站点及 REST 能力 只读
wp_list_content / wp_get_content 读取文章、页面或白名单中的自定义类型 只读
wp_create_content / wp_update_content 创建、修改内容 写入
wp_delete_content 回收或永久删除内容 破坏性
wp_list_terms / wp_create_term / wp_update_term / wp_delete_term 管理分类和标签 读写
wp_list_media / wp_upload_media / wp_update_media / wp_delete_media 管理媒体库 读写
wp_list_comments / wp_update_comment / wp_delete_comment 审核、编辑、删除评论 读写

1. 创建 WordPress Application Password

  1. 登录 WordPress 后台。
  2. 打开“用户 → 个人资料”。
  3. 找到“应用程序密码”,输入名称,例如 WordPress MCP Server。
  4. 点击“添加新应用程序密码”,立即复制生成的密码;它只显示一次。
  5. 建议新建一个专用 WordPress 用户,只授予实际需要的角色。发布、上传、评论管理权限最终由该用户角色决定。

生产环境只使用 HTTPS。Application Password 通过 HTTP Basic Auth 发送,HTTP 明文链路不安全。

2. Docker 一键部署

cp .env.example .env
# 编辑 .env,至少填写 WP_URL、WP_USERNAME、WP_APPLICATION_PASSWORD
./deploy.sh

检查状态:

docker compose ps
curl http://127.0.0.1:3000/health
docker compose logs -f wordpress-mcp

默认 MCP 地址:http://127.0.0.1:3000/mcp。

Compose 默认通过 BIND_ADDRESS=127.0.0.1 只监听本机。若使用反向代理,保持该默认值即可;只有明确需要局域网直连时才改成 0.0.0.0,并同时启用 MCP 鉴权。

JWT 兼容模式

仅当 WordPress 现有入口已经接受 JWT 时:

WP_AUTH_METHOD=jwt
WP_JWT_TOKEN=your-existing-wordpress-jwt

JWT 的签发、刷新和过期策略由你现有的 WordPress JWT 方案或身份网关负责。

自定义内容类型

自定义 Post Type 必须在 WordPress 中以 show_in_rest=true 注册,然后加入白名单:

WP_CONTENT_TYPES=posts,pages,product,portfolio

服务只会访问这里列出的 /wp-json/wp/v2/<type> 路径。

3. 连接 AI 客户端

Codex

远程 HTTP:

codex mcp add wordpress --url https://mcp.example.com/mcp

若启用了 MCP_API_KEY:

export WORDPRESS_MCP_TOKEN='与服务器 MCP_API_KEY 相同的值'
codex mcp add wordpress \
  --url https://mcp.example.com/mcp \
  --bearer-token-env-var WORDPRESS_MCP_TOKEN

不要把真实密钥提交到配置仓库。

Cursor

项目级 .cursor/mcp.json:

{
  "mcpServers": {
    "wordpress": {
      "url": "https://mcp.example.com/mcp"
    }
  }
}

也可以用 stdio 直接启动本地 Docker 镜像:

{
  "mcpServers": {
    "wordpress": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--env-file", "/absolute/path/to/WordPress MCP Server/.env",
        "-e", "TRANSPORT=stdio",
        "wordpress-mcp-server:local"
      ]
    }
  }
}

Claude Desktop / Claude Code

Claude Desktop 可使用上面的 stdio 配置,写入其 claude_desktop_config.json。Claude Code 可添加远程 Streamable HTTP 地址;具体命令以当前客户端版本的 MCP 添加界面或 claude mcp --help 为准。

ChatGPT

  1. 把服务部署到稳定的公网 HTTPS 域名,例如 https://mcp.example.com/mcp。ChatGPT 不能访问 localhost。
  2. 在 ChatGPT 中打开 Settings → Apps & Connectors → Advanced settings,启用 Developer Mode。
  3. 新建 App(旧界面可能叫 Connector),填入公网 /mcp URL。
  4. 工具定义变更后刷新 App,让 ChatGPT 重新读取描述。

ChatGPT 公网生产连接建议使用标准 OAuth 身份网关。MCP_API_KEY 是适合支持自定义 Authorization Header 的客户端的轻量保护,不等同于 ChatGPT OAuth;若暂时不接 OAuth,不要把无鉴权的 /mcp 直接暴露到互联网。

4. 本地开发

npm install
cp .env.example .env
npm run dev

可用脚本:

npm run typecheck
npm test
npm run build
npm start

stdio 模式:

TRANSPORT=stdio npm start

注意:stdio 模式下协议走 stdout,日志只写 stderr。

5. 生产部署建议

  • 使用 Caddy、Nginx、Traefik 或云负载均衡终止 TLS,只代理 /mcp 与 /health。
  • 配置 ALLOWED_HOSTS=mcp.example.com,只填主机名,不含协议和端口。
  • 将 .env 放入服务器或密钥管理器,绝不提交真实 WordPress 凭据。
  • 使用专用低权限 WordPress 用户,定期轮换 Application Password。
  • force=true 会永久删除;正常自动化应保留默认的回收站行为。
  • 媒体上传受 MAX_MEDIA_BYTES 限制,默认 10 MiB。
  • 容器默认非 root、只读文件系统、移除 Linux capabilities。

目录结构

src/
  index.ts             # 传输模式入口
  http-server.ts       # Streamable HTTP /mcp
  mcp-server.ts        # 工具定义与安全注解
  wordpress-client.ts  # WordPress REST API 客户端
  config.ts            # 环境变量校验
test/                  # 配置与 REST 客户端测试
Dockerfile
docker-compose.yml
.env.example

设计依据

  • OpenAI Apps SDK:MCP Server、工具定义与远程部署指南。
  • Model Context Protocol 官方 TypeScript SDK:Streamable HTTP 与 stdio 传输。
  • WordPress REST API Handbook:文章、页面、媒体、分类、标签、评论端点。
  • WordPress Application Passwords:WordPress 5.6+ 原生 API 鉴权。

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选