WordPress MCP 服务器

一个用于WordPress集成的强大、安全的模型上下文协议(MCP)服务器,支持通过REST API与WordPress站点交互,具有全面的错误处理、安全最佳实践和类型安全。

  • by DannyyTv
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 DannyyTv/WordPress-MCP-Server

使用说明

WordPress MCP服务器

用于WordPress集成的强大、安全的模型上下文协议(MCP)服务器。该服务器允许Claude Desktop和Claude Code通过REST API与WordPress网站交互,提供全面的错误处理、安全最佳实践和类型安全。

特性

  • ✅ 完整的WordPress集成:创建、更新、删除和列出帖子
  • 🔒 安全第一:应用程序密码验证、标准TLS验证、输入验证
  • 🛡️ 稳健的错误处理:全面的错误捕捉和用户友好的消息
  • 📝 类型安全:带Zod验证的完整TypeScript实现
  • 🚀 演出:可配置超时、连接测试、优化请求
  • 📊 监控:具有可配置级别的结构化日志记录
  • 🔄 MCP兼容性:适用于Claude Desktop和Claude Code(基于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
      • 窗户(翼子板): winget install OpenJS.NodeJS.LTS
    • 验证:运行 node --version 在您的终端
  • npm (节点包管理器)-通常与Node.js一起安装
    • 验证:运行 npm --version 在您的终端
  • WordPress网站 启用REST API
  • 您的WordPress应用程序密码 (在下面的设置说明中创建)

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

方法1:克劳德桌面(推荐)

这是将WordPress MCP服务器与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编译为JavaScript dist/ 文件夹
  • 这两个步骤都是 强制性的 让Claude Desktop执行服务器

步骤2:创建WordPress应用程序密码

  1. 转到您的WordPress管理员: Users > Profile
  2. 滚动到“应用程序密码”
  3. 输入类似“Claude Desktop MCP”的名称
  4. 点击“添加新应用程序密码”
  5. 复制生成的密码(下一步您将需要它)

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

你的WordPress REST API URL通常是:

https://your-site.com

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

步骤4:添加到Claude桌面配置

打开您的Claude Desktop配置文件:

  • Mac/Linux: ~/.config/Claude/claude_desktop_config.json
  • 视窗: %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 以使更改生效。

WordPress工具将在Claude中可用。如果您收到“连接失败”错误:

  1. 验证是否安装了Node.js: node --version 应显示18.0.0或更高
  2. 验证路径 dist/index.js 配置正确
  3. 验证您是否完成了步骤1(npm安装和npm运行构建)

方法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(推荐): 在中设置凭据 env 领域 claude_desktop_config.json (见上述方法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以使更改生效。

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

      • 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).

手动请求测试

# Initialize the server:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0.0"}}}' | npm start

# List available tools:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | npm start

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

方法三:开发模式

对于热重载开发:

npm run dev

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

日志记录和调试

基于文件的日志记录

此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 -控制详细程度

设置日志记录级别(错误、警告、信息、调试):

{
  "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 如果不需要记录

运输与兼容性

基于标准的通信

此MCP服务器使用 标准输入/输出 用于JSON-RPC 2.0通信。服务器从标准输入读取JSON-RPC请求,并将响应写入标准输出。该设计实现了与Claude工具的直接流程集成。

兼容客户端

  • ✅ Claude桌面版:通过进程生成提供全面支持
  • ✅ 克劳德代码:通过stdio管道提供全面支持
  • ❌ HTTP/REST工具:不兼容(无HTTP端点)
  • ❌ 基于浏览器的工具:不兼容(需要执行本机进程)
  • ❌ 网络服务:不兼容(没有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数组(可选)

例子:

Create a new blog post with the title "Hello World" and content "This is my first post using the MCP server!"

update_wordpress_post

更新现有的WordPress帖子。

参数:

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

例子:

Update post ID 123 to change the status to "publish" and update the title to "Updated Title"

delete_wordpress_post

删除WordPress帖子。

参数:

  • id (必填):要删除的帖子ID
  • force:永久删除(true)或移至垃圾桶(false)-默认值: false

例子:

Delete post ID 456, moving it to trash

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

例子:

List the 5 most recent published posts with content

get_wordpress_post

按ID获取一篇包含完整内容的WordPress帖子。

参数:

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

例子:

Get post ID 123 with full details

get_wordpress_categories

获取具有可选分页的WordPress内容组织类别。

参数:

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

退货: 类别列表,包括名称、标题、描述和帖子数量。

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

例子:

Get WordPress categories (first page with 100 results)
Get WordPress categories page 2
Get WordPress categories page 1 with 50 results per page

get_wordpress_tags

获取WordPress标签,用于使用可选分页进行内容标记。

参数:

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

退货: 带有名称、slug、描述和帖子数的标签列表。

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

例子:

Get WordPress tags (first page with 100 results)
Get WordPress tags page 2
Get WordPress tags page 1 with 50 results per page

test_wordpress_connection

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

例子:

Test the WordPress connection

安全特性

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

配置选项

环境变量 .env:

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

# Optional
MCP_SERVER_NAME=wordpress-mcp
MCP_SERVER_VERSION=1.0.0
LOG_LEVEL=info                 # error, warn, info, debug
REQUEST_TIMEOUT=30000          # milliseconds

发展

# Install dependencies
npm install

# Development with hot reload
npm run dev

# Build for production
npm run build

# Run linting
npm run lint

# Type checking
npm run type-check

故障排除

常见问题

  1. 身份验证失败(401)

    • 验证用户名和应用程序密码
    • 检查WordPress中是否启用了应用程序密码
  2. 拒绝许可(403)

    • 确保用户拥有 publish_posts 能力
    • 尝试使用管理员角色
  3. 找不到REST API(404)

    • 验证WordPress REST API是否已启用
    • 检查安全插件是否阻止API访问
  4. 连接超时

    • 增加 REQUEST_TIMEOUT 价值
    • 检查WordPress网站的可访问性
  5. 超出费率限制(429)

    • 在发出更多请求之前等待
    • 考虑实现请求排队

调试模式

启用带有详细输出的调试日志记录:

# Development mode with hot reload and debug logging
LOG_LEVEL=debug npm run dev

# Or production mode with debug logging
LOG_LEVEL=debug npm start

测试连接

使用内置连接测试:

# Calls the built-in MCP tool over stdin to verify credentials/connectivity
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"test_wordpress_connection","arguments":{}}}' | npm start

建筑

  • src/index.ts:主MCP服务器实现,有8个可用工具
  • src/wordpress-api.ts:WordPress REST API客户端,具有安全功能和类型安全
  • src/types.ts:TypeScript接口和Zod验证模式(WordPressPost、WordPressCategory、WordPressTag等)
  • src/logger.ts:具有可配置日志级别的结构化日志记录实施

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 通过测试进行更改
  4. 跑 npm run lint 和 npm run type-check
  5. 提交拉取请求

支持

对于问题和疑问:

  1. 检查故障排除部分
  2. 验证您的WordPress配置
  3. 启用调试日志记录的测试
  4. 查看服务器日志以获取详细的错误信息

关于作者

  • 主页:https://mindsnapz.de
  • 应用程序:https://mindsnapz.de/pomodash/