mcpsqlite工具
一个模型上下文协议(MCP)服务器,提供全面的 LLM的SQLite数据库操作。此服务器支持AI助手 安全高效地与本地SQLite数据库交互 内置安全功能、高级事务支持和清晰 只读操作和破坏性操作之间的分离。
特性
🗄️ 数据库管理
- 打开/创建数据库:打开现有数据库或创建新数据库
- 关闭数据库:正确关闭数据库连接
- 列出数据库:在目录中查找数据库文件
- 数据库信息:获取全面的数据库元数据和
统计
📊 表格操作
- 列表表格:查看数据库中的所有表和视图
- 描述表:获取表的详细架构信息
- 创建表:使用自定义列定义创建新表
- 删除表:移除桌子(带有安全警告)
🔍 查询操作
- 执行读取查询:安全选择、PRAGMA和解释查询
- 执行写入查询:INSERT、UPDATE、DELETE操作
- 执行架构查询:DDL操作(CREATE、ALTER、DROP)
- 大容量插入:高效批量插入多条记录
💾 事务管理
- 开始事务:使用保存点启动数据库事务
支持
- 提交事务:使用嵌套事务提交更改
处理
- 回滚事务:安全地回滚更改并嵌套
存储点
- 自动清理:自动清理过时事务
📋 架构操作
- 输出模式:将数据库架构导出为SQL或JSON格式
- 导入架构:从SQL或JSON导入并执行模式
- 选择性出口:导出特定表或整个数据库
结构
🛠️ 数据库维护
- 备份数据库:使用时间戳创建数据库备份
- 真空数据库:优化数据库存储和性能
- 连接池:具有健康功能的高级连接管理
监控
⚠️ 安全功能
此服务器实现了多层安全:
- 查询分类:自动分离只读、写、,
模式和事务操作
- 路径验证:防止目录遍历攻击
- 可配置的路径限制:控制对绝对路径的访问
- 输入验证:使用全面的参数验证
选项
- 高级连接池:连接限制、健康状况
监控和空闲超时
- 交易安全:自动清除过时事务
嵌套保存点支持
- 资源清理:在服务器关闭时进行优雅的清理
维护排程
基于钩子的安全工具分离
这些工具被有意地分为不同的类别,以 在MCP客户端中启用细粒度的审批控制,如Claude Code:
✓ 安全工具 (只读操作):
execute_read_query-选择、PRAGMA、解释查询list_tables,describe_table,database_infoexport_schema,backup_database
这些工具可以自动批准或批准一次,使AI能够 自由探索您的数据库结构并读取数据。
⚠️ 破坏性工具 (数据修改):
execute_write_query-插入、更新、删除bulk_insert-批量插入import_csv-CSV数据导入drop_table-永久表删除
这些工具每项操作都需要单独批准, 让您了解在此之前将修改哪些数据 发生。
⚠️ 方案更改工具 (结构修改):
execute_schema_query-CREATE、ALTER、DROP语句create_table-表格创建import_schema-架构导入import_csv-可以从CSV标题创建缺少的表
这些工具可以修改数据库结构,并且应该需要单独的 批准以防止意外的架构更改。
⚠️ 文件写入工具:
export_csv-写入CSV文件,包括绝对路径
🔒 交易工具:
begin_transaction,commit_transaction,rollback_transaction
可以根据您的工作流程需求进行配置。
Claude代码挂钩配置示例:
// 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
}这种分离可确保您保持对破坏性的控制 操作,同时允许AI以只读方式高效工作 查询。
安装
来自npm(发布时)
npm install -g mcp-sqlite-tools来源
git clone
cd mcp-sqlite-tools
pnpm install
pnpm run build配置
环境变量
可以使用环境变量配置服务器:
# 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=falseMCP客户端配置
选项1:全局用户配置(推荐)
在VS Code用户设置中配置一次,以在所有 工作空间。将此添加到您的全局 mcp.json 文件 (%APPDATA%\Code\User\mcp.json 在Windows上):
对于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"]
}
}
}优点:
- ✅ 一种配置在任何地方都适用 -没有针对每个项目的设置
需要
- 📁 自动使用当前工作区 -在中创建的数据库
无论你打开什么项目
- 🔄 始终保持最新 -通过npx使用最新发布的版本
选项2:工作区特定配置
对于希望通过版本共享数据库配置的团队 控制,创建 .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
文件夹
- �️ 项目隔离 -每个项目都有自己的数据库
配置
Claude桌面/客户端配置
将此添加到MCP客户端配置中:
{
"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"
}
}
}
}环境变量
以下环境变量可用于配置MCP 服务器:
| 变量 | 描述 | 默认值 | 示例 |
|---|---|---|---|
SQLITE_DEFAULT_PATH | 数据库文件的默认目录 | . | ${workspaceFolder}/databases |
SQLITE_ALLOW_ABSOLUTE_PATHS | 允许在数据库操作中使用绝对路径 | true | false |
SQLITE_BACKUP_PATH | 数据库备份的默认目录 | 与相同 SQLITE_DEFAULT_PATH | ./backups |
SQLITE_BUSY_TIMEOUT | SQLite锁忙超时(毫秒) | 30000 | 60000 |
SQLITE_MAX_QUERY_TIME 仍被接受为已弃用的别名 SQLITE_BUSY_TIMEOUT;这不是挂钟查询运行时间限制。
路径分辨率:
- 相对路径从默认路径解析
- 使用
${workspaceFolder}工作区相对路径的VS代码 - 集
SQLITE_ALLOW_ABSOLUTE_PATHS=true启用绝对路径
运营
开发配置
与MCP检查员一起开发:
pnpm run build
pnpm run devAPI 参考
数据库管理工具
open_database
打开或创建SQLite数据库文件。
参数:
path(string,必填):数据库文件的路径create(boolean,可选):如果不存在则创建(默认值:
真的)
例子:
{
"path": "my-app.db",
"create": true
}close_database
关闭数据库连接。
参数:
database(字符串,可选):要关闭的数据库路径
list_databases
列出目录中可用的数据库文件。
参数:
directory(字符串,可选):要搜索的目录
database_info
获取有关数据库的全面信息。
参数:
database(字符串,可选):数据库路径
表格操作
list_tables
列出数据库中的所有表和视图。
参数:
database(字符串,可选):数据库路径
describe_table
获取表的架构信息。
参数:
table(字符串,必填):表名database(字符串,可选):数据库路径verbosity(字符串,可选):“摘要”或“详细”(默认值:
“详细”)
请求示例:
{
"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(number,可选):要跳过的行数(默认值:0)verbosity(字符串,可选):“摘要”或“详细”(默认值:
“详细”)
请求示例:
{
"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,
"last_insert_rowid": 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,
"last_insert_rowid": 1
},
"message": "⚠️ DESTRUCTIVE OPERATION COMPLETED: Data modified in database '/tmp/demo.db'. Rows affected: 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,
"last_insert_rowid": 0
},
"message": "⚠️ SCHEMA CHANGE COMPLETED: Database structure modified in '/tmp/demo.db'. Changes: 0"
}bulk_insert
批量插入多条记录。
参数:
table(字符串,必填):目标表名data(array,必填):要插入的对象数组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": "⚠️ DESTRUCTIVE OPERATION COMPLETED: 3 records inserted into table 'users' in database '/tmp/demo.db'"
}CSV操作
import_csv
将带标题的CSV文件导入表中。如果该表不存在, 它是由CSV标头和推断的SQLite列类型创建的。 默认情况下,值是强制的(""/null 为NULL,数字为 数字,布尔值为1/0)。报告行级插入错误 成功的行将继续,除非 fail_fast 这是真的。
参数:
table(字符串,必填):目标表名file_path(字符串,必填):CSV文件路径;绝对路径
允许
database_name(字符串,可选):数据库路径或当前上下文
名字
create_table(布尔值,可选):创建缺失的表(默认值:
真的)
batch_size(数字,可选):每批行数(默认值:1000)fail_fast(布尔值,可选):第一行出错时停止(默认值:
错误的
max_errors(数字,可选):返回的最大行错误数
(默认值:100)
coerce_types(布尔值,可选):强制CSV字符串(默认值:
真的)
delimiter,quote,escape,encoding(可选):CSV解析
选项
export_csv
将完整表或只读查询结果导出到CSV。提供 正好是其中之一 table 或 query.
参数:
file_path(字符串,必填):输出CSV路径;绝对路径
允许
table(字符串,可选):要导出的表query(字符串,可选):要导出的只读查询database_name(字符串,可选):数据库路径或当前上下文
名字
delimiter,record_delimiter,encoding(可选):CSV输出
选项
always_quote(boolean,可选):引用每个字段(默认值:
错误的
append(布尔值,可选):附加到现有文件(默认值:
错误的
事务管理
begin_transaction
使用可选的保存点支持启动数据库事务。
参数:
database(字符串,可选):数据库路径
退货: 用于跟踪的交易ID
commit_transaction
提交当前事务或释放保存点。
参数:
database(字符串,可选):数据库路径
rollback_transaction
回滚当前事务或还原到保存点。
参数:
database(字符串,可选):数据库路径
架构操作
export_schema
将数据库模式导出为SQL或JSON格式。
参数:
database(字符串,可选):数据库路径format(字符串,可选):输出格式-“sql”或“json”
(默认值:“sql”)
tables(数组,可选):要导出的特定表
例子:
{
"format": "json",
"tables": ["users", "orders"]
}import_schema
从SQL或JSON导入并执行模式。
参数:
database(字符串,可选):数据库路径schema(字符串,必填):要导入的架构内容format(字符串,可选):输入格式-“sql”或“json”
(默认值:“sql”)
数据库维护
backup_database
使用SQLite的在线备份API创建一致的SQLite备份, 包括可能仍在WAL文件中的已提交数据。
参数:
source_database(字符串,可选):源数据库路径backup_path(字符串,可选):备份文件路径(自动生成
如果没有提供)
vacuum_database
通过回收未使用的空间来优化数据库存储。
参数:
database(字符串,可选):数据库路径
安全指南
工具分类
服务器自动将工具分为安全类别:
- ✓ SAFE:只读操作(SELECT、PRAGMA、EXPLAIN、数据库
信息、备份)
- ⚠️ 破坏性的:数据修改(INSERT、UPDATE、DELETE、批量
插入,CSV导入)
- ⚠️ 架构更改:结构修改(CREATE、ALTER、DROP、,
模式导入、CSV表创建)
- ⚠️ 文件写入:写入文件的导出操作,包括
绝对CSV路径
- ⚠️ 交易:事务控制(开始、提交、回滚)
- ✓ 维护:优化操作(真空、连接
管理)
最佳实践
- 始终使用参数化查询 防止SQL注入
- 使用交易记录 用于多步骤操作以确保数据
一致性
- 审查破坏性操作 执行前
- 创建备份 在主要模式更改之前
- 使用bulk_insert 用于高效插入大型数据集
- 查看CSV绝对路径 导入/导出文件操作之前
- 导出架构 在重大结构变化之前
- 使用适当的工具 适用于不同的操作类型
- 监控连接池 在高流量场景中的使用
发展
建筑
pnpm run build发展模式
pnpm run dev清洁
pnpm run clean建筑
服务器采用模块化架构构建:
核心模块
src/index.ts:主服务器入口点src/config.ts:使用Valibot进行配置管理
验证
数据库客户端
src/clients/connection-manager.ts:高级连接池
与健康监测
src/clients/query-executor.ts:SQL执行、批量操作、,
和查询实用程序
src/clients/transaction-manager.ts:ACID事务
使用保存点进行管理
src/clients/schema-manager.ts:架构导出/导入
功能
src/clients/sqlite.ts:主SQLite客户端界面和
公用事业
工具操作员
src/tools/handler.ts:工具注册编排器src/tools/admin-tools.ts:数据库和表管理工具src/tools/query-tools.ts:查询执行和批量操作
工具
src/tools/transaction-tools.ts:交易管理工具src/tools/schema-tools.ts:架构导出/导入工具src/tools/csv-tools.ts:CSV导入/导出工具src/tools/context.ts:数据库上下文管理
基础功能类库
src/common/types.ts:TypeScript类型定义src/common/errors.ts:错误处理实用程序src/common/sql.ts:SQL标识符和文字助手src/common/schema-sql.ts:SQLite模式语句解析
这种模块化设计提供了:
- 关注点分离:每个模块都有一个单一的职责
- 可维护性:易于测试、调试和扩展个人
组件
- 可扩展性:可以添加新功能,而不会影响
现有代码
- 类型安全:全面覆盖TypeScript
依赖项
- 热机械轧制:现代TypeScript
MCP框架
高性能SQLite驱动程序
- 选项:轻量级验证库
用于类型安全输入
- csv解析器:CSV
导入解析
- csv编写器:CSV导出
写作
依赖关系提供的关键功能
- 热机械轧制:简化了MCP服务器开发,具有出色的性能
TypeScript支持
- 更好平方3:同步SQLite操作,性能卓越
演出
- 选项:所有工具参数的运行时类型验证
- csv-\*:带类型强制的CSV导入/导出
行级导入错误报告
贡献
欢迎投稿!请随时提交拉取请求。
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
致谢
- 建立在
- 受到启发
- 用途 更好平方3
用于高性能SQLite操作
