关于 postgres-scout-mcp
postgres-scout-mcp 是面向 PostgreSQL 运维人员和分析人员的 MCP 服务,提供数据库探索、诊断、监控、优化和数据质量工具。默认只读;启用读写模式后可执行带防护的写入操作。
主要功能
- 01数据库探索与统计
- 02健康评分与异常检测
- 03查询和索引优化建议
- 04实时活动与指标监控
- 05数据质量与关系检查
- 06带预览和限制的安全写入
适用场景
- 01检查数据库健康状况和表膨胀
- 02排查慢查询和索引使用情况
- 03监控活动查询、锁和连接
- 04查找重复值、缺失值或孤立记录
MCP 相关
向 MCP 客户端提供 38 个用于 PostgreSQL 探索、查询、诊断、监控、优化和数据质量检查的工具。默认以只读模式运行;写入工具需要启用读写模式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Postgres Scout MCP
借助 AI 探查 PostgreSQL 数据库——一款可用于生产环境的模型上下文协议服务,内置安全功能、监控和数据质量工具。
你将获得什么
你可以询问:
“我的生产数据库运行状况如何?有没有紧急问题?”
Postgres Scout 会返回:
总体健康评分:78/100
组件评分
| 组件 | 评分 | 状态 |
|---|---|---|
| 缓存性能 | 94/100 | 健康 |
| 索引效率 | 82/100 | 良好 |
| 表膨胀 | 61/100 | 需要关注 |
| 连接使用情况 | 75/100 | 一般 |
发现的问题
- 高 — 表
orders的膨胀率为 34%(浪费 2.1 GB)。建议执行 VACUUM FULL。 - 中 —
sessions上有 3 个未使用的索引,占用 890 MB。 - 低 —
analytics_events的缓存命中率为 71%(目标:>90%)。
建议
- 在维护时段运行
VACUUM FULL orders - 删除未使用的索引:
idx_sessions_legacy、idx_sessions_old_token、idx_sessions_temp - 考虑将
analytics_events加入 shared_buffers,或按日期分区
这就是 getHealthScore 的功能——它是 38 个工具之一,涵盖数据库探索、诊断、优化、监控、数据质量和安全写入。
快速开始
Claude Code
claude mcp add postgres-scout -- npx -y postgres-scout-mcp postgresql://localhost:5432/mydb
然后询问:“显示最大的表,并告诉我它们是否存在膨胀问题。”
Claude Desktop
添加到 Claude Desktop 配置(macOS 上的 ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"postgres-scout": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"],
"type": "stdio"
}
}
}
Cursor / VS Code
添加到 MCP 设置:
{
"postgres-scout": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"]
}
}
只读与读写模式
服务默认以只读模式运行。要执行写入操作,请运行一个单独的实例:
{
"mcpServers": {
"postgres-scout-readonly": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "--read-only", "postgresql://localhost:5432/production"],
"type": "stdio"
},
"postgres-scout-readwrite": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "--read-write", "postgresql://localhost:5432/development"],
"type": "stdio"
}
}
}
- postgres-scout-readonly:安全探索,不存在修改数据的风险
- postgres-scout-readwrite:仅在明确需要时执行写入操作
工具
探索 — 了解数据库
listDatabases— 用户有权访问的数据库getDatabaseStats— 大小、缓存命中率、连接信息listSchemas— 当前数据库中的所有架构listTables— 表及其大小和行数统计describeTable— 列、约束、索引等信息
查询 — 执行并分析
executeQuery— 执行 SELECT 查询(或在读写模式下执行写入操作)explainQuery— 使用 EXPLAIN 执行计划进行性能分析optimizeQuery— 针对特定查询提供优化建议
诊断 — 在问题找上门前发现它们
getHealthScore— 总体健康评分及组件评分detectAnomalies— 检测性能、连接和数据异常analyzeTableBloat— 分析表膨胀情况,为 VACUUM 规划提供依据getSlowQueries— 慢查询分析(需要 pg_stat_statements)suggestVacuum— 根据死元组和膨胀情况提供 VACUUM 建议
优化 — 提升速度
suggestIndexes— 根据查询模式推荐缺失的索引suggestPartitioning— 为大型表提供分区策略getIndexUsage— 找出未使用或使用率低的索引
监控 — 实时监控
getCurrentActivity— 活动查询和连接analyzeLocks— 锁争用和阻塞查询getLiveMetrics— 指定时间窗口内的实时指标getHottestTables— 活动量最高的表getTableMetrics— 每张表全面的 I/O 和扫描统计信息
数据质量 — 确保数据可信
findDuplicates— 按列组合查找重复行findMissingValues— 分析各列中的 NULL 值findOrphans— 查找外键无效的孤立记录checkConstraintViolations— 在添加约束前测试是否存在违规analyzeTypeConsistency— 分析文本列中的类型不一致问题
关系 — 沿连接进行探索
exploreRelationships— 多跳外键遍历analyzeForeignKeys— 外键健康状况和性能
时间序列 — 时间分析
findRecent— 时间窗口内的行analyzeTimeSeries— 窗口函数和异常检测detectSeasonality— 季节性模式检测
导出 — 导出数据
exportTable— CSV、JSON、JSONL 或 SQLgenerateInsertStatements— 用于迁移的 INSERT 语句
写入(仅读写模式)— 安全修改
previewUpdate/previewDelete— 提交前查看将发生的更改safeUpdate— 支持试运行、行数限制和空 WHERE 保护的 UPDATEsafeDelete— 支持试运行、行数限制和空 WHERE 保护的 DELETEsafeInsert— 支持验证、批处理和 ON CONFLICT 的 INSERT
安全
- 默认只读 — 必须显式启用写入操作
- 所有查询均使用参数化值
- 通过输入验证和模式检测防止 SQL 注入
- 对表名和列名进行标识符清理
- 对所有操作进行速率限制
- 设置查询超时,防止查询长时间运行
- 限制响应大小,防止内存耗尽
示例
“哪些表最大?它们是否存在膨胀?”
listTables({ schema: "public" })
analyzeTableBloat({ schema: "public", minSizeMb: 100 })
“查找 users 表中的重复电子邮件。”
findDuplicates({ table: "users", columns: ["email"] })
“哪些查询最慢?如何加快它们?”
getSlowQueries({ minDurationMs: 100, limit: 10 })
suggestIndexes({ schema: "public" })
“向我展示数据库当前正在发生什么。”
getCurrentActivity()
getLiveMetrics({ metrics: ["queries", "connections", "cache"], duration: 30000, interval: 1000 })
getHottestTables({ limit: 5, orderBy: "seq_scan" })
“查找引用了已删除客户的孤立订单。”
findOrphans({ table: "orders", foreignKey: "customer_id", referenceTable: "customers", referenceColumn: "id" })
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
QUERY_TIMEOUT | 30000 | 查询超时时间,单位为毫秒 |
MAX_RESULT_ROWS | 10000 | 每个查询返回的最大行数 |
ENABLE_RATE_LIMIT | true | 启用速率限制 |
RATE_LIMIT_MAX_REQUESTS | 100 | 每个时间窗口内的请求数 |
RATE_LIMIT_WINDOW_MS | 60000 | 速率限制时间窗口(毫秒) |
PGMAXPOOLSIZE | 10 | 连接池最大容量 |
PGMINPOOLSIZE | 2 | 连接池最小容量 |
PGIDLETIMEOUT | 10000 | 空闲连接超时时间(毫秒) |
ENABLE_LOGGING | false | 启用文件日志记录 |
LOG_DIR | ./logs | 日志文件目录 |
LOG_LEVEL | info | 日志详细程度:debug、info、warn、error |
CLI 标志:--read-only(默认)、--read-write、--mode <mode>
日志记录
默认情况下禁用文件日志记录。设置 ENABLE_LOGGING=true 即可启用。系统会在 LOG_DIR 中创建两个日志文件:
- tool-usage.log — 每次工具调用的时间戳、名称和参数
- error.log — 包含堆栈跟踪的错误
所有输出中的连接字符串都会自动脱敏。
开发
git clone https://github.com/bluwork/postgres-scout-mcp.git
cd postgres-scout-mcp
pnpm install
pnpm build
pnpm test
许可证
Apache-2.0
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。