项目简介

MCP SQLite 数据库工具服务器是基于 Model Context Protocol (MCP) 构建的后端服务,专门用于为大型语言模型(LLM)提供与本地SQLite数据库交互的能力。它将复杂的SQLite数据库操作封装成标准化的工具接口,允许LLM客户端通过JSON-RPC协议调用这些工具,实现数据库的创建、查询、数据修改、表结构管理及日常维护。该服务器通过为LLM提供丰富且安全的数据库操作功能,显著增强了LLM处理结构化数据的能力和应用范围。

主要功能点

  • 数据库管理: 轻松打开、创建和关闭SQLite数据库文件,发现指定目录下的数据库文件,并获取数据库的详细元数据和统计信息。
  • 表操作: 列出数据库中的所有表格和视图,获取表格的详细结构(Schema)信息,支持创建新表格并定义列属性(如数据类型、主键、是否允许为空),以及安全地删除现有表格。
  • 查询操作: 提供分类的SQL查询执行接口,确保操作安全。包括:
    • 只读查询: 用于执行SELECT、PRAGMA、EXPLAIN等不修改数据的查询。
    • 数据修改查询: 用于执行INSERT、UPDATE、DELETE等修改数据库数据的操作。
    • Schema修改查询: 用于执行CREATE TABLE、ALTER TABLE、DROP TABLE等修改数据库结构的操作。
  • 数据库维护: 支持创建数据库备份以保障数据安全,并执行VACUUM操作来优化数据库存储和性能。
  • 安全特性: 内置多层安全机制,包括查询分类(自动区分读、写、Schema操作)、路径验证和可配置的路径限制(防止目录遍历攻击)、以及全面的输入验证,确保LLM在操作数据库时的安全性和稳定性。

安装步骤

通过 npm 安装(推荐全局安装)

打开终端并运行以下命令:

npm install -g mcp-sqlite-tools

从源代码安装

首先克隆仓库,然后进入项目目录,安装依赖并构建:

git clone https://github.com/spences10/mcp-sqlite-tools.git
cd mcp-sqlite-tools
pnpm install
pnpm run build

服务器配置

MCP SQLite 数据库工具服务器需要通过MCP客户端(如VS Code的MCP扩展、Claude Desktop或Cline等)进行配置才能被LLM使用。以下是典型的MCP客户端JSON配置示例,用户需要将其添加到MCP客户端的全局或工作区配置文件中(例如VS Code的'mcp.json'文件)。此配置指导MCP客户端如何启动和连接到服务器。

{
  "servers": {
    "sqlite-tools": {
      "command": "npx",
      "args": ["-y", "mcp-sqlite-tools"],
      "env": {
        // SQLITE_DEFAULT_PATH: 默认的SQLite数据库文件存放目录。
        // 例如:"./databases" 或 "${workspaceFolder}/data"。
        // 默认为当前工作目录 "."。
        "SQLITE_DEFAULT_PATH": "${workspaceFolder}/databases",
        
        // SQLITE_ALLOW_ABSOLUTE_PATHS: 是否允许使用数据库文件的绝对路径。
        // "true" 表示允许,"false" 表示禁止。默认为 "true"。
        "SQLITE_ALLOW_ABSOLUTE_PATHS": "true",
        
        // SQLITE_MAX_QUERY_TIME: 单个SQL查询的最大执行时间(毫秒)。
        // 例如:"60000" 表示60秒。默认为 "30000" (30秒)。
        "SQLITE_MAX_QUERY_TIME": "60000",
        
        // SQLITE_BACKUP_PATH: 数据库备份文件的默认存储目录。
        // 例如:"./backups"。默认为 "./backups"。
        "SQLITE_BACKUP_PATH": "${workspaceFolder}/backups",

        // DEBUG: 是否开启调试日志。
        // "true" 开启,"false" 关闭。默认为 "false"。
        "DEBUG": "false"
      }
    }
  }
}

配置说明:

  • '"sqlite-tools"': 这是您在MCP客户端中为该服务器定义的唯一名称。LLM客户端将通过此名称引用并调用该服务器提供的工具。
  • '"command"': 用于启动MCP服务器进程的命令行工具。通常使用'npx'来运行已发布的Node.js包。
  • '"args"': 传递给'command'的参数。'-y mcp-sqlite-tools'指示'npx'运行'mcp-sqlite-tools'这个包。
  • '"env"': 用于设置MCP服务器运行时的环境变量,以自定义其行为。
    • 'SQLITE_DEFAULT_PATH': 配置数据库文件(如'.db'文件)的默认存储目录。相对路径会根据客户端启动服务器时的当前工作目录解析。'"${workspaceFolder}"'是MCP客户端提供的特殊变量,会在运行时被替换为当前项目的工作区根目录。
    • 'SQLITE_ALLOW_ABSOLUTE_PATHS': 这是一个重要的安全设置,决定是否允许在数据库操作中使用绝对文件路径。建议谨慎配置。
    • 'SQLITE_MAX_QUERY_TIME': 设定任意单个SQL查询的最大执行时间,防止长时间运行的查询阻塞服务器。
    • 'SQLITE_BACKUP_PATH': 指定生成数据库备份文件的默认存放位置。
    • 'DEBUG': 开启后服务器会输出更详细的调试信息到标准错误流。

基本使用方法

配置并启动MCP客户端后,LLM将能够通过自然语言指令调用MCP SQLite 数据库工具服务器提供的工具。LLM客户端会将这些自然语言指令解析并转换为JSON-RPC请求,发送给服务器执行。以下是一些LLM可以执行的数据库操作示例:

  • 打开/创建数据库: "打开或创建一个名为 'my_project.db' 的SQLite数据库。"
  • 创建表格: "在 'my_project.db' 中创建一个名为 'tasks' 的表格,包含 'id' (整数, 主键, 非空), 'description' (文本, 非空), 'due_date' (文本) 和 'completed' (布尔值, 默认 'false') 这些列。"
  • 插入数据: "向 'tasks' 表中添加一条新任务:'description' 是 '完成报告', 'due_date' 是 '2023-12-31', 'completed' 是 'false'。"
  • 查询数据: "从 'tasks' 表中查询所有未完成任务的 'description' 和 'due_date'。"
  • 更新数据: "将 'id' 为 '1' 的任务标记为已完成。"
  • 备份数据库: "为 'my_project.db' 数据库创建一个备份。"
  • 优化数据库: "对 'my_project.db' 数据库执行VACUUM操作以优化其性能和存储空间。"

LLM客户端将负责将上述指令转换为服务器可识别的工具调用(例如 'open_database'、'create_table'、'execute_write_query'、'execute_read_query'、'backup_database'、'vacuum_database'),并处理服务器返回的JSON格式结果。

信息

分类

数据库与文件