Mcp Sqlite Tools — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Sqlite Tools (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
statistics
support
handling
savepoints
structure
monitoring
This server implements multiple layers of security:
schema, and transaction operations
Valibot
monitoring, and idle timeout
nested savepoint support
maintenance scheduling
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-toolsgit clone <repository-url>
cd mcp-sqlite-tools
pnpm install
pnpm run buildThe 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#### Option 1: Global User Configuration (Recommended)
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:
needed
whatever project you have open
#### Option 2: Workspace-Specific Configuration
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:
/databasesfolder
configuration
#### Claude Desktop / Cline Configuration
Add 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 pathoperations
#### Development Configuration
For development with the MCP inspector:
pnpm run build
pnpm run dev#### open_database
Opens 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_database
Closes a database connection.
Parameters:
database (string, optional): Database path to close#### list_databases
Lists available database files in a directory.
Parameters:
directory (string, optional): Directory to search#### database_info
Gets comprehensive information about a database.
Parameters:
database (string, optional): Database path#### list_tables
Lists all tables and views in a database.
Parameters:
database (string, optional): Database path#### describe_table
Gets 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_table
Creates 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_table
Permanently deletes a table and all its data.
Parameters:
table (string, required): Table name to deletedatabase (string, optional): Database path#### execute_read_query
Executes 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": "[email protected]",
"created_at": "2025-10-03 09:42:04"
},
{
"id": 3,
"name": "Carol White",
"email": "[email protected]",
"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_query
Executes 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', '[email protected]')"
}Example Response:
{
"database": "/tmp/demo.db",
"query": "INSERT INTO users (name, email) VALUES ('Alice Smith', '[email protected]')",
"result": {
"rows": [],
"changes": 1,
"last_insert_rowid": 1
},
"message": "⚠️ DESTRUCTIVE OPERATION COMPLETED: Data modified in database '/tmp/demo.db'. Rows affected: 1"
}#### execute_schema_query
Executes 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_insert
Insert 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": "[email protected]" },
{ "name": "Emma Davis", "email": "[email protected]" },
{ "name": "Frank Miller", "email": "[email protected]" }
]
}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_csv
Import 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 pathsallowed
database_name (string, optional): Database path or current contextname
create_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 parsingoptions
#### export_csv
Export 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 pathsallowed
table (string, optional): Table to exportquery (string, optional): Read-only query to exportdatabase_name (string, optional): Database path or current contextname
delimiter, record_delimiter, encoding (optional): CSV outputoptions
always_quote (boolean, optional): Quote every field (default:false)
append (boolean, optional): Append to existing file (default:false)
#### begin_transaction
Start a database transaction with optional savepoint support.
Parameters:
database (string, optional): Database pathReturns: Transaction ID for tracking
#### commit_transaction
Commit the current transaction or release a savepoint.
Parameters:
database (string, optional): Database path#### rollback_transaction
Rollback the current transaction or revert to a savepoint.
Parameters:
database (string, optional): Database path#### export_schema
Export 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_schema
Import 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_database
Creates 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-generatedif not provided)
#### vacuum_database
Optimizes database storage by reclaiming unused space.
Parameters:
database (string, optional): Database pathThe server automatically classifies tools into safety categories:
info, backups)
insert, CSV import)
schema import, CSV table creation)
absolute CSV paths
management)
consistency
pnpm run buildpnpm run devpnpm run cleanThe server is built with a modular architecture:
validation
with health monitoring
and query utilities
management with savepoints
functionality
utilities
tools
This modular design provides:
components
existing code
MCP framework
High-performance SQLite driver
for type-safe inputs
import parsing
writing
TypeScript support
performance
row-level import error reporting
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see the LICENSE file for details.
for high-performance SQLite operations
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.