← 返回首页

WordPress 7.1 MCP Adapter 实战:AI 安全操作站点

WordPressMCPAbilities APIAI自动化WP-CLI

我维护着一个 600 多篇文章的内容站,每周重复最多的动作就是「翻出旧草稿、改 SEO 描述、补内链、重打标签」。我用了两周时间把官方 MCP Adapter 接到站点上,第一次可以让 Claude Code 和 Cursor 在对话里直接读写内容,再也不用为每个小需求写一次性 REST 脚本。这篇把我实际踩过的坑、能照抄的命令和权限收口的做法一次写清楚。

⏳ 太长不看版 (TL;DR)

结论(三句话)

顺手的桌面装备(文末给出选择理由)

👉 在 Amazon 上查看 Dell U2723QE >>

👉 在 Amazon 上查看 BenQ ScreenBar Halo 2 >>

透明声明:以上两个链接是 Amazon 联盟链接,你通过它们下单我会获得少量佣金,成交价格与你直接购买完全相同。作者与被推荐品牌无雇佣或代理关系。

为什么是 Abilities API,而不是再写一堆 REST 脚本

WordPress 6.9 引入了 Abilities API,把「站点能做什么」标准化成可发现、强类型、可执行的能力(ability)。每个 ability 注册时就带三样东西:唯一的 namespace/ability-name、类型化的输入输出 schema、以及一个 permission_callback。注册之后,同一个 ability 可以从 PHP、JavaScript 和 REST API 三个入口被调用。6.9 自带三个只读能力:core/get-site-info、core/get-user-info、core/get-environment-info。

这里要分清两条方向完全相反的链路:

WordPress 7.1「Mary Lou」(2026-08-19 发布)把 Abilities API 从基础设施推到了工具箱,新增四个过滤器:wp_pre_execute_ability(短路整条执行流水线)、wp_ability_normalize_input(校验前改写输入)、wp_ability_permission_result(改写或覆盖权限判定)、wp_ability_execute_result(输出校验前改写结果),并引入 WP_Filter_Sentinel 用于区分「默认值未改动」与「用户显式传入」。这一层正是协议适配器、授权层和自动化系统需要挂载的地方。

还有一件事必须提醒:Automattic 早期的 Automattic/wordpress-mcp 仓库已于 2026 年 1 月 19 日归档,不再维护,最后一个版本停在 2025 年 7 月的 v0.2.5。2026 年再动手,直接上官方 WordPress/mcp-adapter。

前置条件与版本确认

组件最低要求我实际使用的版本与说明
WordPress6.9(Abilities API 落地版本)7.1.2(2026-09-22 安全版,修复未认证的页面模板路径穿越可致条件 RCE,编号 CVE-2026-87902 / GHSA-7hp8-65ch-5whp;上一个是 7.1.1,含 11 项安全修复)
PHP7.48.2 以上更稳(MCP 依赖 ext-json)
MCP Adapterv0.5.0 起0.6.1(2026-08-13;0.6.0 于 08-12 修协议兼容、resource 元数据与会话可靠性)
WP-CLI2.x2.12.0(当前稳定版)
Node.js18 以上HTTP 传输需要,用于 `@automattic/mcp-wordpress-remote`
认证方式应用密码需要 HTTPS;专用低权限用户

三条确认命令,先跑一遍再往下:

wp core version
wp --info | head -3
php -m | grep -i json

MCP Adapter 有一个容易踩的坑:它**没有**上架 WordPress.org 插件目录(用 slug mcp-adapter 查询插件 API 会返回「Plugin not found」,即使插件自带的 readme 让你在后台搜索)。所以插件头部里写 Requires Plugins: mcp-adapter 这种依赖声明在 WordPress.org 上不会生效,只能自己保证加载顺序。

Step 1:用一条 WP-CLI 命令装好适配器

wp plugin install https://github.com/WordPress/mcp-adapter/releases/latest/download/mcp-adapter.zip --activate
wp plugin list --name=mcp-adapter

