database-explorer-mcp
<div align="center">
# ποΈ Database Explorer MCP Server
### **Let AI assistants talk to your databases.**
Connect **Claude, Cursor, VS Code Copilot, Windsurf** β or any MCP-compatible AI β to **PostgreSQL, MySQL, SQLite, and MongoDB** using natural language.
[](https://opensource.org/licenses/MIT)
[](https://modelcontextprotocol.io)
[](https://www.typescriptlang.org)
[](https://nodejs.org)
[Features](#-features) Β· [Quick Start](#-quick-start) Β· [Setup Guides](#-setup-with-your-ai-tool) Β· [Tools Reference](#-tools-13-total) Β· [Prompts](#-built-in-prompts) Β· [Configuration](#οΈ-configuration) Β· [Contributing](#-contributing)
</div>
---
## π€ What is this?
This is a **Model Context Protocol (MCP) server** β a bridge that lets AI assistants interact with your databases directly.
> **Think of it like this:** Instead of you manually writing SQL queries and copy-pasting results to ChatGPT, this server lets the AI connect to your database, explore the schema, run queries, and analyze data β all through natural conversation.
### How it works
```
ββββββββββββββββββββ βββββββββββββββββββββββββββ ββββββββββββββββ
β AI Assistant β MCP β Database Explorer β SQL β Database β
β ββββββββββΊβ MCP Server ββββββββββΊβ β
β Claude Desktop β JSON β β β PostgreSQL β
β Cursor β over β β’ Explores schemas β β MySQL β
β VS Code Copilot β stdio β β’ Runs queries β β SQLite β
β Windsurf β β β’ Generates ERDs β β MongoDB β
β Any MCP client β β β’ Suggests indexes β β β
ββββββββββββββββββββ βββββββββββββββββββββββββββ ββββββββββββββββ
```
### Who is this for?
- **Developers** who want to query databases using natural language through their AI coding assistant
- **Data analysts** who want AI help exploring and understanding databases
- **Teams** who want to let AI tools safely access their databases (with read-only mode)
- **Anyone** using an MCP-compatible AI tool who works with databases
### β οΈ Important: This is NOT a standalone tool
This server requires an **MCP-compatible AI client** to use. It does NOT have its own UI.
The AI client sends commands to this server, and the server talks to your database. See [Setup Guides](#-setup-with-your-ai-tool) below.
---
## β¨ Features
| Feature | Description |
|---------|------------|
| π **4 Database Engines** | PostgreSQL, MySQL, SQLite, MongoDB |
| π **Schema Explorer** | List tables, describe columns, view indexes, full schema dump |
| β‘ **Query Execution** | Run SQL or MongoDB queries with auto-LIMIT safety |
| π **SQL Safety** | Destructive queries (DROP, INSERT, etc.) blocked by default |
| π **Table Statistics** | Row counts, sizes, index info |
| π **Query Plans** | EXPLAIN queries to debug performance |
| π‘ **Index Suggestions** | Smart recommendations for missing indexes |
| π€ **Data Export** | Export results as CSV or JSON |
| πΊοΈ **ERD Generator** | Generate Mermaid ER diagrams from your schema |
| π **Data Search** | Full-text search across all tables and columns |
| π§ **4 AI Prompts** | Pre-built templates for common database tasks |
| π **Multi-Connection** | Connect to multiple databases simultaneously |
---
## π Quick Start
### 1. Clone and build
```bash
git clone https://github.com/nandanosql/database-explorer-mcp.git
cd database-explorer-mcp
npm install
npm run build
```
### 2. Add to your AI tool
Choose your AI tool below and add the configuration:
### 3. Start using it!
Just talk to your AI naturally:
> _"Connect to my SQLite database at ~/data/app.db"_
> _"What tables are in this database?"_
> _"Show me the first 10 users ordered by signup date"_
> _"Generate an ER diagram of the schema"_
> _"Any missing indexes I should add?"_
---
## π§ Setup with Your AI Tool
<details>
<summary><b>π£ Claude Desktop</b></summary>
Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%AppData%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"database-explorer": {
"command": "node",
"args": ["/FULL/PATH/TO/database-explorer-mcp/build/index.js"],
"env": {
"DB_EXPLORER_READONLY": "true"
}
}
}
}
```
Restart Claude Desktop. You'll see the π¨ tools icon showing 13 available tools.
</details>
<details>
<summary><b>π’ Cursor</b></summary>
Create `.cursor/mcp.json` in your project root:
```json
{
"mcpServers": {
"database-explorer": {
"command": "node",
"args": ["/FULL/PATH/TO/database-explorer-mcp/build/index.js"]
}
}
}
```
Restart Cursor. The tools will be available in Composer and Chat.
</details>
<details>
<summary><b>π΅ VS Code (GitHub Copilot)</b></summary>
Create `.vscode/mcp.json` in your project:
```json
{
"servers": {
"database-explorer": {
"command": "node",
"args": ["/FULL/PATH/TO/database-explorer-mcp/build/index.js"]
}
}
}
```
Enable MCP in VS Code settings, then use Copilot Chat with `@mcp` to access tools.
</details>
<details>
<summary><b>π Windsurf</b></summary>
Add to your Windsurf MCP configuration:
```json
{
"mcpServers": {
"database-explorer": {
"command": "node",
"args": ["/FULL/PATH/TO/database-explorer-mcp/build/index.js"]
}
}
}
```
</details>
<details>
<summary><b>π οΈ Any MCP Client (Generic)</b></summary>
This server communicates over **stdio** using the standard MCP protocol. Any client that supports MCP over stdio can connect:
```bash
# The server reads from stdin and writes to stdout
node /path/to/database-explorer-mcp/build/index.js
```
Or use the MCP Inspector for testing:
```bash
npx @modelcontextprotocol/inspector node build/index.js
```
</details>
---
## π οΈ Tools (13 total)
### Connection Management
| Tool | Description |
|------|------------|
| `connect_database` | Connect to PostgreSQL, MySQL, SQLite, or MongoDB |
| `disconnect_database` | Disconnect from a database |
| `list_connections` | List all active connections |
### Schema Exploration
| Tool | Description |
|------|------------|
| `list_tables` | List all tables/views/collections with row counts |
| `describe_table` | Get columns, types, constraints, indexes for a table |
| `get_schema` | Full database schema as structured JSON |
| `generate_erd` | π Generate Mermaid ER diagram from schema |
### Querying & Analysis
| Tool | Description |
|------|------------|
| `run_query` | Execute SQL or MongoDB queries (read-only by default) |
| `explain_query` | Get query execution plan |
| `search_data` | π Full-text search across all tables and text columns |
### Optimization & Export
| Tool | Description |
|------|------------|
| `get_table_stats` | Row counts, sizes, index statistics |
| `suggest_indexes` | Smart index optimization recommendations |
| `export_data` | Export query results as CSV or JSON |
---
## π§ Built-in Prompts
These prompts appear as suggested starting points in compatible AI clients:
| Prompt | What it does |
|--------|-------------|
| `explore_database` | Automatically explores and explains the entire database structure |
| `optimize_performance` | Analyzes tables for performance issues and suggests fixes |
| `write_query` | Helps you write a query for a specific task |
| `generate_report` | Creates a comprehensive data report on a topic |
---
## π Usage Examples
### Connect to a Database
```
You: Connect to my PostgreSQL database at localhost, database 'myapp', user 'admin', password 'secret'
AI: β
Connected to postgresql database "myapp" with alias "default"
```
### Explore Schema
```
You: What tables are in this database?
AI: Database: myapp (postgresql)
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β’ users [table] β 12,450 rows β 4.2 MB
β’ orders [table] β 89,120 rows β 28.7 MB
β’ products [table] β 2,340 rows β 1.1 MB
...
```
### Query Data
```
You: Show me the top 5 customers by total order value
AI: [runs the query automatically]
customer_name β total_orders β total_value
βββββββββββββββΌβββββββββββββββΌββββββββββββ
Alice Johnson β 47 β $12,450.00
Bob Smith β 38 β $9,870.50
...
```
### Generate ERD
```
You: Generate an ER diagram of the database
AI: [returns Mermaid diagram]
```
```mermaid
erDiagram
users {
int id PK
varchar username "NOT NULL"
varchar email "NOT NULL"
}
orders {
int id PK
int user_id FK
decimal total_amount "NOT NULL"
}
users ||--o{ orders : "user_id"
```
### Search Data
```
You: Find any mentions of "alice" across all tables
AI: π Search results for "alice":
ββββββββββββββββββββββββββββββββββββββββββββββββββ
π users.username β 1 match(es)
β id: 1 | username: alice | email: alice@example.com
π users.email β 1 match(es)
β id: 1 | username: alice | email: alice@example.com
```
### SQLite (File-based, no server needed)
```
You: Connect to the SQLite database at /path/to/mydb.sqlite
```
### MongoDB
```
You: Connect to MongoDB at localhost, database 'myapp'
You: Find all users older than 25
```
---
## βοΈ Configuration
Configure via environment variables in your MCP client config:
| Variable | Default | Description |
|----------|---------|-------------|
| `DB_EXPLORER_READONLY` | `true` | Block destructive queries by default |
| `DB_EXPLORER_MAX_ROWS` | `100` | Default row limit for queries |
| `DB_EXPLORER_MAX_ROW_LIMIT` | `1000` | Maximum allowed row limit |
| `DB_EXPLORER_TIMEOUT_MS` | `30000` | Query timeout in milliseconds |
Example with Claude Desktop:
```json
{
"mcpServers": {
"database-explorer": {
"command": "node",
"args": ["/path/to/build/index.js"],
"env": {
"DB_EXPLORER_READONLY": "true",
"DB_EXPLORER_MAX_ROWS": "200"
}
}
}
}
```
---
## π Security
- **Read-only by default** β DROP, TRUNCATE, ALTER, INSERT, UPDATE, DELETE are blocked unless `readonly: false` is explicitly passed
- **Auto-LIMIT** β SELECT queries automatically get a LIMIT clause (default 100, max 1000)
- **Query timeout** β 30-second timeout prevents runaway queries
- **No credentials stored** β Connection details are in-memory only, never written to disk
- **Local only** β Uses stdio transport, no network exposure
---
## ποΈ Project Structure
```
src/
βββ index.ts # Entry point (stdio transport + env config)
βββ server.ts # MCP server setup, tool/prompt/resource registration
βββ types.ts # Shared TypeScript interfaces + SQL safety patterns
βββ connection-manager.ts # Connection lifecycle management
βββ connectors/
β βββ base.ts # Abstract connector interface
β βββ postgresql.ts # PostgreSQL (pg driver)
β βββ mysql.ts # MySQL (mysql2 driver)
β βββ sqlite.ts # SQLite (better-sqlite3)
β βββ mongodb.ts # MongoDB (mongodb driver)
βββ tools/
βββ connect.ts # connect/disconnect/list
βββ schema.ts # list_tables/describe_table/get_schema
βββ query.ts # run_query/explain_query + SQL safety
βββ stats.ts # get_table_stats
βββ optimize.ts # suggest_indexes
βββ export.ts # export_data
βββ erd.ts # generate_erd (Mermaid)
βββ search.ts # search_data
```
---
## π§ͺ Testing
Integration tests use SQLite (no external database needed):
```bash
npm test
```
```
β connects to SQLite database
β lists all tables
β describes table with columns and types
β describes table with foreign keys
β gets indexes for a table
β gets full database schema
β runs SELECT query
β runs JOIN query
β runs aggregate query
β runs INSERT query (write mode)
β explains query plan
β gets table stats for all tables
β gets table stats for specific table
β blocks DROP statements
β blocks TRUNCATE statements
β blocks ALTER statements
β blocks INSERT statements
β allows SELECT statements
β allows EXPLAIN statements
β connects via connection manager
β lists connections
β throws on missing connection
β stores server config
23 pass / 0 fail
```
---
## π€ Contributing
Contributions are welcome! Here's how:
1. **Fork** this repository
2. **Create** a feature branch: `git checkout -b feature/amazing-feature`
3. **Commit** your changes: `git commit -m 'Add amazing feature'`
4. **Push** to the branch: `git push origin feature/amazing-feature`
5. **Open** a Pull Request
### Ideas for contributions
- Add support for more databases (Redis, DynamoDB, ClickHouse)
- Add query history tracking
- Add schema diff between connections
- Improve MongoDB aggregation pipeline support
- Add data visualization tools
---
## π License
MIT β see [LICENSE](LICENSE) for details.
---
<div align="center">
**Built with β€οΈ for the AI-assisted development community**
If this project helps you, give it a β on GitHub!
</div>
TDQS
Scored across 13 tools
The set is mostly distinct: connection management, schema listing/description, querying, explaining, searching, stats, index suggestions, ERD, and export each have separate roles. Minor overlap exists between get_schema and list_tables/describe_table as aggregate vs granular schema tools, and export_data's relationship to run_query results is slightly unclear.
All 13 tools use snake_case and follow a predictable verb_noun or verb_resource pattern (e.g., list_tables, describe_table, run_query). No casing or style inconsistencies are present.
13 tools is well-scoped for a database exploration server, covering connections, schema, queries, and analysis without excessive surface area. Each tool appears to earn its place.
The surface covers connection lifecycle, schema discovery, query execution, explain plans, search, stats, index advice, ERD generation, and export. Minor gaps may exist (e.g., no explicit list_databases or transaction control), but agents can work around them via run_query and existing tools.