本地wp-mcp
MCP服务器提供WP-CLI、MySQL和文件系统访问 当地飞轮 WordPress网站。
与基于REST API的WordPress MCP服务器不同,它直接通过本地的本地文件系统和进程架构进行连接,不需要应用程序密码、HTTP端点或网络请求。
特性
- WP-CLI执行 通过本地捆绑的PHP二进制文件和命令allowling
- 直接MySQL查询 通过Unix套接字连接池
- 文件系统操作 具有路径验证和WordPress核心保护
- 多站点支持 具有自动位置检测功能
sites.json - 安全第一:
spawn()仅(否exec()),符号链接安全路径验证,分层命令权限
工具
| 工具 | 说明 |
|---|---|
wp_cli_run | 执行任何WP-CLI命令 |
wp_site_info | 获取WordPress版本、URL、主题、插件 |
wp_list_sites | 按飞轮列出所有本地站点 |
mysql_query | 运行SQL查询(默认情况下为只读) |
mysql_schema | 检查数据库表和列 |
wp_active_plugins | 通过直接数据库查询获取活动插件 |
read_site_file | 从站点目录读取文件 |
write_site_file | 写入文件(仅限wp内容,核心保护) |
list_site_directory | 列出目录内容 |
search_site_files | 按名称模式搜索文件 |
设置
有两种方法可以运行此MCP服务器: 来自npm (建议一般使用)或 从本地克隆 (用于开发或定制)。
重要:全部env值必须是字符串(例如。,"true"不true).
______________________________________________________________________
选项A:从npm安装(推荐)
这是最简单的方法。npm会自动下载并缓存包,无需克隆或构建。
自动设置(克劳德代码)
从本地站点的项目目录中:
cd ~/Local\ Sites/mysite/app/public
npx -y @chrisfromthelc/local-wp-mcp --setup这将自动检测本地站点,创建 .mcp.json (或合并到现有的),并预填充 SITE_NAME 写入权限设置为 false.重新启动Claude Code以进行连接。
手动设置
请在下面选择您的代理。每个示例都使用 npx 运行服务器--替换 "My Site Name" 名称显示在Local中。
Claude Code
添加一个 .mcp.json 到您的项目根(例如。, ~/Local Sites/mysite/app/public/.mcp.json):
{
"mcpServers": {
"local-wp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"FS_ALLOW_WRITES": "false"
}
}
}
}或者通过CLI添加:
claude mcp add -s project local-wp -- npx -y @chrisfromthelc/local-wp-mcp然后设置环境变量 claude mcp add-json 或通过编辑 .mcp.json 直接。
Claude Desktop
编辑配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"local-wp": {
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"FS_ALLOW_WRITES": "false"
}
}
}
}重新启动Claude Desktop以进行连接。
Cursor
添加一个 .cursor/mcp.json 到项目根目录,或编辑 ~/.cursor/mcp.json 对于全局配置:
{
"mcpServers": {
"local-wp": {
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"FS_ALLOW_WRITES": "false"
}
}
}
}或者从光标设置>工具和MCP>新MCP服务器添加。
VS Code (GitHub Copilot)
添加一个 .vscode/mcp.json 到您的工作区根目录:
{
"servers": {
"local-wp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"FS_ALLOW_WRITES": "false"
}
}
}
}备注:VS代码使用"servers"(不是"mcpServers")并要求"type": "stdio".
或者使用命令选项板: MCP:添加服务器.
Windsurf
编辑配置文件:
- macOS:
~/.codeium/windsurf/mcp_config.json - 窗户:
%USERPROFILE%\.codeium\windsurf\mcp_config.json
{
"mcpServers": {
"local-wp": {
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"FS_ALLOW_WRITES": "false"
}
}
}
}或者使用命令选项板: MCP:添加服务器.
______________________________________________________________________
选项B:从源代码安装(开发)
如果要修改服务器、运行测试或贡献更改,请使用此选项。您克隆仓库,构建一次,然后指向 .mcp.json 在您的本地构建输出中。
1.克隆和构建
git clone https://github.com/chrisfromthelc/local-wp-mcp.git
cd local-wp-mcp
npm install
npm run build2.配置您的代理
将代理的配置指向本地 dist/index.js 而不是使用npx。使用与中所示相同的配置格式 手动设置 部分为您的代理,但替换 command 和 args:
"command": "node",
"args": ["/absolute/path/to/local-wp-mcp/dist/index.js"]备注:路径必须是绝对的(例如。, /Users/you/Projects/local-wp-mcp/dist/index.js).代理生成进程时,相对路径将无法正确解析。3.更改后重建
编辑源文件后,在重新启动代理之前重新生成:
npm run build您还可以使用 npm run dev 在开发过程中观察变化并自动重建。
开发命令
npm run lint # ESLint
npm run build # TypeScript compile
npm test # unit tests (single run)
npm run test:watch # unit tests (watch mode)
npm run test:coverage # unit tests with coverage report______________________________________________________________________
在npm和local之间切换
要从npm切换到local(反之亦然),请更新 command 和 args 在代理的配置中:
| 方法 | command | args |
|---|---|---|
| npm(npx) | "npx" | ["-y", "@chrisfromthelc/local-wp-mcp"] |
| 本地克隆 | "node" | ["/absolute/path/to/dist/index.js"] |
其他一切(env,服务器名称)保持不变。切换后重新启动代理。
______________________________________________________________________
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
SITE_NAME | 站点名称如Local中所示(例如。, "My Site") | 如果只有一个站点存在,则自动检测 |
SITE_ID | 本地站点ID(优先于 SITE_NAME) | — |
WPCLI_ALLOW_WRITES | 启用写入WP-CLI命令(plugin install, post create等等) | "false" |
MYSQL_ALLOW_WRITES | 启用 INSERT/UPDATE/DELETE/ALTER 查询 | "false" |
FS_ALLOW_WRITES | 通过以下方式启用写入文件 write_site_file (WordPress核心目录始终是只读的) | "false" |
WPCLI_SAFE_COMMANDS | 以逗号分隔的附加只读命令列表(请参见 插件CLI命令) | — |
如果本地中只存在一个站点, SITE_NAME 和 SITE_ID 两者都可以省略——服务器将自动连接到它。
插件CLI命令
此MCP服务器不仅限于核心WP-CLI命令,它还自动支持插件(WooCommerce、ACF、Yoast、Elementor等)注册的命令。
运作原理
WP-CLI命令使用三层系统进行分类:
| 层级 | 行为 | 示例 |
|---|---|---|
| 已屏蔽 | 始终被拒绝(任意代码执行) | eval, eval-file, shell |
| 只读 | 始终允许 | 核心安全命令+任何具有只读动作动词的命令 |
| 写 | 需要 WPCLI_ALLOW_WRITES=true | 其他一切 |
只读动作动词 --任何子命令为以下命令之一的命令都会自动被允许,无论它是核心命令还是插件命令:
list, get, search, check, status, path, info, version, is-installed, check-update, pluck, has
这意味着命令如下 wc product list, acf field get my-group,或 yoast index status 开箱即用——无需配置。
带有写动作动词的命令,如 wc product create, acf field delete,或 yoast index run 除非被阻止 WPCLI_ALLOW_WRITES=true 已设置。
自定义安全命令
如果插件具有与内置动词模式不匹配的只读命令(例如。, wc report sales),您可以使用将其列入白名单 WPCLI_SAFE_COMMANDS 环境变量:
{
"mcpServers": {
"local-wp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@chrisfromthelc/local-wp-mcp"],
"env": {
"SITE_NAME": "My Site Name",
"WPCLI_ALLOW_WRITES": "false",
"MYSQL_ALLOW_WRITES": "false",
"WPCLI_SAFE_COMMANDS": "wc report sales,wc report customers,my-plugin dump-config"
}
}
}
}命令在 WPCLI_SAFE_COMMANDS 始终允许在不启用写入的情况下进行。使用逗号分隔的值,匹配命令的前2-3个单词。
安全
- 所有命令都使用
spawn()带参数数组--无shell解释 - 命令和参数中都拒绝了Shell元字符作为深度防御
- WP-CLI
eval,eval-file,以及shell总是被封锁 - 危险旗帜(
--exec,--require,--ssh等)在所有命令中都被阻止 - 写操作需要通过env-vars显式选择加入
- 带有只读动词的插件命令会被自动检测和允许
- 文件路径已通过验证
realpath()防止符号链接遍历 - 文件读写使用开放句柄来缓解TOCTU竞争情况
- WordPress核心目录(
wp-admin/,wp-includes/)是只读的 - 子进程仅继承必要的环境变量
- 目录搜索限制为10000个文件,以防止资源耗尽
- 输出被截断为25000个字符,以保留上下文窗口
需求
- 当地飞轮 安装
- Node.js 18+
- 站点必须在本地运行(服务已启动)
许可证
麻省理工学院
