WordPress MCP服务器
Node.js服务器,使用模型上下文协议(MCP)包装了Wordpress REST API。 可以在AI代理中查看、创建、修改和删除您的Wordpress帖子。
项目结构
├── src/
│ ├── config.ts # 환경 변수 로드 및 설정 타입 정의
│ ├── logger.ts # stderr 기반 로거 (STDIO 모드 안전)
│ ├── wordpress-client.ts # WordPress REST API 클라이언트
│ ├── server.ts # MCP 서버 생성 + Tool 등록 (공통 로직)
│ ├── stdio.ts # STDIO 전송 방식 진입점
│ └── sse.ts # Streamable HTTP + 레거시 SSE 전송 방식 진입점
├── dist/ # TypeScript 빌드 출력
├── .env.example # 환경 변수 예시
├── package.json
└── tsconfig.json体系结构
┌─────────────┐ ┌──────────────────────────┐
│ stdio.ts │ │ sse.ts │
│ (StdioTx) │ │ (Express) │
│ │ │ ┌─────────────────────┐ │
│ │ │ │ Streamable HTTP │ │
│ │ │ │ POST|GET|DELETE /mcp │ │
│ │ │ ├─────────────────────┤ │
│ │ │ │ Legacy SSE │ │
│ │ │ │ GET /sse │ │
│ │ │ │ POST /messages │ │
│ │ │ └─────────────────────┘ │
└──────┬──────┘ └────────────┬─────────────┘
│ │
└───────────┬─────────────┘
│
┌───────▼───────┐
│ server.ts │
│ (McpServer + │
│ Tool 정의) │
└───────┬───────┘
│
┌─────────▼─────────┐
│ wordpress-client │
│ (REST API 호출) │
└─────────┬─────────┘
│
┌───────▼───────┐
│ WordPress │
│ /wp-json/v2 │
└───────────────┘server.ts的 createServer()是公共逻辑层,STDIO和SSE使用相同。
前提条件
- Node.js 18+
- 访问网站(REST API激活状态)
- Wordpress应用程序密码或Bearer Token
WordPress应用程序密码발급
- 访问管理器>用户>配置文件
- 在“应用程序密码”部分输入名称并创建
- 复制显示的密码(保留空白)
安装
npm install
npm run build设置环境变量
cp .env.example .env.env 编辑文件:
# WordPress 사이트 URL (trailing slash 없이)
WORDPRESS_BASE_URL=https://your-wordpress-site.com
# 인증 방식 1: Application Password (권장)
WORDPRESS_USERNAME=admin
WORDPRESS_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
# 인증 방식 2: Bearer Token (Application Password 대신 사용)
# WORDPRESS_TOKEN=your-bearer-token
# SSE 서버 포트 (기본값: 3000)
SSE_PORT=3000
# 자체 서명 인증서 허용 (로컬 HTTPS 개발 환경에서 사용)
# WORDPRESS_TLS_REJECT_UNAUTHORIZED=false| 变量 | 必需 | 说明 |
|---|---|---|
WORDPRESS_BASE_URL | O | Word网站URL |
WORDPRESS_USERNAME △使用应用密码 | ||
WORDPRESS_APP_PASSWORD △使用应用密码 | ||
WORDPRESS_TOKEN △使用Bearer Token时 | ||
SSE_PORT | X | SSE服务器端口(默认值:3000) |
WORDPRESS_TLS_REJECT_UNAUTHORIZED 十、 false 设置时允许自签名证书 |
WORDPRESS_TOKEN如果启用,请使用Bearer身份验证,否则 WORDPRESS_USERNAME + WORDPRESS_APP_PASSWORD使用Basic认证。
执行
STDIO模式
如何在本地MCP客户端(Claude Desktop、Claude Code等)上使用。
# 빌드 후 실행
npm run start:stdio
# 개발 모드 (tsx 직접 실행)
npm run dev:stdioSSE(HTTP)模式
通过HTTP从远程MCP客户端连接。 流式HTTP(最新)和 传统SSE(兼容旧版客户端)同时支持两种协议。
# 빌드 후 실행
npm run start:sse
# 개발 모드
npm run dev:sse服务器启动后可用的端点:
Streamable HTTP(最新协议)
| 方法 | 路径 | 说明 |
|---|---|---|
POST | /mcp JSON-RPC请求处理(初始化+工具调用) | |
GET | /mcp | SSE流(服务器→客户端通知) |
DELETE | /mcp | 终止会话 |
Legacy SSE(与旧版客户端兼容)
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /sse | SSE流连接(创建会话) |
POST | /messages?sessionId=... 发送JSON-RPC消息 |
共同
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /health | 检查服务器状态 |
客户端设置
克劳德桌面版
claude_desktop_config.json:
{
"mcpServers": {
"wordpress": {
"command": "node",
"args": ["/절대경로/wordpress-mcp-server/dist/stdio.js"],
"env": {
"WORDPRESS_BASE_URL": "https://your-site.com",
"WORDPRESS_USERNAME": "admin",
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
}
}
}
}克劳德代码
claude mcp add wordpress -- node /절대경로/wordpress-mcp-server/dist/stdio.js或 .mcp.json:
{
"mcpServers": {
"wordpress": {
"command": "node",
"args": ["/절대경로/wordpress-mcp-server/dist/stdio.js"],
"env": {
"WORDPRESS_BASE_URL": "https://your-site.com",
"WORDPRESS_USERNAME": "admin",
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
"WORDPRESS_TLS_REJECT_UNAUTHORIZED": "false"
}
}
}
}SSE模式客户端连接
运行SSE服务器后,从MCP客户端连接:
# Streamable HTTP 지원 클라이언트 (최신)
http://localhost:3000/mcp
# Legacy SSE 지원 클라이언트 (구버전)
http://localhost:3000/sseMCP工具
listPost
查询帖子列表。支持分页、搜索和状态过滤器。
参数类型必需说明 |----------|------|------|------| | page |number|X|页码(默认值:1)| | per_page | number | X |每页的帖子数(默认值:10,最大值:100)| | search | string | X搜索词| | status |枚举|X| publish, draft, pending, private, trash | | orderby |枚举|X| date, id, title, slug, modified | | order |枚举|X| asc, desc |
Getpost
用ID查询一个帖子。
参数类型必需说明 |----------|------|------|------| | id | number | O |帖子ID |
createPost
创建新帖子。
参数类型必需说明 |----------|------|------|------| | title | string | O |帖子标题| | content | string | O |帖子内容(可HTML)| | status |枚举|X| publish, draft, pending, private (默认值: draft) | | excerpt | string | X |帖子摘要| | categories | number\[\]X|类别ID数组| | tags | number\[\]X|标签ID数组|
更新帖子
修改现有帖子。只更改传递的字段。
参数类型必需说明 |----------|------|------|------| | id | number | O要修改的帖子ID | | title | string | X |要更改的标题| | content |string|X|要更改的内容(可HTML)| | status |枚举|X| publish, draft, pending, private | | excerpt |string|X|要更改的摘要| | categories | number\[\]X|要更改的类别ID数组| | tags |number\[\]X|要更改的标签ID数组|
删除帖子
删除帖子。
参数类型必需说明 |----------|------|------|------| | id | number | O |要删除的帖子ID | | force |布尔值|X| true永久删除双面, false移动废纸篓(默认: false) |
技术堆栈
| 项目 | 使用技巧 |
|---|
运行时Node.js 18+ 语言TypeScript(ESM) |MCP-SDK| @modelcontextprotocol/sdk ^1.26.0 | | HTTP客户端| Node.js内置 fetch | 验证方案| zod | SSE服务器Express+ StreamableHTTPServerTransport + SSEServerTransport | |WordPress API| /wp-json/wp/v2 (REST API v2)|
确定主要设计
- 公共逻辑分离:
server.ts的createServer(config)函数生成McpServer实例和所有Tool。STDIO和SSE入口点只有传输方式不同。 - stderr日志记录:在STDIO模式下,stdout仅用于JSON-RPC协议消息,因此所有日志
console.error(stderr)输出。 - 双传输协议:SSE服务器可流HTTP(
/mcp)和传统SSE(/sse+/messages)同时提供。最新客户端和旧版客户端都兼容。 - 会话管理:两种传输方式都创建独立于客户端的会话。Streamable HTTP
mcp-session-id标题,传统SSEsessionId通过查询参数识别会话。 - 错误处理:解析Wordpress API错误响应(4xx,5xx)以获得MCP
isError: true作为结果返回。代理可以理解错误内容并做出反应。
