从能力到AI代理:WordPress MCP适配器介绍
WordPress 6.9引入的Abilities API使得注册WordPress功能成为可能,这些功能是标准化、可发现、有类型且可执行的。它为WordPress开发者在整个WordPress生态系统中构建和扩展提供了坚实的基础。
这也是使WordPress为AI自动化和工作流做好准备的重要一步。借助Abilities,WordPress能够利用生成式AI当前和未来的任何发展。
近期最重要的进展之一是模型上下文协议,即MCP。
通过MCP,可以为驱动AI工具的模型提供额外的上下文。假设你正在使用一个AI工具来帮助你起草一份关于WordPress电子商务网站所有销售的报表。想象一下,如果能够安全地授予AI访问你全年所有订单的权限。如果WordPress支持MCP,这将成为可能。
幸运的是,核心AI团队已经考虑到了这一点,并发布了MCP适配器。该适配器在WordPress站点范围内实现了模型上下文协议,并允许AI工具(如Claude Desktop、Claude Code、Cursor和VS Code)直接发现和调用WordPress Abilities。
那么,让我们深入了解MCP适配器。在本文中,你将学习:
- 如何在你的WordPress插件中安装和使用MCP适配器。
- 如何将现有能力作为MCP工具公开,并提供实际示例。
- 如何将流行的AI客户端连接到启用MCP的WordPress站点(无论是本地开发环境还是可公开访问的安装),以与你的自定义MCP工具交互。
- 需要注意哪些安全考虑。
- 如何立即开始试验MCP适配器。
快速回顾:能力作为基础
如果你是第一次阅读关于WordPress Abilities的内容,可能值得阅读WordPress Abilities API介绍一文。但如果你没有时间阅读,这里有一个快速回顾。
Abilities API为WordPress提供了一个一流的、跨上下文的函数式API,它标准化了核心和插件如何公开它们能做什么。
你可以通过以下方式定义能力:
- 一个唯一的名称(
namespace/ability-name) - 一个有类型的输入模式和输出模式
- 一个强制执行权限的permission_callback
- 一个执行实际功能的execute_callback
在execute_callback中触发的功能可以是任何操作,从获取数据、更新文章、运行诊断到任何其他离散的工作单元。
一旦注册,该能力就可以从PHP、JavaScript和REST API中发现和执行。
WordPress 6.9附带了3个默认能力:
core/get-site-info:返回在WordPress中配置的站点信息。默认返回所有字段,或可选地返回过滤后的子集。core/get-user-info:返回当前认证用户的基本个人资料详情,以支持个性化、审计和访问感知行为。core/get-environment-info:返回有关站点运行时上下文的核心详细信息,用于诊断和兼容性(环境、PHP运行时、数据库服务器信息、WordPress版本)。
虽然核心能力集很小,但它们提供了一个你可以用来测试MCP适配器的基础。
什么是WordPress MCP适配器?
WordPress MCP适配器是WordPress AI构建块计划中的一个官方包。它的工作是将Abilities API注册的能力适配为模型上下文协议支持的原语,以便AI代理可以将站点功能作为MCP工具发现和执行,并将WordPress数据作为MCP资源读取。
实际上,这意味着:如果你的代码已经注册了能力,那么你距离让AI代理使用它们只有一步之遥。
MCP工具、资源和提示入门
模型上下文协议将交互组织为三个主要原语:工具,这是AI调用以执行操作的可执行函数;资源,这是AI读取以获取上下文的被动数据源(如文件或数据库行);以及提示,这是指导特定工作流的预配置模板。
使用MCP适配器,能力通常作为工具公开,因为它们代表可执行的逻辑——获取数据、更新文章或运行诊断。然而,适配器是灵活的:如果一个能力仅提供只读数据,例如调试日志或静态站点配置,它也可以配置为资源,允许AI将该信息作为后台上下文摄取,而无需主动“调用”它。
安装MCP适配器
开始使用MCP适配器的最快方法是从GitHub仓库的发布页面下载并将其作为插件安装。
插件安装并激活后,它将注册一个名为mcp-adapter-default-server的默认MCP服务器,以及三个自定义能力。
mcp-adapter/discover-abilitiesmcp-adapter/get-ability-infomcp-adapter/execute-ability
这些能力也会自动作为MCP工具公开:
mcp-adapter-discover-abilitiesmcp-adapter-get-ability-infomcp-adapter-execute-ability
这三个工具为AI代理提供了一种分层方法来访问WordPress能力。代理可以发现哪些能力可用,获取能力信息,并执行能力。
为MCP适配器默认服务器启用能力
默认情况下,能力只有在被明确标记为MCP访问公开时,才可通过MCP适配器默认服务器使用。为此,你需要在通过wp_register_ability()注册能力时,向能力注册参数添加一个meta.mcp.public标志。
'meta' => array(
'mcp' => array(
'public' => true, // MCP默认服务器访问所需
),
)
对于任何核心能力,你可以钩入wp_register_ability_args过滤器,更新它们的注册参数以包含meta.mcp.public标志。
<?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 );
/**
* Enable MCP access for core abilities.
*
* @param array $args Ability registration arguments.
* @param string $ability_name Ability ID.
* @return array Modified ability registration arguments.
*/
function myplugin_enable_core_abilities_mcp_access( array $args, string $ability_name ) {
// Enable MCP access for the three current core abilities.
$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适配器将AI客户端连接到你的WordPress站点,并通过默认服务器的MCP工具开始调用这些核心能力。
连接AI应用程序
传输方法
要与启用为MCP服务器的WordPress站点通信,有两种传输机制:STDIO和HTTP。你使用哪种通常取决于WordPress站点的位置。
对于本地WordPress开发环境,最直接的连接方式是使用STDIO传输。MCP适配器通过WP-CLI使其成为可能,因此你需要在本地安装WP-CLI。
对于STDIO传输,至少需要配置以下内容以连接到启用MCP的WordPress站点:
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/path/to/your/wordpress/installation",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user={admin_user}"
]
}
- 服务器名称在本例中是
wordpress-mcp-server。这可以是任何你选择的名称。 - 命令是
wp,即WP-CLI命令行工具 - args数组包括:
--path指向你的WordPress安装目录mcp-adapter serve启动MCP适配器服务器--server指定要使用的MCP服务器(本例中为默认服务器)--user指定要认证的WordPress用户(本例中为admin用户)
对于任何可公开访问的WordPress安装,或者如果你不想使用STDIO,你可以使用@automattic/mcp-wordpress-remote远程代理设置HTTP连接。这需要你在计算机上安装Node.js,并使用WordPress应用程序密码或自定义OAuth实现设置身份验证。
如果你使用HTTP传输,你的最小配置应如下所示:
"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": "{admin_user}",
"WP_API_PASSWORD": "{application-password}"
}
}
- 服务器名称保持不变
- 命令是
npx,它执行Node.js包 - args数组包括:
-y自动同意安装包@automattic/mcp-wordpress-remote@latest使用远程MCP代理包的最新版本
- env对象包括:
WP_API_URL指向你WordPress站点上的MCP端点WP_API_USERNAME指定要认证的WordPress用户WP_API_PASSWORD指定该用户的应用程序密码
对于通过HTTP远程代理连接的本地WordPress安装,如果你在连接时遇到任何问题,mcp-wordpress-remote包包含一些故障排除提示。通常,这些问题与安装了多个Node.js版本或本地SSL证书问题有关。
应用程序特定配置
现在让我们看看在最流行的AI应用程序(Claude Desktop、VS Code、Cursor和Claude Code)中配置MCP服务器的位置。
注意:对于以下所有示例,我使用一个名为“WordPress MCP”的Studio站点,位于/Users/jonathanbossenger/Studio/wordpress-mcp,可通过http://localhost:8885/浏览,管理员用户名为admin。请确保将这些值替换为你自己的WordPress站点路径和用户。
Claude Desktop
作为Anthropic的产品,Claude Desktop是最早内置支持MCP服务器的应用程序之一。要将MCP服务器添加到Claude Desktop,请导航到开发者选项卡(Claude → 设置 → 开发者)。在“本地MCP服务器”下点击编辑配置。

