io.github.bluwork/postgres-scout-mcp

数据与存储

by bluwork

用 AI 巡检 PostgreSQL 数据库,提供安全防护、监控能力与数据质量分析。

什么是 io.github.bluwork/postgres-scout-mcp

用 AI 巡检 PostgreSQL 数据库,提供安全防护、监控能力与数据质量分析。

README

Postgres Scout MCP

Scout your PostgreSQL databases with AI - A production-ready Model Context Protocol server with built-in safety features, monitoring, and data quality tools.

npm License

What You Get

You ask:

"How healthy is my production database? Any urgent issues?"

Postgres Scout returns:


Overall Health Score: 78/100

Component Breakdown

ComponentScoreStatus
Cache Performance94/100Healthy
Index Efficiency82/100Good
Table Bloat61/100Needs Attention
Connection Usage75/100Fair

Issues Found

  • HIGH — Table orders has 34% bloat (2.1 GB wasted). VACUUM FULL recommended.
  • MEDIUM — 3 unused indexes on sessions consuming 890 MB.
  • LOW — Cache hit ratio for analytics_events is 71% (target: >90%).

Recommendations

  • Run VACUUM FULL orders during maintenance window
  • Drop unused indexes: idx_sessions_legacy, idx_sessions_old_token, idx_sessions_temp
  • Consider adding analytics_events to shared_buffers or partitioning by date

That's getHealthScore — one of 38 tools covering exploration, diagnostics, optimization, monitoring, data quality, and safe writes.

Quick Start

Claude Code

bash
claude mcp add postgres-scout -- npx -y postgres-scout-mcp postgresql://localhost:5432/mydb

Then ask: "Show me the largest tables and whether they have any bloat issues."

<details> <summary>Claude Desktop</summary>

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

json
{
  "mcpServers": {
    "postgres-scout": {
      "command": "npx",
      "args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"],
      "type": "stdio"
    }
  }
}
</details> <details> <summary>Cursor / VS Code</summary>

Add to your MCP settings:

json
{
  "postgres-scout": {
    "command": "npx",
    "args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"]
  }
}
</details> <details> <summary>Read-Only vs Read-Write</summary>

The server runs in read-only mode by default. For write operations, run a separate instance:

