An MCP (Model Context Protocol) server that exposes SQLite databases as tools for AI agents. Connect any SQLite database and let LLMs query schemas, run SQL, and inspect tables through a standardized interface.
execute_sql— Run arbitrary SQL statements with support for dry-run mode (EXPLAIN QUERY PLAN), automatic result truncation, and configurable row limits.get_table_info— Retrieve complete table metadata in a single call: columns, types, DDL, indexes, foreign keys, and row count.- Read-only mode — Optionally block all write operations for safe, production-friendly access.
- Query timeout — Configurable per-query timeout to prevent runaway queries.
- Python 3.11+
- uv (recommended) or pip
# Clone the repository
git clone https://github.com/<owner>/sqlite-mcp.git
cd sqlite-mcp
# Install with uv
uv syncOr with pip:
pip install .| Variable | Required | Default | Description |
|---|---|---|---|
SQLITE_DB_PATH |
Yes | — | Path to the SQLite database file |
SQLITE_READ_ONLY |
No | false |
Set to true to disable write operations |
SQLITE_TIMEOUT |
No | 30 |
Query timeout in seconds |
SQLITE_DB_PATH=./my_database.db sqlite-mcpThe server communicates over stdio and is designed to be launched by an MCP-compatible client (e.g., Cursor, Claude Desktop).
Add the server to your MCP client config (e.g., .cursor/mcp.json):
{
"mcpServers": {
"sqlite": {
"command": "uv",
"args": ["run", "--directory", "/path/to/sqlite-mcp", "sqlite-mcp"],
"env": {
"SQLITE_DB_PATH": "/path/to/database.db",
"SQLITE_READ_ONLY": "true"
}
}
}
}Execute a SQL statement against the connected database.
| Parameter | Type | Default | Description |
|---|---|---|---|
sql |
str |
— | The SQL statement to execute |
dry_run |
bool |
false |
Return the query plan instead of executing |
max_rows |
int |
100 |
Maximum rows to return |
Example response (SELECT):
{
"results": [{"id": 1, "name": "Alice"}],
"row_count": 1,
"truncated": false
}Example response (dry run):
{
"query_plan": [{"id": 0, "parent": 0, "detail": "SCAN users"}]
}Get complete schema and metadata for a table.
| Parameter | Type | Description |
|---|---|---|
table |
str |
The table name to inspect |
Example response:
{
"table": "users",
"columns": [
{"name": "id", "type": "INTEGER", "nullable": false, "default": null, "primary_key": true},
{"name": "name", "type": "TEXT", "nullable": true, "default": null, "primary_key": false}
],
"ddl": "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
"indexes": [],
"foreign_keys": [],
"row_count": 42
}This project is licensed under the MIT License. See LICENSE for details.