这将打开一个文件浏览器,指向claude_desktop_config.json文件的位置,你可以在其中添加MCP服务器配置。
MCP服务器被添加到此文件的mcpServers对象中。
{
"mcpServers": {
}
}
以下是使用STDIO传输连接的配置示例:
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
}
}
以下是使用HTTP传输连接的配置示例:
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "npx",
"args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
"env": {
"WP_API_URL": "http://localhost:8885/wp-json/mcp/mcp-adapter-default-server",
"WP_API_USERNAME": "admin",
"WP_API_PASSWORD": "2SEB qW5j D7CW fpsh pbmN RGva"
}
}
}
}
保存配置文件后,你必须重新启动Claude Desktop,因为它只在启动时读取MCP服务器配置。
你现在应该会在开发者选项卡下的本地MCP服务器中看到你的MCP服务器。如果你在服务器名称旁边看到running状态,你就可以开始在对话中使用它了。

Cursor
在Cursor中,导航到设置选项卡(Cursor → 设置 → Cursor设置),然后选择工具和MCP部分。

点击添加自定义MCP按钮,这将打开Cursor的mcp.json配置文件。
Cursor的配置与Claude Desktop相同。添加MCP服务器配置后,保存文件并导航回Cursor设置中的工具和MCP部分。你应该会看到你的MCP服务器列在那里,并且可以启用它以在编码会话中使用。

