自然语言数据库查询服务器

SQL MCP服务器是一个支持通过自然语言或SQL查询多种数据库(包括SQLite、MySQL、PostgreSQL和MongoDB)的工具,适用于需要高效数据库操作的开发场景。

  • by Processori7
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Processori7/SQL-MCP

使用说明

SQL MCP 服务器

MCP(Model Context Protocol)是一种用于自然语言数据库查询的服务器。支持SQL、MySQL、PostgreSQL和MongoDB。

机会

  • 自然语言查询:用俄语向数据库发送查询
  • 支持多个数据库:SQLite、MySQL、PostgreSQL、MongoDB
  • MCP协议:STDIO-与LLM客户沟通
  • 与LLM集成:包括帮助LLM使用服务器的Prompt
  • SQL操作:选择、插入、更新、删除、更改、创建数据库
  • 批量操作:每次请求多个插入、更新、删除
  • 原理图视图:表清单和表结构
  • 数据保护:Update、Delete、Drop和Alter需要明确的用户确认
  • 批处理操作:多个更改操作的一个确认

安装

  1. 克隆存储库:

    git clone https://github.com/Processori7/SQL-MCP.git
    cd SQL-MCP
    
  2. 创建并激活虚拟环境(推荐):

    # Windows
    python -m venv venv
    venv\Scripts\activate
    
    # Linux/macOS
    python3 -m venv venv
    source venv/bin/activate
    
  3. 建立依赖关系:

    pip install -r requirements.txt
    

与MCP集成

配置MCP客户端

将MCP客户端添加到配置中(例如, cline_mcp_settings.json):

