使用说明
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需要明确的用户确认
- 批处理操作:多个更改操作的一个确认
安装
-
克隆存储库:
git clone https://github.com/Processori7/SQL-MCP.git cd SQL-MCP -
创建并激活虚拟环境(推荐):
# Windows python -m venv venv venv\Scripts\activate # Linux/macOS python3 -m venv venv source venv/bin/activate -
建立依赖关系:
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必须:
- 得到答复
"status": "blocked" - 询问用户确认
- 确认后,从
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、PostgreSQLmongo_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需要明确的用户确认
- 批量操作:单次确认多个修改操作
安装
-
克隆存储库:
git clone https://github.com/Processori7/SQL-MCP.git cd SQL-MCP -
创建并激活虚拟环境(推荐):
# Windows python -m venv venv venv\Scripts\activate # Linux/macOS python3 -m venv venv source venv/bin/activate -
安装依赖项:
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必须:
- 接收a
"status": "blocked"响应 - 请用户确认
- 确认后,使用重试查询
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、PostgreSQLmongo_adapter.py:MongoDB
跑步
直接运行
python -X utf8 -m src.main
通过MCP客户端
配置MCP客户端后,服务器会自动处理请求。