Skip to main content
Glama
Denuwanhh

SQL Generative MCP

by Denuwanhh
README.md
# SQL Generative MCP

An interactive Model Context Protocol (MCP) server that translates plain English queries into SQLAlchemy operations, queries a PostgreSQL database under strict read-only execution modes, and returns the query results formatted as structured XML.

---

## 🌟 Key Features

- **Natural Language DB Querying:** Translate user queries in plain English to corresponding database results dynamically.
- **SQLAlchemy Table Reflection:** Reflects database schemas dynamically across multiple namespaces using standard ORM capabilities (no direct `pg_dump` client tools needed).
- **Enforced Read-Only Transactions:** Database URL connections are injected with query options (`?options=-c%20default_transaction_read_only%3Don`) to natively block any modifications (`CREATE`, `UPDATE`, `DELETE`, `DROP`) at the database engine level.
- **Dynamic XML Response Formatting:** Converts database records into a clean, well-formed XML structure automatically compiled by Claude.
- **FastMCP Protocol Integration:** Built on top of the standard `fastmcp` SDK to run as a local stdio MCP server.

---

## 🏗️ Architecture

![Architecture Diagram](assets/architecture_diagram.png)

---

## 🛠️ Setup & Installation

### Prerequisites
- Python 3.13+
- [uv](https://github.com/astral-sh/uv) (fast Python package installer and resolver)
- PostgreSQL Server with an active database

### 1. Project Initialization & Dependencies
Initialize the project environment and install dependencies:
```bash
uv sync
```

### 2. Environment Configuration
Create a `.env` file in the root directory and configure the database URL along with your Anthropic API key:
```env
# Database connection for local development (enforced read-only mode via query options)
DATABASE_URL=postgresql://postgres:admin@localhost:5432/expence_db?options=-c%20default_transaction_read_only%3Don

# Anthropic API Key
ANTHROPIC_API_KEY="your-anthropic-api-key-here"
```

---

## 🚀 Running the Server

Start the stdio-based MCP server locally:
```bash
uv run python main.py
```

---

## 🔌 Integration with Claude Desktop

To configure Claude Desktop to use this database query tool on Windows, configure your `claude_desktop_config.json` file.

1. Press `Win + R`, type `%APPDATA%\Claude` and press Enter.
2. Open `claude_desktop_config.json` and insert the following server config:

```json
{
  "mcpServers": {
    "db-query-server": {
      "command": "uv",
      "args": [
        "--directory",
        "c:/Projects/generative-tool",
        "run",
        "python",
        "main.py"
      ]
    }
  }
}
```
3. Restart Claude Desktop. You will see the tools icon 🔌 in the chat input area.

---

## 📈 Usage Examples

Once connected, you can ask Claude queries like:
- *"Show a list of all tables in the database"*
- *"How many expense entries are recorded for AWS?"*
- *"Show a list of all rows in table exp_expence_core_t"*

The server returns results formatted as well-formed XML:
```xml
<data>
  <item>
    <exp_expence_core_id>26</exp_expence_core_id>
    <title>AWS Bill</title>
    <amount>100.00</amount>
  </item>
</data>
```

TDQS

A3.5/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusion with other tools.

Naming Consistency5/5

The single tool name, 'query_database', follows a clear verb_noun pattern, and consistency is trivially maintained with one tool.

Tool Count3/5

With only one tool, the server feels thin for a database interaction service, though it may suffice as a single natural language query endpoint.

Completeness2/5

The server only provides querying, lacking common database operations like schema inspection, data modification, or DDL, leaving significant gaps in typical database workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues