返回市场
WordPress-MCP-服务器

WordPress-MCP-服务器

作者:DannyyTv2 星标更新:2025-10-29

项目介绍

WordPress MCP Server

一个强大且安全的Model Context Protocol (MCP)服务器,用于与WordPress集成。此服务器允许Claude Desktop和Claude Code通过REST API与WordPress站点进行交互,具有全面的错误处理、最佳的安全实践和类型安全性。

功能

  • 完整的WordPress集成:创建、更新、删除和列出帖子
  • 🔒 安全第一:应用密码验证、标准TLS验证、输入验证
  • 🛡️ 强大的错误处理:全面捕获错误并提供用户友好的消息
  • 📝 类型安全性:完全使用TypeScript实现,并使用Zod进行验证
  • 🚀 性能:可配置超时、连接测试、优化请求
  • 📊 监控:具有可配置级别的结构化日志记录
  • 🔄 MCP兼容性:与Claude Desktop和Claude Code(基于Stdio)兼容
  • 🔌 Stdio传输:使用标准输入/输出进行JSON-RPC 2.0通信

快速开始

系统需求

必需:

  • Node.js 18.0.0或更高版本 ⚠️ 必须安装 - Claude Desktop使用Node.js来执行此MCP服务器
    • 下载:https://nodejs.org/
    • 快速安装命令:
      • macOS (Homebrew): brew install node
      • macOS/Linux (nvm): curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash && source ~/.nvm/nvm.sh && nvm install --lts
      • Windows (winget): winget install OpenJS.NodeJS.LTS
    • 验证:在终端中运行 node --version
  • npm (Node Package Manager) - 通常与Node.js一起安装
    • 验证:在终端中运行 npm --version
  • 一个启用了REST API的WordPress站点
  • 你的WordPress应用密码(在下面的设置说明中创建)

如果没有安装Node.js,Claude Desktop无法运行此服务器。

方法1:Claude Desktop(推荐)

这是使用WordPress MCP Server与Claude Desktop最简单的方法。

步骤1:构建和设置服务器

⚠️ 这一步是必需的。 Claude Desktop需要编译后的dist/文件夹和依赖项来运行。

git clone https://github.com/DannyyTv/WordPress-MCP-Server.git
cd WordPress-MCP-Server
npm install
npm run build

这些步骤的作用:

  • npm install - 下载所有所需的Node.js依赖项(服务器所需)
  • npm run build - 将TypeScript编译到dist/文件夹中的JavaScript
  • 这两个步骤都是必需的,以便Claude Desktop能够执行服务器

步骤2:创建WordPress应用密码

  1. 前往你的WordPress管理界面:用户 > 个人资料
  2. 滚动到“应用密码”
  3. 输入一个名称,如“Claude Desktop MCP”
  4. 点击“添加新应用密码”
  5. 复制生成的密码(你将在下一步中使用它)

步骤3:获取你的WordPress REST API URL

你的WordPress REST API URL通常是:

https://your-site.com

/wp-json/wp/v2/部分会由服务器自动添加)

步骤4:添加到Claude Desktop配置

打开你的Claude Desktop配置文件:

  • Mac/Linux: ~/.config/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

mcpServers下添加以下配置:

{
  "mcpServers": {
    "wordpress": {
      "command": "node",
      "args": ["/Users/YOUR-USERNAME/WordPress-MCP-Server/dist/index.js"],
      "env": {
        "WORDPRESS_URL": "https://your-wordpress-site.com",
        "WORDPRESS_USERNAME": "your-email@example.com",
        "WORDPRESS_APP_PASSWORD": "your-application-password"
      }
    }
  }
}

