FOCUS DATA MCP 服务器 [中文]
模型上下文协议 (MCP) 服务器使人工智能助手能够将自然语言转换为 SQL 语句。
已经有这么多 Text-to-SQL 框架了。为什么我们还需要另一个?
简单来说,focus_mcp_sql采用了两步SQL生成方案,可以控制LLM的幻象,真正建立非技术用户对生成的SQL结果的信任。
以下是 focus_mcp_sql 与其他的比较表:
对比分析表
以下是 focus_mcp_sql 与其他基于 LLM 的框架的并排比较:
特征 | 传统法学硕士框架 | focus_mcp_sql |
---|
生成过程 | 黑盒,直接生成 SQL | 透明、两步(关键字+SQL) |
幻觉风险 | 高,取决于模型质量 | 低,可控(关键字验证) |
速度 | 速度慢,依赖于大型模型推理 | 快速、确定性的关键字到 SQL |
成本 | 高,需要高级模型 | 低,减少对大型模型的依赖 |
非技术用户友好性 | 结果低且难以验证 | 高度、简单的关键字检查 |
特征
-初始化模型-将自然语言转换为SQL语句
先决条件
- jdk 23 或更高版本。下载jdk
- gradle 8.12 或更高版本。下载gradle
- 注册Datafocus以获取 bearer token:
- 在Datafocus注册一个账户
- 创建应用程序
- 进入应用程序
- 管理 -> 接口认证 -> Bearer Token -> 新建 Bearer Token

安装
- 克隆此存储库:
git clone https://github.com/FocusSearch/focus_mcp_sql.git
cd focus_mcp_sql
- 构建服务器:
gradle clean
gradle bootJar
The jar path: build/libs/focus_mcp_sql.jar
MCP 配置
将服务器添加到您的 MCP 设置文件:
{
"mcpServers": {
"focus_mcp_data": {
"command": "java",
"args": [
"-jar",
"path/to/focus_mcp_sql/focus_mcp_sql.jar"
],
"autoApprove": [
"gptText2sqlStart",
"gptText2sqlChat"
]
}
}
}
可用工具
1. gptText2sqlStart
初始模型。
参数:
model
(必需):表模型bearer
(必需):持有者令牌language
(可选):语言['english','chinese']
例子:
{
"model": {
"tables": [
{
"columns": [
{
"columnDisplayName": "name",
"dataType": "string",
"aggregation": "",
"columnName": "name"
},
{
"columnDisplayName": "address",
"dataType": "string",
"aggregation": "",
"columnName": "address"
},
{
"columnDisplayName": "age",
"dataType": "int",
"aggregation": "SUM",
"columnName": "age"
},
{
"columnDisplayName": "date",
"dataType": "timestamp",
"aggregation": "",
"columnName": "date"
}
],
"tableDisplayName": "test",
"tableName": "test"
}
],
"relations": [
],
"type": "mysql",
"version": "8.0"
},
"bearer": "ZTllYzAzZjM2YzA3NDA0ZGE3ZjguNDJhNDjNGU4NzkyYjY1OTY0YzUxYWU5NmU="
}
型号参数说明:
名称 | 位置 | 类型 | 必选 | 说明 |
---|
模型 | 身体 | 目的 | 是 | 没有任何 |
“ 类型 | 身体 | 细绳 | 是 | 数据库类型 |
“ 版本 | 身体 | 细绳 | 是 | 数据库版本 |
» 表格 | 身体 | [目的] | 是 | 结构列表 |
»» 表显示名称 | 身体 | 细绳 | 否 | 表顯示名 |
»» 表名 | 身体 | 细绳 | 否 | 表原始名 |
»» 列 | 身体 | [目的] | 否 | 列表列表 |
»»» 列显示名称 | 身体 | 细绳 | 是 | 列顯示名 |
»»» 列名称 | 身体 | 细绳 | 是 | 列文献 |
»»» 数据类型 | 身体 | 细绳 | 是 | 列抒 |
»»» 聚合 | 身体 | 细绳 | 是 | 列聚合方式 |
» 关系 | 身体 | [目的] | 是 | 关联关系列表 |
““ 状况 | 身体 | [目的] | 否 | 关联条件 |
»»» 目标列名称 | 身体 | 细绳 | 否 | 维度表关联列原始名 |
»»» srcColName | 身体 | 细绳 | 否 | 事实表关联表 |
»» 维度表 | 身体 | 细绳 | 否 | 维度表原始名称 |
»» 事实表 | 身体 | 细绳 | 否 | 事实表 |
»» 连接类型 | 身体 | 细绳 | 否 | 关联类型 |
2. gptText2sqlChat
将自然语言转换为 SQL。
参数:
chatId
(必填):聊天IDinput
(必需):自然语言bearer
(必需):持有者令牌
例子:
{
"chatId": "03975af5de4b4562938a985403f206d4",
"input": "what is the max age",
"bearer": "ZTllYzAzZjM2YzA3NDA0ZGE3ZjguNDJhNDjNGU4NzkyYjY1OTY0YzUxYWU5NmU="
}
响应格式
所有工具都以以下格式返回响应:
{
"errCode": 0,
"exception": "",
"msgParams": null,
"promptMsg": null,
"success": true,
"data": {
}
}
Visual Studio Code Cline 示例
- vsCode 安装 cline 插件
- mcp 服务器配置

- 使用
- 初始模型


- 转移:最大年龄是多少

接触:
https://discord.gg/mFa3yeq9