Skip to main content
Glama
README.md
# pg-context

> Model Context Protocol (MCP) server that gives AI coding assistants deep PostgreSQL context: live schemas as DDL, index health, foreign key associations, query execution plans, and performance statistics.

`pg-context` connects directly to your PostgreSQL database in read-only mode and exposes tools and resources for AI assistants such as Cursor, Claude Code, Cline, and Antigravity.

---

## Why pg-context?

Generic SQL tools often execute arbitrary queries without giving the AI assistant structural context. This causes models to guess column names, hallucinate relations, and generate invalid joins.

`pg-context` resolves this problem by providing:
- **Zero-guess schema context**: Exports real table structures formatted as PostgreSQL `CREATE TABLE` DDL statements with foreign key comments and index definitions.
- **Read-only security**: Automatically sets `default_transaction_read_only = ON` on every client connection and rejects mutating SQL statements (such as `DROP`, `DELETE`, `UPDATE`, `INSERT`, `TRUNCATE`, `ALTER`).
- **Optimization insights**: Detects unindexed foreign keys, high sequential scan ratios, unused indexes, and slow queries from `pg_stat_statements`.
- **Extension awareness**: Identifies PostGIS, TimescaleDB, and pgvector extensions.

---

## Quick Start

You can run `pg-context` directly via `npx` without manual installation:

```bash
npx -y pg-context-mcp
```

Or install it globally:

```bash
npm install -g pg-context-mcp
pg-context-mcp
```

---

## Configuration

`pg-context` reads connection parameters from environment variables or standard PostgreSQL connection strings:

| Variable | Description | Default |
|---|---|---|
| `DATABASE_URL` | Standard PostgreSQL connection URI | `undefined` |
| `PGHOST` | Database host | `localhost` |
| `PGPORT` | Database port | `5432` |
| `PGDATABASE` | Database name | `postgres` |
| `PGUSER` | Database user | `postgres` |
| `PGPASSWORD` | Database password | `""` |
| `PGSSL` | Enable SSL connection (`true`/`false`) | `false` |
| `PG_SCHEMAS` | Comma-separated list of target schemas | `public` |
| `PG_MAX_CONNECTIONS` | Connection pool size | `5` |
| `PG_CACHE_TTL` | Schema cache TTL in seconds | `60` |
| `PG_QUERY_LIMIT` | Default row limit for `read_query` | `100` |
| `PG_QUERY_LIMIT_MAX` | Hard upper limit for `read_query` | `1000` |

---

## Client Integration

### 1. Claude Desktop & Antigravity

Add the following entry to your `claude_desktop_config.json` or Antigravity MCP settings:

```json
{
  "mcpServers": {
    "pg-context": {
      "command": "npx",
      "args": ["-y", "pg-context-mcp"],
      "env": {
        "DATABASE_URL": "postgresql://user:password@localhost:5432/my_database"
      }
    }
  }
}
```

### 2. Cursor

Add the following to your Cursor MCP configuration (`.cursor/mcp.json` or Cursor Settings > Features > MCP):

```json
{
  "mcpServers": {
    "pg-context": {
      "command": "npx",
      "args": ["-y", "pg-context-mcp"],
      "env": {
        "DATABASE_URL": "postgresql://user:password@localhost:5432/my_database"
      }
    }
  }
}
```

### 3. Cline (VS Code Extension)

Add this configuration into `cline_mcp_settings.json`:

```json
{
  "mcpServers": {
    "pg-context": {
      "command": "npx",
      "args": ["-y", "pg-context-mcp"],
      "env": {
        "DATABASE_URL": "postgresql://user:password@localhost:5432/my_database"
      }
    }
  }
}
```

---

## Tools Reference

`pg-context` exposes 12 MCP tools:

| Tool | Parameters | Description |
|---|---|---|
| `list_schemas` | _none_ | Lists all non-system schemas in the database. |
| `list_tables` | `schema` (default: `"public"`) | Lists tables and views with sizes, estimated row counts, and comments. |
| `describe_table` | `table`, `schema` (default: `"public"`) | Returns full structural DDL of a table including columns, types, defaults, NOT NULL, foreign keys, and indexes. |
| `list_foreign_keys` | `schema` (default: `"public"`), `table` (optional) | Displays foreign key relationships as readable `source -> target` associations. |
| `list_indexes` | `schema` (default: `"public"`), `table` (optional) | Displays indexes, definitions, sizes, and scan counts. |
| `suggest_indexes` | `schema` (default: `"public"`), `table` (optional) | Identifies unindexed foreign keys, sequential scan warnings, and unused indexes. |
| `read_query` | `sql`, `limit` (optional) | Executes read-only queries with enforced limits and returns Markdown tables. |
| `explain_query` | `sql`, `analyze` (boolean, default: `false`) | Returns query execution plans from PostgreSQL `EXPLAIN` or `EXPLAIN ANALYZE`. |
| `get_database_info` | _none_ | Returns PostgreSQL version, total database size, connection counts, and buffer settings. |
| `get_table_stats` | `schema` (default: `"public"`), `table` (optional) | Returns sequential vs index scans, live rows, dead rows, and maintenance dates. |
| `get_slow_queries` | `limit` (default: `15`) | Fetches top slowest queries recorded by `pg_stat_statements`. |
| `list_extensions` | _none_ | Lists installed PostgreSQL extensions and flags capabilities for PostGIS, TimescaleDB, and pgvector. |

---

## Resources Reference

`pg-context` exposes 3 MCP resources:

| Resource URI | MIME Type | Description |
|---|---|---|
| `pg://schema/full` | `text/x-sql` | Full DDL dump of all tables across configured schemas. |
| `pg://schema/{tableName}` | `text/x-sql` | DDL definition for an individual table. |
| `pg://stats/overview` | `text/markdown` | Database health overview: storage sizes, dead rows, and optimization alerts. |

---

## Development

```bash
# Clone the repository
git clone https://github.com/mewsyy/pg-context.git
cd pg-context

# Install dependencies
npm install

# Run test suite
npm test

# Build TypeScript
npm run build

# Start local server
npm start
```

---

## License

MIT (c) Semen

TDQS

A4/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct aspect of PostgreSQL database introspection: schemas, tables, relationships, indexes, query execution, performance stats, and extensions. There is no overlap in purpose.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., list_schemas, describe_table, read_query), making the API predictable and easy to navigate.

Tool Count5/5

With 12 tools, the server covers the key areas of database analysis without being bloated. Each tool serves a distinct role, and the count is appropriate for the domain.

Completeness5/5

The set covers schema exploration, table details, indexing, query analysis, performance monitoring, and extension information. No obvious gaps for a read-only database context server.

Maintenance

ActivityMaintained
ResponsivenessNo issues