/ 目录 / 演练场 / SQLite
● 官方 modelcontextprotocol ⚡ 即开即用

SQLite

作者 modelcontextprotocol · modelcontextprotocol/servers

查询本地 SQLite 文件。完全适合个人项目、数据导出或日志/数据库文件的分析。

标准的 SQLite MCP。指向单个 SQLite 文件,提供 schema 自检、读查询和写查询(可配置)。零配置、无需服务器、无网络——与 Postgres MCP 不同,如果允许它还能执行写操作。

为什么要用

核心特性

实时演示

实际使用效果

sqlite.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sqlite",
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "sqlite": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-sqlite",
          "--db-path",
          "/data/sample.db"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add sqlite -- uvx mcp-server-sqlite --db-path /data/sample.db

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: SQLite

通过加载 CSV/JSON 到 SQLite 来分析

👤 数据分析师、探索导出数据的工程师 ⏱ ~15 min beginner

何时使用: 有人发给你一个包含 20 万行的 CSV 文件,问题是「哪个分段转化率最高?」——太大了不适合用电子表格,太小了不值得用真正的数据库。

前置条件
  • 磁盘上的源文件 — 保存为工作文件夹下的 .csv 或 .json
  • 一个空的 SQLite 文件路径 — 选择一个位置如 /tmp/analysis.db;MCP 会创建它
步骤
  1. 创建表并加载数据
    在 /tmp/analysis.db 中创建一个 signups 表,匹配 /data/signups.csv 的列结构。加载所有行。告诉我行数。✓ 已复制
    → 表已创建,行数与文件匹配
  2. 探索 schema
    存在哪些列?对每一列,值的分布是什么(分类列的前 5 个不同值;数值列的最小/最大/平均值)?✓ 已复制
    → 每列的统计概览
  3. 回答实际问题
    按 signup_source 分组。对每个分组计算:总注册数、转化率(completed_onboarding=true 的数量 / 总数)。按转化率排序。✓ 已复制
    → 能用于决策的表格,带上 SQL 展示

结果: 5 分钟内得到可辩护的答案,并获得一个 .db 文件供后续重复查询。

注意事项
  • CSV 列自动类型推断错误(数字被识别为 TEXT) — 加载后,运行 PRAGMA table_info(signups) 并用 CAST 转换或用显式类型重建列
  • 日期字符串作为 TEXT 不能正确排序/比较 — 使用 ISO 8601 格式(YYYY-MM-DDTHH:MM:SSZ)存储日期,这样字典序等同于时间序;或用 julianday() 进行计算
搭配使用: filesystem · antv-chart

检查和编辑个人应用的 SQLite 数据库

👤 构建 CLI 工具、日志应用或本地优先软件的开发者 ⏱ ~10 min beginner

何时使用: 你正在构建一个本地优先应用,想查看数据库中的内容而无需为其编写 CLI。

步骤
  1. 查看 schema
    列出 /Users/me/Library/Application Support/MyApp/data.db 中的每个表。对每个表显示 schema 和行数。✓ 已复制
    → 实时应用数据库的清单
  2. 调查一行记录
    找到 email = '[email protected]' 的用户记录。展示该行及其他表中的相关行(orders、sessions)。✓ 已复制
    → 一个用户数据的完整视图
  3. 修复错误数据
    该用户有一个 2 天前陷入「pending」状态的订单。将其更新为「cancelled」。运行前显示 SQL。✓ 已复制
    → 变更前预览 SQL,然后行被更新

结果: 无需编写一次性 SQL 脚本就能调试应用。

注意事项
  • 应用可能以 WAL 模式持有数据库锁 — 如果得到「database is locked」错误,停止应用,或通过 ?mode=ro&immutable=1 查询 WAL 合并的只读快照
搭配使用: filesystem

从生产数据样本构建确定性测试夹具

👤 编写集成测试的工程师 ⏱ ~25 min intermediate

何时使用: 你想要可重复的测试数据,既接近生产环境又很小很安全。

步骤
  1. 采样并匿名化行记录
    从 /prod-export/orders.db 中从 orders 采样 100 行,覆盖每个状态。匿名化名字和邮箱。✓ 已复制
    → 包含匿名化 PII 的样本
  2. 保存为夹具文件
    将采样行写入 /test/fixtures/orders.db 作为新的 SQLite 文件。包含 schema。✓ 已复制
    → 新的夹具文件已创建
  3. 对测试加载器进行验证
    运行我的测试套件(npm test)——它能识别新的夹具吗?如果不能,第一个失败的测试是什么?✓ 已复制
    → 测试运行;故障已确定

