🚀 Citus MCP 服务器
一款由人工智能驱动的 MCP 服务器,用于管理 Citus 分布式 PostgreSQL 集群
本项目借助先进的人工智能技术,为 Citus 分布式 PostgreSQL 集群提供高效、智能的管理方案,能显著提升集群的管理效率和稳定性。

快速开始 •
主要特性 •
安装指南 •
配置说明 •
工具参考 •
使用示例
🚀 快速开始
前提条件
- Go 1.23 及以上版本(用于从源代码构建)
- 可访问协调器的 Citus 12.x - 14.x 集群
- 支持 MCP 的 GitHub Copilot(VS Code 或 CLI)
1. 构建服务器
git clone https://github.com/citusdata/citus-mcp.git
cd citus-mcp
make build
或者直接使用 Go 进行构建:
go build -o bin/citus-mcp ./cmd/citus-mcp
2. 配置连接
在 ~/.config/citus-mcp/config.yaml 中创建配置文件:
coordinator_dsn: postgres://username:password@localhost:5432/mydb?sslmode=disable
或者设置环境变量:
export CITUS_MCP_COORDINATOR_DSN="postgres://username:password@localhost:5432/mydb?sslmode=disable"
3. 设置 VS Code
在工作区创建 .vscode/mcp.json(或在项目根目录创建 mcp.json):
{
"mcpServers": {
"citus-mcp": {
"command": "/path/to/citus-mcp/bin/citus-mcp",
"args": [],
"env": {
"CITUS_MCP_COORDINATOR_DSN": "postgres://username:password@localhost:5432/mydb?sslmode=disable"
}
}
}
}
4. 测试连接
在 VS Code Copilot 聊天中输入:
@citus-mcp ping
若看到 "pong" 响应,则表明连接正常。
✨ 主要特性
🔍 集群检查(只读)
| 工具 |
描述 |
citus_cluster_summary |
协调器、工作节点、表数量和配置健康状况的概述 |
list_nodes |
列出所有协调器和工作节点 |
list_distributed_tables |
列出分布式表和引用表 |
citus_list_distributed_tables |
带过滤器的分布式表分页列表 |
citus_list_reference_tables |
引用表的分页列表 |
list_shards |
列出分片及其位置和大小 |
citus_table_inspector |
深入查看表元数据、索引和统计信息 |
citus_colocation_inspector |
分析 coloc 组和共置表 |
📊 监控与分析
| 工具 |
描述 |
citus_activity |
集群范围内的活动查询和连接 |
citus_lock_inspector |
查看锁等待和阻塞查询 |
citus_job_inspector |
后台作业进度(重新平衡、复制) |
citus_shard_heatmap |
热点分片和节点分布 |
citus_shard_skew_report |
每个节点的数据倾斜分析 |
citus_explain_query |
解释分布式查询 |
🤖 智能顾问
| 工具 |
描述 |
citus_advisor |
提供可操作建议的 SRE 和性能顾问 |
citus_config_advisor |
全面的 Citus 和 PostgreSQL 配置分析 |
citus_snapshot_source_advisor |
为基于快照的扩展推荐源节点 |
citus_validate_rebalance_prereqs |
检查表是否准备好进行重新平衡 |
citus_metadata_health |
检测元数据损坏和不一致,并提供修复建议 |
citus_node_prepare_advisor |
为添加新节点进行预检查和准备脚本 |
⚡ 执行操作(需要批准)
| 工具 |
描述 |
citus_rebalance_plan |
预览重新平衡操作 |
citus_rebalance_execute |
启动集群重新平衡 |
citus_rebalance_status |
监控重新平衡进度 |
citus_move_shard_plan |
预览分片移动 |
citus_move_shard_execute |
将分片移动到不同节点 |
citus_request_approval_token |
请求限时批准令牌 |
📦 安装指南
选项 1:从源代码构建
git clone https://github.com/citusdata/citus-mcp.git
cd citus-mcp
make build
go build -o bin/citus-mcp ./cmd/citus-mcp
sudo cp bin/citus-mcp /usr/local/bin/
选项 2:使用 Go 安装
go install github.com/citusdata/citus-mcp/cmd/citus-mcp@latest
验证安装
citus-mcp --help
⚙️ 配置说明
连接字符串(DSN)
最重要的配置是指向 Citus 协调器的 PostgreSQL 连接字符串:
postgres://[用户]:[密码]@[主机]:[端口]/[数据库]?sslmode=[模式]
示例:
postgres://postgres:secret@localhost:5432/mydb?sslmode=disable
postgres://admin:secret@citus-coord.example.com:5432/production?sslmode=require
postgres://user:pass@host:5432/db?sslmode=require&search_path=myschema
配置方法
配置可以通过以下方式提供(按优先级顺序):
- 命令行标志
- 环境变量
- 配置文件
方法 1:环境变量
export CITUS_MCP_COORDINATOR_DSN="postgres://user:pass@localhost:5432/mydb?sslmode=disable"
export CITUS_MCP_MODE="read_only"
export CITUS_MCP_ALLOW_EXECUTE="false"
export CITUS_MCP_APPROVAL_SECRET="secret"
export CITUS_MCP_LOG_LEVEL="info"
方法 2:配置文件
创建 ~/.config/citus-mcp/config.yaml:
coordinator_dsn: postgres://user:password@localhost:5432/mydb?sslmode=disable
mode: read_only
allow_execute: false
cache_ttl_seconds: 5
enable_caching: true
max_rows: 200
max_text_bytes: 200000
connect_timeout_seconds: 10
statement_timeout_ms: 30000
log_level: info
transport: stdio
方法 3:命令行标志
bin/citus-mcp --coordinator_dsn "postgres://..." --mode read_only
bin/citus-mcp "postgres://user:pass@localhost:5432/mydb?sslmode=disable"
bin/citus-mcp --config /path/to/config.yaml
bin/citus-mcp --transport sse --http_port 8080 --coordinator_dsn "postgres://..."
配置文件位置
服务器按以下顺序搜索配置文件:
--config / -c 标志
CITUS_MCP_CONFIG 环境变量
$XDG_CONFIG_HOME/citus-mcp/config.yaml
~/.config/citus-mcp/config.yaml
./citus-mcp.yaml(当前目录)
支持的格式:YAML、JSON、TOML
🌐 传输选项
Citus MCP 支持三种传输模式,以适应不同的部署场景:
1. 标准输入/输出传输(默认)
标准输入/输出传输方式,服务器通过标准输入/输出进行通信。这是默认模式,用于与 VS Code 和 GitHub Copilot CLI 直接集成。
bin/citus-mcp --coordinator_dsn "postgres://..."
bin/citus-mcp --transport stdio --coordinator_dsn "postgres://..."
使用场景:
- VS Code Copilot 聊天集成
- GitHub Copilot CLI
- 本地开发
2. SSE 传输(服务器发送事件)
基于 HTTP 的传输方式,使用服务器发送事件。服务器作为 HTTP 守护进程运行,客户端可以远程连接。
bin/citus-mcp --transport sse --http_addr 0.0.0.0 --http_port 8080 --coordinator_dsn "postgres://..."
export CITUS_MCP_TRANSPORT=sse
export CITUS_MCP_HTTP_ADDR=0.0.0.0
export CITUS_MCP_HTTP_PORT=8080
export CITUS_MCP_COORDINATOR_DSN="postgres://..."
bin/citus-mcp
端点:
GET /mcp - 建立 SSE 连接
POST /mcp/session/{id} - 向会话发送消息
GET /health - 健康检查
使用场景:
- 远程 MCP 服务器部署
- Docker/Kubernetes 部署
- 多客户端共享服务器
- 网络可访问的 MCP 服务
3. 可流式传输的 HTTP 传输
具有流式支持的现代 HTTP 传输方式,推荐用于新的部署。
bin/citus-mcp --transport streamable --http_addr 0.0.0.0 --http_port 8080 --coordinator_dsn "postgres://..."
端点:
POST /mcp - 处理 MCP 请求并提供流式响应
GET /health - 健康检查
使用场景:
- 与 SSE 相同,但具有更好的流式支持
- SSE 不理想的环境
Docker 部署示例
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o citus-mcp ./cmd/citus-mcp
FROM alpine:latest
COPY --from=builder /app/citus-mcp /usr/local/bin/
EXPOSE 8080
CMD ["citus-mcp", "--transport", "sse", "--http-addr", "0.0.0.0", "--http-port", "8080"]
version: '3.8'
services:
citus-mcp:
build: .
ports:
- "8080:8080"
environment:
CITUS_MCP_TRANSPORT: sse
CITUS_MCP_HTTP_ADDR: 0.0.0.0
CITUS_MCP_HTTP_PORT: 8080
CITUS_MCP_COORDINATOR_DSN: postgres://user:pass@citus-coordinator:5432/mydb?sslmode=disable
连接到远程服务器
对于 SSE/可流式传输的传输方式,配置 MCP 客户端通过 HTTP 连接:
{
"mcpServers": {
"citus-mcp": {
"type": "sse",
"url": "http://citus-mcp-server:8080/mcp"
}
}
}
🔌 与 GitHub Copilot 集成设置
VS Code 设置
- 安装先决条件
- 安装带有 GitHub Copilot 扩展的 VS Code
- 在 Copilot 设置中启用 MCP 支持
- 创建 MCP 配置
在工作区创建
.vscode/mcp.json:{
"mcpServers": {
"citus-mcp": {
"command": "/absolute/path/to/bin/citus-mcp",
"args": [],
"env": {
"CITUS_MCP_COORDINATOR_DSN": "postgres://user:pass@localhost:5432/mydb?sslmode=disable"
}
}
}
}
或者用于开发(使用 go run):{
"mcpServers": {
"citus-mcp": {
"command": "go",
"args": ["run", "./cmd/citus-mcp"],
"cwd": "/path/to/citus-mcp",
"env": {
"CITUS_MCP_COORDINATOR_DSN": "postgres://user:pass@localhost:5432/mydb?sslmode=disable"
}
}
}
}
- 重新加载 VS Code 并打开 Copilot 聊天
- 验证连接
@citus-mcp ping
GitHub Copilot CLI 设置
- 创建全局 MCP 配置
创建
~/.config/github-copilot/mcp.json:{
"mcpServers": {
"citus-mcp": {
"command": "/usr/local/bin/citus-mcp",
"args": [],
"env": {
"CITUS_MCP_COORDINATOR_DSN": "postgres://user:pass@localhost:5432/mydb?sslmode=disable"
}
}
}
}
- 验证设置
copilot mcp list
copilot mcp test citus-mcp
- 在 CLI 中使用
copilot -p "Show me the cluster summary"
💻 使用示例
基础集群检查
@citus-mcp Show me the cluster summary
@citus-mcp List all distributed tables
@citus-mcp Inspect the public.users table including shards and indexes
监控
@citus-mcp Show current cluster activity
@citus-mcp Are there any lock waits in the cluster?
@citus-mcp Show background job progress
分析
@citus-mcp Analyze shard skew for the orders table
@citus-mcp Show me the shard heatmap grouped by node
@citus-mcp Explain this query: SELECT * FROM orders WHERE customer_id = 123
顾问
@citus-mcp Run the advisor with focus on skew
@citus-mcp Check operational health (long queries, locks, jobs)
@citus-mcp Suggest the best source node for snapshot-based scaling
@citus-mcp Check metadata health with deep validation across nodes
配置分析
@citus-mcp Analyze cluster configuration and recommend improvements
@citus-mcp Run config advisor with focus on memory settings
共置分析
@citus-mcp Show all colocation groups
@citus-mcp Which tables are colocated with the orders table?
节点添加
@citus-mcp Run pre-flight checks for adding node at postgres://user:pass@newworker:5432/db
📚 工具参考
检查工具
| 工具 |
参数 |
描述 |
ping |
message? |
健康检查 |
server_info |
— |
服务器元数据和模式 |
list_nodes |
limit?, offset? |
协调器和工作节点 |
list_distributed_tables |
limit?, offset? |
所有分布式表 |
list_shards |
limit?, offset? |
带位置信息的分片 |
citus_cluster_summary |
include_workers?, include_gucs?, include_config? |
包含配置健康状况的完整集群概述 |
citus_list_distributed_tables |
schema?, table_type?, limit?, cursor? |
分页表列表 |
citus_list_reference_tables |
schema?, limit?, cursor? |
分页引用表列表 |
citus_table_inspector |
table (必需), include_shards?, include_indexes? |
深入查看表 |
citus_colocation_inspector |
colocation_id?, limit? |
共置组 |
监控工具
| 工具 |
参数 |
描述 |
citus_activity |
limit?, include_idle?, min_duration_secs? |
活动查询 |
citus_lock_inspector |
include_locks?, limit? |
锁等待 |
citus_job_inspector |
state?, include_tasks?, limit? |
后台作业 |
citus_shard_heatmap |
table?, limit?, metric?, group_by? |
热点分片 |
citus_shard_skew_report |
table?, metric?, include_top_shards? |
倾斜分析 |
citus_explain_query |
sql (必需), analyze?, verbose?, costs? |
解释查询 |
顾问工具
| 工具 |
参数 |
描述 |
citus_advisor |
focus? (skew/ops), max_tables?, include_next_steps?, include_sql_fixes? |
SRE 顾问 |
citus_config_advisor |
include_all_gucs?, category?, severity_filter?, total_ram_gb? |
配置分析 |
citus_snapshot_source_advisor |
strategy?, max_candidates?, include_simulation? |
节点添加建议 |
citus_validate_rebalance_prereqs |
table (必需) |
重新平衡准备情况 |
citus_metadata_health |
check_level? (basic/thorough/deep), include_fixes? |
元数据一致性检查 |
citus_node_prepare_advisor |
host (必需), port?, database?, generate_script? |
预检查和准备脚本 |
执行工具(需要批准)
| 工具 |
参数 |
描述 |
citus_rebalance_plan |
table?, threshold?, max_shard_moves?, drain_only? |
预览重新平衡 |
citus_rebalance_execute |
approval_token (必需), table?, threshold? |
启动重新平衡 |
citus_rebalance_status |
verbose?, limit?, cursor? |
重新平衡进度 |
citus_move_shard_plan |
shard_id, source_host, source_port, target_host, target_port, colocated? |
预览分片移动 |
citus_move_shard_execute |
approval_token (必需), shard_id, source_*, target_*, colocated?, drop_method? |
执行分片移动 |
citus_request_approval_token |
action (必需), ttl_seconds? |
获取批准令牌 |
rebalance_table_plan |
table (必需) |
旧版:计划表重新平衡 |
rebalance_table_execute |
table (必需), approval_token (必需) |
旧版:执行表重新平衡 |
📋 内置提示
在 Copilot 聊天中使用这些提示以获得引导式工作流程:
| 提示 |
描述 |
/citus.health_check |
集群健康检查清单 |
/citus.rebalance_workflow |
分步重新平衡指南 |
/citus.skew_investigation |
倾斜调查手册 |
/citus.ops_triage |
操作分诊工作流程 |
🔐 安全说明
只读模式(默认)
默认情况下,citus-mcp 以 只读模式 运行。这意味着:
- ✅ 所有检查和监控工具均可正常使用
- ✅ 顾问提供建议
- ❌ 执行操作被禁用
- ❌ 无法修改数据
管理员模式与批准令牌
要启用执行操作:
- 在配置中设置管理员模式:
mode: admin
allow_execute: true
approval_secret: your-secret-key-here
- 执行前请求批准令牌:
@citus-mcp Request approval token for rebalance
- 在执行命令中使用令牌:
@citus-mcp Execute rebalance with token: <token>
令牌具有时间限制且特定于操作(使用 HMAC 签名)。
🔧 故障排除
连接问题
错误:connection refused
- 验证协调器主机和端口是否正确
- 检查 PostgreSQL 是否正在运行并接受连接
- 确保防火墙规则允许连接
错误:authentication failed
- 验证 DSN 中的用户名和密码
- 检查用户是否对数据库具有权限
- 对于 SSL 问题,本地测试时可尝试
sslmode=disable
MCP 问题
Copilot 无法识别 citus-mcp
- 确保
mcp.json 位于正确位置
- 检查命令路径是否为绝对路径
- 修改配置后重新加载 VS Code
工具返回错误
- 查看日志:
CITUS_MCP_LOG_LEVEL=debug bin/citus-mcp
- 验证 Citus 扩展是否已安装:
SELECT * FROM pg_extension WHERE extname = 'citus'
测试连接
CITUS_MCP_COORDINATOR_DSN="postgres://..." bin/citus-mcp
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | bin/citus-mcp
🛠️ 开发说明
运行测试
make test
go test -v ./...
make docker-up
make integration
make docker-down
代码检查
make lint
项目结构
citus-mcp/
├── cmd/citus-mcp/ # 主入口点
├── internal/
│ ├── mcpserver/ # MCP 服务器实现
│ │ ├── tools/ # 工具实现(30 多个工具)
│ │ ├── prompts/ # 提示模板
│ │ └── resources/ # 静态资源
│ ├── db/ # 数据库层和工作节点管理
│ ├── citus/ # Citus 特定逻辑和查询
│ │ ├── advisor/ # 顾问实现
│ │ └── guc/ # GUC(配置)分析
│ ├── cache/ # 查询结果缓存
│ ├── config/ # 配置管理
│ ├── errors/ # 错误类型和代码
│ ├── fanout