重要: 替换实际的WordPress凭证:

  • WORDPRESS_URL: 你的WordPress站点URL(例如,https://mindsnapz.de
  • WORDPRESS_USERNAME: 你的WordPress用户名或电子邮件
  • WORDPRESS_APP_PASSWORD: 在步骤2中创建的应用密码

步骤5:重启Claude Desktop

更新配置后,完全关闭并重新启动Claude Desktop以使更改生效。

然后,WordPress工具将在Claude中可用。如果遇到“连接失败”错误:

  1. 验证Node.js已安装:node --version 应显示18.0.0或更高版本
  2. 验证dist/index.js路径在配置中是否正确
  3. 验证已完成步骤1(npm install & npm run build)

方法2:命令行/测试

为了本地测试服务器或在自动化脚本中使用:

使用环境变量

export WORDPRESS_URL=https://your-wordpress-site.com
export WORDPRESS_USERNAME=your-email@example.com
export WORDPRESS_APP_PASSWORD=your-application-password

npm run build
npm start

使用.env文件

cp .env.example .env

编辑.env文件,填写你的WordPress凭证:

WORDPRESS_URL=https://your-wordpress-site.com
WORDPRESS_USERNAME=your-email@example.com
WORDPRESS_APP_PASSWORD=your-application-password

然后运行:

npm run build
npm start

注意:.env文件从进程的当前工作目录加载。如果GUI应用程序(如Claude Desktop)从不同的工作目录启动进程,则可能找不到.env文件。在这种情况下,请将变量设置为操作系统环境变量或确保进程从仓库目录运行。

对于Claude Desktop特别:

  • 选项1(推荐):claude_desktop_config.jsonenv字段中设置凭证(参见方法1,步骤4)
  • 选项2: 设置系统范围的环境变量:
    • macOS:添加到~/.zprofile~/.bash_profile

      export WORDPRESS_URL="https://your-site.com"
      export WORDPRESS_USERNAME="your-email@example.com"
      export WORDPRESS_APP_PASSWORD="your-app-password"
      

      重启Claude Desktop以使更改生效。

    • Windows:设置 > 系统 > 环境变量 > 新用户变量:

      • WORDPRESS_URL = https://your-site.com
      • WORDPRESS_USERNAME = your-email@example.com
      • WORDPRESS_APP_PASSWORD = your-app-password

      重启Claude Desktop以使更改生效。

    • Linux:添加到~/.bashrc~/.zshrc

      export WORDPRESS_URL="https://your-site.com"
      export WORDPRESS_USERNAME="your-email@example.com"
      export WORDPRESS_APP_PASSWORD="your-app-password"
      

      重启Claude Desktop(或运行source ~/.bashrc)。

手动请求测试

# 初始化服务器:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0.0"}}}' | npm start

# 列出可用工具:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | npm start

# 测试WordPress连接:
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"test_wordpress_connection","arguments":{}}}' | npm start

方法3:开发模式

为了热重载开发:

npm run dev

然后在另一个终端中,按照方法2所示进行MCP请求测试。

日志记录与调试

文件日志记录

此MCP服务器使用文件日志记录以防止干扰Stdio JSON-RPC通信。所有日志消息都写入日志文件而不是stdout/stderr。

默认日志文件位置:

~/.wordpress-mcp/server.log

实时查看日志:

tail -f ~/.wordpress-mcp/server.log

查看最近的日志:

cat ~/.wordpress-mcp/server.log

日志配置

你可以使用环境变量自定义日志行为:

LOG_FILE - 自定义日志路径

覆盖默认的日志文件位置:

{
  "mcpServers": {
    "wordpress": {
      "command": "node",
      "args": ["/path/to/WordPress-MCP-Server/dist/index.js"],
      "env": {
        "WORDPRESS_URL": "https://your-site.com",
        "WORDPRESS_USERNAME": "your-email@example.com",
        "WORDPRESS_APP_PASSWORD": "your-app-password",
        "LOG_FILE": "/custom/path/to/server.log"
      }
    }
  }
}

DISABLE_LOGGING - 完全禁用日志

关闭日志以减少开销:

{
  "mcpServers": {
    "wordpress": {
      "command": "node",
      "args": ["/path/to/WordPress-MCP-Server/dist/index.js"],
      "env": {
        "WORDPRESS_URL": "https://your-site.com",
        "WORDPRESS_USERNAME": "your-email@example.com",
        "WORDPRESS_APP_PASSWORD": "your-app-password",
        "DISABLE_LOGGING": "true"
      }
    }
  }
}

LOG_LEVEL - 控制详细程度

设置日志级别(error, warn, info, debug):

{
  "mcpServers": {
    "wordpress": {
      "command": "node",
      "args": ["/path/to/WordPress-MCP-Server/dist/index.js"],
      "env": {
        "WORDPRESS_URL": "https://your-site.com",
        "WORDPRESS_USERNAME": "your-email@example.com",
        "WORDPRESS_APP_PASSWORD": "your-app-password",
        "LOG_LEVEL": "debug"
      }
    }
  }
}

日志问题排查

问题:日志文件未创建

  • 日志文件仅在服务器写入第一条日志消息时创建
  • 尝试向服务器发送请求以触发日志记录
  • 检查目录~/.wordpress-mcp/是否存在

问题:写入日志时权限被拒绝

  • 如果服务器无法写入默认位置,它会自动回退到/tmp/wordpress-mcp-server.log
  • 检查~/.wordpress-mcp/的文件权限
  • 或者设置一个具有写权限的自定义LOG_FILE路径

问题:日志文件过大

  • 日志无限追加
  • 手动清除日志文件:> ~/.wordpress-mcp/server.log
  • 或者设置DISABLE_LOGGING=true,如果不需要日志

传输与兼容性

基于Stdio的通信

此MCP服务器使用**Stdio(标准输入/输出)**进行JSON-RPC 2.0通信。服务器从标准输入读取JSON-RPC请求,并将响应写入标准输出。这种设计使得可以直接与Claude工具集成。

兼容客户端

  • Claude Desktop:通过进程启动完全支持
  • Claude Code:通过stdio管道完全支持
  • HTTP/REST工具:不兼容(没有HTTP端点)
  • 基于浏览器的工具:不兼容(需要本地进程执行)
  • Web服务:不兼容(没有HTTP服务器)

为什么只使用Stdio?

