MCP server for PostgreSQL analytics — schema discovery, data exploration, relationships, performance, data quality, multi-env support
Project description
pg-analytics-mcp
An MCP server for PostgreSQL analytics — a general-purpose "DBA-lite" toolkit that gives any MCP client (Claude Code, Cursor, etc.) instant visibility into schema structure, data quality, relationships, performance, and multi-environment comparison.
What it does
Exposes 22 read-only tools organised in 6 categories:
Schema Discovery
database_summary— high-level overview: schema/table/view/FK/index counts, total size, extensionsscan_schemas— row counts for every table, grouped by schemadescribe_table— column details: name, type, nullable, default, positiontable_sizes— disk usage (data + indexes + toast) per table, ordered by sizefind_tables— search tables by name pattern (ILIKE)find_columns— find tables that have a column matching a patternlist_empty_tables— quickly find tables with 0 rowslist_environments— list configured environments
Data Exploration
recent_rows— peek at the most recent rows (auto-detects timestamp/PK ordering)column_value_counts— distinct values and frequencies for a columncolumn_stats— min, max, avg, null count, distinct count for a column
Relationships
list_constraints— all constraints (PK, unique, check, FK) for a tableforeign_keys— bidirectional FK relationships (incoming + outgoing)compare_envs— compare row counts across DEV / STG / PROD
Performance
index_usage— index scan stats and unused index detectionslow_query_candidates— tables with high sequential scan counts (missing index candidates)bloat_estimate— tables with dead tuples that may need VACUUM
Data Quality
table_health— row count + last inserted_at/updated_at for a tablenull_report— null percentage for every column in a tableduplicate_check— find duplicate rows based on a set of columns
Legacy (pipeline-specific)
ingestion_failures— recent records frompipeline.ingestion_failuresingestion_failures_summary— failures grouped by table + error reason
Quick start
Prerequisites
- Python 3.12+
- uv (recommended) or pip
- One or more PostgreSQL instances
Install
Option A — run directly with uvx (no clone needed):
uvx pg-analytics-mcp
Option B — clone and run:
git clone https://github.com/fabdendev/pg-analytics-mcp.git
cd pg-analytics-mcp
uv sync
Configure
Set environment variables for each PostgreSQL environment (at least one is required):
| Variable | Description | Required |
|---|---|---|
PG_DEV_URL |
PostgreSQL DSN for DEV | At least one URL |
PG_STG_URL |
PostgreSQL DSN for STG | Optional |
PG_PROD_URL |
PostgreSQL DSN for PROD | Optional |
PG_READ_ONLY |
Reserved for future write tools (not yet used) | Optional |
export PG_DEV_URL="postgresql://user:pass@host:5432/dbname"
export PG_STG_URL="postgresql://user:pass@host:5432/dbname" # optional
export PG_PROD_URL="postgresql://user:pass@host:5432/dbname" # optional
Supports postgresql+asyncpg:// URLs (the driver prefix is stripped automatically).
Add to Claude Code
Add to your Claude Code MCP settings (~/.claude/settings.json or .mcp.json):
If using uvx:
{
"mcpServers": {
"pg-analytics": {
"command": "uvx",
"args": ["pg-analytics-mcp"],
"env": {
"PG_DEV_URL": "postgresql://user:pass@host:5432/dbname",
"PG_STG_URL": "postgresql://user:pass@host:5432/dbname"
}
}
}
}
If installed from clone:
{
"mcpServers": {
"pg-analytics": {
"command": "uv",
"args": ["run", "--directory", "/path/to/pg-analytics-mcp", "pg-analytics-mcp"],
"env": {
"PG_DEV_URL": "postgresql://user:pass@host:5432/dbname"
}
}
}
}
Security
All tools are read-only. No data is ever modified. Additional safeguards:
- Identifier validation — all user-provided schema/table/column names are validated against
^[a-zA-Z_][a-zA-Z0-9_]*$and quoted - Row limits — row-level queries capped at 100, aggregation queries at 200
- Statement timeout — potentially expensive queries (null_report, column_stats, duplicate_check, column_value_counts) use a 30s timeout
- Direction validation — order_dir restricted to ASC/DESC only
Multi-environment support
Configure up to 3 environments (DEV, STG, PROD). The first configured environment becomes the default. Use compare_envs to quickly spot row count differences across environments.
Development
uv sync --extra dev
uv run ruff check pg_analytics_mcp/ # lint
uv run python -m pg_analytics_mcp # start server locally
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pg_analytics_mcp-0.2.3.tar.gz.
File metadata
- Download URL: pg_analytics_mcp-0.2.3.tar.gz
- Upload date:
- Size: 71.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
480fb67b6b1b15425b9f950baf627cc7a8f181029d17ec4470838af3e30fc45c
|
|
| MD5 |
34a2dfa8d6ac64b636d4414cfd82970a
|
|
| BLAKE2b-256 |
afd5621c80de84f1bf249b7f5030c333a035e0038da31b115105bb9068d2e901
|
File details
Details for the file pg_analytics_mcp-0.2.3-py3-none-any.whl.
File metadata
- Download URL: pg_analytics_mcp-0.2.3-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9840023d0b928afadf8ab344e0d6a9f13cedc0ecfa4b7be6cffab5a8eed18e8
|
|
| MD5 |
3d397abd196247bd89adffb7ecd02300
|
|
| BLAKE2b-256 |
e7313603f6245525f3c4120fb469e55f6428f7a2ecd77322749392cc029b9030
|