Database Schema MCP Server logo

Database Schema MCP Server

by Adhikram

A powerful MCP server that provides tools to read and expose database schemas from various database types. It supports PostgreSQL, MySQL, SQLite, and more.

View on GitHub

Last updated: N/A

Database Schema MCP Server

A powerful MCP server that provides tools to read and expose database schemas from various database types (PostgreSQL, MySQL, SQLite, etc.).

🌟 Features

  • Connect to different types of databases
  • List all tables in a database
  • Get detailed schema information for specific tables
  • Get complete database schema including tables, views, and indexes
  • Support for multiple database types (PostgreSQL, MySQL, SQLite)

🚀 Installation

Prerequisites

  1. Python 3.x
  2. Virtual environment (recommended)

Basic Installation

  1. Create and activate a virtual environment:
# Create virtual environment
python -m venv venv

# Activate virtual environment
# On Unix/macOS:
source venv/bin/activate
# On Windows:
venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt

Windows MCP Installation

  1. Install Node.js:

  2. Update System Path:

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
  1. If Node.js is not recognized, manually add to Path:

    • Press Windows + R
    • Type sysdm.cpl and press Enter
    • Go to "Advanced" tab
    • Click "Environment Variables"
    • Under "System variables", find and select "Path"
    • Click "Edit"
    • Add C:\Program Files\nodejs\ if not present
    • Click "OK" on all windows
    • Restart your computer
  2. Install MCP:

    • Download the mcp-install.ps1 script
    • Unblock the file (right-click → Properties → Unblock)
    • Open PowerShell as Administrator and run:
      Set-ExecutionPolicy unrestricted
      
    • Navigate to script location and run:
      .\mcp-install.ps1 @modelcontextprotocol/server-postgres
      
    • Exit Claude Desktop completely (check system tray)
    • Configure server in C:\Users\YOUR_USERNAME\AppData\Roaming\Claude\claude_desktop_config.json
    • Copy MCP server config to mcp.json in Cursor
    • Restart Cursor

MCP Configuration Example

Create a .cursor/mcp.json file in your project root with the following structure:

{
    "mcpServers": {
        "local-db": {
            "args": [
                "C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-postgres\\dist\\index.js",
                "database-url"
            ],
            "command": "node"
        },
        "staging-db": {
            "args": [
                "C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-postgres\\dist\\index.js",
                "database-url"
            ],
            "command": "node"
        },
        "production-db": {
            "args": [
                "C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-postgres\\dist\\index.js",
                "database-url"
            ],
            "command": "node"
        }
    }
}

Replace YOUR_USERNAME with your Windows username and ensure the paths match your Node.js module installation location.

💻 Usage

Starting the Server

python src/server.py

Available Tools

1. Connect to Database
config = {
    "type": "postgresql",  # or "mysql", "sqlite"
    "host": "localhost",
    "port": 5432,
    "database": "mydb",
    "username": "user",
    "password": "password"
}
result = await connect_database(config)
2. List Tables
tables = await list_tables("postgresql://user:password@localhost:5432/mydb")
3. Get Table Schema
schema = await get_table_schema("postgresql://user:password@localhost:5432/mydb", "users")
4. Get Database Schema
schema = await get_database_schema("postgresql://user:password@localhost:5432/mydb")

📚 Example Usage with Claude

# Connect to a database
config = {
    "type": "postgresql",
    "host": "localhost",
    "port": 5432,
    "database": "mydb",
    "username": "user",
    "password": "password"
}
await connect_database(config)

# Get the complete schema
schema = await get_database_schema("postgresql://user:password@localhost:5432/mydb")

# Analyze the schema
print(f"Database has {len(schema['tables'])} tables")
for table_name, table_info in schema['tables'].items():
    print(f"\nTable: {table_name}")
    print(f"Columns: {len(table_info['columns'])}")
    print(f"Primary Keys: {table_info['primary_keys']}")
    print(f"Foreign Keys: {len(table_info['foreign_keys'])}")

🔒 Security Best Practices

  1. Never expose sensitive database credentials in client-side code
  2. Use environment variables or secure configuration management for credentials
  3. Implement proper access controls and authentication
  4. Use SSL/TLS for database connections when possible