从 Abilities 到 AI 智能体:WordPress MCP Adapter 入门

作者:Jonathan Bossenger。原文发表于 2026 年 2 月 4 日,来源:WordPress Developer Blog。本文为获授权的完整中文翻译整理,技术示例保留原文语境;编辑补充与代码调整均明确标出。

WordPress 6.9 引入的 Abilities API,让开发者能够以标准化、可发现、具有类型约束且可执行的方式注册 WordPress 功能。这为整个 WordPress 生态的扩展建立了共同基础,也让站点能够参与 AI 自动化与工作流。

近期重要的发展之一是模型上下文协议(Model Context Protocol,MCP)。它允许工具向驱动 AI 应用的模型提供更多上下文。例如,你希望 AI 帮忙整理 WordPress 电商站一整年的销售报告;如果能够安全地读取订单,AI 才有完成这项工作的实际数据。WordPress Core AI 团队推出的 MCP Adapter 正是连接这些能力的桥梁:它在 WordPress 站点范围内实现 MCP,使 Claude Desktop、Claude Code、Cursor 和 VS Code 等应用可以发现并调用 WordPress Abilities。

本文依次介绍安装适配器、将已有 Ability 暴露为 MCP 工具、连接本地或公网 WordPress 站点、为插件创建自定义服务器,以及认证和权限方面需要注意的边界。

AI 客户端通过 STDIO 或 HTTP 连接 MCP Adapter,适配器发现和执行 Ability,执行时检查 WordPress 用户权限。
原创技术示意图,依据原文绘制;表示调用关系,不是实测结果或软件截图。

先回顾基础:Abilities 是什么

如果你第一次接触这一概念,可以先读 WordPress Abilities API 介绍。它是 WordPress 中跨执行环境的功能 API,用来统一核心与插件对外描述“自己能做什么”的方式。

注册一项 Ability 时,需要定义唯一名称(例如 namespace/ability-name)、具有类型约束的输入与输出 schema、负责检查权限的 permission_callback,以及真正执行工作的 execute_callback。执行回调可以读取数据、更新文章、运行诊断,或完成其他独立工作单元。注册后,PHP、JavaScript 和 REST API 都可以发现并执行它。

WordPress 6.9 自带三项核心 Ability:

  • core/get-site-info:返回 WordPress 中配置的站点信息;默认返回全部字段,也可指定子集。
  • core/get-user-info:返回当前已认证用户的基本资料,供个性化、审计和权限感知逻辑使用。
  • core/get-environment-info:返回环境、PHP 运行时、数据库服务器及 WordPress 版本等运行信息,用于诊断与兼容性检查。

虽然数量不多,这三项能力已经足够用来测试 MCP Adapter 的连接路径。

WordPress MCP Adapter 负责什么

MCP Adapter 是 AI Building Blocks for WordPress 计划中的官方软件包。它把 Abilities API 注册的能力转换成 MCP 支持的基本元素,使 AI 智能体能以 MCP 工具执行站点功能,或以 MCP 资源读取数据。如果插件已经注册了 Ability,接入 AI 客户端通常只差这一层适配。

MCP 的三种基本元素分别是:工具,由 AI 调用来执行动作的函数;资源,为模型提供背景上下文的被动数据源,例如文件或数据库记录;提示模板,用来指导特定工作流的预设模板。Ability 通常包含可执行逻辑,所以一般被暴露为工具。若它只提供只读数据,例如日志或静态站点配置,也可以配置成资源,让客户端把它作为上下文读取。

安装 MCP Adapter

最直接的体验方式,是到 官方仓库的 Releases 页面 下载并安装插件。启用后,它会注册名为 mcp-adapter-default-server 的默认 MCP 服务器,以及下面三项 Ability:

  • mcp-adapter/discover-abilities
  • mcp-adapter/get-ability-info
  • mcp-adapter/execute-ability

它们会自动作为 MCP 工具暴露,名称分别为 mcp-adapter-discover-abilities、mcp-adapter-get-ability-info 和 mcp-adapter-execute-ability。智能体因此可以分层工作:先发现能力,再获取某项能力的详细说明,最后执行它。

允许默认服务器访问 Ability

默认服务器只提供显式标记为可通过 MCP 访问的 Ability。在调用 wp_register_ability() 时,把以下配置加入注册参数:

