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
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=postgresPG_CONNECTION_STRING=postgres://user:pass@host:5432/dbnameSAFE_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感知客户端。一般来说,您将:
- 确保已设置上述环境变量。
- 配置您的客户端,使用以下命令启动服务器:
npx tsx src/server.ts- 以该名称注册服务器
mcp-safesql在客户的MCP配置中。
有关精确的配置文件格式和放置位置,请参阅MCP客户端的文档。
发展
- 主要入口:
src/server.ts - TypeScript配置:
tsconfig.json
如果你愿意,你也可以编译成JavaScript:
npx tsc
node dist/server.js此仓库有意最小化,旨在作为一个安全的起点,您可以根据自己的模式和策略进行调整。