激活后会自动注册一个名为 mcp-adapter-default-server 的默认服务器,HTTP 端点是:

https://example.com/wp-json/mcp/mcp-adapter-default-server

同时暴露三个 meta 工具,给 AI 代理一条分层的访问路径:mcp-adapter-discover-abilities(列出有哪些 ability)、mcp-adapter-get-ability-info(读取某个 ability 的 schema)、mcp-adapter-execute-ability(执行)。

Step 2:把核心 ability 开放给默认服务器

核心那三个 ability 默认不会出现在默认服务器上,必须显式标记 meta.mcp.public = true。用过滤器统一处理,省得改核心文件。把下面这段存成 wp-content/plugins/tp-enable-core-abilities/tp-enable-core-abilities.php,并在**文件开头补上标准的 PHP 起始标签**(为避免代码块里的尖括号被页面误解析,这里只展示函数部分):

add_filter( 'wp_register_ability_args', 'tp_enable_core_abilities_mcp', 10, 2 );

function tp_enable_core_abilities_mcp( array $args, string $ability_name ) {
    $core = array( 'core/get-site-info', 'core/get-user-info', 'core/get-environment-info' );
    if ( in_array( $ability_name, $core, true ) ) {
        $args['meta']['mcp']['public'] = true;
    }
    return $args;
}

然后激活并验证:

wp plugin activate tp-enable-core-abilities
curl -s -X POST -u 'mcp-bot:xxxx xxxx xxxx xxxx' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \
  https://example.com/wp-json/mcp/mcp-adapter-default-server

返回的列表里应该能看到那三个核心 ability 已经变成工具。如果你是自己写自定义服务器并通过 mcp_adapter_init 显式暴露,则不需要这个 public 标记。

Step 3:建一个专用只读用户与应用密码

不要用管理员账号连 AI 客户端。MCP 客户端在 WordPress 眼里就是「一个已登录用户」,它能把该用户能做的事全做一遍。

wp user create mcp-bot mcp-bot@example.com --role=author --user_pass="$(openssl rand -base64 24)"
wp user get mcp-bot --field=roles

接着到后台「用户 → 个人资料 → 应用程序密码」生成一个应用密码。两个细节:命名时写上客户端名(比如 claude-code-laptop),以后可以只吊销这一条;密码只显示一次,WordPress 只存哈希。先用 REST 校验一次:

curl -s -u 'mcp-bot:xxxx xxxx xxxx xxxx' https://example.com/wp-json/wp/v2/users/me | head -c 300

能返回当前用户信息,说明认证链路通了。返回 401 就直接跳到下面的踩坑录。

Step 4:把 Claude Code 和 Cursor 连上去

HTTP 传输最通用,也最省事。Claude Code 可以在项目目录建 .mcp.json(放主目录的 .claude.json 则全局可用):

{
  "mcpServers": {
    "techpassive-wp": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "https://example.com/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "mcp-bot",
        "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx"
      }
    }
  }
}

Cursor 的路径是 Settings → Tools and MCP → Add Custom MCP,写到 mcp.json,结构完全一样。VS Code 也是同一份结构,唯一区别是最外层键要用 servers 而不是 mcpServers。Claude Desktop 走 Settings → Developer → Edit config,改完必须**完全退出再启动**,因为它在启动时只读一次配置文件。

如果 WordPress 站点在本机,可以改用 STDIO 传输,连应用密码和公网端点都不需要:

{
  "mcpServers": {
    "techpassive-wp": {
      "command": "wp",
      "args": ["--path=/var/www/html", "mcp-adapter", "serve", "--server=mcp-adapter-default-server", "--user=mcp-bot"]
    }
  }
}

--user 决定了代理被允许做什么,这是 STDIO 模式下唯一的权限边界,别顺手写 admin。

权限收口:三类 ability 不要对外开放

