npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

electric-elephant

v0.21.34

Published

Electric Elephant — PostgreSQL-only, readonly-first, token-efficient MCP server

Readme

Electric Elephant

Electric Elephant is a token-efficient MCP server for exploring and querying PostgreSQL from MCP-capable clients. It is not a generic SQL bridge: only PostgreSQL is supported (not MySQL, SQLite, SQL Server, Oracle, or other engines).

PII and clinical data: The server attempts to mitigate accidental exposure of personally identifiable information and sensitive clinical-style fields through execute_sql (heuristic, fail-closed checks on projections before queries run). That is a best-effort safeguard, not certification or a substitute for database permissions, row-level security, legal review, or your own data policies. See the Purpose bullet and docs/tools/execute-sql.mdx.

Repository: github.com/ajgreyling/electric-elephant

Upstream Sync Status

Electric Elephant is a fork of dbhub. PostgreSQL-relevant upstream fixes are synced through dbhub commit 72adfdce530ebaf2d7e6df12de5ecde0d174cf4f (2026-04-21), on top of upstream release line v0.21.2.

Backported upstream commits:

  • f319114033279532aff2ce9aaef2ce84b127a21f (PostgreSQL getTableComment() view support)
  • ce2621d83d78d9ab8b363664c955584cb59ee049 (graceful skip on transitive MODULE_NOT_FOUND)
  • 30d8007998503defc05d5198bcbd9130c609ee41 (HTTP DNS rebinding protection)
  • f13fad459d1ac9f7837fc39e37941247bd6d0c6d (PostgreSQL SSL verify-ca/verify-full + sslrootcert)
  • f35144b87f4394dd7a36416b7a459bfd710b61f4 (SSL documentation updates for verify-ca / verify-full)
  • 72adfdce530ebaf2d7e6df12de5ecde0d174cf4f (source description surfaced in MCP tool descriptions)

Purpose

  • Expose PostgreSQL through MCP tools (execute_sql, search_objects, query_insights, schema_diff, observability helpers, and related wiring).
  • PostgreSQL-only: no connectors or compatibility layers for other SQL databases.
  • Provide safe defaults (read-only unless explicitly enabled for destructive SQL).
  • Mitigate PII / clinical leakage (best effort): heuristic guard on execute_sql blocks wildcard projections and many sensitive-looking column names unless explicitly opted in (name-based heuristics can false positive or false negative). Opt-in: TOML allow_access_to_pii_data, env ALLOW_ACCESS_TO_PII_DATA, or single-DSN CLI bare --allow-access-to-pii-data (or =true / 1 / yes). Destructive SQL in single-DSN mode: same pattern with --allow-destructive-sql. Clinical naming profiles include HL7v2/FHIR/LOINC/SNOMED-style identifiers. See docs/tools/execute-sql.mdx, docs/config/command-line.mdx, and CLAUDE.md.

Repository Landmarks

  • src/index.ts - entrypoint and startup path.
  • src/server.ts - HTTP MCP transport wiring.
  • src/connectors/ - database connector implementations.
  • src/tools/ - MCP tool handlers (execute_sql, search_objects, query_insights, schema_diff, etc.).
  • src/config/ - TOML/config loading and validation.
  • frontend/ - local web workbench UI.
  • CLAUDE.md - architecture and development conventions.

Installation

For end users running Electric Elephant as an MCP server:

NPM (npx):

npx electric-elephant --transport http --port 8080 --dsn "postgres://postgres:postgres@localhost:5432/postgres"

Docker:

docker run --rm --init \
  --name electric-elephant \
  --publish 8080:8080 \
  electric-elephant \
  --transport http \
  --port 8080 \
  --dsn "postgres://postgres:[email protected]:5432/postgres"

See docs/installation.mdx and docs/quickstart.mdx for full client setup instructions.

Development Quick Start

pnpm install
pnpm run dev

Build and test:

pnpm run build
pnpm test

Workbench

Electric Elephant includes a built-in web Workbench for running tools and inspecting request traces.

  • Start server with HTTP transport (examples above), then open http://localhost:8080
  • Workbench UI: /
  • MCP endpoint: /mcp

More details: docs/workbench/overview.mdx

MCP Request Flow

flowchart LR
    A[MCP Client] --> B[Transport: stdio or HTTP]
    B --> C[Tool Router]
    C --> D{Tool}
    D -->|execute_sql search_objects query_insights schema_diff ...| E[Connector Manager]
    E --> F[PostgreSQL connector]
    F --> G[(PostgreSQL)]
    G --> F --> E --> C --> A

All built-ins (including read-only diagnostics such as explain_plan, diagnose_locks, and replication_status) route through the connector manager to the same PostgreSQL connection pool for the selected source.

Built-in MCP tools

These tools are enabled by default per [[sources]] entry unless you whitelist a subset with [[tools]] in dbhub.toml. With multiple sources, names are suffixed with the source id (for example execute_sql_prod_pg).

| Tool | Role | |------|------| | execute_sql | Run SQL (multi-statement supported); attempts to mitigate PII/clinical exposure via default guard (opt out via TOML/env/CLI --allow-access-to-pii-data in single-DSN mode); standards-aware profiles (hl7v2, fhir, loinc, snomed) | | search_objects | Discover schemas, tables, columns, indexes, routines (progressive detail) | | query_insights | Ranked statements from pg_stat_statements when available | | schema_diff | Compare schema metadata between two configured sources | | explain_plan | Structured EXPLAIN (FORMAT JSON, …) for one read-only statement | | diagnose_locks | Blocking / waiting sessions from pg_stat_activity | | replication_status | Replication lag, streaming clients, slots | | table_health | Dead tuples, vacuum/analyze stats, relation sizes | | extensions_status | Installed extensions and pg_stat_statements readiness |

User-defined [[tools]] entries add custom parameterized SQL tools. See docs/tools/overview.mdx and dbhub.toml.example.

Query Execution State Machine

stateDiagram-v2
    [*] --> RequestReceived
    RequestReceived --> ValidatingInput
    ValidatingInput --> SelectingSource
    SelectingSource --> Executing
    Executing --> FormattingResponse
    FormattingResponse --> Completed
    Executing --> Failed
    ValidatingInput --> Failed
    Failed --> [*]
    Completed --> [*]

Human + AI Agent Onboarding Checklist

  1. Read CLAUDE.md before editing connectors/tools.
  2. Prefer tool-level changes in src/tools/ over transport-layer changes.
  3. Keep source_id routing behavior backward compatible.
  4. When changing execute_sql, preserve PII guard semantics (pii-sql-guard.ts, pii-heuristics.ts, PII_ACCESS_VIOLATION).
  5. Run relevant tests (pnpm test, or targeted connector/integration tests).

Tool Schema Examples

execute_sql input (list explicit columns; SELECT * may be rejected while the PII guard is active—disable only with explicit policy: TOML, ALLOW_ACCESS_TO_PII_DATA, or bare --allow-access-to-pii-data):

{
  "sql": "SELECT id, status FROM users LIMIT 10;"
}

search_objects input:

{
  "object_type": "column",
  "schema": "public",
  "table": "users",
  "pattern": "%_id",
  "detail_level": "summary",
  "limit": 50
}

Related Docs