WP数据库MCP服务器
用于探索WordPress MySQL/MariaDB数据库的只读MCP服务器。提供架构检查、关系映射和安全SQL查询。
特性
- 自动检测WordPress表前缀
- 完整模式生成(JSON/CSV)
- WordPress关系映射(帖子、术语、元、用户、评论)
- 带安全护栏的原始SQL查询(仅限SELECT)
- 多站点支持
- 查询超时和行限制
- 按标题/内容搜索帖子
- 可扩展到插件表(WooCommerce、ACF等)
安全
- 只读:只允许选择、显示、描述、解释
- SQL注入保护:全程参数化查询
- 评论删除:在验证之前删除SQL注释
- 多语句阻塞:防止半导体注入
- 系统架构阻塞:无法访问
information_schema,mysql,performance_schema,sys - 关键字屏蔽:INSERT、UPDATE、DELETE、DROP、ALTER、CREATE等。
- 超时执行:MySQL MAX_EXECUION_TIME+Python异步
- 行限制:每个查询的可配置限制(最大1000)
需求
- Python 3.10+
- MySQL或MariaDB数据库
- 只读数据库用户(推荐)
安装
使用时无需安装 uvx配置后,MCP服务器会自动安装。
或者,手动安装:
pip install wp-db-mcp数据库用户设置(推荐)
创建一个专用的只读MySQL用户:
CREATE USER 'wp_mcp_reader'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT SELECT ON your_wordpress_db.* TO 'wp_mcp_reader'@'localhost';
FLUSH PRIVILEGES;环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
WP_DB_HOST | 127.0.0.1 | 数据库主机(如果设置了套接字,则忽略) |
WP_DB_PORT | 3306 | 数据库端口(如果设置了套接字,则忽略) |
WP_DB_SOCKET | (空) | Unix套接字路径(用于本地、MAMP等) |
WP_DB_USER | root | 数据库用户 |
WP_DB_PASSWORD | (空) | 数据库密码 |
WP_DB_NAME | wordpress | 数据库名称 |
WP_TABLE_PREFIX | (自动检测) | 表前缀(例如。 wp_) |
WP_MAX_ROWS | 1000 | 每个查询的最大行数 |
WP_QUERY_TIMEOUT | 30 | 查询超时(秒) |
MCP客户端配置
克劳德桌面/光标/VCode
添加到MCP设置JSON:
{
"mcpServers": {
"wp-db": {
"command": "uvx",
"args": [
"--from",
"wp-db-mcp",
"wp-db-mcp"
],
"env": {
"WP_DB_HOST": "127.0.0.1",
"WP_DB_PORT": "3306",
"WP_DB_USER": "wp_mcp_reader",
"WP_DB_PASSWORD": "your_password",
"WP_DB_NAME": "your_wordpress_db"
}
}
}
}克劳德代码
claude mcp add wp-db \
-e WP_DB_HOST=127.0.0.1 \
-e WP_DB_USER=wp_mcp_reader \
-e WP_DB_PASSWORD=secret \
-e WP_DB_NAME=mysite \
-- uvx --from wp-db-mcp wp-db-mcp飞轮本地(插座连接)
本地使用Unix套接字。在Local的站点信息(数据库选项卡)中找到您的套接字路径,然后:
{
"mcpServers": {
"wp-db": {
"command": "uvx",
"args": [
"--from",
"wp-db-mcp",
"wp-db-mcp"
],
"env": {
"WP_DB_SOCKET": "/Users/you/Library/Application Support/Local/run/XXXXXXXX/mysql/mysqld.sock",
"WP_DB_USER": "root",
"WP_DB_PASSWORD": "root",
"WP_DB_NAME": "local"
}
}
}
}要在Local中查找套接字路径,请执行以下操作:
- 打开本地应用程序
- 选择您的网站
- 点击“数据库”选项卡
- 查找“Socket”路径
可用工具
架构与结构
wp_list_tables
列出所有带有引擎、行数和大小的表。支持多站点 site_id 过滤器。
wp_describe_table
显示特定表的列、类型、键和索引。接受全名或核心后缀(例如。 posts 而不是 wp_posts).
wp_get_schema
生成包含所有列、索引和检测到的关系的完整数据库架构。输出JSON或CSV。切换 include_plugins 包括非核心表。使用优化的批处理查询。
wp_get关系
绘制WordPress表格之间的关系图:
wp_posts->wp_postmeta(通过post_id)wp_posts->wp_term_relationships->wp_term_taxonomy->wp_termswp_posts->wp_comments(通过comment_post_ID)wp_users->wp_usermeta(通过user_id)wp_users->wp_posts(通过post_author)wp_terms->wp_termmeta(通过term_id)- 自我参照:post_parent、comment_parent,分类父级
查询
wp_query
执行带有安全检查的原始SELECT查询。阻塞:INSERT、UPDATE、DELETE、DROP、系统模式和所有其他写/DDL操作。行限制和超时已强制执行。退货 has_more 分页指示器。
wp_search_post
使用LIKE匹配按标题或内容搜索帖子。筛选依据 post_type 和 post_status。返回内容预览(前200个字符)。
帖子和条款
wp_get_post_terms
获取帖子的所有条款,遍历整个关系链。按分类法过滤。
wp_get_term_post
获取一个学期的所有帖子。筛选依据 post_type 和 post_status.退货 has_more 指示器。
wp_list_taxonomy
列出数据库中注册的所有分类法,包括术语计数和总使用量。
元数据
wp_get_post_meta
获取帖子的所有元键值对。筛选依据 meta_key (精确或类似模式)。
wp_get_user_meta
获取用户的所有元键值对。筛选依据 meta_key。注意:在多站点中,用户元数据在所有站点之间共享。
wp_get_评论_数据
获取注释的所有元键值对。筛选依据 meta_key.
帖子关系(WP内容连接)
这些工具查询由 WP内容连接 图书馆。
wp_list_connection_names
发现在WP Content Connect中注册的所有关系名称。查询两者 post_to_post 和 post_to_user 表,列出不同的关系名称及其连接计数。在查询特定连接之前,有助于探索存在哪些关系。
wp_get_connected_posts
通过以下方式获取与帖子关联的帖子 post_to_post 桌子。支持按关系名称和方向过滤(from, to,或 any).
wp_get_connected_users
通过以下方式让用户连接到帖子 post_to_user 桌子。支持按关系名称过滤。
wp_get_user_connected_post
通过以下方式获取与用户相关的帖子 post_to_user 表(反向查找)。支持按关系名称过滤。
wp_list_connected_post
列出给定关系名称的所有帖子连接。返回所有包含两个帖子详细信息(ID、标题、类型)和关系顺序的连接对。
阴影分类关系
这些工具支持“影子分类”模式,其中帖子通过分类术语相关联,这些术语将源帖子ID存储在术语meta中。
wp_list_shadow_taxonomy
在数据库中发现影子分类法。标识术语具有引用有效帖子ID的元值的分类法。返回分类名称、使用的元键、术语计数和链接的帖子计数。有助于探索存在哪些影子关系。
wp_get_shadow_related_posts
通过影子分类查找相关帖子。给定一个源帖子,查找术语meta与帖子ID匹配的所有术语,然后返回分配给这些术语的所有帖子。
参数:
post_id:源帖子IDtaxonomy:阴影分类名称(例如。,speaker_shadow)meta_key:存储帖子ID的术语元密钥(例如。,shadow_post_id)
wp_get_shadow_source_post
获取影子术语的源文章(反向查找)。给定一个术语ID,查找其ID存储在术语元中的帖子。
wp_list_shadow_post
使用影子分类关系列出所有帖子。返回分配给影子术语的所有帖子,包括术语信息(ID,名称)和源帖子详细信息(ID、标题、类型)。
用法示例
配置后,只需用自然语言提问。AI将自动使用适当的工具。
探索模式
- “我的WordPress数据库中有哪些表?”
- “显示帖子表的结构”
- “WordPress表之间的关系是什么?”
- “生成完整的数据库架构”
查询内容
- “我有多少已发布的帖子?”
- “搜索包含'hello'的帖子”
- “注册了哪些分类法?”
- “列出所有类别及其帖子数”
检查具体数据
- “获取帖子ID 1的所有条款”
- “显示用户ID 1的元数据”
- “哪些帖子属于‘未分类’类别?”
- “获取帖子ID 5的所有评论”
运行自定义查询
- “运行此查询:从wp_posts中选择post_title、post_date,其中post_status='publish'按post_date排序DESC限制10”
- “显示最近的5个用户”
- “按帖子类型统计帖子”
内容连接(WP内容连接)
对于使用 WP内容连接 图书馆:
- “数据库中定义了哪些内容连接关系?”
- “列出所有连接类型/关系名称”
- “哪些帖子与帖子ID 42相关联?”
- “通过'related_articles'关系查找与帖子15相关的所有帖子”
- “显示从帖子100(来源)连接的帖子”
- “显示连接到帖子100(目标位置)的帖子”
- “哪些用户连接到帖子ID 50?”
- “查找与此活动帖子相关的所有演讲者”
- “用户ID 5连接到哪些帖子?”
- “显示用户12关联的所有事件”
- “使用'related_articles'关系列出所有帖子”
- “显示‘演讲者’关系的所有关联”
阴影分类关系
对于使用影子分类法的站点(其中帖子通过将帖子ID存储在术语meta中的分类术语相关联):
- “数据库中存在哪些影子分类法?”
- “发现所有阴影分类关系”
- “使用‘speaker_shadow’分类查找与演讲者帖子ID 25相关的所有会话”
- “哪些帖子通过带有元键‘shadow_post_id’的阴影分类‘event_shadow’与帖子100相关?”
- “获取影子术语ID 150的源帖子”
- “术语ID 42代表哪个演讲者职位?”
- “使用元键‘shadow_post_id’的‘speaker_shadow’分类列出所有帖子”
- “显示'event_shadow'阴影分类中的所有关系”
多站点
对于多站点安装,请通过 site_id 任何工具:
site_id=None或site_id=1->主站点(使用基本前缀,例如。wp_)site_id=2->子站点2(用途wp_2_)site_id=3->子站点3(用途wp_3_)
这 wp_get_relationships 该工具自动检测所有多站点前缀。
注: wp_users 和 wp_usermeta 在多站点中的所有站点之间共享。
插件扩展
集 include_plugins=true 在 wp_get_schema 包括WordPress核心之外的所有表。
对于WooCommerce,模式将包括以下表:
wp_wc_orders,wp_wc_order_product_lookupwp_woocommerce_*表格
使用 wp_query 直接浏览任何表格。
许可证
麻省理工学院
