orifisher2/sqlike

GitHub: orifisher2/sqlike

sqlike 是一个 SQL 查询等价性验证与静态分析工具的轻量客户端,以确定性方式检测 AI 生成或手动重构的 SQL 是否产生行为变化。

Stars: 2 | Forks: 0

# sqlike:MCP server 与 CLI [![@sqlike/mcp](https://img.shields.io/npm/v/%40sqlike%2Fmcp?label=%40sqlike%2Fmcp&color=17a673)](https://www.npmjs.com/package/@sqlike/mcp) [![@sqlike/cli](https://img.shields.io/npm/v/%40sqlike%2Fcli?label=%40sqlike%2Fcli&color=17a673)](https://www.npmjs.com/package/@sqlike/cli) [![license](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue)](#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分析器, 代码校验, 可视化界面, 开发工具, 文档结构分析, 暗色界面, 测试用例, 通知系统