mcpField
D
Database MCP Server

Database MCP Server

Local
github.com/georgi-terziyskiDatabases3Updated 84w ago

About Database MCP Server

Database MCP Server connects to SQLite, PostgreSQL, MySQL/MariaDB, and SQL Server for developers and LLM-based database workflows. It provides shared operations across database types, with additional database-specific tools where needed.

Key features

  1. 01Connect to four database systems
  2. 02Run SQL and structured queries
  3. 03Manage tables and indexes
  4. 04Begin, commit, and roll back transactions
  5. 05Configure connections at runtime

Use cases

  1. 01Query records across supported databases
  2. 02Create or change database schemas
  3. 03Manage database connections
  4. 04Group database changes in transactions

MCP support

Exposes database connection, query, schema, and transaction tools to MCP clients. It can also run as a standalone web server with HTTP endpoints for listing and calling tools.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Database MCP Server

A Model Context Protocol (MCP) server that provides tools for connecting to and interacting with various database systems.

Features

  • Multi-Database Support: Connect to SQLite, PostgreSQL, MySQL/MariaDB, and SQL Server databases
  • Unified Interface: Common tools for database operations across all supported database types
  • Database-Specific Extensions: Where needed, specific tools for database-specific features
  • Schema Management: Create, alter, and drop tables and indexes
  • Query Execution: Execute raw SQL queries or use structured query tools
  • Transaction Support: Begin, commit, and rollback transactions

Installation

Prerequisites
  • Python 3.8 or higher
  • Required Python packages (installed automatically with pip):
    • SQLAlchemy
    • Various database drivers, depending on which databases you want to use:
      • SQLite (included with Python)
      • PostgreSQL: psycopg2-binary
      • MySQL/MariaDB: mysql-connector-python
      • SQL Server: pyodbc
Installing from Source
# Clone the repository
git clone <repository-url>

# Install the package
pip install -e .

Configuration

The server can be configured using environment variables, a configuration file, or by providing connection details at runtime.

Environment Variables
  • DB_CONFIG_PATH: Path to a JSON configuration file
  • DB_CONNECTIONS: A comma-separated list of connection IDs or a JSON string with connection details
Configuration File Format
{
  "connections": {
    "sqlite_conn": {
      "type": "sqlite",
      "db_path": "/path/to/database.db"
    },
    "postgres_conn": {
      "type": "postgres",
      "host": "localhost",
      "port": 5432,
      "database": "mydatabase",
      "user": "myuser",
      "password": "mypassword"
    }
  }
}

Usage

Running the Server
As an MCP Server for Claude
# Run with default settings
python -m db_mcp_server

# Specify a configuration file
python -m db_mcp_server --config /path/to/config.json

# Set logging level
python -m db_mcp_server --log-level DEBUG
As a Standalone Web Server (for any LLM)
# Run as a web server
python -m db_mcp_server.web_server

# Specify host and port
python -m db_mcp_server.web_server --host 0.0.0.0 --port 8000

# Specify configuration file and logging level
python -m db_mcp_server.web_server --config /path/to/config.json --log-level DEBUG
Available MCP Tools
Connection Management
  • add_connection: Add a new database connection
  • test_connection: Test a database connection
  • list_connections: List all database connections
  • remove_connection: Remove a database connection
Query Execution
  • execute_query: Execute a SQL query
  • get_records: Get records from a table
  • insert_record: Insert a record into a table
  • update_record: Update records in a table
  • delete_record: Delete records from a table
Schema Management
  • list_tables: List all tables in a database
  • get_table_schema: Get the schema for a table
  • create_table: Create a new table
  • drop_table: Drop a table
  • create_index: Create an index on a table
  • drop_index: Drop an index
  • alter_table: Alter a table structure
Transaction Management
  • begin_transaction: Begin a transaction
  • commit_transaction: Commit a transaction
  • rollback_transaction: Rollback a transaction

Examples

Add a Connection
{
  "connection_id": "my_sqlite_db",
  "type": "sqlite",
  "db_path": "/path/to/database.db"
}
Execute a Query
{
  "connection_id": "my_sqlite_db",
  "query": "SELECT * FROM users WHERE age > ?",
  "params": [21]
}
Create a Table
{
  "connection_id": "my_sqlite_db",
  "table": "users",
  "columns": [
    {
      "name": "id",
      "type": "INTEGER",
      "primary_key": true,
      "nullable": false
    },
    {
      "name": "name",
      "type": "TEXT",
      "nullable": false
    },
    {
      "name": "email",
      "type": "TEXT",
      "nullable": true
    }
  ]
}
Insert Records
{
  "connection_id": "my_sqlite_db",
  "table": "users",
  "data": {
    "name": "John Doe",
    "email": "[email protected]"
  }
}

Development

Running Tests
# Run all tests
python -m unittest discover

# Run specific test file
python -m unittest tests.test_sqlite

Connecting from Other LLMs

When running as a standalone web server, other LLMs (like Llama 3) can connect to the database MCP server via HTTP. The server exposes the following endpoints:

Endpoints
  • /list_tools - GET or POST: Returns a list of all available tools with their descriptions and input schemas
  • /call_tool - POST: Execute a specific database tool
Example: Calling from Another LLM

To use this server with another LLM, have the LLM generate HTTP requests to the server. Here's an example of how you could structure the prompt for an LLM like Llama 3:

You can interact with a database by making HTTP requests to a database service at http://localhost:8000. 
The service provides the following endpoints:

1. To get a list of available tools:
   Make a POST request to: http://localhost:8000/list_tools
   
2. To execute a database tool:
   Make a POST request to: http://localhost:8000/call_tool
   with a JSON body like:
   {
     "name": "tool_name",
     "arguments": {
       "param1": "value1",
       "param2": "value2"
     }
   }

For example, to execute a SQL query, you would make a request like:
POST http://localhost:8000/call_tool
Content-Type: application/json

{
  "name": "execute_query",
  "arguments": {
    "connection_id": "my_db",
    "query": "SELECT * FROM users"
  }
}
Sample Python Code for Client Integration
import requests
import json

# Base URL of the database MCP server
BASE_URL = "http://localhost:8000"

# List available tools
def list_tools():
    response = requests.post(f"{BASE_URL}/list_tools")
    return response.json()

# Execute a database tool
def call_tool(tool_name, arguments):
    payload = {
        "name": tool_name,
        "arguments": arguments
    }
    response = requests.post(f"{BASE_URL}/call_tool", json=payload)
    return response.json()

# Example: List tables in a database
def list_tables(connection_id):
    return call_tool("list_tables", {"connection_id": connection_id})

# Example: Execute a SQL query
def execute_query(connection_id, query, params=None):
    return call_tool("execute_query", {
        "connection_id": connection_id,
        "query": query,
        "params": params
    })

# Example: Add a new connection
def add_connection(connection_id, db_type, **kwargs):
    args = {"connection_id": connection_id, "type": db_type}
    args.update(kwargs)
    return call_tool("add_connection", args)

License

MIT License

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.