Stdio传输提供了:

  • 无网络开销的直接进程通信
  • 安全凭证 - 环境变量保持本地,永远不会通过网络传输
  • 紧密集成 与Claude Desktop/Code的子进程执行模型
  • 简洁性 - 不需要HTTP服务器、端口绑定或网络配置

未来传输选项

对于其他传输方式(HTTP/SSE),需要单独实现。目前,此服务器专注于与Claude原生工具的最佳集成。

可用工具

create_wordpress_post

创建一个新的WordPress帖子。

参数:

  • title(必需):帖子标题(最多255个字符)
  • content(必需):帖子内容(HTML或纯文本)
  • status:帖子状态(publish, draft, private) - 默认:draft
  • excerpt:帖子摘要(可选)
  • categories:类别ID数组(可选)
  • tags:标签ID数组(可选)

示例:

创建一个标题为“Hello World”的新博客帖子,内容为“这是使用MCP服务器发布的第一个帖子!”

update_wordpress_post

更新现有的WordPress帖子。

参数:

  • id(必需):要更新的帖子ID
  • title:新的标题(可选)
  • content:新的内容(可选)
  • status:新的状态(可选)
  • excerpt:新的摘要(可选)
  • categories:新的类别ID(可选)
  • tags:新的标签ID(可选)

示例:

更新帖子ID 123,将其状态更改为“publish”,并将标题更改为“更新后的标题”

delete_wordpress_post

删除WordPress帖子。

参数:

  • id(必需):要删除的帖子ID
  • force:永久删除(true)或将帖子移至回收站(false) - 默认:false

示例:

删除帖子ID 456,将其移至回收站

list_wordpress_posts

列出WordPress帖子,带有过滤选项。

参数:

  • per_page:每页帖子数(1-100) - 默认:10
  • page:页码 - 默认:1
  • status:按状态筛选(publish, draft, private, pending, future, any) - 默认:any
  • search:标题和内容的搜索词
  • author:按作者ID筛选
  • categories:按类别ID筛选
  • tags:按标签ID筛选
  • order:排序顺序(asc, desc) - 默认:desc
  • orderby:按字段排序(date, id, title, slug, modified) - 默认:date
  • include_content:在结果中包含帖子内容预览 - 默认:false

示例:

列出最近发布的5篇帖子及其内容

get_wordpress_post

通过ID获取单个WordPress帖子及其全部内容。

参数:

  • id(必需):要检索的帖子ID
  • context:请求上下文(view, embed, edit) - 默认:edit

示例:

获取帖子ID 123的全部详情

get_wordpress_categories

获取WordPress类别,用于内容组织,带有可选分页。

参数:

  • per_page:每页结果数(1-100) - 默认:100
  • page:页码 - 默认:1

返回值: 类别列表,包括名称、slug、描述和帖子数量。

注意: 较大的per_page值可能导致较大的响应大小。为了最佳性能,使用per_page: 10-20用于类别/标签。

示例:

获取WordPress类别(第一页,100个结果)
获取WordPress类别第二页
获取WordPress类别第一页,每页50个结果

get_wordpress_tags

获取WordPress标签,用于内容标记,带有可选分页。

参数:

  • per_page:每页结果数(1-100) - 默认:100
  • page:页码 - 默认:1

返回值: 标签列表,包括名称、slug、描述和帖子数量。

注意: 较大的per_page值可能导致较大的响应大小。为了最佳性能,使用per_page: 10-20用于类别/标签。

示例:

获取WordPress标签(第一页,100个结果)
获取WordPress标签第二页
获取WordPress标签第一页,每页50个结果

test_wordpress_connection

测试WordPress API连接和身份验证。

示例:

测试WordPress连接

安全特性

  • 应用密码认证:安全、可撤销的身份验证
  • TLS证书验证:使用Node/Axios标准TLS验证;无不安全覆盖
  • 输入验证:使用Zod模式进行全面验证
  • 速率限制意识:适当处理WordPress速率限制
  • 错误净化:防止敏感信息泄露
  • 超时保护:可配置请求超时

配置选项

.env文件中的环境变量:

# 必需
WORDPRESS_URL=https://your-site.com
WORDPRESS_USERNAME=your-username
WORDPRESS_APP_PASSWORD=your-app-password

# 可选
MCP_SERVER_NAME=wordpress-mcp
MCP_SERVER_VERSION=1.0.0
LOG_LEVEL=info                 # error, warn, info, debug
REQUEST_TIMEOUT=30000          # 毫秒

开发

# 安装依赖
npm install

# 开发模式带热重载
npm run dev

# 构建生产版本
npm run build

# 运行代码检查
npm run lint

# 类型检查
npm run type-check

故障排除

常见问题

  1. 身份验证失败(401)

    • 验证用户名和应用密码
    • 检查WordPress中是否启用了应用密码
  2. 权限被拒绝(403)

    • 确保用户具有publish_posts权限
    • 尝试使用管理员角色
  3. REST API未找到(404)

    • 验证WordPress REST API