'meta' => array(
    'mcp' => array(
        'public' => true,
    ),
)

对 WordPress 核心 Ability,可以用 wp_register_ability_args 过滤器加入该标记。下面是一份完整的小插件示例:

<?php
/**
 * Plugin Name: Enable core abilities
 * Version: 1.0.0
 * @package enable-core-abilities
 */
add_filter( 'wp_register_ability_args', 'myplugin_enable_core_abilities_mcp_access', 10, 2 );

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

此后即可通过默认服务器的 MCP 工具调用这些核心能力。编辑补充:public 在这里是 MCP 可见性标记,不能理解为跳过认证或允许匿名执行;Ability 原本的权限检查仍然需要成立。

连接 AI 应用

选择传输方式

MCP Adapter 支持 STDIO 和 HTTP 两种连接方式,选择主要取决于 WordPress 的运行位置。对本地开发站点,最直接的是 STDIO;适配器通过 WP-CLI 提供这一方式,因此电脑上需要安装 WP-CLI。最小配置如下:

{
  "wordpress-mcp-server": {
    "command": "wp",
    "args": [
      "--path=/path/to/your/wordpress/installation",
      "mcp-adapter", "serve",
      "--server=mcp-adapter-default-server",
      "--user={mcp_user}"
    ]
  }
}

wordpress-mcp-server 是客户端中的自定义名称;wp 是 WP-CLI;--path 指向 WordPress 安装目录;mcp-adapter serve 启动服务;--server 选择服务器;--user 指定执行时采用的 WordPress 用户身份。

对于公网站点,或者不想采用 STDIO 的场景,可用 @automattic/mcp-wordpress-remote 远程代理建立 HTTP 连接。本机需要 Node.js;认证可使用 WordPress 应用密码,或自行实现的 OAuth 流程。

{
  "wordpress-mcp-server": {
    "command": "npx",
    "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
    "env": {
      "WP_API_URL": "https://yoursite.example/wp-json/mcp/mcp-adapter-default-server",
      "WP_API_USERNAME": "{mcp_user}",
      "WP_API_PASSWORD": "{application-password}"
    }
  }
}

npx 执行 Node.js 软件包;-y 自动同意安装;@latest 选择当时的最新版本。三个环境配置分别提供 MCP 端点、WordPress 用户名和该用户的应用密码。通过 HTTP 代理连接本地站点时,常见故障涉及多个 Node.js 版本或本地 SSL 证书,可查阅 代理仓库的排障文档。

编辑安全说明:原文后续示例使用作者的 macOS 路径、admin 账号和一个明文应用密码。本文把它们统一替换为路径、专用用户和密码占位符;没有复用、验证或执行原文凭据。应用密码并不会把用户权限缩小为只读,应为 MCP 创建权限受限的专用账户,保护配置文件,且不要提交到仓库。公网连接使用 HTTPS。原文的 npx -y …@latest 会自动下载并执行可变版本的软件包;生产使用前应核验来源并锁定已审查版本,本文保留这一原始教学写法以便辨认其行为。

Claude Desktop

在 Claude Desktop 中,打开 Claude → Settings → Developer,在 Local MCP servers 下选择 Edit config。文件浏览器会定位到 claude_desktop_config.json;服务器配置放在顶层的 mcpServers 对象中。

{
  "mcpServers": {
    "wordpress-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/path/to/your/wordpress/installation",
        "mcp-adapter", "serve",
        "--server=mcp-adapter-default-server",
        "--user={mcp_user}"
      ]
    }
  }
}

若使用 HTTP 代理,把内部的服务器对象替换为下面的配置:

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

原文使用的本地测试地址是 http://localhost:8885;它仅表示作者的本地环境,不能直接照搬到公网。保存配置后重启 Claude Desktop,因为它在启动时读取 MCP 配置。Developer 页的 Local MCP servers 列表显示服务器为 running 时,即可在对话中使用。

Cursor

依次打开 Cursor → Settings → Cursor Settings → Tools and MCP,选择 Add Custom MCP,编辑打开的 mcp.json。它使用与 Claude Desktop 相同的 mcpServers 配置格式。保存后返回 Tools and MCP 页面,确认服务器出现并启用。

Claude Code

