SQLite数据库读取服务

一个轻量级的MCP服务器,提供对SQLite数据库的只读访问,支持执行SELECT查询、列出表和描述表结构。

  • by abhinavnatarajan
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 abhinavnatarajan/sqlite-reader-mcp

使用说明

sqlite阅读器mcp

用于读取SQLite数据库的MCP服务器。

概述

sqlite-reader-mcp 是一个轻量级的MCP服务器,提供对SQLite数据库的只读访问。它允许用户执行SELECT查询、列出表和描述表模式。

特性

  • 只读访问:通过只允许读取操作(SELECT查询)来确保数据完整性。
  • 安全路径处理:限制对预先批准的绝对文件路径和目录的数据库访问。
  • SQL验证:解析和验证SQL查询,只允许 SELECT 和 WITH 防止意外操作的声明。
  • 异步操作:利用 aiosqlite 用于非阻塞数据库交互。
  • 行限制:自动限制查询返回的行数,以防止过度的数据检索。
  • MCP工具:
    • read_query:在指定的SQLite数据库上执行SELECT SQL查询。
    • list_tables:列出给定SQLite数据库中的所有表。
    • describe_table:获取特定表的架构信息(列名、类型等)。

需求

  • Python 3.13+
  • aiosqlite >= 0.21.0
  • fastmcp >= 2.6.1
  • sqlparse >= 0.5.3

安装

建议的安装方法是 uv:

uv tool install git+https://github.com/abhinavnatarajan/sqlite-reader-mcp

用法

sqlite-reader-mcp --paths /path/to/your/database.db /path/to/another/allowed_directory

论据:

  • --paths (或 -p):服务器可以访问的SQLite数据库文件或包含这些文件的目录的绝对路径列表。

服务器运行后,您可以使用以下工具使用FastMCP客户端与之交互:

read_query

对指定的SQLite数据库文件执行SELECT查询。

  • 参数:
    • file_path (str):SQLite数据库文件的绝对路径。
    • query (str):要执行的SELECT SQL查询。
    • params (可选[List[Any]]):查询的可选参数列表。
    • fetch_all (bool):如果 True (默认),获取所有结果。如果 False,取一行。
    • row_limit (int):要返回的最大行数(默认值为1000)。
  • 退货:字典列表,其中每个字典代表查询结果中的一行。

list_tables

列出指定SQLite数据库文件中的所有表。

  • 参数:
    • file_path (str):SQLite数据库文件的绝对路径。
  • 退货:表名(字符串)列表。

describe_table

为SQLite数据库中的特定表提供详细的模式信息。

  • 参数:
    • file_path (str):SQLite数据库文件的绝对路径。
    • table_name (str):要描述的表的名称。
  • 退货:字典列表,每个字典描述一列(例如,名称、类型、非空、默认值、主键状态)。

安全

  • 只读的:服务器是严格只读的。不 INSERT, UPDATE, DELETE,或允许其他数据修改SQL命令。
  • 路径白名单:访问仅限于位于通过显式提供的路径中的SQLite文件 --paths 命令行参数。路径必须是绝对存在的。
  • 查询验证:解析所有SQL查询。仅 SELECT 语句(包括使用通用表表达式的语句 WITH)是允许的。单个查询字符串中的多个语句被拒绝。尾随的分号会自动删除。

发展

该项目是使用 setuptools。配置在 pyproject.toml.