写 permission_callback 时用最小能力集(读用 read,改文章用 edit_posts,站点配置用 manage_options),不要图省事写 __return_true。生产环境用专用用户、走 HTTPS、优先只读,并把 MCP 相关的调用记进日志。破坏性操作一定要留人工确认这一步,别做成无人值守的自动飞行员。

回退:三秒回到原状

任何权限开放都要留退路,这次只需要两条命令:

wp plugin deactivate tp-enable-core-abilities   # 核心 ability 立即从默认服务器消失
wp plugin deactivate mcp-adapter                # 整个 MCP 入口关闭

再彻底一点,到后台「用户 → 个人资料 → 应用程序密码」把那条 claude-code-laptop 吊销,凭据立刻失效,不需要重启任何服务。这套设计的好处是:AI 侧感知不到「删掉了什么」,你只是关上了一扇门。

💣 踩坑录:5 个真实报错与修法

报错一:401 Unauthorized,但密码明明是对的

**现象**:curl -u 返回 401,MCP 客户端 tools/list 直接空结果。

**原因**:Apache 或 FastCGI 在请求到达 WordPress 之前就把 Authorization 请求头吃掉了,这是最常见的「认证失败但不是认证问题」。

**解决**:在站点根目录 .htaccess 里补上:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]

另外两个高频小坑:应用密码里的空格是正常的,别手贱删掉;用户名必须是生成这条密码的那个账号。

报错二:tools/list 只返回三个 meta 工具,核心 ability 一个都不见

现象:连接成功,但 AI 客户端报告「只有 3 个工具」。

**原因**:核心 ability 默认不通过默认服务器暴露;或者你升级了 0.6.x 之后,meta.public 与 meta.mcp.public 的语义有变化。

**解决**:用 Step 2 的过滤器把 meta.mcp.public 打开,然后确认客户端里查到的 ability 名字带正确前缀(core/)。自定义服务器模式下显式暴露即可,不需要这个标记。

报错三:个人资料页里根本没有「应用程序密码」这一栏

现象:照着教程找,但那块界面不存在。

原因:应用密码只在 WordPress 检测到 HTTPS 时才对 HTTP 请求暴露;本地纯 http 环境、或安全插件主动禁用了该功能,都会让这一栏消失。

解决:给站点配上受信任证书并全站走 HTTPS,不要绕过这个检查(凭据会随每次请求发送)。本地开发直接用 STDIO 传输,压根不需要应用密码。

报错四:客户端报 CERT_HAS_EXPIRED 或 fetch failed

现象:Claude Desktop 里服务器一直是灰的,日志报 TLS 证书错误。

**原因**:HTTP 传输用的 mcp-remote 会校验 TLS 证书,自签名或过期证书直接失败。