结果: 逼真的夹具,不会偏离真实数据形状。

注意事项
  • 匿名化破坏了参照完整性 — 在表间一致地匿名化连接键(相同的哈希);永远不要按行随机化
搭配使用: filesystem · github

分析 SQLite 支持的日志/事件文件

👤 调试记录到 SQLite 的 CLI 工具或应用的工程师 ⏱ ~10 min beginner

何时使用: 许多现代工具(homebrew、某些浏览器、应用缓存)都用 SQLite 存储状态。你想查询它们。

步骤
  1. 确认这是正确的文件
    打开 ~/Library/Application Support/SomeApp/cache.db。列出表并显示最近行的样本。✓ 已复制
    → 可识别的 schema 确认这是正确的文件
  2. 找到答案
    缓存每个源域名持有多少条目?前 20 个。✓ 已复制
    → 聚合结果
  3. 可选的清理
    删除 90 天内没有被访问的域名的条目。先显示数量,再确认后删除。✓ 已复制
    → 预览、确认,然后删除

结果: 获得应用行为的答案,无需内置的「stats」命令。

注意事项
  • 应用运行时修改其实时数据库可能导致数据库损坏 — 始终先关闭应用,或在 .db 文件的副本上操作
搭配使用: filesystem

组合

与其他 MCP 搭配,撬动十倍杠杆

sqlite + filesystem

从磁盘读取 CSV 并加载到 SQLite 进行分析

用 filesystem MCP 读取 /data/orders.csv,推断类型,并通过 sqlite MCP 加载到 /tmp/analysis.db 作为表 orders✓ 已复制
sqlite + antv-chart

查询 SQLite 数据库并绘制结果图表

从 /tmp/analysis.db 获取 2026 年的月度注册数。通过 antv-chart 渲染为柱状图。✓ 已复制
sqlite + github

分析数据,将发现写入 GitHub Issue

在 /tmp/users.db 上运行我的流失分析。在 acme/analytics 中创建一个 GitHub Issue,总结前 3 个发现并附上 SQL 附录。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_tables none 任何会话的第一步 free
describe_table table_name: str 检查单个表的 schema free
read_query query: str (SELECT only) 运行 SELECT——默认安全 free
write_query query: str (INSERT/UPDATE/DELETE) 修改数据——受限制;大多数客户端需要明确同意 free
create_table query: str (CREATE TABLE ...) DDL——创建或修改 schema free
append_insight insight: str 将发现添加到会话备忘录(某些客户端用它来构建报告) free

成本与限制

运行它的成本

API 配额
无限——本地
每次调用 Token 数
Schema 查询:较小。结果集随行数扩展——探索性查询始终使用 LIMIT
费用
免费
提示
在每个探索性查询中添加 LIMIT 100,只有在你知道会返回什么时才移除它。

安全

权限、密钥、影响范围

凭据存储: 无凭据。数据库文件是你通过 --db-path 启动时指定的任何路径。
数据出站: 从服务器没有数据流出。查询结果作为上下文发送到你的 LLM 提供商。
切勿授予: 永远不要指向包含敏感数据的文件,除非你打算让模型看到它

故障排查

常见错误与修复

database is locked

另一个进程(通常是拥有数据库的应用)持有锁。关闭该进程或复制 .db 文件并查询副本。

验证: lsof <db file>
no such table: X

错误的数据库文件或 schema 不符合预期。运行 list_tables 查看实际存在的内容。检查 MCP 客户端配置中的启动参数 --db-path

datatype mismatch / unexpected NULL

SQLite 是动态类型——声明为 INTEGER 的列可以存储 TEXT。防御性地使用 CAST(col AS INTEGER),或在加载时修复。

Disk image is malformed

数据库损坏,通常是由于在写入过程中杀死进程。尝试 sqlite3 file.db .recover > out.sql 并从转储重建。

替代方案

SQLite 对比其他方案

替代方案何时用它替代权衡
Postgres MCP多用户并发访问、网络数据库或你已经在使用 Postgres需要服务器;Postgres MCP 设计上是只读的
DuckDB (via shell)相同的单文件模型,但用于 OLAP 形分析,扫描速度快得多还没有第一方 MCP;列式存储所以性能特性不同
dbHub你需要一个 MCP 支持 SQLite + Postgres + MySQL 等多个数据库较新;经历的战斗测试较少

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills