Skip to main content

MCP Database Server with read-only access

Project description

MCP Database Server

A Model Context Protocol (MCP) server implementation in Python that provides strictly read-only access to databases. It allows Large Language Models (LLMs) to inspect schemas and query data safely without risking data modification.

Features

  • 🛡️ Strict Read-Only: Enforced at the driver level (e.g., SQLite ?mode=ro) or session level (MySQL SET SESSION TRANSACTION READ ONLY).
  • 🏗️ Repository Pattern: Abstracted database access allows for easy extension to other backends (PostgreSQL, MySQL) via Dependency Injection.
  • ⚡ FastMCP: Built efficiently using the official MCP Python SDK.
  • 🔌 Connection Pooling: Automatic connection pooling for MySQL using DBUtils to ensure performance and reliability.
  • 🔧 Easy Configuration: Managed via environment variables and Makefiles.

Project Structure

  • server.py: Main entry point for the MCP server.
  • db/: Contains the Repository interface and implementations (sqlite_repository.py, mysql_repository.py).
  • seed.py: Utility script to populate the database (since the server itself is read-only).
  • Makefile: Automation for common tasks.

Quick Start

Prerequisites

  • Python 3.12+ (managed via venv)
  • make (optional, but recommended)
  • MySQL Server (optional, if using MySQL backend)

1. Setup

Use the Makefile to create a virtual environment, install dependencies, and seed a test database:

make setup

This runs pip install -r requirements.txt and python seed.py.

2. Configuration

The project uses python-dotenv. Copy the example config and adjust as needed:

cp .env.example .env

Key Variables:

  • DB_ENGINE: sqlite (Default) or mysql
  • DB_ADDRESS: Path to db file (SQLite) or Host URL (MySQL).
  • DB_PORT: Database port (Default: 3306 for MySQL).
  • DB_USER / DB_PASSWORD: Database credentials (required for MySQL).
  • DB_SCHEMA: Database name (required for MySQL).

3. Run the Server

Start the MCP server:

make run

(Or directly via venv/bin/python server.py)

Usage with LLMs

Once running, the server exposes the following tools to connected MCP clients:

  1. list_tables()
    • Returns a list of all tables in the database.
  2. describe_table(table_name: str)
    • Returns the schema (columns, types, primary keys) for the specified table.
  3. read_query(query: str)
    • Executes a SQL SELECT query.
    • Note: Queries attempting to modify data will raise a Security Error or OperationalError.

Development

Running Tests

Execute the unit test suite:

make test

Extending

To add support for a new database (e.g., Postgres):

  1. Create db/postgres_repository.py implementation of DatabaseRepository.
  2. Update server.py to instantiate it when DB_ENGINE=postgres.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_db_server-0.1.0.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_db_server-0.1.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file mcp_db_server-0.1.0.tar.gz.

File metadata

  • Download URL: mcp_db_server-0.1.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_db_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e719b8d871a201a742792886ea78c228c059d53ae04d9b56c091110b966a0762
MD5 d96fe2faf81c35b0b94d148501a9cf80
BLAKE2b-256 218466152baf4dbc5990890daf488359354dc165b9d7d487bef9953729150556

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_db_server-0.1.0.tar.gz:

Publisher: python-publish.yml on monkey-mode/mcp-db-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_db_server-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_db_server-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_db_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8aadc5ed0153fbbcf6bb206e7dc002149efc01713dcc502b6398322bcaa3a16
MD5 f4647aaa1708d62d68dc16912db3adf0
BLAKE2b-256 54ad0db2ee80a7d20a4b04313ee868adef2acbc7965589e62337e57764156da2

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_db_server-0.1.0-py3-none-any.whl:

Publisher: python-publish.yml on monkey-mode/mcp-db-server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page