可以将同样的 mcpServers 配置写入用户主目录中的 .claude.json,或项目目录里的 .mcp.json。按原文的配置方式,前者面向用户范围,后者按项目区分服务器。项目配置尤其要防止误提交凭据。客户端界面和作用域规则可能随版本变化,使用时应对照实际客户端版本。

VS Code

在项目工作区的 .vscode 目录中创建 mcp.json。主要区别是顶层键叫 servers,不是 mcpServers,服务器内容保持相同。

{
  "servers": {}
}

把所选连接方式的服务器对象填入 servers。创建文件后,VS Code 会显示 MCP 控制工具栏,用来启动、停止或重启服务器;成功连接时还会显示可用工具数量,默认服务器在本例中提供三个工具。

实际调用 MCP 工具

连接后,可以在 Claude Desktop 新建对话,要求:“获取我的 WordPress 站点信息。”应用会发现有 MCP 服务器可用,调用 mcp-adapter-discover-abilities 查看能力,再判断 core/get-site-info 能满足请求,最后把该名称传给 mcp-adapter-execute-ability。站点信息返回后,客户端据此组织答案。这是原文演示的调用路径,并不表示本文实际连接了用户站点。

为插件配置自定义 MCP 服务器

版本核验补充:下面的 Composer 内嵌方式是 2026 年 2 月原文的教学方案。2026 年 10 月 5 日核验时,官方仓库 trunk 的 McpAdapter.php 已在 check_plugin_loaded() 中加入以 0.7.0 标记的弃用提示:不再推荐把适配器作为插件的内嵌依赖,建议安装规范的 MCP Adapter 插件并迁移。trunk 不是锁定发布版本;下文保留原教学过程,采用前须对照选定发行版的迁移说明,不能把它当作所有新版本的首选安装方式。

默认服务器能覆盖多数需求;如果插件需要更精细地决定哪些能力作为工具暴露,可以安装 Composer 软件包并注册自定义服务器。在插件目录执行:

composer require wordpress/mcp-adapter

在插件主文件加载 Composer 自动加载器:

if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
    require_once __DIR__ . '/vendor/autoload.php';
}

如果站点中多个插件都依赖 MCP Adapter 或 Abilities API,官方文档建议使用 Jetpack Autoloader 减少版本冲突。接着检查类是否可用并初始化适配器:

if ( ! class_exists( WP\MCP\Core\McpAdapter::class ) ) {
    // 正式插件应在这里显示可操作的错误或管理员通知。
    return;
}
WP\MCP\Core\McpAdapter::instance();

通过 mcp_adapter_init 动作注册自定义服务器。回调会收到适配器实例;用它的 create_server() 方法指定服务器配置:

add_action( 'mcp_adapter_init', 'myplugin_create_custom_mcp_server' );
function myplugin_create_custom_mcp_server( $adapter ) {
    $adapter = WP\MCP\Core\McpAdapter::instance();
    $adapter->create_server(
        'custom-mcp-server',
        'custom-mcp-server',
        'mcp',
        'Custom MCP Server',
        'Custom MCP Server',
        'v1.0.0',
        array( \WP\MCP\Transport\HttpTransport::class ),
        \WP\MCP\Infrastructure\ErrorHandling\ErrorLogMcpErrorHandler::class,
        \WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler::class,
        array( 'namespace/ability-name' ),
        array(),
        array(),
    );
}

第一个参数是唯一服务器标识,WP-CLI 启动时会用到。第二、三个参数定义 REST API 命名空间与路由。第四、五个参数是 AI 客户端显示的名称和说明;第六个参数是服务器版本;第十个参数列出要作为工具暴露的 Ability,可包含多项。其余参数指定传输、错误处理、可观测性处理,以及可选资源和提示模板。原文所示 HttpTransport 对应 MCP 2025-06-18 协议;自定义实现也可接入自己的传输、日志和监控系统。

为 List All URLs 插件添加服务器

下面用 List All URLs 插件演示。先停用单独安装的 MCP Adapter 插件,避免把示例的两种安装方式混用;然后在 WordPress 插件目录获取仓库并切换到包含 Abilities API 实现的分支:

cd wp-content/plugins
git clone git@github.com:wptrainingteam/list-all-urls.git
cd list-all-urls
git checkout abilities
composer install
composer require wordpress/mcp-adapter

编辑说明:这些是待执行的教学命令,本次未运行。Git 的 SSH 地址需要你具备相应认证;应在开发环境和干净工作目录操作。Composer 安装可能运行依赖声明的脚本并更改锁文件,应先检查依赖与锁定版本。这里没有删除数据的命令。

