A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
A Model Context Protocol (MCP) server that provides comprehensive SQLite database operations for LLMs. This server enabl
A Model Context Protocol (MCP) server that provides comprehensive SQLite database operations for LLMs. This server enables AI assistants to interact with local SQLite databases safely and efficiently, with built-in security features, advanced transaction support, and clear separation between read-only and destructive operations.
This server implements multiple layers of security:
The tools are intentionally separated into distinct categories to enable fine-grained approval control in MCP clients like Claude Code:
✓ SAFE Tools (Read-only operations):
execute_read_query - SELECT, PRAGMA, EXPLAIN querieslist_tables, describe_table, database_infoexport_schema, backup_databaseThese tools can be auto-approved or approved once, allowing the AI to freely explore your database structure and read data.
⚠️ DESTRUCTIVE Tools (Data modification):
execute_write_query - INSERT, UPDATE, DELETEbulk_insert - Batch insertionsimport_csv - CSV data importdrop_table - Permanent table deletionThese tools should require individual approval for each operation, giving you visibility into what data will be modified before it happens.
⚠️ SCHEMA CHANGE Tools (Structure modification):
execute_schema_query - CREATE, ALTER, DROP statementscreate_table - Table creationimport_schema - Schema importimport_csv - Can create missing tables from CSV headersThese tools modify database structure and should require individual approval to prevent unintended schema changes.
⚠️ FILE WRITE Tools:
export_csv - Writes CSV files, including absolute paths🔒 TRANSACTION Tools:
begin_transaction, commit_transaction, rollback_transactionCan be configured based on your workflow needs.
Example Claude Code Hook Configuration:
// In your Claude Code hooks
export function toolApproval(tool) {
// Auto-approve safe read operations
if (
tool.name.includes('read') ||
tool.name.includes('list') ||
tool.name.includes('describe') ||
tool.name.includes('export') ||
tool.name.includes('backup') ||
tool.name.includes('info')
) {
return 'auto-approve';
}
// Require approval for destructive operations
if (
tool.name.includes('write') ||
tool.name.includes('delete') ||
tool.name.includes('drop') ||
tool.name.includes('insert') ||
tool.name.includes('schema')
) {
return 'require-approval';
}
return 'require-approval'; // Default to safe
}
This separation ensures you maintain control over destructive operations while allowing the AI to work efficiently with read-only queries.
npm install -g mcp-sqlite-tools
git clone <repository-url>
cd mcp-sqlite-tools
pnpm install
pnpm run build
The server can be configured using environment variables:
# Default directory for SQLite databases (relative to project root)
SQLITE_DEFAULT_PATH=.
# Allow absolute paths for database files (security setting)
SQLITE_ALLOW_ABSOLUTE_PATHS=true
# SQLite lock busy timeout in milliseconds (not wall-clock query runtime)
SQLITE_BUSY_TIMEOUT=30000
# Default backup directory for database backups
SQLITE_BACKUP_PATH=./backups
# Enable debug logging
DEBUG=false
Configure once in your VS Code user settings to work across all
workspaces. Add this to your global mcp.json file
(%APPDATA%\Code\User\mcp.json on Windows):
For VS Code global configuration, edit ~/.config/Code/User/mcp.json
(or equivalent Windows location):
{
"servers": {
"sqlite-tools": {
"command": "npx",
"args": ["-y", "mcp-sqlite-tools"]
}
}
}
For WSL users, use this format in your global config:
{
"servers": {
"sqlite-tools": {
"command": "wsl.exe",
"args": ["bash", "-c", "npx -y mcp-sqlite-tools"]
}
}
}
Benefits:
For teams that want to share database configuration via version
control, create a .vscode/mcp.json file in your workspace:
{
"servers": {
"sqlite-tools": {
"command": "npx",
"args": ["-y", "mcp-sqlite-tools"],
"env": {
"SQLITE_DEFAULT_PATH": "${workspaceFolder}/databases",
"SQLITE_ALLOW_ABSOLUTE_PATHS": "true",
"SQLITE_BACKUP_PATH": "${workspaceFolder}/backups"
}
}
}
}
Benefits:
/databases
folderAdd this to your MCP client configuration:
{
"mcpServers": {
"mcp-sqlite-tools": {
"command": "npx",
"args": ["-y", "mcp-sqlite-tools"],
"env": {
"SQLITE_DEFAULT_PATH": ".",
"SQLITE_ALLOW_ABSOLUTE_PATHS": "true",
"SQLITE_BUSY_TIMEOUT": "30000",
"SQLITE_BACKUP_PATH": "./backups"
}
}
}
}
The following environment variables can be used to configure the MCP server:
| Variable | Description | Default | Example |
|---|---|---|---|
SQLITE_DEFAULT_PATH | Default directory for database files | . | ${workspaceFolder}/databases |
SQLITE_ALLOW_ABSOLUTE_PATHS | Allow absolute paths in database operations | true | false |
SQLITE_BACKUP_PATH | Default directory for database backups | Same as SQLITE_DEFAULT_PATH | ./backups |
SQLITE_BUSY_TIMEOUT | SQLite lock busy timeout in milliseconds | 30000 | 60000 |
SQLITE_MAX_QUERY_TIME is still accepted as a deprecated alias for
SQLITE_BUSY_TIMEOUT; it is not a wall-clock query runtime limit.
Path Resolution:
${workspaceFolder} in VS Code for workspace-relative pathsSQLITE_ALLOW_ABSOLUTE_PATHS=true to enable absolute path
operationsFor development with the MCP inspector:
pnpm run build
pnpm run dev
open_databaseOpens or creates a SQLite database file.
Parameters:
path (string, required): Path to the database filecreate (boolean, optional): Create if doesn't exist (default:
true)Example:
{
"path": "my-app.db",
"create": true
}
close_databaseCloses a database connection.
Parameters:
database (string, optional): Database path to closelist_databasesLists available database files in a directory.
Parameters:
directory (string, optional): Directory to searchdatabase_infoGets comprehensive information about a database.
Parameters:
database (string, optional): Database pathlist_tablesLists all tables and views in a database.
Parameters:
database (string, optional): Database pathdescribe_tableGets schema information for a table.
Parameters:
table (string, required): Table namedatabase (string, optional): Database pathverbosity (string, optional): 'summary' or 'detailed' (default:
'detailed')Example Request:
{
"table": "users",
"verbosity": "detailed"
}
Example Response:
{
"database": "/tmp/demo.db",
"table": "users",
"columns": [
{
"name": "id",
"type": "INTEGER",
"nullable": true,
"default_value": null,
"primary_key": true
},
{
"name": "name",
"type": "TEXT",
"nullable": false,
"default_value": null,
"primary_key": false
},
{
"name": "email",
"type": "TEXT",
"nullable": true,
"default_value": null,
"primary_key": false
},
{
"name": "created_at",
"type": "TIMESTAMP",
"nullable": true,
"default_value": "CURRENT_TIMESTAMP",
"primary_key": false
}
],
"verbosity": "detailed",
"column_count": 4
}
create_tableCreates a new table with specified columns.
Parameters:
name (string, required): Table namecolumns (array, required): Column definitionsdatabase (string, optional): Database pathColumn Definition:
{
"name": "column_name",
"type": "TEXT|INTEGER|REAL|BLOB",
"nullable": true,
"primary_key": false,
"default_value": null
}
Example:
{
"name": "users",
"columns": [
{
"name": "id",
"type": "INTEGER",
"primary_key": true,
"nullable": false
},
{
"name": "name",
"type": "TEXT",
"nullable": false
},
{
"name": "email",
"type": "TEXT",
"nullable": true
}
]
}
drop_tablePermanently deletes a table and all its data.
Parameters:
table (string, required): Table name to deletedatabase (string, optional): Database pathexecute_read_queryExecutes read-only SQL queries (SELECT, PRAGMA, EXPLAIN).
Parameters:
query (string, required): SQL queryparams (object, optional): Query parametersdatabase (string, optional): Database pathlimit (number, optional): Maximum rows to return (default: 10000)offset (number, optional): Number of rows to skip (default: 0)verbosity (string, optional): 'summary' or 'detailed' (default:
'detailed')Example Request:
{
"query": "SELECT * FROM users ORDER BY id",
"verbosity": "detailed"
}
Example Response:
{
"database": "/tmp/demo.db",
"query": "SELECT * FROM users ORDER BY id LIMIT 10000",
"result": {
"rows": [
{
"id": 1,
"name": "Alice Johnson",
"email": "alice@example.com",
"created_at": "2025-10-03 09:42:04"
},
{
"id": 3,
"name": "Carol White",
"email": "carol@example.com",
"created_at": "2025-10-03 09:42:10"
}
],
"changes": 0,
"last_insert_rowid": 0
},
"row_count": 2,
"pagination": {
"limit": 10000,
"offset": 0,
"returned_count": 2,
"has_more": false
},
"verbosity": "detailed"
}
execute_write_queryExecutes SQL that modifies data (INSERT, UPDATE, DELETE).
Parameters:
query (string, required): SQL queryparams (object, optional): Query parametersdatabase (string, optional): Database pathExample Request:
{
"query": "INSERT INTO users (name, email) VALUES ('Alice Smith', 'alice@example.com')"
}
Example Response:
{
"database": "/tmp/demo.db",
"query": "INSERT INTO users (name, email) VALUES ('Alice Smith', 'alice@example.com')",
"result": {
"rows": [],
"changes": 1,
"last_insert_rowid": 1
},
"message": "⚠️ DESTRUCTIVE OPERATION COMPLETED: Data modified in database '/tmp/demo.db'. Rows affected: 1"
}
execute_schema_queryExecutes DDL queries (CREATE, ALTER, DROP).
Parameters:
query (string, required): DDL SQL queryparams (object, optional): Query parametersdatabase (string, optional): Database pathExample Request:
{
"query": "CREATE TABLE users (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL,\n email TEXT UNIQUE,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)"
}
Example Response:
{
"database": "/tmp/demo.db",
"query": "CREATE TABLE users (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL,\n email TEXT UNIQUE,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)",
"result": {
"rows": [],
"changes": 0,
"last_insert_rowid": 0
},
"message": "⚠️ SCHEMA CHANGE COMPLETED: Database structure modified in '/tmp/demo.db'. Changes: 0"
}
bulk_insertInsert multiple records in batches.
Parameters:
table (string, required): Target table namedata (array, required): Array of objects to insertbatch_size (number, optional): Records per batch (default: 1000)database (string, optional): Database pathExample Request:
{
"table": "users",
"data": [
{ "name": "David Lee", "email": "david@example.com" },
{ "name": "Emma Davis", "email": "emma@example.com" },
{ "name": "Frank Miller", "email": "frank@example.com" }
]
}
Example Response:
{
"success": true,
"database": "/tmp/demo.db",
"table": "users",
"inserted": 3,
"batches": 1,
"total_time": 0,
"message": "⚠️ DESTRUCTIVE OPERATION COMPLETED: 3 records inserted into table 'users' in database '/tmp/demo.db'"
}
import_csvImport a headered CSV file into a table. If the table does not exist,
it is created from CSV headers with inferred SQLite column types.
Values are coerced by default (""/null to NULL, numbers to
numbers, booleans to 1/0). Row-level insert errors are reported and
successful rows continue unless fail_fast is true.
Parameters:
table (string, required): Target table namefile_path (string, required): CSV file path; absolute paths
alloweddatabase_name (string, optional): Database path or current context
namecreate_table (boolean, optional): Create missing table (default:
true)batch_size (number, optional): Rows per batch (default: 1000)fail_fast (boolean, optional): Stop on first row error (default:
false)max_errors (number, optional): Max row errors returned
(default: 100)coerce_types (boolean, optional): Coerce CSV strings (default:
true)delimiter, quote, escape, encoding (optional): CSV parsing
optionsexport_csvExport either a full table or a read-only query result to CSV. Provide
exactly one of table or query.
Parameters:
file_path (string, required): Output CSV path; absolute paths
allowedtable (string, optional): Table to exportquery (string, optional): Read-only query to exportdatabase_name (string, optional): Database path or current context
namedelimiter, record_delimiter, encoding (optional): CSV output
optionsalways_quote (boolean, optional): Quote every field (default:
false)append (boolean, optional): Append to existing file (default:
false)begin_transactionStart a database transaction with optional savepoint support.
Parameters:
database (string, optional): Database pathReturns: Transaction ID for tracking
commit_transactionCommit the current transaction or release a savepoint.
Parameters:
database (string, optional): Database pathrollback_transactionRollback the current transaction or revert to a savepoint.
Parameters:
database (string, optional): Database pathexport_schemaExport database schema to SQL or JSON format.
Parameters:
database (string, optional): Database pathformat (string, optional): Output format - "sql" or "json"
(default: "sql")tables (array, optional): Specific tables to exportExample:
{
"format": "json",
"tables": ["users", "orders"]
}
import_schemaImport and execute schema from SQL or JSON.
Parameters:
database (string, optional): Database pathschema (string, required): Schema content to importformat (string, optional): Input format - "sql" or "json"
(default: "sql")backup_databaseCreates a consistent SQLite backup using SQLite's online backup API, including committed data that may still be in WAL files.
Parameters:
source_database (string, optional): Source database pathbackup_path (string, optional): Backup file path (auto-generated
if not provided)vacuum_databaseOptimizes database storage by reclaiming unused space.
Parameters:
database (string, optional): Database pathThe server automatically classifies tools into safety categories:
pnpm run build
pnpm run dev
pnpm run clean
The server is built with a modular architecture:
src/index.ts: Main server entry pointsrc/config.ts: Configuration management with Valibot
validationsrc/clients/connection-manager.ts: Advanced connection pooling
with health monitoringsrc/clients/query-executor.ts: SQL execution, bulk operations,
and query utilitiessrc/clients/transaction-manager.ts: ACID transaction
management with savepointssrc/clients/schema-manager.ts: Schema export/import
functionalitysrc/clients/sqlite.ts: Main SQLite client interface and
utilitiessrc/tools/handler.ts: Tool registration orchestratorsrc/tools/admin-tools.ts: Database and table management toolssrc/tools/query-tools.ts: Query execution and bulk operation
toolssrc/tools/transaction-tools.ts: Transaction management toolssrc/tools/schema-tools.ts: Schema export/import toolssrc/tools/csv-tools.ts: CSV import/export toolssrc/tools/context.ts: Database context managementsrc/common/types.ts: TypeScript type definitionssrc/common/errors.ts: Error handling utilitiessrc/common/sql.ts: SQL identifier and literal helperssrc/common/schema-sql.ts: SQLite schema statement parsingThis modular design provides:
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see the LICENSE file for details.
MCP server integration for DaVinci Resolve Studio
mcp-language-server gives MCP enabled clients access semantic tools like get definition, references, rename, and diagnos
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots