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.This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues