安全SQL查询工具

一个最小化的MCP服务器,提供安全的只读SQL查询工具,并带有基本的PII屏蔽功能,适用于将LLM连接到数据库而不授予完整SQL访问权限的场景。

  • by lakshjethani
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 lakshjethani/mcp-safesql

使用说明

mcp安全sql

暴露的最小MCP服务器 安全的只读SQL 具有基本PII掩码的工具。

它旨在作为将LLM连接到数据库的起点,而不授予其完全的SQL访问权限。

它做什么

  • 跑动 只读 SELECT 查询 只有。
  • 限制访问 视图白名单 (没有直接访问表)。
  • 应用简单 PII屏蔽 到常见字段(电子邮件、电话、SSN等)。
  • 限制返回的行数。
  • 提供基本的、, 已编辑的查询计划 教学/调试工具(sql.explain_safe).

服务器公开了两个MCP工具:

  • sql.query –运行一个保险箱 SELECT 与白名单视图进行对比。
  • sql.explain_safe –为查询返回一个通用的、经过编辑的运算符大纲。

需求

  • Node.js 18+(推荐)。
  • 什么之中的一个:
    • SQLite数据库文件。
    • 服务器可以连接到的PostgreSQL数据库。

安装

git clone <this-repo-url>
cd mcp-safesql
npm install

运行服务器

这个项目是用TypeScript编写的,使用 tsx 直接从 src/.

SQLite(默认)

默认情况下,服务器需要SQLite数据库:

  • DB_TYPE=sqlite (默认)
  • SQLITE_PATH=./example.db (默认路径,根据需要更改)
  • SAFE_VIEWS=safe_users_v (以逗号分隔的允许视图列表)
  • MAX_ROWS=200 (行帽;可选)

例子:

export DB_TYPE=sqlite
export SQLITE_PATH=/path/to/your.db
export SAFE_VIEWS="safe_users_v,report_active_users_v"

npx tsx src/server.ts

确保中列出的视图 SAFE_VIEWS 存在于您的数据库中。只能查询这些视图。

PostgreSQL

要改用PostgreSQL:

  • DB_TYPE=postgres
  • PG_CONNECTION_STRING=postgres://user:pass@host:5432/dbname
  • SAFE_VIEWS –逗号分隔的允许视图列表(如果需要,可以进行模式限定,例如。 public.safe_users_v)
  • MAX_ROWS –可选行上限(默认值 200)

例子:

export DB_TYPE=postgres
export PG_CONNECTION_STRING="postgres://user:pass@localhost:5432/mydb"
export SAFE_VIEWS="public.safe_users_v,public.safe_orders_v"

npx tsx src/server.ts

环境配置

服务器读取这些环境变量:

变量 默认值 描述
DB_TYPE sqlite sqlite 或 postgres.
SQLITE_PATH ./example.db SQLite数据库文件的路径。
PG_CONNECTION_STRING 空 PostgreSQL连接字符串(如果 DB_TYPE=postgres).
SAFE_VIEWS safe_users_v 以逗号分隔的白名单视图列表。
MAX_ROWS 200 任何查询返回的最大行数。

MCP工具

sql.query

  • 说明: 运行只读模式 SELECT 在白名单视图上;掩盖个人身份信息;大写行。

  • 输入架构:

    {
      "sql": "SELECT * FROM safe_users_v"
    }
    
  • 行为:

    • 拒绝任何不是单一的东西 SELECT 声明。
    • 拒绝引用不在中的表/视图的查询 SAFE_VIEWS.
    • 将查询包裹在子选择中并应用 LIMIT 如果不存在。
    • 屏蔽看起来像电子邮件/电话/SSN或来自可疑名称列的值。

sql.explain_safe

  • 说明: 显示编辑后的查询计划(通用运算符树+粗略估计),但不显示表/索引名称。

  • 输入架构:

    {
      "sql": "SELECT * FROM safe_users_v WHERE email LIKE '%@example.com'"
    }
    
  • 行为:

    • 应用相同 SELECT-仅限白名单检查 sql.query.
    • 返回一个简单的运算符文本树(例如,Select→ 扫描)适用于教学或快速检查。

与MCP客户端一起使用

确切的配置取决于您的MCP感知客户端。一般来说,您将:

  1. 确保已设置上述环境变量。

  2. 配置您的客户端,使用以下命令启动服务器:

    npx tsx src/server.ts
    
  3. 以该名称注册服务器 mcp-safesql 在客户的MCP配置中。

有关精确的配置文件格式和放置位置,请参阅MCP客户端的文档。

发展

  • 主要入口: src/server.ts
  • TypeScript配置: tsconfig.json

如果你愿意,你也可以编译成JavaScript:

npx tsc
node dist/server.js

此仓库有意最小化,旨在作为一个安全的起点,您可以根据自己的模式和策略进行调整。