FOCUS SQL Generation
STDIOModel Context Protocol server enables AI assistants to convert natural language into SQL statements.
Model Context Protocol server enables AI assistants to convert natural language into SQL statements.
A Model Context Protocol (MCP) server enables artificial intelligence assistants to convert natural language into SQL statements.
In simple terms, focus_mcp_sql adopts a two-step SQL generation solution, which enables control over the hallucinations of LLM and truly builds the trust of non-technical users in the generated SQL results.
Below is the comparison table between focus_mcp_sql and others:
Here’s a side-by-side comparison of focus_mcp_sql with other LLM-based frameworks:
Feature | Traditional LLM Frameworks | focus_mcp_sql |
---|---|---|
Generation Process | Black box, direct SQL generation | Transparent, two-step (keywords + SQL) |
Hallucination Risk | High, depends on model quality | Low, controllable (keyword verification) |
Speed | Slow, relies on large model inference | Fast, deterministic keyword-to-SQL |
Cost | High, requires advanced models | Low, reduces reliance on large models |
Non-Technical User Friendliness | Low, hard to verify results | High, easy keyword checking |
-Initialize the model -Convert natural language to SQL statements
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
Add the server to your MCP settings file:
{ "mcpServers": { "focus_mcp_data": { "command": "java", "args": [ "-jar", "path/to/focus_mcp_sql/focus_mcp_sql.jar" ], "autoApprove": [ "gptText2sqlStart", "gptText2sqlChat" ] } } }
initial model.
Parameters:
model
(required): table modelbearer
(required): bearer tokenlanguage
(optional): language ['english','chinese']Example:
{ "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=" }
model 参数说明:
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
model | body | object | 是 | none |
» type | body | string | 是 | 数据库类型 |
» version | body | string | 是 | 数据库版本 |
» tables | body | [object] | 是 | 表结构列表 |
»» tableDisplayName | body | string | 否 | 表显示名 |
»» tableName | body | string | 否 | 表原始名 |
»» columns | body | [object] | 否 | 表列列表 |
»»» columnDisplayName | body | string | 是 | 列显示名 |
»»» columnName | body | string | 是 | 列原始名 |
»»» dataType | body | string | 是 | 列数据类型 |
»»» aggregation | body | string | 是 | 列聚合方式 |
» relations | body | [object] | 是 | 表关联关系列表 |
»» conditions | body | [object] | 否 | 关联条件 |
»»» dstColName | body | string | 否 | dimension 表关联列原始名 |
»»» srcColName | body | string | 否 | fact 表关联列原始名 |
»» dimensionTable | body | string | 否 | dimension 表原始名 |
»» factTable | body | string | 否 | fact 表原始名 |
»» joinType | body | string | 否 | 关联类型 |
Convert natural language to SQL.
Parameters:
chatId
(required): chat idinput
(required): Natural languagebearer
(required): bearer tokenExample:
{ "chatId": "03975af5de4b4562938a985403f206d4", "input": "what is the max age", "bearer": "ZTllYzAzZjM2YzA3NDA0ZGE3ZjguNDJhNDjNGU4NzkyYjY1OTY0YzUxYWU5NmU=" }
All tools return responses in the following format:
{ "errCode": 0, "exception": "", "msgParams": null, "promptMsg": null, "success": true, "data": { } }