插件本来就使用 Composer 管理依赖。在主文件 list-all-urls.php 底部加入:

if ( ! class_exists( WP\MCP\Core\McpAdapter::class ) ) {
    return;
}
WP\MCP\Core\McpAdapter::instance();

add_action( 'mcp_adapter_init', 'list_all_urls_create_custom_mcp_server' );
function list_all_urls_create_custom_mcp_server( $adapter ) {
    $adapter = WP\MCP\Core\McpAdapter::instance();
    $adapter->create_server(
        'list-all-urls-mcp-server',
        'list-all-urls-mcp-server',
        'mcp',
        'List All URLS MCP Server',
        'Custom MCP Server for the List All URLs plugin. Currently exposes only the list-all-urls/urls ability as an MCP Tool.',
        'v1.0.0',
        array( \WP\MCP\Transport\HttpTransport::class ),
        \WP\MCP\Infrastructure\ErrorHandling\ErrorLogMcpErrorHandler::class,
        \WP\MCP\Infrastructure\Observability\NullMcpObservabilityHandler::class,
        array( 'list-all-urls/urls' ),
    );
}

因为自定义服务器显式列出了 list-all-urls/urls,无需再为这项 Ability 设置 meta.mcp.public。这仍不意味着省略它的权限回调。接着在 WordPress 后台启用 List All URLs 插件,并更新 AI 客户端配置。

下面的 VS Code 配置同时包含默认服务器和插件服务器,都通过 STDIO 连接:

{
  "servers": {
    "wordpress-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/path/to/your/wordpress/installation",
        "mcp-adapter", "serve",
        "--server=mcp-adapter-default-server",
        "--user={mcp_user}"
      ]
    },
    "list-all-urls-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/path/to/your/wordpress/installation",
        "mcp-adapter", "serve",
        "--server=list-all-urls-mcp-server",
        "--user={mcp_user}"
      ]
    }
  }
}

同一个 AI 应用可以配置多个 MCP 服务器,用来切换不同站点或插件的能力集合。修改配置后,按客户端要求重启应用或启动服务器。看到新服务器后,就可以要求:“列出我的 WordPress 站点的所有 URL。”客户端将通过适配器调用 list-all-urls-urls 工具。

安全与最佳实践

MCP 客户端以已登录 WordPress 用户的身份行事,因此它属于应用的访问面,需要遵循以下原则:

  • 认真实现 permission_callback。每项能力检查完成该任务所需的最低权限,例如 manage_options 或 edit_posts;删除内容等破坏性操作不要使用 __return_true 直接放行。
  • 为 MCP 创建专用角色和用户,尤其在生产环境限制其权限。不要把高权限能力交给未经审查的 AI 客户端。
  • 公网 HTTP 端点优先提供只读诊断、报告和内容访问。只读数据仍可能敏感,公开网络可达也不等于可以匿名访问。
  • 按需求实现额外认证。默认方式使用应用密码;原文提到可自行实现 OAuth 或其他方法,这不代表适配器自动提供一套可直接启用的 OAuth 服务。
  • 监控并记录使用情况。通过错误和可观测性处理器接入日志系统;示例中的 NullMcpObservabilityHandler 不会替你提供完整审计。

从一个小实验开始

最小的“hello AI”路径只需要三步:注册 Ability,加载并初始化 MCP Adapter,然后连接支持 MCP 的 AI 客户端。如果插件已经使用 Abilities API,新增的适配工作通常很少。

从少量非破坏性的只读工具开始,在本地客户端中验证,再逐步扩展到复杂能力和工作流。遇到问题时,可参考 Abilities API 文档、MCP Adapter 文档,并与 WordPress AI 和开发者社区交流。这两层组合为开发 AI 辅助管理工具、客户自动化和团队工作流提供了共同基础。

原文感谢 @greenshady 与 @bph 审阅。

核验说明:本文于 2026 年 10 月 5 日读取原文全部文章正文并完成静态代码审查;未安装插件、未运行 Composer/WP-CLI、未连接站点或调用能力。WordPress 6.9 与 MCP 2025-06-18 为原文所述版本语境;客户端界面、软件包版本与 API 签名应以部署时锁定的版本为准。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容