一个提供全面SQLite数据库操作的Model Context Protocol (MCP)服务器,适用于大型语言模型(LLMs)。该服务器使AI助手能够安全高效地与本地SQLite数据库进行交互,内置了安全特性、高级事务支持以及只读操作和破坏性操作之间的明确分离。
此服务器实现了多层安全措施:
这些工具被有意地分为不同的类别,以启用MCP客户端如Claude Code中的细粒度批准控制:
✓ 安全工具(只读操作):
execute_read_query - SELECT、PRAGMA、EXPLAIN查询list_tables、describe_table、database_infoexport_schema、backup_database这些工具可以自动批准或一次性批准,允许AI自由探索您的数据库结构和读取数据。
⚠️ 破坏性工具(数据修改):
execute_write_query - INSERT、UPDATE、DELETEbulk_insert - 批量插入drop_table - 永久删除表这些工具应针对每个操作单独批准,让您在数据被修改之前了解哪些数据将被修改。
⚠️ 模式变更工具(结构修改):
execute_schema_query - CREATE、ALTER、DROP语句create_table - 创建表import_schema - 导入模式这些工具会修改数据库结构,应单独批准以防止意外的模式更改。
🔒 事务工具:
begin_transaction、commit_transaction、rollback_transaction可以根据您的工作流程需求进行配置。
示例Claude Code钩子配置:
// 在您的Claude Code钩子中
export function toolApproval(tool) {
// 自动批准安全的读操作
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';
}
// 需要批准破坏性操作
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'; // 默认为安全
}
这种分离确保您能控制破坏性操作,同时允许AI高效地处理只读查询。
npm install -g mcp-sqlite-tools
git clone <repository-url>
cd mcp-sqlite-tools
pnpm install
pnpm run build
服务器可以通过环境变量进行配置:
# SQLite数据库默认目录(相对于项目根目录)
SQLITE_DEFAULT_PATH=.
# 允许数据库文件使用绝对路径(安全设置)
SQLITE_ALLOW_ABSOLUTE_PATHS=true
# 最大查询执行时间(毫秒)
SQLITE_MAX_QUERY_TIME=30000
# 数据库备份的默认目录
SQLITE_BACKUP_PATH=./backups
# 启用调试日志
DEBUG=false
在VS Code用户设置中配置一次,适用于所有工作区。添加到您的全局mcp.json文件(Windows上的位置为%APPDATA%\Code\User\mcp.json):
对于VS Code全局配置,编辑~/.config/Code/User/mcp.json(或等效的Windows位置):
{
"servers": {
"sqlite-tools": {
"command": "npx",
"args": ["-y", "mcp-sqlite-tools"]
}
}
}
对于WSL用户,在全局配置中使用以下格式:
{
"servers": {
"sqlite-tools": {
"command": "wsl.exe",
"args": ["bash", "-c", "npx -y mcp-sqlite-tools"]
}
}
}
优点:
对于希望通过版本控制共享数据库配置的团队,在您的工作区中创建.vscode/mcp.json文件:
{
"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"
}
}
}
}
优点:
/databases文件夹中添加到您的MCP客户端配置:
{
"mcpServers": {
"mcp-sqlite-tools": {
"command": "npx",
"args": ["-y", "mcp-sqlite-tools"],
"env": {
"SQLITE_DEFAULT_PATH": ".",
"SQLITE_ALLOW_ABSOLUTE_PATHS": "true",
"SQLITE_MAX_QUERY_TIME": "30000",
"SQLITE_BACKUP_PATH": "./backups"
}
}
}
}
以下环境变量可用于配置MCP服务器:
| 变量 | 描述 | 默认值 | 示例 |
|---|---|---|---|
SQLITE_DEFAULT_PATH | 数据库文件的默认目录 | . | ${workspaceFolder}/databases |
SQLITE_ALLOW_ABSOLUTE_PATHS | 允许数据库操作中的绝对路径 | true | false |
SQLITE_BACKUP_PATH | 数据库备份的默认目录 | 与SQLITE_DEFAULT_PATH相同 | ./backups |
SQLITE_MAX_QUERY_TIME | 最大查询执行时间(毫秒) | 30-秒 | 60000 |
路径解析:
${workspaceFolder}表示工作区相对路径SQLITE_ALLOW_ABSOLUTE_PATHS=true以启用绝对路径操作用于MCP检查器的开发:
pnpm run build
pnpm run dev
open_database打开或创建一个SQLite数据库文件。
参数:
path (字符串,必需):数据库文件路径create (布尔值,可选):如果不存在则创建(默认:true)示例:
{
"path": "my-app.db",
"create": true
}
close_database关闭数据库连接。
参数:
database (字符串,可选):要关闭的数据库路径list_databases列出目录中的可用数据库文件。
参数:
directory (字符串,可选):要搜索的目录database_info获取关于数据库的全面信息。
参数:
database (字符串,可选):数据库路径list_tables列出数据库中的所有表和视图。
参数:
database (字符串,可选):数据库路径describe_table获取表的模式信息。
参数:
table (字符串,必需):表名database (字符串,可选):数据库路径verbosity (字符串,可选):'summary' 或 'detailed'(默认:'detailed')示例请求:
{
"table": "users",
"verbosity": "detailed"
}
示例响应:
{
"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使用指定的列创建新表。
参数:
name (字符串,必需):表名columns (数组,必需):列定义database (字符串,可选):数据库路径列定义:
{
"name": "column_name",
"type": "TEXT|INTEGER|REAL|BLOB",
"nullable": true,
"primary_key": false,
"default_value": null
}
示例:
{
"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永久删除表及其所有数据。
参数:
table (字符串,必需):要删除的表名database (字符串,可选):数据库路径execute_read_query执行只读SQL查询(SELECT、PRAGMA、EXPLAIN)。
参数:
query (字符串,必需):SQL查询params (对象,可选):查询参数database (字符串,可选):数据库路径limit (数字,可选):返回的最大行数(默认:10000)offset (数字,可选):跳过的行数(默认:0)verbosity (字符串,可选):'summary' 或 'detailed'(默认:'detailed')示例请求:
{
"query": "SELECT * FROM users ORDER BY id",
"verbosity": "detailed"
}
示例响应:
{
"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,
"lastInsertRowid": 0
},
"row_count": 2,
"pagination": {
"limit": 10000,
"offset": 0,
"returned_count": 2,
"has_more": false
},
"verbosity": "detailed"
}
execute_write_query执行修改数据的SQL(INSERT、UPDATE、DELETE)。
参数:
query (字符串,必需):SQL查询params (对象,可选):查询参数database (字符串,可选):数据库路径示例请求:
{
"query": "INSERT INTO users (name, email) VALUES ('Alice Smith', 'alice@example.com')"
}
示例响应:
{
"database": "/tmp/demo.db",
"query": "INSERT INTO users (name, email) VALUES ('Alice Smith', 'alice@example.com')",
"result": {
"rows": [],
"changes": 1,
"lastInsertRowid": 1
},
"message": "⚠️ 破坏性操作完成:数据库'/tmp/demo.db'中的数据已修改。受影响的行数:1"
}
execute_schema_query执行DDL查询(CREATE、ALTER、DROP)。
参数:
query (字符串,必需):DDL SQL查询params (对象,可选):查询参数database (字符串,可选):数据库路径示例请求:
{
"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)"
}
示例响应:
{
"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,
"lastInsertRowid": 0
},
"message": "⚠️ 模式变更完成:数据库结构在'/tmp/demo.db'中已修改。更改:0"
}
bulk_insert批量插入多条记录。
参数:
table (字符串,必需):目标表名data (数组,必需):要插入的对象数组batch_size (数字,可选):每批记录数(默认:1000)database (字符串,可选):数据库路径示例请求:
{
"table": "users",
"data": [
{ "name": "David Lee", "email": "david@example.com" },
{ "name": "Emma Davis", "email": "emma@example.com" },
{ "name": "Frank Miller", "email": "frank@example.com" }
]
}
示例响应:
{
"success": true,
"database": "/tmp/demo.db",
"table": "users",
"inserted": 3,
"batches": 1,
"total_time": 0,
"message": "⚠️ 破坏性操作完成:3条记录已插入到数据库'/tmp/demo.db'中的表'users'"
}
begin_transaction启动具有可选保存点支持的数据库事务。
参数:
database (字符串,可选):数据库路径返回值: 用于