orifisher2/sqlike
GitHub: orifisher2/sqlike
sqlike 是一个 SQL 查询等价性验证与静态分析工具的轻量客户端,以确定性方式检测 AI 生成或手动重构的 SQL 是否产生行为变化。
Stars: 2 | Forks: 0
# sqlike:MCP server 与 CLI
[](https://www.npmjs.com/package/@sqlike/mcp)
[](https://www.npmjs.com/package/@sqlike/cli)
[](#license)
**为 SQL 提供确定性的安全网——无论代码是你写的,还是你的 AI 写的。**
你的 AI 写了一段 SQL 查询,或者重构了现有查询。它正确吗?还能返回相同的结果吗?
sqlike 可以给你答案——以确定性的方式,耗时约一毫秒,并且你的真实数据永远不会
离开你的本地机器。它是 [sqlike](https://sqlike.com) 的一部分。
这些是**轻量级的远程客户端**:一个 [MCP](https://modelcontextprotocol.io) server,一个 CLI,以及一个
共享的客户端库。它们会在**本地**对你的 SQL 进行分词(tokenize)——在
任何数据离开你的机器之前,标识符(identifier)和字面量(literal)都会被掩码处理——并且只将分词后的查询转发给 sqlike API。这里
没有分析引擎;分析引擎是在服务端运行的,并且是闭源的。
## 为什么需要它
59% 的开发者会发布他们并未完全理解的 AI 生成代码,而 AI SQL 看起来似是
而非,却比你想像的更容易出错——`LEFT JOIN` 悄悄变成了 `INNER` 从而丢失了
数据行,漏写了 `WHERE` 导致更新了所有内容,表之间以错误的方式进行了 JOIN。看起来合理
并不意味着正确。
sqlike 是能捕捉到这些问题的确定性检查——它是**护栏,而不是另一个 prompt**。它会
**验证**重写是否真的保留了结果,并**标记**不安全的模式,而且它绝不会
为不安全的更改盖章认可:当它无法证明等价性时,它会返回 `Undecided`,而
不是去猜测。整个过程中没有模型参与,这意味着没有重试循环,没有按 token 计算的成本,并且每次都能得到相同的答案。
## 安装 MCP server
将其添加到任何 MCP 客户端(Claude Desktop、Cursor 等)中:
```
{
"mcpServers": {
"sqlike": { "command": "npx", "args": ["-y", "@sqlike/mcp"] }
}
}
```
或者通过 [Smithery](https://smithery.ai/servers/orifisher2/sqlike) 安装。可选的
`SQLIKE_API_KEY` 环境变量可以提高速率限制;如果不提供该变量,你将使用开放的匿名层级。
## 工具
### 分析
对单个 SQL 查询进行静态分析:有效性、反模式(anti-pattern)、建议的重写,以及 schema/index
建议。返回 JSON 分析封装结果。
| 参数 | 类型 | 描述 |
| ----------- | ------- | ------------------------------------------------------------------------ |
| `sql` | string | 要分析的 SQL 查询。**必填。** |
| `schema` | string | 可选的 DDL(`CREATE TABLE` / `CREATE INDEX`),用于对列和类型有感知的检查。 |
| `dialect` | string | `postgres`(默认)、`mysql`、`sqlite` 或 `mssql`。 |
| `allow_raw` | boolean | 仅在查询解析失败(因此无法分词)时使用:发送原始 SQL 以获取解析诊断信息。默认值为 `false`。 |
### diff
检查两个 SQL 查询是否**等价**(结果保留)——用于验证重写或
重构,这是 LLM 无法可靠进行自我评估的判断。返回结论(`Equivalent` /
`EquivalentWithNotes` / `Differs` / `Undecided`)、置信度级别,以及一份**按属性划分的**报告
(列、行、基数、顺序),让你了解*具体改变了什么*,而不仅仅是一个是或否的答案。`Undecided` 永远不代表等价。
| 参数 | 类型 | 描述 |
| --------- | ------ | ----------------------------------------------------------------- |
| `sql_a` | string | 原始查询。**必填。** |
| `sql_b` | string | 重写后的查询,用于与 `sql_a` 进行比对。**必填。** |
| `schema` | string | 可选的 DDL,用于两个查询共同解析的依据(一个共享的 schema)。 |
| `dialect` | string | `postgres`(默认)、`mysql`、`sqlite` 或 `mssql`。 |
## CLI(用于 CI)
在 pipeline 中运行相同的检查:
```
npx -y @sqlike/cli analyze query.sql
```
`crates/cli` 构建了 `sqlike`,这是一个命令行客户端(`--remote https://api.sqlike.com`)。
## 设计上的隐私保护
分词(Tokenization)发生在**这里,在你的机器上,在任何请求发出之前**——sqlike 永远不会看到你真实的
表名、列名或值。没有任何东西会泄露,也没有任何东西可以用于训练(AI 助手需要
真实数据;而 sqlike 不需要)。如果查询无法被解析,它就无法被分词,客户端会
**拒绝**发送它,而不是传输原始 SQL,除非你明确选择允许(`allow_raw` /
`--allow-raw`)。
## 目录结构
- **`crates/mcp`**:`sqlike-mcp`,即 MCP server。以 [`@sqlike/mcp`](packages/mcp) 的名称发布到 npm。
- **`crates/cli`**:`sqlike`,即命令行客户端。
- **`crates/client`**:共享的、无引擎的转发器:分词(tokenize) → 调用 API → 去分词(detokenize)。
- **`crates/core-parse`**:SQL 解析器、阶段模型、分词器和结果类型。
- **`packages/`**:`@sqlike/mcp` 的 npm 打包文件(各平台预编译的二进制文件)。
## 了解更多
请在 **[sqlike.com](https://sqlike.com)** 试用,或者了解它是如何被衡量的——包括与
最先进的学术证明器的正面交锋——请访问 **[sqlike.com/benchmark](https://sqlike.com/benchmark)**。
## 注意
此仓库是根据上游 monorepo(唯一事实来源)生成的。请在此处提交 issue;
代码更改在上游进行,并同步镜像至此。
## 许可证
MIT OR Apache-2.0,任你选择。
标签:AI辅助编程, MCP服务, SOC Prime, SQL分析器, 代码校验, 可视化界面, 开发工具, 文档结构分析, 暗色界面, 测试用例, 通知系统