{
  "mcpServers": {
    "sql-stdio": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "python",
      "args": ["-X", "utf8", "-m", "src.main"],
      "env": {
        "PYTHONPATH": "C:\\path\\to\\SQL-MCP",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

备注: 替换 C:\\path\\to\\SQL-MCP 到项目文件夹的真实路径。

对于Windows很重要: 旗 -X utf8 变量 PYTHONIOENCODING 确保正确使用西里尔字母。

可用工具

1.execute_query

执行对自然语言或SQL数据库的查询。

参数:

  • db_type (必填):BD类型- 'sqlite', 'mysql', 'postgresql' 或 'mongodb'
  • query (必填):俄语查询或SQL/MongoDB查询
  • db_config 或 config_file (其中一个是必需的):数据库连接设置
  • confirm_changes (可选):数据更改/删除操作的确认

2.列表表

获取数据库中所有表或集合的列表。

参数:

  • db_type (必需):数据库类型
  • db_config 或 config_file (其中一个是必需的):数据库连接设置

3.get_table_schema

获取表的原理图(列、类型、限制)。

参数:

  • db_type (必需):数据库类型(MongoDB不支持)
  • table_name (必填):表名
  • db_config 或 config_file (其中一个是必需的):数据库连接设置

使用示例

连接配置

有两种方法可以指定连接参数:

方法1:dbu config参数(JSON对象)

MySQL
{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "mypassword",
  "database": "mydb"
}
PostgreSQL
{
  "host": "localhost",
  "port": 5432,
  "user": "postgres",
  "password": "mypassword",
  "dbname": "mydb"
}
SQLite
{
  "db_name": "mydata.db"
}
MongoDB
{
  "uri": "mongodb://localhost:27017",
  "database_name": "mydb"
}

方法2:configu file参数(文件路径)

指定配置文件的路径。支持JSON和TXT格式。

JSON文件(mysqlu config.JSON)的示例:

{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "mypassword",
  "database": "mydb"
}

例如txt文件(mysqlu config.txt):

# Конфигурация MySQL
host=localhost
port=3306
user=root
password=mypassword
database=mydb

使用config_file:

{
  "db_type": "mysql",
  "query": "SELECT * FROM users",
  "config_file": "C:/configs/mysql_config.json"
}

或相对路径:

{
  "db_type": "mysql",
  "query": "SHOW TABLES",
  "config_file": "mysql_config.txt"
}

查询示例

创建数据库(MySQL/PostgreSQL)

{
  "db_type": "mysql",
  "query": "CREATE DATABASE my_new_db",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": ""}
}

或自然语言:

{
  "db_type": "mysql",
  "query": "Создай БД my_new_db",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": ""}
}

数据库转换

{
  "db_type": "mysql",
  "query": "USE my_new_db",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

创建表

{
  "db_type": "mysql",
  "query": "CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100), age INT)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

批量插入(Mulk Insert)

{
  "db_type": "mysql",
  "query": "INSERT INTO users (name, email, age) VALUES ('Иван', 'ivan@mail.ru', 25), ('Мария', 'maria@mail.ru', 30), ('Алексей', 'alex@mail.ru', 28)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

选择条件

{
  "db_type": "mysql",
  "query": "SELECT * FROM users WHERE age > 25",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

或自然语言:

{
  "db_type": "mysql",
  "query": "Покажи всех пользователей где возраст больше 25",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

批量更新(Bulk Update)

{
  "db_type": "mysql",
  "query": "UPDATE users SET status='active' WHERE id IN (1, 2, 3)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"},
  "confirm_changes": true
}

批量删除(Bulk Delete)

{
  "db_type": "mysql",
  "query": "DELETE FROM users WHERE status='inactive'",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"},
  "confirm_changes": true
}

MongoDB的例子

搜索文档

{
  "db_type": "mongodb",
  "query": "db.users.find({age: {$gt: 25}})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"}
}

批量插入(insertMany)

{
  "db_type": "mongodb",
  "query": "db.users.insertMany([{name: 'Иван', age: 25}, {name: 'Мария', age: 30}, {name: 'Алексей', age: 28}])",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"}
}

批量更新(updateMany)

{
  "db_type": "mongodb",
  "query": "db.users.updateMany({status: 'pending'}, {$set: {status: 'active'}})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"},
  "confirm_changes": true
}

批量删除(deleteMany)

{
  "db_type": "mongodb",
  "query": "db.users.deleteMany({status: 'inactive'})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"},
  "confirm_changes": true
}

findOneAndUpdate

{
  "db_type": "mongodb",
  "query": "db.users.findOneAndUpdate({\"_id\": {\"$oid\": \"692c2012253e01f8b4ac2b23\"}}, {\"$set\": {\"name\": \"Новое имя\"}}, {\"returnNewDocument\": true})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"},
  "confirm_changes": true
}

自然语言查询

选择

  • "Покажи все пользователи" → 从用户中选择*
  • "Покажи имя и email из users" → 从用户处选择姓名和电子邮件
  • "все сотрудники где возраст больше 30" →Select*from员工where年龄>30
  • "Покажи первые 10 записей из orders" → 从订单中选择*限制10

插入

  • "Добавь пользователя имя Иван возраст 25" →插入用户(姓名、年龄)值('Ivan',25)
  • "Вставь в таблицу orders запись: товар Ноутбук, цена 50000" →插入订单(产品,价格)价值('笔记本电脑',50000)

更新

  • "Обнови в users где id=5 установи name Пётр" → 更新用户设置name='Пάтр'WHERE id=5
  • "Измени статус на active где id 10" → 更新。..SETстатус=“活动”,其中id=10

删除

  • "Удали из users где id=5" → 从id=5的用户中删除
  • "Удали все записи из orders где статус cancelled" → 从订单中删除,其中статус=“取消”

创建/删除

  • "Создай таблицу products с колонками: id INT PRIMARY KEY, name VARCHAR(100)" → 创建TABLE产品(…)
  • "Создай БД new_database" → 创建数据库new_DATABASE
  • "Удали таблицу old_data" → 删除表old_data

数据保护

改变数据的操作, 默认情况下锁定 并明确确认:

  • UPDATE -数据更改
  • DELETE -删除数据
  • DROP -删除表/集合
  • ALTER -结构调整

为了执行这些操作,LLM必须:

  1. 得到答复 "status": "blocked"
  2. 询问用户确认
  3. 确认后,从 confirm_changes: true

SQL转换为MongoDB

服务器自动将SQL查询转换为MongoDB操作:

ÐSQL查询¸MongoDB等价物¸ |-----------|-------------------| | SELECT * FROM users | db.users.find({}) | | SELECT * FROM users WHERE id = 5 | db.users.find({id: 5}) | | SELECT * FROM users WHERE age > 18 | db.users.find({age: {$gt: 18}}) | | SELECT * FROM users WHERE name LIKE '%Иван%' | db.users.find({name: {$regex: 'Иван'}}) | | SELECT * FROM users WHERE status IN ('a', 'b') | db.users.find({status: {$in: ['a', 'b']}}) | | INSERT INTO users (name) VALUES ('Иван') | db.users.insertOne({name: 'Иван'}) | | UPDATE users SET name = 'Пётр' WHERE id = 5 | db.users.updateMany({id: 5}, {$set: {name: 'Пётр'}}) | | DELETE FROM users WHERE id = 5 | db.users.deleteMany({id: 5}) |

建筑

  • src/main.py:MCP服务器登录点,MCP协议处理
  • src/db_connector.py:管理连接并将其委派给适配器
  • src/query_parser.py:自然语言查询解析器
  • src/adapters/:数据库适配器
    • sql_adapter.py:SQLite、MySQL、PostgreSQL
    • mongo_adapter.py:MongoDB

发射

直接起动

python -X utf8 -m src.main

通过MCP客户端

配置MCP客户端后,服务器自动处理请求。


SQL MCP服务器(英文)

MCP(模型上下文协议)服务器,用于使用自然语言执行数据库查询。支持SQLite、MySQL、PostgreSQL和MongoDB。

特性

  • 自然语言查询:用简单的英语或俄语编写数据库查询
  • 多数据库支持:SQLite、MySQL、PostgreSQL、MongoDB
  • MCP协议:与LLM客户的Stdio沟通
  • LLM集成:包括帮助LLM使用服务器的提示
  • SQL操作:选择、插入、更新、删除、更改、创建数据库
  • 批量操作:单个查询中有多个INSERT、UPDATE、DELETE
  • 架构检查:列出表和表结构
  • 数据保护:UPDATE、DELETE、DROP和ALTER需要明确的用户确认
  • 批量操作:单次确认多个修改操作

安装

  1. 克隆存储库:

    git clone https://github.com/Processori7/SQL-MCP.git
    cd SQL-MCP
    
  2. 创建并激活虚拟环境(推荐):

    # Windows
    python -m venv venv
    venv\Scripts\activate
    
    # Linux/macOS
    python3 -m venv venv
    source venv/bin/activate
    
  3. 安装依赖项:

    pip install -r requirements.txt
    

MCP集成

MCP客户端配置

添加到您的MCP客户端配置中(例如。, cline_mcp_settings.json):

{
  "mcpServers": {
    "sql-stdio": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "python",
      "args": ["-X", "utf8", "-m", "src.main"],
      "env": {
        "PYTHONPATH": "C:\\path\\to\\SQL-MCP",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

注: 替换 C:\\path\\to\\SQL-MCP 带有项目文件夹的实际路径。

对Windows很重要: 这 -X utf8 旗和 PYTHONIOENCODING 变量确保正确处理非ASCII字符。

可用工具

1.execute_query

使用自然语言或SQL执行数据库查询。

参数:

  • db_type (必填):数据库类型- 'sqlite', 'mysql', 'postgresql',或 'mongodb'
  • query (必填):自然语言查询或SQL/MongoDB查询
  • db_config 或 config_file (需要一个):数据库连接设置
  • confirm_changes (可选):数据修改/删除操作确认

2.列表表

获取数据库中所有表或集合的列表。

参数:

  • db_type (必填):数据库类型
  • db_config 或 config_file (需要一个):数据库连接设置

3.get_table_schema

获取表架构(列、类型、约束)。

参数:

  • db_type (必填):数据库类型(MongoDB不支持)
  • table_name (必填):表名
  • db_config 或 config_file (需要一个):数据库连接设置

使用示例

连接配置

有两种方法可以指定连接参数:

方法1:db_config参数(JSON对象)

MySQL
{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "mypassword",
  "database": "mydb"
}
PostgreSQL
{
  "host": "localhost",
  "port": 5432,
  "user": "postgres",
  "password": "mypassword",
  "dbname": "mydb"
}
SQLite
{
  "db_name": "mydata.db"
}
MongoDB
{
  "uri": "mongodb://localhost:27017",
  "database_name": "mydb"
}

方法2:config_file参数(文件路径)

指定配置文件的路径。支持JSON和TXT格式。

JSON文件示例(mysql_configur.JSON):

{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "mypassword",
  "database": "mydb"
}

TXT文件示例(mysql_config.TXT):

# MySQL Configuration
host=localhost
port=3306
user=root
password=mypassword
database=mydb

使用config_file:

{
  "db_type": "mysql",
  "query": "SELECT * FROM users",
  "config_file": "C:/configs/mysql_config.json"
}

查询示例

创建数据库(MySQL/PostgreSQL)

{
  "db_type": "mysql",
  "query": "CREATE DATABASE my_new_db",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": ""}
}

创建表

{
  "db_type": "mysql",
  "query": "CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100), age INT)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

批量插入

{
  "db_type": "mysql",
  "query": "INSERT INTO users (name, email, age) VALUES ('John', 'john@mail.com', 25), ('Mary', 'mary@mail.com', 30)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

带条件选择

{
  "db_type": "mysql",
  "query": "SELECT * FROM users WHERE age > 25",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"}
}

批量更新

{
  "db_type": "mysql",
  "query": "UPDATE users SET status='active' WHERE id IN (1, 2, 3)",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"},
  "confirm_changes": true
}

批量删除

{
  "db_type": "mysql",
  "query": "DELETE FROM users WHERE status='inactive'",
  "db_config": {"host": "localhost", "port": 3306, "user": "root", "password": "", "database": "my_new_db"},
  "confirm_changes": true
}

MongoDB示例

查找文档

{
  "db_type": "mongodb",
  "query": "db.users.find({age: {$gt: 25}})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"}
}

批量插入(insertMany)

{
  "db_type": "mongodb",
  "query": "db.users.insertMany([{name: 'John', age: 25}, {name: 'Mary', age: 30}])",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"}
}

批量更新(updateMany)

{
  "db_type": "mongodb",
  "query": "db.users.updateMany({status: 'pending'}, {$set: {status: 'active'}})",
  "db_config": {"uri": "mongodb://localhost:27017", "database_name": "mydb"},
  "confirm_changes": true
}

数据保护

数据修改操作包括 默认情况下被阻止 并需要明确确认:

  • UPDATE -数据修改
  • DELETE -数据删除
  • DROP -表/集合删除
  • ALTER -结构修改

要执行这些操作,LLM必须:

  1. 接收a "status": "blocked" 响应
  2. 请用户确认
  3. 确认后,使用重试查询 confirm_changes: true

SQL到MongoDB的转换

服务器自动将SQL查询转换为MongoDB操作:

SQL查询 MongoDB等效
SELECT * FROM users db.users.find({})
SELECT * FROM users WHERE id = 5 db.users.find({id: 5})
SELECT * FROM users WHERE age > 18 db.users.find({age: {$gt: 18}})
SELECT * FROM users WHERE name LIKE '%John%' db.users.find({name: {$regex: 'John'}})
SELECT * FROM users WHERE status IN ('a', 'b') db.users.find({status: {$in: ['a', 'b']}})
INSERT INTO users (name) VALUES ('John') db.users.insertOne({name: 'John'})
UPDATE users SET name = 'Peter' WHERE id = 5 db.users.updateMany({id: 5}, {$set: {name: 'Peter'}})
DELETE FROM users WHERE id = 5 db.users.deleteMany({id: 5})

建筑

  • src/main.py:MCP服务器入口点,MCP协议处理
  • src/db_connector.py:连接管理和适配器委派
  • src/query_parser.py:自然语言查询解析器
  • src/adapters/:数据库适配器
    • sql_adapter.py:SQLite、MySQL、PostgreSQL
    • mongo_adapter.py:MongoDB

跑步

直接运行

python -X utf8 -m src.main

通过MCP客户端

配置MCP客户端后,服务器会自动处理请求。