json
{
  "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: Safe exploration, no risk of data modification
  • postgres-scout-readwrite: Write operations when explicitly needed
</details>

Tools

Explore — understand your database

  • listDatabases — databases the user has access to
  • getDatabaseStats — size, cache hit ratio, connection info
  • listSchemas — all schemas in the current database
  • listTables — tables with size and row statistics
  • describeTable — columns, constraints, indexes, and more

Query — run and analyze

  • executeQuery — run SELECT queries (or writes in read-write mode)
  • explainQuery — EXPLAIN plans for performance analysis
  • optimizeQuery — optimization recommendations for a specific query

Diagnose — find problems before they find you

  • getHealthScore — overall health score with component breakdown
  • detectAnomalies — anomalies in performance, connections, and data
  • analyzeTableBloat — bloat analysis for VACUUM planning
  • getSlowQueries — slow query analysis (requires pg_stat_statements)
  • suggestVacuum — VACUUM recommendations based on dead tuples and bloat

Optimize — make it faster

  • suggestIndexes — missing index recommendations from query patterns
  • suggestPartitioning — partitioning strategies for large tables
  • getIndexUsage — identify unused or underused indexes

Monitor — watch it live

  • getCurrentActivity — active queries and connections
  • analyzeLocks — lock contention and blocking queries
  • getLiveMetrics — real-time metrics over a time window
  • getHottestTables — tables with highest activity
  • getTableMetrics — comprehensive per-table I/O and scan stats

Data Quality — trust your data

  • findDuplicates — duplicate rows by column combination
  • findMissingValues — NULL analysis across columns
  • findOrphans — orphaned records with invalid foreign keys
  • checkConstraintViolations — test constraints before adding them
  • analyzeTypeConsistency — type inconsistencies in text columns

Relationships — follow the connections

  • exploreRelationships — multi-hop foreign key traversal
  • analyzeForeignKeys — foreign key health and performance

Time Series — temporal analysis

  • findRecent — rows within a time window
  • analyzeTimeSeries — window functions and anomaly detection
  • detectSeasonality — seasonal pattern detection

Export — get data out

  • exportTable — CSV, JSON, JSONL, or SQL
  • generateInsertStatements — INSERT statements for migration

Write (read-write only) — safe modifications

  • previewUpdate / previewDelete — see what would change before committing
  • safeUpdate — UPDATE with dry-run, row limits, empty WHERE protection
  • safeDelete — DELETE with dry-run, row limits, empty WHERE protection
  • safeInsert — INSERT with validation, batching, ON CONFLICT support

Security

  • Read-only by default — write operations must be explicitly enabled
  • All queries use parameterized values
  • SQL injection prevention with input validation and pattern detection
  • Identifier sanitization for table/column names
  • Rate limiting on all operations
  • Query timeouts to prevent long-running queries
  • Response size limits to prevent memory exhaustion

Examples

"What are the largest tables and do they have bloat?"

code
listTables({ schema: "public" })
analyzeTableBloat({ schema: "public", minSizeMb: 100 })

"Find duplicate emails in the users table."

code
findDuplicates({ table: "users", columns: ["email"] })

"Which queries are slowest and how can I speed them up?"

code
getSlowQueries({ minDurationMs: 100, limit: 10 })
suggestIndexes({ schema: "public" })

"Show me what's happening on the database right now."

code
getCurrentActivity()
getLiveMetrics({ metrics: ["queries", "connections", "cache"], duration: 30000, interval: 1000 })
getHottestTables({ limit: 5, orderBy: "seq_scan" })

"Find orphaned orders that reference deleted customers."

code
findOrphans({ table: "orders", foreignKey: "customer_id", referenceTable: "customers", referenceColumn: "id" })

Configuration

VariableDefaultDescription
QUERY_TIMEOUT30000Query timeout in milliseconds
MAX_RESULT_ROWS10000Maximum rows returned per query
ENABLE_RATE_LIMITtrueEnable rate limiting
RATE_LIMIT_MAX_REQUESTS100Requests per window
RATE_LIMIT_WINDOW_MS60000Rate limit window (ms)
PGMAXPOOLSIZE10Connection pool max size
PGMINPOOLSIZE2Connection pool min size
PGIDLETIMEOUT10000Idle connection timeout (ms)
ENABLE_LOGGINGfalseEnable file logging
LOG_DIR./logsLog file directory
LOG_LEVELinfoLog verbosity: debug, info, warn, error

CLI flags: --read-only (default), --read-write, --mode <mode>

Logging

File logging is disabled by default. Set ENABLE_LOGGING=true to enable. Two log files are created in LOG_DIR:

  • tool-usage.log — every tool call with timestamp, name, and arguments
  • error.log — errors with stack traces

Connection strings are automatically redacted in all output.

Development

bash
git clone https://github.com/bluwork/postgres-scout-mcp.git
cd postgres-scout-mcp
pnpm install
pnpm build
pnpm test

License

Apache-2.0

常见问题

io.github.bluwork/postgres-scout-mcp 是什么?

用 AI 巡检 PostgreSQL 数据库,提供安全防护、监控能力与数据质量分析。

相关 Skills

技术栈评估

by alirezarezvani

Universal
热门

对比框架、数据库和云服务,结合 5 年 TCO、安全风险、生态活力与迁移复杂度做量化评估,适合技术选型、栈升级和替换路线决策。

帮你系统比较技术栈优劣,不只看功能,还把TCO、安全性和生态健康度一起量化,选型和迁移决策更稳。

数据与存储
未扫描18.5k

资深数据科学家

by alirezarezvani

Universal
热门

覆盖实验设计、特征工程、预测建模、因果推断与模型评估,适合用 Python/R/SQL 做 A/B 测试、时序分析和生产级 ML 落地,支撑数据驱动决策。

从 A/B 测试、因果分析到预测建模一条龙搞定,既有硬核统计方法也懂业务沟通,特别适合把数据结论真正落地。

数据与存储
未扫描18.5k

资深架构师

by alirezarezvani

Universal
热门

适合系统设计评审、ADR记录和扩展性规划,分析依赖与耦合,权衡单体或微服务、数据库与技术栈选型,并输出Mermaid、PlantUML、ASCII架构图。

搞系统设计、技术选型和扩展规划时,用它能更快理清架构决策与依赖关系,还能直接产出 Mermaid/PlantUML 图,方案讨论效率很高。

数据与存储
未扫描18.5k

相关 MCP Server

SQLite 数据库

编辑精选

by Anthropic

热门

SQLite 是让 AI 直接查询本地数据库进行数据分析的 MCP 服务器。

这个服务器解决了 AI 无法直接访问 SQLite 数据库的问题,适合需要快速分析本地数据集的开发者。不过,作为参考实现,它可能缺乏生产级的安全特性,建议在受控环境中使用。

数据与存储
87.4k

by Anthropic

热门

PostgreSQL 是让 Claude 直接查询和管理你的数据库的 MCP 服务器。

这个服务器解决了开发者需要手动编写 SQL 查询的痛点,特别适合数据分析师或后端开发者快速探索数据库结构。不过,由于是参考实现,生产环境使用前务必评估安全风险,别指望它能处理复杂事务。

数据与存储
87.4k

by Firecrawl

热门

Firecrawl 是让 AI 直接抓取网页并提取结构化数据的 MCP 服务器。

它解决了手动写爬虫的麻烦,让 Claude 能直接访问动态网页内容。最适合需要实时数据的研究者或开发者,比如监控竞品价格或抓取新闻。但要注意,它依赖第三方 API,可能涉及隐私和成本问题。

数据与存储
6.6k

评论