Claude Code
要将MCP服务器添加到Claude Code,你可以将带有相关服务器配置的mcpServers对象添加到主目录中的.claude.json文件,或者在项目目录中创建一个.mcp.json文件。将MCP服务器添加到项目目录允许你为不同的项目拥有不同的MCP服务器配置,而将它们添加到主目录则使它们全局可用于所有项目。
无论哪种方式,你都可以使用与Cursor或Claude Desktop相同的配置格式。
VS Code
配置VS Code以连接到MCP服务器需要设置一个描述MCP服务器详细信息的JSON配置文件。此文件通常命名为mcp.json,应放置在工作区内的.vscode目录中。
配置VS Code和Claude Desktop之间的唯一区别是,你在servers对象中定义MCP服务器,而不是在mcpServers对象中。其余配置相同。
{
"servers": {
// MCP服务器定义放在这里
}
}
在工作区中创建此文件后,VS Code会显示一个MCP控制工具栏,你可以在其中启动、停止和重新启动MCP服务器。

当服务器正确启动时,它还会显示AI可用的工具数量,本例中为三个。
使用MCP工具
将MCP服务器连接到你选择的AI应用程序后,你现在可以开始使用MCP适配器公开的MCP工具。
例如,在Claude Desktop中,你可以开始一个新的对话,要求Claude“从我的WordPress站点获取站点信息”。

它将确定有一个可用的MCP服务器,并调用mcp-adapter-discover-abilities工具来查看有哪些能力可用。然后它将确定core/get-site-info能力将满足请求,并调用mcp-adapter-execute-ability工具,向其传递core/get-site-info能力名称。这将返回站点信息数据,应用程序将用站点信息“回答”。
为你的插件配置自定义MCP服务器
虽然MCP适配器默认服务器应涵盖大多数需求,但你可能希望为你的插件创建自定义MCP服务器。这使你可以更好地控制能力如何作为MCP工具公开。
实现此功能需要通过Composer安装MCP适配器包,并创建和注册自定义MCP服务器。
从你的插件目录运行composer require命令:
composer require wordpress/mcp-adapter
然后,确保在主插件文件中加载Composer的自动加载器:
if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
require_once __DIR__ . '/vendor/autoload.php';
}
如果站点上的多个插件可能依赖于MCP适配器或Abilities API,官方文档建议使用Jetpack自动加载器以避免版本冲突。
下一步是在你的插件中初始化MCP适配器:
if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {
// 检查MCP适配器类是否可用,如果不可用则显示某种错误或管理通知
return;
}
// 初始化MCP适配器及其默认服务器。
WPMCPCoreMcpAdapter::instance();
最后,你可以通过钩入mcp_adapter_init操作来创建自定义MCP服务器。操作回调函数接收McpAdapter实例。适配器的create_server()方法用于定义自定义服务器及其所需配置。
add_action( 'mcp_adapter_init', 'myplugin_create_custom_mcp_server' );
function myplugin_create_custom_mcp_server( $adapter ) {
$adapter = WPMCPCoreMcpAdapter::instance();
$adapter->create_server(
'custom-mcp-server', // 唯一的服务器标识符。
'custom-mcp-server', // REST API命名空间。
'mcp', // REST API路由。
'Custom MCP Server', // 服务器名称。
'Custom MCP Server', // 服务器描述。
'v1.0.0', // 服务器版本。
array( // 传输方法。
WPMCPTransportHttpTransport::class, // 推荐:符合MCP 2025-06-18标准。
),
WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class, // 错误处理器。
WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class, // 可观察性处理器。
array( 'namespace/ability-name' ), // 要作为工具公开的能力
array(), // 资源(可选)。
array(), //