Skip to main content
Glama
Meshach22

SQL Data MCP Server

by Meshach22
README.md
# SQL Data MCP Server

A custom Model Context Protocol (MCP) server that gives Claude Desktop direct access to a SQLite database — enabling natural language questions to be answered through real, live SQL execution.

## What This Does

Instead of copy-pasting data into a chat, this server exposes a local SQLite database as a set of tools Claude can call directly. Ask a question in plain English, and Claude decides which tool to use, writes the SQL, executes it against the real database, and returns the results.

## Tools Exposed

- `list_tables()` — Lists all tables in the database
- `describe_table(table_name)` — Shows column names and types for a given table
- `run_query(sql)` — Executes a read-only SELECT query and returns the results

## Tech Stack

- **Python** with the official `mcp` SDK (`FastMCP`)
- **SQLite** for the local database
- **Claude Desktop** as the MCP Host

## How It Works

Claude Desktop is configured (via `claude_desktop_config.json`) to launch this server as a subprocess. Each Python function decorated with `@mcp.tool()` is automatically exposed to Claude — the decorator reads the function's name, type hints, and docstring to build the tool schema, so no manual JSON schema writing is required.

When a user asks a question, Claude reasons about which tool to call, requests permission to run it, executes it, and uses the real result to answer — genuine tool use, not a simulated response.

## Setup

1. Clone this repo
2. Install dependencies: `pip install -r requirements.txt`
3. Build the database: `python create_db.py`
4. Add this server to your `claude_desktop_config.json`:
```json
{
  "mcpServers": {
    "sql-data-server": {
      "command": "/path/to/python.exe",
      "args": ["/path/to/server.py"]
    }
  }
}
```
5. Fully restart Claude Desktop
6. Ask Claude a question about your data — e.g. "What tables are available, and what's the average purchase amount by customer segment?"

## Note on Paths

`server.py` computes the database path relative to its own file location (`os.path.dirname(os.path.abspath(__file__))`) rather than assuming a working directory — this ensures it works correctly regardless of what directory the MCP Host launches the process from.