内容
SQLite MCP 服务器
[](https://github.com/gounton/sqlite-m/actions/workflows/ci.yml)
ISC](https://img/badge/License-ISC-blueLICENSE)
[
一个提供 SQLite模型上下文协议(MCP)服务器。支持 **stdio** Desktop、Cursor 等)和 **Streamable HTTP** (适用于远程传输方式。
## 功能特点
- 内存或基于文件的
- 双重传输: Streamable HTTP
- SQL带有输入验证和注入保护管理(CREATE、DROP、DESCRIBE)
- 数据库模式作为 MCP 资源公开
洞察备忘录跟踪
- Docker 支持
## ### Stdio(Cl、Cursor 等)
```npm install && npm runnode build/index.js
```
Claude Desktop 配置文件(`_desktop_config.json`):json
{
"mcpServers": {
"sqlite "command": "node",
"args": ["/path/to/sqlite-mcp-server/build/index }
}
}
基于文件的数据库:
```{
"mcpServers "sqlite": {
"node",
": ["/path/to/sqlcp-server/build/index.js",/to/database.db"]
}
}
```
### Streamable客户端)
```bash build/index.js --http
在 `http://localhost:/mcp` 处公开点,遵循 MCP Streamable规范。默认情况下,它绑定127.0.0`。要从其他主机访问它,请设置 `HOST=0.0.0. — 但请先阅读[security)部分:HTTP 身份验证。
### Docker
docker build -t-server .
docker run -p 3000:3000 -e HOST=0.0.0.0 --name sqlite-mcp sqlite-mcp-server
```
`HOST=0.0.0.0` 是必需的,以便服务器可以通过已发布的端口访问。从主机通过 `localhost:3000` 连接有效;要在其他主机名下访问,请将该主机添加到 `MCP_ALLOWED_HOSTS`。
## 配置
| 选项 | 描述 | 默认值 |
|--------|-------------|---------|
| `--http` | 使用 Streamable HTTP 传输代替 stdio | stdio |
| 第一个非标志参数 | SQLite 数据库文件路径 | `:memory:` |
| `SQLITE_DB_PATH` | 数据库路径(环境变量替代) | `:memory:` |
| `PORT` | HTTP 服务器端口(仅 HTTP 模式) |` |
| `HOST` | HTTP 模式下绑定的接口。使用 `0.0.0.0` 以超越 localhost | `127.0.0.1` |
| `MCP_ALLOWED_HOSTS` | 用于 DNS 重新绑定保护的逗号分隔 `Host` 头允许列表 | `localhost:$PORT,127.0.0.1:$PORT` |
| `MCP_AUTH_TOKEN` | 所有 `/mcp` 请求所需的 Bearer Token(HTTP 模式)。未设置 = 身份验证禁用 | _(none)_ |
示例:
```bash
# 内存数据库上的 stdio
node build/index.js
# 基于文件的数据库上的 stdio
node build/index.js ./data.db
# 自定义端口的 HTTP 模式
PORT=8080 node build/index.js --http ./data.db
# 使用环境变量
SQLITE_DB_PATH=./data.db node build/index.js --http
```
## 可用工具
| 工具 | 描述 |
|------|-------------|
| `read_query` | 执行 SELECT、WITH(CTE)或 EXPLAIN 查询 |
| `write_query` | 执行 INSERT、UPDATE、DELETE 或 REPLACE 查询 |
| `create_table` | 使用 CREATE TABLE 语句创建新表 |
| `drop_table` | 删除表(不可逆) |
| `list_tables` | 列出所有用户创建的表 |
| `describe_table` | 获取表模式:列、索引和外键 |
| `append_insight` | 将业务洞察添加到备忘录资源 |
## 资源
| URI | 描述 |
|-----|| `sqlite://{db}/schema` | 所有表的完整模式(语句) |
| `memo://insights` | 来自累积业务洞察 提示
| |
|------|------------- `mcp-demo` | 引导式演练:主题创建表、插入、运行查询 |
## 远程连接
### Streamable将任何 MCP 兼容的 `http://your-host0/mcp`。服务器支持:
- `POST /` — 发送 MCP 消息(在初始化时创建会话)
- /mcp` — 用于会话可恢复性的 SSE 流
- `DELETE /mcp` — 终止会话
- `GET /health` — 健康检查端点
会话通过 `Mcp-Session-Id` 头进行管理。
### 身份验证
设置 `MCP_AUTH_TOKEN` 以在每个 `/mcp` 请求上需要 Bearer Token(`/health` 保持开放):
```bash
MCP_AUTH_TOKEN=$(openssl rand -hex 32) HOST=0.0.0.0 node build/index.js --http
```
然后客户端发送 `Authorization: Bearer <token>`。当 `MCP_AUTH_TOKEN` 未设置时,身份验证被禁用 — 对于仅限 localhost 的绑定来说是合适的,但如果不公开暴露服务器,请不要## 安全
- 查询验证:每个工具仅接受期的 SQL 语句类型
- 阻止多语句注入:堆叠语句被拒绝,在检查前剥离字符串文字和注释
名根据 `^[a-zA-Z_][a-zA-Z0-9_]*$` 验证
- 默认启用外键
- HTTP 传输默认绑定到 `127.0.0.1`,具有 DNS 重新绑定保护(`MCP_ALLOWED_HOSTS`)
- 通过 `MCP_AUTH_TOKEN` 在 HTTP 传输上可选地进行 Bearer Token 身份验证(时间安全检查)
**在将 HTTP 传输 localhost 以外之前,请设置 `MCP_AUTH_TOKEN`。** 对于生产环境,还请使用终止 TLS 的反向代理来前端它。有关完整模型和如何报告漏洞,请参见 [SECURITY.md](SECURITY.md)。
## 开发
```bash
npm install
npm run build
npm test # 构建 + 运行验证器测试套件
npm start # stdio 模式
npm run start:http # HTTP 模式
```
## 许可证
[ISC](LICENSE)