SQLite服务器实现

使用Go语言开发的符合MCP规范的SQLite服务器,通过stdio传输层与客户端通信,提供数据库操作功能。

  • by cry5tallize
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 cry5tallize/mcp-sqlite

使用说明

SQLite MCP Go 实现计划

全程由 CodeX 实现

项目概述

使用 Go 语言开发符合 MCP (Model Context Protocol) 规范的 SQLite 服务器,通过 stdio 传输层与客户端通信。

技术栈

  • 语言: Go 1.24
  • 数据库驱动: modernc.org/sqlite@v1.39.1
  • 传输层: stdio (标准输入/输出)
  • MCP SDK: github.com/mark3labs/mcp-go@v0.41.1

核心架构

1. 模块划分

├── main.go                 # 入口,初始化 stdio 传输
├── server/
│   ├── mcp_server.go      # MCP 服务器实现
│   ├── transport.go       # stdio 传输层封装
│   └── handler.go         # 请求路由和处理
├── database/
│   ├── connection.go      # 数据库连接管理
│   └── operations.go      # 数据库操作封装
└── tools/
    └── sqlite_tools.go    # 8个工具函数实现

2. MCP 协议实现

  • 初始化: 实现 initialize 方法,声明服务器能力
  • 工具注册: 将 8 个数据库操作注册为 MCP tools
  • 请求处理: JSON-RPC 2.0 格式的请求解析和响应

3. stdio 传输层

  • 监听 stdin 读取 JSON-RPC 请求
  • 通过 stdout 输出 JSON-RPC 响应
  • 使用 stderr 输出日志和错误信息
  • 实现消息分帧(换行符分隔或长度前缀)

工具实现要点

1. db_info

  • 查询 sqlite_master 获取元数据
  • 返回:数据库路径、表数量、总记录数、数据库大小

2. list_tables

  • 查询 SELECT name FROM sqlite_master WHERE type='table'
  • 过滤系统表,返回用户表列表

3. get_table_schema

  • 使用 PRAGMA table_info(tableName) 获取列信息
  • 返回:列名、类型、是否可空、默认值、主键信息

4. create_record

  • 动态构建 INSERT INTO 语句
  • 使用参数化查询防止 SQL 注入
  • 返回插入的 last_insert_rowid

5. read_records

  • 根据 conditions 动态构建 WHERE 子句
  • 支持 LIMIT 和 OFFSET 分页
  • 返回 JSON 格式的记录数组

6. update_records

  • 动态构建 UPDATE ... SET ... WHERE 语句
  • 必须提供 conditions 防止误操作
  • 返回受影响的行数

7. delete_records

  • 构建 DELETE FROM ... WHERE 语句
  • 强制要求 conditions 参数
  • 返回删除的行数

8. query

  • 执行任意 SQL(SELECT/INSERT/UPDATE/DELETE)
  • 支持参数绑定(values 数组)
  • 根据 SQL 类型返回结果集或影响行数

安全考虑

  • SQL 注入防护: 全部使用参数化查询
  • 权限限制: 可选择性禁用 query 工具
  • 连接隔离: 每个实例独立数据库连接
  • 错误处理: 统一错误格式,不泄露敏感信息

运行流程

  1. 启动程序,初始化 SQLite 连接
  2. 监听 stdin,等待 MCP 初始化握手
  3. 注册 8 个工具及其 schema
  4. 循环处理 tools/call 请求
  5. 执行对应数据库操作,返回结果
  6. 优雅关闭数据库连接

配置参数

  • --db-path: SQLite 数据库文件路径
  • --readonly: 只读模式(可选)
  • --log-level: 日志级别(stderr 输出)

测试策略

  • 单元测试:每个工具函数独立测试
  • 集成测试:完整 MCP 协议交互测试
  • 边界测试:空表、大数据量、特殊字符处理