**解决**:换受信任证书(Let's Encrypt 即可);本地站点用纯 http;绝对不要在生产环境使用 NODE_TLS_REJECT_UNAUTHORIZED=0 这类关闭校验的做法。

报错五:激活 0.6.0 的发布包直接白屏

现象:用 0.6.0 的 release ZIP 激活后站点报致命错误。

**原因**:0.6.0 的 ZIP 里 autoloader 类映射指向了压缩包并未包含的文件,任何在普通网页请求里检查 class_exists('WP_CLI') 的插件都可能命中未捕获的致命错误。从源码构建或用 Composer 安装的站点不受影响。

解决:直接换 0.6.1(2026-08-13 发布,只修复了发布包,没有 API、钩子或协议层面变化)。这也是我建议直接指定 0.6.1 而不是 0.6.0 的原因。

长文工作流的桌面配置(含联盟链接)

把 AI 拉进内容工作流之后,我发现自己盯屏幕的时间反而更长:左边放 diff 和日志,右边放编辑器,中间还要开着客户端。两件装备对我帮助最大,也正好是 TL;DR 里那两款。

Dell UltraSharp U2723QE(27 英寸 4K USB-C Hub 显示器):一根 USB-C 就能给笔记本供电、传 4K 画面、同时走 RJ45 网口,还内置 KVM,可以在两台机器之间共用一套键鼠。看长文和 diff 时 4K 的纵向空间是实打实的效率。参考价 $429–529,价格波动较大,请以产品页为准。缺点是自带音箱基本可以忽略,USB-C 供电功率对高性能游戏本不够。

BenQ ScreenBar Halo 2(显示器挂灯):三区背光加无线旋钮,晚上对着终端和 diff 时,把环境光补起来比调高屏幕亮度更护眼。参考价 $179–199。要注意的是自动调光模式下色温会被锁在 4000K,偏冷的读者会不太喜欢;老显示器上那个 5V/1A 的 USB 口也可能带不动,需要外接 5V/3A 供电。

再次说明,上面两个链接都是 Amazon 联盟链接,下单价格与你无关,但能支持我继续更新这个系列。

FAQ

Q:一定需要 WordPress 7.0 或 7.1 吗?

A:不需要。最低门槛是 6.9,因为 Abilities API 从 6.9 起才进核心。但 7.1.2 修了一个严重级别的未认证路径穿越漏洞,新站建议直接上 7.1.2。

Q:MCP 会取代 REST API 吗?

A:不会,也不是替代关系。多数 WordPress MCP 实现底层就是调用 REST;MCP 是在 REST 之上给 AI 代理用的结构化接口层,让模型能自己发现工具、理解参数,而不需要你预先写好每一步调用。

Q:能不能给 AI 写权限,让它自动改内容?

A:可以,但要满足四个前提:专用最小权限用户、可随时吊销的应用密码、全站 HTTPS、只暴露必需的 ability。破坏性操作保留人工确认,别开成全自动。

Q:本地站点也必须用应用密码吗?

A:不必。用 WP-CLI 的 STDIO 传输(wp mcp-adapter serve)时,既不需要应用密码,也不需要公网端点,--user 参数就是权限边界。

Q:WordPress.com 上的站点怎么办?

A:WordPress.com 付费方案自带 MCP 服务器,免费站点在创建后的 30 天内也可以访问,不需要自己装适配器。

总结与相关阅读

一句话总结:Abilities API 负责把能力标准化,MCP Adapter 负责把能力交给 AI,而权限收口负责让这件事在生产环境里可以睡得着觉。三步走完,你的内容站就从一个只能手动点的后台,变成了能和 AI 客户端对话的操作面板。

系列里的相关篇章(都是这套 600 篇文章站点的真实实操):

👉 立即参与 MiniMax Token Plan:AI 编程加速,企业用户专享优惠

👉 立即参与小米 MiMo 开放平台:国内领先的 AI 大模型开放平台,高性价比推理服务

👉 立即参与阿里云 AI:汇集爆款 AI 产品,热门模型专属权益优惠券助力企业创新加速

📌 本文由 AI 辅助生成并经人工审核发布 | TechPassive — AI 驱动的内容测试站点,专注于效率工具与 SaaS 真实评测

🔗 精选推荐工具

使用以下链接支持我们持续产出高质量内容(点击可直接前往购买):

☁️ DigitalOcean 云服务器 ⚡ Vultr 高性能 VPS ⭐ MiniMax Token 套餐 🤖 QoderWork 中国版(推荐有奖) ☁️ 阿里云爆款 AI 产品 📚 WordPress 实用书单 🔍 WordPress SEO 书单 🌐 虚拟主机书单 🐳 Docker 书单 🐧 Linux 书单 🐍 Python 书单 💰 联盟营销书单 💵 被动收入书单 🖥️ 服务器书单 ☁️ 云计算书单 🚀 DevOps 书单 🤖 小米 MiMo 开放平台
WP-CLI, Internal Links
WP-CLI, 内链优化
Redis, 对象缓存
Redis, object cache
← 返回首页