@xingyuchen/mysql-mcp-server 3.2.1 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -566
- package/dist/database.js +86 -426
- package/dist/httpServer.js +18 -10
- package/dist/index.js +219 -613
- package/dist/tools/connection.js +169 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/query.js +184 -0
- package/package.json +5 -16
- package/README_ENHANCED.md +0 -276
- package/SMITHERY_DEPLOY.md +0 -391
package/README.md
CHANGED
|
@@ -1,116 +1,70 @@
|
|
|
1
|
-
# MySQL MCP Server
|
|
1
|
+
# MySQL MCP Server 🚀
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **v4.0.0** - 全新架构重写,更简洁、更强大!
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
一个功能强大且易用的 MySQL 数据库 MCP(Model Context Protocol)服务器,支持 AI 助手安全地操作 MySQL 数据库。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 🌟 核心特性
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- [🔄 事务管理](#-事务管理)
|
|
16
|
-
- [📊 日志系统](#-日志系统)
|
|
17
|
-
- [❗ 故障排除](#-故障排除)
|
|
18
|
-
- [💡 使用技巧](#-使用技巧)
|
|
19
|
-
- [🔒 安全说明](#-安全说明)
|
|
9
|
+
- 🌐 **StreamableHTTP 协议** - 基于最新 MCP 规范实现
|
|
10
|
+
- 🔐 **Header 预配置** - 凭证不暴露给 AI,安全可靠
|
|
11
|
+
- 🤖 **AI 动态管理** - AI 可以帮你添加/切换数据库连接
|
|
12
|
+
- 🔗 **多数据库支持** - 同时管理多个数据库,随时切换
|
|
13
|
+
- 📊 **完整 CRUD** - 支持所有 SQL 操作
|
|
14
|
+
- 🏗️ **模块化架构** - 清晰的目录结构,易于扩展
|
|
20
15
|
|
|
21
16
|
---
|
|
22
17
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
### ✨ 核心功能
|
|
26
|
-
- 📦 **NPM包支持**: 一键安装 `npm install -g @xingyuchen/mysql-mcp-server`,即装即用
|
|
27
|
-
- 🌐 **双模式部署**: 支持 stdio 模式(本地)和 StreamableHTTP 模式(服务器)
|
|
28
|
-
- 🔐 **Header 预配置**: 通过 HTTP Headers 传递数据库连接信息,不暴露给 AI
|
|
29
|
-
- 🔗 **多数据库连接**: 同时管理多个 MySQL 数据库连接,无需频繁切换
|
|
30
|
-
- 🎯 **智能连接管理**: 支持连接标识、活跃连接切换和连接状态监控
|
|
31
|
-
- 🔄 **完整CRUD操作**: 支持 INSERT、UPDATE、DELETE、SELECT 等所有 SQL 操作
|
|
32
|
-
- 🛡️ **自动事务管理**: 修改操作自动开启事务,支持智能回滚
|
|
33
|
-
- 📊 **增强表查看**: 显示表结构概览、行数统计和样本数据
|
|
34
|
-
- 📝 **智能日志系统**: 详细记录所有操作,支持错误追踪和性能分析
|
|
35
|
-
- 🔙 **历史回滚功能**: 查看操作历史,选择性回滚到任意步骤
|
|
36
|
-
|
|
37
|
-
### 🎯 使用场景
|
|
38
|
-
- ✅ 完整的数据库 CRUD 操作(增删改查)
|
|
39
|
-
- ✅ 数据库结构分析和优化建议
|
|
40
|
-
- ✅ 批量数据处理和迁移
|
|
41
|
-
- ✅ 事务安全的数据修改
|
|
42
|
-
- ✅ 数据备份前的安全测试
|
|
43
|
-
- ✅ 复杂查询的构建和调试
|
|
44
|
-
- ✅ 远程服务器数据库管理(HTTP 模式)
|
|
18
|
+
## 📦 安装
|
|
45
19
|
|
|
46
|
-
|
|
20
|
+
### 环境要求
|
|
47
21
|
|
|
48
|
-
|
|
22
|
+
- Node.js 18+
|
|
23
|
+
- MySQL 5.7+ 或 8.0+
|
|
24
|
+
- MCP 客户端(Claude Desktop、Cursor 等)
|
|
49
25
|
|
|
50
|
-
###
|
|
26
|
+
### 安装步骤
|
|
51
27
|
|
|
52
|
-
|
|
28
|
+
```bash
|
|
29
|
+
# 克隆项目
|
|
30
|
+
git clone https://github.com/guangxiangdebizi/MySQL_MCP.git
|
|
31
|
+
cd MySQL_MCP
|
|
53
32
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"mcpServers": {
|
|
57
|
-
"mysql-mcp-http": {
|
|
58
|
-
"type": "streamableHttp",
|
|
59
|
-
"url": "http://localhost:3000/mcp",
|
|
60
|
-
"headers": {
|
|
61
|
-
"X-MySQL-Host-1": "prod.mysql.com",
|
|
62
|
-
"X-MySQL-User-1": "prod_user",
|
|
63
|
-
"X-MySQL-Password-1": "prod_pass",
|
|
64
|
-
"X-MySQL-Database-1": "production",
|
|
65
|
-
|
|
66
|
-
"X-MySQL-Host-2": "test.mysql.com",
|
|
67
|
-
"X-MySQL-User-2": "test_user",
|
|
68
|
-
"X-MySQL-Password-2": "test_pass",
|
|
69
|
-
"X-MySQL-Database-2": "testing",
|
|
70
|
-
|
|
71
|
-
"X-MySQL-Host-3": "dev.mysql.com",
|
|
72
|
-
"X-MySQL-User-3": "dev_user",
|
|
73
|
-
"X-MySQL-Password-3": "dev_pass",
|
|
74
|
-
"X-MySQL-Database-3": "development"
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
```
|
|
33
|
+
# 安装依赖
|
|
34
|
+
npm install
|
|
80
35
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- ✅ 所有数据库凭证都不会暴露给 AI
|
|
84
|
-
- ✅ 自动创建连接 ID:`header_db_1`, `header_db_2`, `header_db_3`
|
|
85
|
-
- ✅ 使用 `list_connections` 查看所有连接
|
|
86
|
-
- ✅ 使用 `switch_active_connection` 在数据库间切换
|
|
36
|
+
# 编译
|
|
37
|
+
npm run build
|
|
87
38
|
|
|
88
|
-
|
|
39
|
+
# 启动服务器
|
|
40
|
+
npm start
|
|
41
|
+
```
|
|
89
42
|
|
|
90
|
-
|
|
43
|
+
---
|
|
91
44
|
|
|
92
|
-
|
|
93
|
-
# 启动 HTTP 服务器
|
|
94
|
-
npm run start:http
|
|
45
|
+
## ⚙️ 配置方法
|
|
95
46
|
|
|
96
|
-
|
|
97
|
-
```
|
|
47
|
+
### 方式一:Header 预配置(推荐)
|
|
98
48
|
|
|
99
|
-
|
|
49
|
+
编辑 MCP 配置文件:
|
|
100
50
|
|
|
101
|
-
|
|
51
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
52
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
53
|
+
**Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
54
|
+
|
|
55
|
+
#### 单数据库配置
|
|
102
56
|
|
|
103
57
|
```json
|
|
104
58
|
{
|
|
105
59
|
"mcpServers": {
|
|
106
|
-
"mysql-mcp
|
|
60
|
+
"mysql-mcp": {
|
|
107
61
|
"type": "streamableHttp",
|
|
108
|
-
"url": "http://localhost:
|
|
62
|
+
"url": "http://localhost:3001/mcp",
|
|
109
63
|
"timeout": 600,
|
|
110
64
|
"headers": {
|
|
111
65
|
"X-MySQL-Host": "localhost",
|
|
112
66
|
"X-MySQL-Port": "3306",
|
|
113
|
-
"X-MySQL-User": "
|
|
67
|
+
"X-MySQL-User": "root",
|
|
114
68
|
"X-MySQL-Password": "your_password",
|
|
115
69
|
"X-MySQL-Database": "your_database"
|
|
116
70
|
}
|
|
@@ -119,14 +73,15 @@ npm run start:http
|
|
|
119
73
|
}
|
|
120
74
|
```
|
|
121
75
|
|
|
122
|
-
|
|
76
|
+
#### 多数据库配置
|
|
123
77
|
|
|
124
78
|
```json
|
|
125
79
|
{
|
|
126
80
|
"mcpServers": {
|
|
127
|
-
"mysql-mcp
|
|
81
|
+
"mysql-mcp": {
|
|
128
82
|
"type": "streamableHttp",
|
|
129
|
-
"url": "http://localhost:
|
|
83
|
+
"url": "http://localhost:3001/mcp",
|
|
84
|
+
"timeout": 600,
|
|
130
85
|
"headers": {
|
|
131
86
|
"X-MySQL-Host-1": "prod.mysql.com",
|
|
132
87
|
"X-MySQL-User-1": "prod_user",
|
|
@@ -143,575 +98,246 @@ npm run start:http
|
|
|
143
98
|
}
|
|
144
99
|
```
|
|
145
100
|
|
|
146
|
-
|
|
147
|
-
- ✅
|
|
148
|
-
- ✅
|
|
149
|
-
- ✅
|
|
150
|
-
- ✅ 自动建立连接,开箱即用
|
|
101
|
+
**优势:**
|
|
102
|
+
- ✅ 数据库凭证不暴露给 AI
|
|
103
|
+
- ✅ 启动即连接,无需手动操作
|
|
104
|
+
- ✅ 支持多数据库同时连接
|
|
151
105
|
|
|
152
|
-
###
|
|
106
|
+
### 方式二:AI 动态添加(灵活)
|
|
153
107
|
|
|
154
|
-
|
|
108
|
+
不配置 Header,让 AI 在对话中帮你添加连接:
|
|
155
109
|
|
|
156
110
|
```json
|
|
157
111
|
{
|
|
158
112
|
"mcpServers": {
|
|
159
113
|
"mysql-mcp": {
|
|
160
|
-
"
|
|
161
|
-
"
|
|
114
|
+
"type": "streamableHttp",
|
|
115
|
+
"url": "http://localhost:3001/mcp",
|
|
116
|
+
"timeout": 600
|
|
162
117
|
}
|
|
163
118
|
}
|
|
164
119
|
}
|
|
165
120
|
```
|
|
166
121
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
| 特性 | stdio 模式 | HTTP 模式 + Header 预配置 |
|
|
170
|
-
|------|-----------|--------------------------|
|
|
171
|
-
| **适用场景** | 本地使用 | 服务器部署 / 远程访问 |
|
|
172
|
-
| **启动方式** | `npx -y @xingyuchen/mysql-mcp-server` | `npm run start:http` |
|
|
173
|
-
| **数据库连接** | AI询问用户后连接 | Headers预配置,自动连接 |
|
|
174
|
-
| **安全性** | 中等(需告知AI) | 高(凭证不暴露给AI) |
|
|
175
|
-
| **配置复杂度** | 简单 | 中等(需配置Headers) |
|
|
176
|
-
| **推荐用途** | 个人开发、快速测试 | 生产部署、多用户、远程访问 |
|
|
177
|
-
|
|
178
|
-
### 🔍 连接来源标识
|
|
179
|
-
|
|
180
|
-
使用 `list_connections` 工具可以清楚地看到连接来源:
|
|
181
|
-
|
|
122
|
+
**使用示例:**
|
|
182
123
|
```
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
📊 总连接数: 4
|
|
186
|
-
|
|
187
|
-
1. 🔗 header_db_1 🔐(Header预配置) 🎯(活跃)
|
|
188
|
-
📍 主机: prod.mysql.com:3306
|
|
189
|
-
🗄️ 数据库: production
|
|
190
|
-
👤 用户: prod_user
|
|
191
|
-
⏰ 连接时间: 2025-10-20 10:30:00
|
|
192
|
-
|
|
193
|
-
2. 🔗 header_db_2 🔐(Header预配置)
|
|
194
|
-
📍 主机: test.mysql.com:3306
|
|
195
|
-
🗄️ 数据库: testing
|
|
196
|
-
👤 用户: test_user
|
|
197
|
-
⏰ 连接时间: 2025-10-20 10:30:01
|
|
198
|
-
|
|
199
|
-
3. 🔗 header_db_3 🔐(Header预配置)
|
|
200
|
-
📍 主机: dev.mysql.com:3306
|
|
201
|
-
🗄️ 数据库: development
|
|
202
|
-
👤 用户: dev_user
|
|
203
|
-
⏰ 连接时间: 2025-10-20 10:30:02
|
|
204
|
-
|
|
205
|
-
4. 🔗 localhost_test_1729401234 🔧(工具参数)
|
|
206
|
-
📍 主机: localhost:3306
|
|
207
|
-
🗄️ 数据库: test_db
|
|
208
|
-
👤 用户: test_user
|
|
209
|
-
⏰ 连接时间: 2025-10-20 10:35:00
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
**AI 使用示例:**
|
|
213
|
-
```
|
|
214
|
-
User: 切换到测试数据库
|
|
215
|
-
AI: [调用 switch_active_connection,参数:header_db_2]
|
|
216
|
-
|
|
217
|
-
User: 在生产数据库上查询用户总数
|
|
218
|
-
AI: [调用 execute_query,参数:connection_id=header_db_1]
|
|
124
|
+
你: 帮我连接到本地 MySQL,用户名 root,密码 123456,数据库 mydb
|
|
125
|
+
AI: [调用 add_connection 工具]
|
|
219
126
|
```
|
|
220
127
|
|
|
221
128
|
---
|
|
222
129
|
|
|
223
|
-
## 🔧
|
|
224
|
-
|
|
225
|
-
### 核心工具 (14个)
|
|
226
|
-
|
|
227
|
-
| 工具名称 | 功能描述 | 使用场景 |
|
|
228
|
-
|---------|----------|----------|
|
|
229
|
-
| `connect_database` | 连接MySQL数据库 | 建立数据库连接(支持连接ID) |
|
|
230
|
-
| `execute_query` | **万能SQL执行工具** | 执行任何SQL操作(CRUD、DDL等) |
|
|
231
|
-
| `show_tables` | 显示所有表及结构概览 | 快速了解数据库整体结构 |
|
|
232
|
-
| `describe_table` | 显示表详细结构和样本数据 | 深入了解特定表的结构和内容 |
|
|
233
|
-
| `begin_transaction` | 开始事务 | 手动控制事务开始 |
|
|
234
|
-
| `commit_transaction` | 提交事务 | 确认所有修改 |
|
|
235
|
-
| `rollback_transaction` | 回滚事务 | 撤销所有未提交修改 |
|
|
236
|
-
| `show_transaction_history` | 显示事务历史 | 查看所有操作记录 |
|
|
237
|
-
| `rollback_to_step` | 回滚到指定步骤 | 选择性撤销操作 |
|
|
238
|
-
| `full_rollback` | 完全回滚 | 撤销所有事务内操作 |
|
|
239
|
-
| `disconnect_database` | 断开数据库连接 | 安全关闭连接 |
|
|
240
|
-
| **`list_connections`** | **列出所有数据库连接** | **查看连接状态和来源** |
|
|
241
|
-
| **`switch_active_connection`** | **切换活跃连接** | **在多个数据库间切换** |
|
|
242
|
-
| **`remove_connection`** | **移除指定连接** | **清理不需要的连接** |
|
|
130
|
+
## 🔧 工具列表
|
|
243
131
|
|
|
244
|
-
|
|
132
|
+
### 连接管理
|
|
245
133
|
|
|
246
|
-
|
|
134
|
+
| 工具名称 | 功能说明 | 使用场景 |
|
|
135
|
+
|---------|---------|---------|
|
|
136
|
+
| `add_connection` | 添加数据库连接 | AI 帮你动态添加新连接 |
|
|
137
|
+
| `list_connections` | 列出所有连接 | 查看当前有哪些数据库 |
|
|
138
|
+
| `select_database` | 选择活跃数据库 | 切换到其他数据库 |
|
|
139
|
+
| `remove_connection` | 移除连接 | 清理不需要的连接 |
|
|
247
140
|
|
|
248
|
-
###
|
|
141
|
+
### 查询操作
|
|
249
142
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
# 全局安装
|
|
258
|
-
npm install -g @xingyuchen/mysql-mcp-server
|
|
259
|
-
|
|
260
|
-
# 验证安装
|
|
261
|
-
guangxiang-mysql-mcp --help
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### 🔧 方法2: 源码安装
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
# 1. 下载项目
|
|
268
|
-
git clone https://github.com/guangxiangdebizi/MySQL_MCP.git
|
|
269
|
-
cd MySQL_MCP
|
|
270
|
-
|
|
271
|
-
# 2. 安装依赖
|
|
272
|
-
npm install
|
|
273
|
-
|
|
274
|
-
# 3. 构建项目
|
|
275
|
-
npm run build
|
|
276
|
-
```
|
|
143
|
+
| 工具名称 | 功能说明 | 使用场景 |
|
|
144
|
+
|---------|---------|---------|
|
|
145
|
+
| `execute_query` | 执行 SQL | 任何 SQL 操作(SELECT、INSERT、UPDATE、DELETE) |
|
|
146
|
+
| `show_tables` | 显示所有表 | 快速了解数据库结构 |
|
|
147
|
+
| `describe_table` | 查看表结构 | 查看字段、类型、样本数据 |
|
|
148
|
+
| `show_databases` | 显示所有数据库 | 查看可访问的数据库列表 |
|
|
277
149
|
|
|
278
150
|
---
|
|
279
151
|
|
|
280
|
-
##
|
|
281
|
-
|
|
282
|
-
### 🔐 方式1: HTTP模式 + Header预配置(最安全,推荐生产环境)
|
|
152
|
+
## 🎮 使用示例
|
|
283
153
|
|
|
284
|
-
|
|
154
|
+
### 场景一:使用 Header 预配置
|
|
285
155
|
|
|
286
|
-
```bash
|
|
287
|
-
# 默认端口 3000
|
|
288
|
-
npm run start:http
|
|
289
|
-
|
|
290
|
-
# 或指定端口
|
|
291
|
-
PORT=3001 npm run start:http
|
|
292
156
|
```
|
|
157
|
+
你: 显示所有表
|
|
158
|
+
AI: [调用 show_tables]
|
|
159
|
+
📊 数据库表列表 (共 5 个表)
|
|
160
|
+
1. users
|
|
161
|
+
2. orders
|
|
162
|
+
3. products
|
|
163
|
+
...
|
|
293
164
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
```json
|
|
303
|
-
{
|
|
304
|
-
"mcpServers": {
|
|
305
|
-
"mysql-mcp-http": {
|
|
306
|
-
"type": "streamableHttp",
|
|
307
|
-
"url": "http://localhost:3000/mcp",
|
|
308
|
-
"timeout": 600,
|
|
309
|
-
"headers": {
|
|
310
|
-
"X-MySQL-Host": "localhost",
|
|
311
|
-
"X-MySQL-Port": "3306",
|
|
312
|
-
"X-MySQL-User": "your_username",
|
|
313
|
-
"X-MySQL-Password": "your_password",
|
|
314
|
-
"X-MySQL-Database": "your_database"
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
165
|
+
你: 查看 users 表的结构
|
|
166
|
+
AI: [调用 describe_table,参数:users]
|
|
167
|
+
📋 表结构: users
|
|
168
|
+
字段信息:
|
|
169
|
+
- id (INT, 主键)
|
|
170
|
+
- name (VARCHAR)
|
|
171
|
+
- email (VARCHAR)
|
|
172
|
+
...
|
|
319
173
|
```
|
|
320
174
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
配置生效后,数据库连接会自动建立,**无需告诉 AI 你的数据库密码**!
|
|
175
|
+
### 场景二:AI 动态添加连接
|
|
324
176
|
|
|
325
|
-
### 📌 方式2: stdio模式 + NPM全局安装(推荐本地开发)
|
|
326
|
-
|
|
327
|
-
```json
|
|
328
|
-
{
|
|
329
|
-
"mcpServers": {
|
|
330
|
-
"mysql-database": {
|
|
331
|
-
"command": "guangxiang-mysql-mcp",
|
|
332
|
-
"env": {}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
177
|
```
|
|
178
|
+
你: 帮我连接两个数据库:
|
|
179
|
+
1. 生产库:prod.mysql.com,用户 admin,密码 xxx,数据库 shop
|
|
180
|
+
2. 测试库:test.mysql.com,用户 tester,密码 yyy,数据库 shop_test
|
|
337
181
|
|
|
338
|
-
|
|
182
|
+
AI: [调用 add_connection,参数:id=prod, host=prod.mysql.com...]
|
|
183
|
+
[调用 add_connection,参数:id=test, host=test.mysql.com...]
|
|
184
|
+
✅ 两个数据库连接已添加
|
|
339
185
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
```
|
|
186
|
+
你: 列出所有连接
|
|
187
|
+
AI: [调用 list_connections]
|
|
188
|
+
📊 当前数据库连接列表 (共 2 个)
|
|
189
|
+
🟢 [1] prod
|
|
190
|
+
└─ prod.mysql.com:3306/shop
|
|
191
|
+
└─ ✅ 当前活跃连接
|
|
192
|
+
⚪ [2] test
|
|
193
|
+
└─ test.mysql.com:3306/shop_test
|
|
351
194
|
|
|
352
|
-
|
|
195
|
+
你: 切换到测试库
|
|
196
|
+
AI: [调用 select_database,参数:test]
|
|
197
|
+
✅ 已选择数据库: test
|
|
353
198
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
"command": "node",
|
|
359
|
-
"args": ["C:/path/to/MySQL_MCP/dist/index.js"],
|
|
360
|
-
"env": {}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
199
|
+
你: 查询用户表前 10 条
|
|
200
|
+
AI: [调用 execute_query,SQL: SELECT * FROM users LIMIT 10]
|
|
201
|
+
✅ 查询成功,返回 10 行数据
|
|
202
|
+
[显示 JSON 格式数据]
|
|
364
203
|
```
|
|
365
204
|
|
|
366
|
-
**📖 详细的 HTTP 配置指南**: 查看 [HTTP_CONFIG_EXAMPLE.md](./HTTP_CONFIG_EXAMPLE.md)
|
|
367
|
-
|
|
368
205
|
---
|
|
369
206
|
|
|
370
|
-
##
|
|
371
|
-
|
|
372
|
-
### 🚀 基础连接
|
|
373
|
-
|
|
374
|
-
#### 使用 Header 预配置(HTTP 模式)
|
|
375
|
-
|
|
376
|
-
配置好 Headers 后,直接使用即可,无需连接步骤:
|
|
377
|
-
|
|
378
|
-
```
|
|
379
|
-
User: 显示所有数据库表
|
|
380
|
-
AI: [直接使用预配置的连接执行 show_tables]
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
#### 使用工具参数连接(stdio 模式)
|
|
207
|
+
## 🏗️ 项目架构
|
|
384
208
|
|
|
385
209
|
```
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
210
|
+
MySQL_MCP/
|
|
211
|
+
├── src/
|
|
212
|
+
│ ├── index.ts # 主入口(HTTP Server + 会话管理)
|
|
213
|
+
│ ├── database.ts # 数据库连接管理器
|
|
214
|
+
│ └── tools/ # 工具模块
|
|
215
|
+
│ ├── index.ts # 工具统一导出和路由
|
|
216
|
+
│ ├── connection.ts # 连接管理工具
|
|
217
|
+
│ └── query.ts # 查询工具
|
|
218
|
+
├── dist/ # 编译后的 JS 文件
|
|
219
|
+
├── package.json
|
|
220
|
+
├── tsconfig.json
|
|
221
|
+
└── README.md
|
|
395
222
|
```
|
|
396
223
|
|
|
397
|
-
|
|
224
|
+
**核心设计:**
|
|
225
|
+
- **index.ts** - Express HTTP 服务器 + MCP Server 初始化
|
|
226
|
+
- **database.ts** - 封装数据库连接池和查询逻辑
|
|
227
|
+
- **tools/** - 每个文件负责一类工具的定义和处理
|
|
398
228
|
|
|
399
|
-
|
|
400
|
-
# 连接第一个数据库(自动成为活跃连接)
|
|
401
|
-
User: 连接到生产数据库:
|
|
402
|
-
- 主机: prod.mysql.com
|
|
403
|
-
- 数据库: production_db
|
|
404
|
-
- 连接ID: prod
|
|
405
|
-
|
|
406
|
-
# 连接第二个数据库
|
|
407
|
-
User: 连接到测试数据库:
|
|
408
|
-
- 主机: test.mysql.com
|
|
409
|
-
- 数据库: test_db
|
|
410
|
-
- 连接ID: test
|
|
411
|
-
|
|
412
|
-
# 查看所有连接
|
|
413
|
-
User: 请列出所有数据库连接
|
|
414
|
-
|
|
415
|
-
# 切换活跃连接
|
|
416
|
-
User: 请切换到test连接
|
|
417
|
-
|
|
418
|
-
# 指定连接执行操作
|
|
419
|
-
User: 请在prod连接上查询用户表
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
### 📊 查看数据库结构
|
|
229
|
+
---
|
|
423
230
|
|
|
424
|
-
|
|
425
|
-
# 查看所有表概览
|
|
426
|
-
User: 请显示数据库中的所有表
|
|
231
|
+
## 🔒 安全建议
|
|
427
232
|
|
|
428
|
-
|
|
429
|
-
User: 请描述users表的结构
|
|
430
|
-
```
|
|
233
|
+
### 数据库权限配置
|
|
431
234
|
|
|
432
|
-
|
|
235
|
+
为 MCP 创建专用数据库用户,限制权限:
|
|
433
236
|
|
|
434
237
|
```sql
|
|
435
|
-
--
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
-- 插入数据
|
|
439
|
-
INSERT INTO users (name, email, age) VALUES ('张三', 'zhang@example.com', 28)
|
|
238
|
+
-- 创建专用用户
|
|
239
|
+
CREATE USER 'mcp_user'@'%' IDENTIFIED BY 'strong_password';
|
|
440
240
|
|
|
441
|
-
--
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
-- 删除数据
|
|
445
|
-
DELETE FROM users WHERE id = 123
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### 🛡️ 事务安全操作
|
|
241
|
+
-- 授予必要权限
|
|
242
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'mcp_user'@'%';
|
|
449
243
|
|
|
244
|
+
-- 生产环境只读用户
|
|
245
|
+
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'%';
|
|
450
246
|
```
|
|
451
|
-
# 查看事务历史
|
|
452
|
-
User: 请显示当前事务的操作历史
|
|
453
|
-
|
|
454
|
-
# 回滚到特定步骤
|
|
455
|
-
User: 请回滚到第3步操作之前
|
|
456
247
|
|
|
457
|
-
|
|
458
|
-
User: 请完全回滚所有未提交的操作
|
|
248
|
+
### HTTP 模式安全
|
|
459
249
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
250
|
+
- ✅ 使用 Header 预配置,避免凭证暴露给 AI
|
|
251
|
+
- ✅ 生产环境使用 HTTPS(Nginx 反向代理)
|
|
252
|
+
- ✅ 限制访问 IP(防火墙规则)
|
|
253
|
+
- ✅ 定期更新数据库密码
|
|
254
|
+
- ✅ 监控日志,发现异常访问
|
|
463
255
|
|
|
464
256
|
---
|
|
465
257
|
|
|
466
|
-
##
|
|
467
|
-
|
|
468
|
-
### 自动事务管理
|
|
469
|
-
|
|
470
|
-
- **自动开启**: INSERT/UPDATE/DELETE 操作自动开启事务
|
|
471
|
-
- **智能记录**: 记录每个操作的详细信息和回滚查询
|
|
472
|
-
- **精确回滚**: 支持回滚到任意操作步骤
|
|
473
|
-
|
|
474
|
-
### 事务历史示例
|
|
475
|
-
|
|
476
|
-
```
|
|
477
|
-
📋 事务历史记录
|
|
478
|
-
|
|
479
|
-
🔹 步骤 1 (2024-01-15 10:30:15)
|
|
480
|
-
类型: INSERT | 表: users | 影响行数: 1
|
|
481
|
-
描述: 执行 INSERT 操作,影响 1 行
|
|
482
|
-
SQL: INSERT INTO users (name, email) VALUES (?, ?)
|
|
483
|
-
回滚: DELETE FROM users WHERE id = ?
|
|
484
|
-
|
|
485
|
-
🔹 步骤 2 (2024-01-15 10:31:22)
|
|
486
|
-
类型: UPDATE | 表: users | 影响行数: 1
|
|
487
|
-
描述: 执行 UPDATE 操作,影响 1 行
|
|
488
|
-
SQL: UPDATE users SET age = ? WHERE id = ?
|
|
489
|
-
回滚: UPDATE users SET age = ? WHERE id = ?
|
|
490
|
-
|
|
491
|
-
💡 使用 rollback_to_step 可以回滚到任意步骤
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## 📊 日志系统
|
|
497
|
-
|
|
498
|
-
### 日志文件类型
|
|
499
|
-
|
|
500
|
-
| 日志文件 | 内容 | 用途 |
|
|
501
|
-
|---------|------|------|
|
|
502
|
-
| `combined-*.log` | 所有日志信息 | 全面的操作记录 |
|
|
503
|
-
| `error-*.log` | 错误信息 | 问题诊断 |
|
|
504
|
-
| `database-*.log` | 数据库操作 | SQL执行追踪 |
|
|
505
|
-
| `exceptions-*.log` | 异常信息 | 系统异常分析 |
|
|
506
|
-
|
|
507
|
-
### 查看日志
|
|
258
|
+
## 🚀 NPM 脚本
|
|
508
259
|
|
|
509
260
|
```bash
|
|
510
|
-
#
|
|
511
|
-
npm run
|
|
261
|
+
# 开发模式(TypeScript 直接运行)
|
|
262
|
+
npm run dev
|
|
512
263
|
|
|
513
|
-
#
|
|
514
|
-
npm run
|
|
264
|
+
# 编译
|
|
265
|
+
npm run build
|
|
515
266
|
|
|
516
|
-
#
|
|
517
|
-
npm
|
|
267
|
+
# 生产模式(运行编译后的 JS)
|
|
268
|
+
npm start
|
|
518
269
|
|
|
519
|
-
#
|
|
520
|
-
npm run
|
|
270
|
+
# 全局安装
|
|
271
|
+
npm run install-global
|
|
521
272
|
```
|
|
522
273
|
|
|
523
274
|
---
|
|
524
275
|
|
|
525
|
-
##
|
|
276
|
+
## 📝 环境变量
|
|
526
277
|
|
|
527
|
-
|
|
278
|
+
创建 `.env` 文件(可选):
|
|
528
279
|
|
|
529
|
-
|
|
280
|
+
```env
|
|
281
|
+
# HTTP 服务器端口
|
|
282
|
+
PORT=3001
|
|
530
283
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
生产环境 → HTTP 模式 + Header 预配置(安全可靠)
|
|
534
|
-
多用户场景 → HTTP 模式(支持并发)
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
#### 2. 数据探索流程
|
|
538
|
-
|
|
539
|
-
```
|
|
540
|
-
1. show_tables 了解整体结构
|
|
541
|
-
2. describe_table 查看具体表
|
|
542
|
-
3. execute_query 进行操作
|
|
543
|
-
```
|
|
544
|
-
|
|
545
|
-
#### 3. 安全修改策略
|
|
546
|
-
|
|
547
|
-
```
|
|
548
|
-
1. 重要操作前先 SELECT 确认数据
|
|
549
|
-
2. 使用事务保护批量修改
|
|
550
|
-
3. 及时查看事务历史
|
|
551
|
-
4. 必要时使用回滚功能
|
|
552
|
-
```
|
|
553
|
-
|
|
554
|
-
### 🚀 高级用法
|
|
555
|
-
|
|
556
|
-
```sql
|
|
557
|
-
-- 复杂查询
|
|
558
|
-
SELECT u.name, COUNT(o.id) as order_count, SUM(o.amount) as total_amount
|
|
559
|
-
FROM users u
|
|
560
|
-
LEFT JOIN orders o ON u.id = o.user_id
|
|
561
|
-
WHERE u.created_at >= '2024-01-01'
|
|
562
|
-
GROUP BY u.id, u.name
|
|
563
|
-
HAVING total_amount > 1000
|
|
564
|
-
ORDER BY total_amount DESC
|
|
565
|
-
LIMIT 20
|
|
566
|
-
|
|
567
|
-
-- 批量操作
|
|
568
|
-
INSERT INTO products (name, price, category_id) VALUES
|
|
569
|
-
('产品A', 99.99, 1),
|
|
570
|
-
('产品B', 149.99, 2),
|
|
571
|
-
('产品C', 199.99, 1)
|
|
572
|
-
|
|
573
|
-
-- 条件更新
|
|
574
|
-
UPDATE inventory
|
|
575
|
-
SET stock = stock - 1
|
|
576
|
-
WHERE product_id = 123 AND stock > 0
|
|
284
|
+
# Node 环境
|
|
285
|
+
NODE_ENV=production
|
|
577
286
|
```
|
|
578
287
|
|
|
579
288
|
---
|
|
580
289
|
|
|
581
|
-
##
|
|
582
|
-
|
|
583
|
-
### ⚠️ 重要提醒
|
|
584
|
-
|
|
585
|
-
- **完整权限**: 支持完整 CRUD 操作,请谨慎使用
|
|
586
|
-
- **事务保护**: 所有修改操作都有事务保护和回滚功能
|
|
587
|
-
- **日志记录**: 所有操作都会被详细记录
|
|
588
|
-
- **Header 预配置**: 使用 HTTP 模式时,强烈推荐使用 Header 预配置,避免凭证暴露
|
|
589
|
-
|
|
590
|
-
### 🛡️ 安全建议
|
|
591
|
-
|
|
592
|
-
#### 1. 数据库用户权限
|
|
290
|
+
## ❗ 常见问题
|
|
593
291
|
|
|
594
|
-
|
|
595
|
-
-- 创建专用 MCP 用户
|
|
596
|
-
CREATE USER 'mcp_user'@'localhost' IDENTIFIED BY 'strong_password';
|
|
292
|
+
### 1. 端口被占用
|
|
597
293
|
|
|
598
|
-
|
|
599
|
-
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'mcp_user'@'localhost';
|
|
294
|
+
**错误:** `EADDRINUSE: address already in use :::3001`
|
|
600
295
|
|
|
601
|
-
|
|
602
|
-
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'localhost';
|
|
603
|
-
```
|
|
296
|
+
**解决:** 修改 `.env` 文件中的 `PORT`,或终止占用进程
|
|
604
297
|
|
|
605
|
-
|
|
298
|
+
```bash
|
|
299
|
+
# Windows
|
|
300
|
+
netstat -ano | findstr :3001
|
|
301
|
+
taskkill /F /PID <PID>
|
|
606
302
|
|
|
303
|
+
# Linux/Mac
|
|
304
|
+
lsof -ti:3001 | xargs kill -9
|
|
607
305
|
```
|
|
608
|
-
✅ 使用 Header 预配置,避免凭证暴露
|
|
609
|
-
✅ 生产环境使用 HTTPS(配合 Nginx 等代理)
|
|
610
|
-
✅ 限制访问 IP(防火墙规则)
|
|
611
|
-
✅ 定期更新数据库密码
|
|
612
|
-
✅ 监控日志,发现异常访问
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
#### 3. 备份策略
|
|
616
306
|
|
|
617
|
-
|
|
618
|
-
✅ 重要操作前先备份数据
|
|
619
|
-
✅ 定期检查事务历史
|
|
620
|
-
✅ 保留操作日志用于审计
|
|
621
|
-
✅ 测试回滚功能是否正常
|
|
622
|
-
```
|
|
307
|
+
### 2. 连接失败
|
|
623
308
|
|
|
624
|
-
|
|
309
|
+
**错误:** `数据库连接失败`
|
|
625
310
|
|
|
626
|
-
|
|
311
|
+
**检查:**
|
|
312
|
+
- MySQL 服务是否运行
|
|
313
|
+
- 主机、端口、用户名、密码是否正确
|
|
314
|
+
- 防火墙是否允许连接
|
|
627
315
|
|
|
628
|
-
###
|
|
316
|
+
### 3. 会话丢失
|
|
629
317
|
|
|
630
|
-
|
|
318
|
+
**问题:** 重启服务器后提示 "Session not found"
|
|
631
319
|
|
|
632
|
-
|
|
633
|
-
问题: 无法连接到数据库
|
|
634
|
-
解决:
|
|
635
|
-
- 检查 MySQL 服务是否运行
|
|
636
|
-
- 确认连接参数正确(Host、Port、User、Password)
|
|
637
|
-
- 查看 error 日志获取详细信息
|
|
638
|
-
- HTTP 模式检查 Headers 配置是否完整
|
|
639
|
-
```
|
|
320
|
+
**原因:** 会话存储在内存中,重启后清空
|
|
640
321
|
|
|
641
|
-
|
|
322
|
+
**解决:** 刷新 MCP 客户端(重新初始化)
|
|
642
323
|
|
|
643
|
-
|
|
644
|
-
问题: 配置了 Headers 但仍提示需要连接
|
|
645
|
-
解决:
|
|
646
|
-
- 确认 Headers 名称正确(X-MySQL-Host, X-MySQL-User 等)
|
|
647
|
-
- 检查所有必填字段(host, user, password, database)
|
|
648
|
-
- 重启 HTTP 服务器
|
|
649
|
-
- 使用 list_connections 查看连接状态
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
#### 3. 权限错误
|
|
653
|
-
|
|
654
|
-
```
|
|
655
|
-
问题: Access denied 或权限不足
|
|
656
|
-
解决:
|
|
657
|
-
- 确认数据库用户权限
|
|
658
|
-
- 检查表的访问权限
|
|
659
|
-
- 查看 MySQL 错误日志
|
|
660
|
-
- 确认用户可以从当前主机连接
|
|
661
|
-
```
|
|
324
|
+
---
|
|
662
325
|
|
|
663
|
-
|
|
326
|
+
## 📦 版本历史
|
|
664
327
|
|
|
665
|
-
|
|
666
|
-
问题: 事务状态异常
|
|
667
|
-
解决:
|
|
668
|
-
- 使用 show_transaction_history 查看状态
|
|
669
|
-
- 必要时使用 full_rollback 重置
|
|
670
|
-
- 检查 database 日志分析问题
|
|
671
|
-
- 确认连接未意外断开
|
|
672
|
-
```
|
|
328
|
+
### v4.0.0 (2025-12-09) - 全新架构
|
|
673
329
|
|
|
674
|
-
|
|
330
|
+
- 🔥 完全重写,全新模块化架构
|
|
331
|
+
- ✨ 基于最新 MCP StreamableHTTP 协议
|
|
332
|
+
- 🎯 简化工具:连接管理 + 查询操作
|
|
333
|
+
- 🏗️ 清晰的目录结构:`tools/` 模块化
|
|
334
|
+
- 🚀 更快的响应速度
|
|
335
|
+
- 📖 更清晰的代码注释
|
|
675
336
|
|
|
676
|
-
|
|
337
|
+
### v3.x - 旧版本
|
|
677
338
|
|
|
678
|
-
|
|
679
|
-
-
|
|
680
|
-
- ♻️ **自动重连机制**:连接断开时自动检测并重新连接
|
|
681
|
-
- 🏥 **连接健康检查**:通过 ping 实时检测连接状态
|
|
682
|
-
- ⚡ **保活机制增强**:添加 TCP Keep-Alive,防止空闲超时断开
|
|
683
|
-
- 🛡️ **超时配置优化**:设置合理的连接和空闲超时参数
|
|
684
|
-
- 💪 **离线环境支持**:特别优化了 SSE 模式下的长时间连接稳定性
|
|
685
|
-
|
|
686
|
-
### v3.2.0 (2025-10-20)
|
|
687
|
-
- 🔢 支持多数据库 Header 预配置(X-MySQL-*-1, X-MySQL-*-2...)
|
|
688
|
-
- ✨ 一次性配置多个数据库环境(生产、测试、开发等)
|
|
689
|
-
- 🔄 自动创建多个 Header 连接(header_db_1, header_db_2...)
|
|
690
|
-
- 📋 增强 list_connections 显示多数据库信息
|
|
691
|
-
- 🔧 兼容单数据库 Header 配置(向后兼容)
|
|
692
|
-
|
|
693
|
-
### v3.1.0 (2025-10-20)
|
|
694
|
-
- ✨ 新增 StreamableHTTP 模式支持
|
|
695
|
-
- 🔐 新增 HTTP Headers 预配置数据库连接
|
|
696
|
-
- 🏷️ 连接来源标识(Header预配置 vs 工具参数)
|
|
697
|
-
- 📡 健康检查端点
|
|
698
|
-
- 🔧 Express + CORS + dotenv 支持
|
|
699
|
-
|
|
700
|
-
### v3.0.0
|
|
701
|
-
- 🔗 多数据库连接管理
|
|
702
|
-
- 🎯 连接标识和切换
|
|
703
|
-
- 📋 连接列表和监控
|
|
704
|
-
|
|
705
|
-
### v2.0.0
|
|
706
|
-
- 🛠️ 工具简化
|
|
707
|
-
- 📊 增强展示
|
|
708
|
-
- 🔄 完整回滚
|
|
709
|
-
- 📝 日志系统
|
|
710
|
-
|
|
711
|
-
### v1.0.0
|
|
712
|
-
- 🎉 初始版本
|
|
713
|
-
- 🔧 基础 CRUD 操作
|
|
714
|
-
- 🛡️ 事务管理
|
|
339
|
+
- 支持事务管理、回滚等复杂功能
|
|
340
|
+
- 较为复杂的架构
|
|
715
341
|
|
|
716
342
|
---
|
|
717
343
|
|
|
@@ -720,8 +346,6 @@ GRANT SELECT ON your_database.* TO 'mcp_readonly'@'localhost';
|
|
|
720
346
|
- 🐛 **问题报告**: [GitHub Issues](https://github.com/guangxiangdebizi/MySQL_MCP/issues)
|
|
721
347
|
- 💡 **功能建议**: [GitHub Discussions](https://github.com/guangxiangdebizi/MySQL_MCP/discussions)
|
|
722
348
|
- 📧 **联系作者**: guangxiangdebizi@gmail.com
|
|
723
|
-
- 💼 **LinkedIn**: [Xingyu Chen](https://www.linkedin.com/in/xingyu-chen-b5b3b0313/)
|
|
724
|
-
- 📦 **NPM包**: [@xingyuchen/mysql-mcp-server](https://www.npmjs.com/package/@xingyuchen/mysql-mcp-server)
|
|
725
349
|
|
|
726
350
|
---
|
|
727
351
|
|