Skip to main content
Glama
Meshach22

SQL Data MCP Server

by Meshach22

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:

{
  "mcpServers": {
    "sql-data-server": {
      "command": "/path/to/python.exe",
      "args": ["/path/to/server.py"]
    }
  }
}
  1. Fully restart Claude Desktop

  2. 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.