Postgres Scout Mcp

io.github.bluworkPublished by GitHub account bluworkv1.0.3Updated Oct 24, 2026

Scout your PostgreSQL databases with AI - safety features, monitoring, and data quality

Overview

AI-generated overview

Lets an assistant inspect, diagnose, and optionally modify a PostgreSQL database through 38 tools for health, performance, and data quality.

What you can do
Postgres Scout connects an assistant to a PostgreSQL database and exposes 38 tools grouped into exploration, querying, diagnostics, optimization, monitoring, data quality, relationships, time series, export, and write operations. It can list databases, schemas, and tables, describe structures, run and explain queries, score overall database health, detect anomalies and bloat, suggest indexes and partitioning, inspect locks and live activity, find duplicates, missing values, and orphaned records, and export tables as CSV, JSON, JSONL, or SQL. Write tools such as safeUpdate, safeDelete, and safeInsert include dry-run previews and row limits.
When to use it
Useful when an assistant needs to answer operational questions about a PostgreSQL database, such as which tables are bloated, which queries are slow, or whether data has duplicates or orphaned rows. It suits developers and DBAs who want read-only exploration by default and a separate instance for controlled writes.
Requirements
Runs locally over stdio, typically via npx postgres-scout-mcp with a PostgreSQL connection string as an argument. Needs Node.js and network access to the database. Optional environment variables configure query timeout, result row limits, rate limiting, connection pool sizes, and logging. Some diagnostics, such as getSlowQueries, require the pg_stat_statements extension.
Before you install
The server runs read-only by default, but a read-write instance can run UPDATE, DELETE, and INSERT statements against the connected database; point it at a development database rather than production. Write tools offer dry-run and row limits but still modify data. The connection string is passed as a command-line argument and may appear in process listings. Enabling file logging writes tool calls and arguments to disk, though connection strings are redacted.

Installation

In SourceWeft

  1. Open Postgres Scout Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

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."

Claude Desktop

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"    }  }}
Cursor / VS Code

Add to your MCP settings:

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

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

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?"

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

"Find duplicate emails in the users table."

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

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

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

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

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

"Find orphaned orders that reference deleted customers."

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.gitcd postgres-scout-mcppnpm installpnpm buildpnpm test

License

Apache-2.0

Source: README.md at commit 3cb6fa3

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.3LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts