🐇 MCP SQLite 服务器(只读分支)
这是一个模型上下文协议(MCP)服务器,提供 只读 具备企业级安全性的SQLite数据库交互功能。
致谢/鸣谢
原始维护者: eQuill Labs(埃奎尔实验室) 这个叉子经过安全加固的只读版本由 Fanom2813(这个词汇在中文中没有直接对应的翻译,因为它可能是一个特定领域或品牌名称,保持原样即可)
特点/功能
- 🔒 表示“锁定”或“安全”的符号。 只读访问权限 - 数据库已使用(以下方式/工具)打开
SQLITE_OPEN_READONLY旗帜 - 🛡️ 译为中文是“护盾”。 多层次安全 - 基于白名单的查询验证,SQL注入防护
- 🔍 看起来像是一个放大镜的符号,通常用于表示查看、搜索或调查的动作。在中文里,可以简单地翻译为“🔍 查看”或根据上下文翻译为“🔍 搜索”、“🔍 调查”等。 数据库探索 - 列出表,检查模式,查询数据
- 📊 表格/数据图表 自定义读取查询 - 执行带参数值的SELECT查询
- ✅ 输入验证 - 表名、列名和参数均经过严格验证
安全特性
这台服务器实现了纵深防御的安全策略:
- 数据库级别的保护以……开场
SQLITE_OPEN_READONLY旗帜 - 白名单验证仅允许使用 SELECT、EXPLAIN 和 WITH(CTE)查询
- 将危险命令列入黑名单阻止INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、ATTACH、DETACH、PRAGMA等操作。
- 防止SQL注入参数化查询和严格的标识符验证
- 注释剥离移除SQL注释以防止注入攻击
- 多语句验证在多查询请求中,每个语句都会经过验证
设置
在您的集成开发环境(IDE)的MCP服务器设置中定义该命令:
例如。 Cursor:
{
"mcpServers": {
"MCP SQLite Server (Read-Only)": {
"command": "npx",
"args": [
"-y",
"mcp-sqlite-readonly",
"
"
]
}
}
}例如。 VSCode:
{
"servers": {
"MCP SQLite Server (Read-Only)": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-sqlite-readonly",
"
"
]
}
}
}必须提供数据库路径作为参数。
可用工具
数据库信息
数据库信息
获取有关连接数据库的详细信息。
示例:
{
"method": "tools/call",
"params": {
"name": "db_info",
"arguments": {}
}
}列出表(或“显示表列表”)
列出数据库中的所有表。
示例:
{
"method": "tools/call",
"params": {
"name": "list_tables",
"arguments": {}
}
}获取表模式(或表结构)
获取有关表模式的详细信息。
参数:
tableName(字符串):表的名称
示例:
{
"method": "tools/call",
"params": {
"name": "get_table_schema",
"arguments": {
"tableName": "users"
}
}
}读取操作
读取记录
从表中查询记录,可选择性地应用过滤条件。所有输入均经过验证,以防止SQL注入。
参数:
table(字符串):表名(仅限字母数字和下划线)conditions(对象,可选):作为键值对的过滤条件limit(数字,可选):要返回的最大记录数offset(数字,可选):要跳过的记录数
示例:
{
"method": "tools/call",
"params": {
"name": "read_records",
"arguments": {
"table": "users",
"conditions": {
"age": 30
},
"limit": 10,
"offset": 0
}
}
}自定义只读查询
查询
对数据库执行只读SQL查询。 仅允许使用SELECT、EXPLAIN和WITH(CTE)查询。
查询验证器将:
- 去除SQL注释以防止注入攻击
- 验证多查询请求中的每个语句
- 阻止危险命令(INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、ATTACH、DETACH、PRAGMA 等)
- 允许使用参数化查询以安全地替换值
参数:
sql(字符串): 要执行的 SELECT 查询values(数组,可选):占位符 (?) 的参数值数组
示例:
{
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"sql": "SELECT * FROM users WHERE age > ? AND status = ?",
"values": [25, "active"]
}
}
}允许:
SELECT * FROM users WHERE id = ?EXPLAIN QUERY PLAN SELECT * FROM usersWITH active_users AS (SELECT * FROM users WHERE status = 'active') SELECT * FROM active_users
被阻止:
INSERT INTO users ...UPDATE users SET ...DELETE FROM users ...DROP TABLE usersATTACH DATABASE ...
构建于
______________________________________________________________________
许可证
ISC许可证 - 与原始项目相同
感激;欣赏
如果您觉得原项目有帮助,请考虑支持原作者:
- 原作者: 贾斯汀·帕克(jparkerweb)
- 支持: 🍵 这里有个小贴士
