kingbase-mcp-server 1.0.0
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/LICENSE +21 -0
- package/README.md +351 -0
- package/TOOLS.md +366 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1450 -0
- package/dist/index.js.map +1 -0
- package/package.json +64 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NekoTarou
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# KingBase MCP Server
|
|
2
|
+
|
|
3
|
+
[English](#english) | 中文
|
|
4
|
+
|
|
5
|
+
直连 [KingBase](https://www.kingbase.com.cn/)(PostgreSQL 兼容)数据库的 MCP Server,让 AI 助手(Claude 等)能够直接查询和管理 KingBase 数据库。
|
|
6
|
+
|
|
7
|
+
## 快速使用
|
|
8
|
+
|
|
9
|
+
无需克隆代码,直接在 MCP 客户端中配置即可使用:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"mcpServers": {
|
|
14
|
+
"kingbase": {
|
|
15
|
+
"command": "npx",
|
|
16
|
+
"args": ["-y", "kingbase-mcp-server"],
|
|
17
|
+
"env": {
|
|
18
|
+
"DB_HOST": "localhost",
|
|
19
|
+
"DB_PORT": "54321",
|
|
20
|
+
"DB_USER": "system",
|
|
21
|
+
"DB_PASSWORD": "your_password",
|
|
22
|
+
"DB_NAME": "kingbase",
|
|
23
|
+
"DB_SCHEMA": "public",
|
|
24
|
+
"ACCESS_MODE": "readonly"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
也可以全局安装后使用:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g kingbase-mcp-server
|
|
35
|
+
kingbase-mcp-server
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 功能
|
|
39
|
+
|
|
40
|
+
| Tool | 说明 | 类型 |
|
|
41
|
+
|------|------|------|
|
|
42
|
+
| `kb_query` | 执行只读查询 (SELECT/WITH/SHOW) | 只读 |
|
|
43
|
+
| `kb_execute` | 执行 DML (INSERT/UPDATE/DELETE) | 读写 |
|
|
44
|
+
| `kb_execute_ddl` | 执行 DDL (CREATE/ALTER/DROP) | 读写 |
|
|
45
|
+
| `kb_list_schemas` | 列出所有 schema | 只读 |
|
|
46
|
+
| `kb_list_tables` | 列出表和视图 | 只读 |
|
|
47
|
+
| `kb_describe_table` | 查看表结构(列、类型、约束、注释) | 只读 |
|
|
48
|
+
| `kb_list_indexes` | 查看索引信息 | 只读 |
|
|
49
|
+
| `kb_list_constraints` | 查看约束信息 | 只读 |
|
|
50
|
+
| `kb_explain` | 查看执行计划 (EXPLAIN) | 只读 |
|
|
51
|
+
| `kb_table_data` | 预览表数据(带分页和过滤) | 只读 |
|
|
52
|
+
| `kb_table_stats` | 查看表统计信息(大小、行数等) | 只读 |
|
|
53
|
+
|
|
54
|
+
## 环境变量
|
|
55
|
+
|
|
56
|
+
| 变量 | 说明 | 默认值 |
|
|
57
|
+
|------|------|--------|
|
|
58
|
+
| `DB_HOST` | 数据库主机 | `localhost` |
|
|
59
|
+
| `DB_PORT` | 数据库端口 | `54321` |
|
|
60
|
+
| `DB_USER` | 用户名 | `system` |
|
|
61
|
+
| `DB_PASSWORD` | 密码 | (空) |
|
|
62
|
+
| `DB_NAME` | 数据库名 | `kingbase` |
|
|
63
|
+
| `DB_SCHEMA` | 默认 schema | `public` |
|
|
64
|
+
| `TRANSPORT` | 传输模式:`stdio` 或 `http` | `stdio` |
|
|
65
|
+
| `MCP_PORT` | HTTP 模式监听端口 | `3000` |
|
|
66
|
+
| `MCP_HOST` | HTTP 模式监听地址 | `0.0.0.0` |
|
|
67
|
+
| `ACCESS_MODE` | 权限模式(见下方说明) | `readonly` |
|
|
68
|
+
|
|
69
|
+
## 权限模式
|
|
70
|
+
|
|
71
|
+
通过 `ACCESS_MODE` 环境变量控制数据库操作权限,分为 4 个递增级别:
|
|
72
|
+
|
|
73
|
+
| 级别 | 值 | 允许的操作 |
|
|
74
|
+
|------|------|-----------|
|
|
75
|
+
| 只读 | `readonly`(默认) | SELECT 查询、查看 schema/表结构/索引/约束/统计/执行计划 |
|
|
76
|
+
| 允许修改 | `readwrite` | 只读 + INSERT / UPDATE |
|
|
77
|
+
| 允许删除 | `full` | 读写 + DELETE |
|
|
78
|
+
| 管理员 | `admin` | 完全权限 + DDL(CREATE / ALTER / DROP / TRUNCATE) |
|
|
79
|
+
|
|
80
|
+
**默认为 `readonly`(只读模式)**,防止误操作。根据实际需要调整。
|
|
81
|
+
|
|
82
|
+
### 二次确认机制
|
|
83
|
+
|
|
84
|
+
`kb_execute`(DML)和 `kb_execute_ddl`(DDL)工具内置二次确认:
|
|
85
|
+
|
|
86
|
+
1. **首次调用**(不传 `confirmed` 或 `confirmed: false`)→ 不执行 SQL,返回操作预览和确认提示
|
|
87
|
+
2. **确认调用**(`confirmed: true`)→ 真正执行 SQL
|
|
88
|
+
|
|
89
|
+
这确保 LLM 在执行写操作前必须向用户确认,避免意外修改数据。
|
|
90
|
+
|
|
91
|
+
### 配置示例
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# 只读模式(默认,推荐用于日常查询)
|
|
95
|
+
ACCESS_MODE=readonly
|
|
96
|
+
|
|
97
|
+
# 允许增改(适用于数据维护)
|
|
98
|
+
ACCESS_MODE=readwrite
|
|
99
|
+
|
|
100
|
+
# 允许删除(适用于数据清理)
|
|
101
|
+
ACCESS_MODE=full
|
|
102
|
+
|
|
103
|
+
# 管理员模式(适用于 DDL 操作,如建表/改表)
|
|
104
|
+
ACCESS_MODE=admin
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 传输模式
|
|
108
|
+
|
|
109
|
+
### stdio 模式(默认)
|
|
110
|
+
|
|
111
|
+
适用于本地使用,客户端直接启动 MCP Server 进程。
|
|
112
|
+
|
|
113
|
+
### HTTP 模式
|
|
114
|
+
|
|
115
|
+
适用于远程部署,团队成员通过网络连接。使用 MCP Streamable HTTP 传输协议。
|
|
116
|
+
|
|
117
|
+
启动 HTTP 模式:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
TRANSPORT='http' MCP_PORT='3000' DB_HOST='你的数据库地址' DB_PASSWORD='你的密码' node dist/index.js
|
|
121
|
+
# 或
|
|
122
|
+
npm run start:http
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
验证:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
curl -X POST http://localhost:3000/mcp \
|
|
129
|
+
-H "Content-Type: application/json" \
|
|
130
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 在 Claude Code 中使用
|
|
134
|
+
|
|
135
|
+
### stdio 模式(推荐)
|
|
136
|
+
|
|
137
|
+
编辑 `~/.claude/settings.json`,添加:
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"mcpServers": {
|
|
142
|
+
"kingbase": {
|
|
143
|
+
"command": "npx",
|
|
144
|
+
"args": ["-y", "kingbase-mcp-server"],
|
|
145
|
+
"env": {
|
|
146
|
+
"DB_HOST": "你的数据库地址",
|
|
147
|
+
"DB_PORT": "54321",
|
|
148
|
+
"DB_USER": "system",
|
|
149
|
+
"DB_PASSWORD": "你的密码",
|
|
150
|
+
"DB_NAME": "数据库名",
|
|
151
|
+
"DB_SCHEMA": "public",
|
|
152
|
+
"ACCESS_MODE": "readonly"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### HTTP 模式(远程连接)
|
|
160
|
+
|
|
161
|
+
在服务器上启动 HTTP 模式后,客户端配置:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"mcpServers": {
|
|
166
|
+
"kingbase": {
|
|
167
|
+
"url": "http://你的服务器地址:3000/mcp"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 构建
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm install
|
|
177
|
+
npm run build
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 配置文件
|
|
181
|
+
|
|
182
|
+
项目支持 `.env` 配置文件,**避免在 shell 中直接传入含特殊字符的密码导致解析失败**。
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# 复制模板
|
|
186
|
+
cp .env.example .env
|
|
187
|
+
|
|
188
|
+
# 编辑配置(密码中的特殊字符无需转义)
|
|
189
|
+
vi .env
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`.env` 文件示例:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
DB_HOST=192.168.1.100
|
|
196
|
+
DB_PORT=54321
|
|
197
|
+
DB_USER=system
|
|
198
|
+
DB_PASSWORD=P@ss(w0rd)!#$
|
|
199
|
+
DB_NAME=mydb
|
|
200
|
+
DB_SCHEMA=public
|
|
201
|
+
TRANSPORT=http
|
|
202
|
+
MCP_PORT=3000
|
|
203
|
+
ACCESS_MODE=readonly
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
配置好后直接启动即可,无需在命令行传递环境变量:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
node dist/index.js
|
|
210
|
+
# 或
|
|
211
|
+
npm start
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
> `.env` 已在 `.gitignore` 中,不会被提交到仓库。命令行传入的环境变量优先级高于 `.env` 文件。
|
|
215
|
+
|
|
216
|
+
## 服务器部署(HTTP 模式)
|
|
217
|
+
|
|
218
|
+
### 1. 安装
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# 方式一:npm 全局安装(推荐)
|
|
222
|
+
npm install -g kingbase-mcp-server
|
|
223
|
+
|
|
224
|
+
# 方式二:从源码安装
|
|
225
|
+
git clone https://github.com/NekoTarou/kingbase-mcp-server.git
|
|
226
|
+
cd kingbase-mcp-server
|
|
227
|
+
npm install
|
|
228
|
+
npm run build
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 2. 直接启动
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
TRANSPORT='http' \
|
|
235
|
+
MCP_PORT='3000' \
|
|
236
|
+
ACCESS_MODE='readonly' \
|
|
237
|
+
DB_HOST='192.168.1.100' \
|
|
238
|
+
DB_PORT='54321' \
|
|
239
|
+
DB_USER='system' \
|
|
240
|
+
DB_PASSWORD='your_password' \
|
|
241
|
+
DB_NAME='mydb' \
|
|
242
|
+
node dist/index.js
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 3. 使用 systemd 管理(推荐)
|
|
246
|
+
|
|
247
|
+
创建环境变量文件 `/etc/kingbase-mcp-server.env`:
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
TRANSPORT=http
|
|
251
|
+
MCP_PORT=3000
|
|
252
|
+
MCP_HOST=0.0.0.0
|
|
253
|
+
ACCESS_MODE=readonly
|
|
254
|
+
DB_HOST=192.168.1.100
|
|
255
|
+
DB_PORT=54321
|
|
256
|
+
DB_USER=system
|
|
257
|
+
DB_PASSWORD=your_password
|
|
258
|
+
DB_NAME=mydb
|
|
259
|
+
DB_SCHEMA=public
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
创建服务文件 `/etc/systemd/system/kingbase-mcp.service`:
|
|
263
|
+
|
|
264
|
+
```ini
|
|
265
|
+
[Unit]
|
|
266
|
+
Description=KingBase MCP Server
|
|
267
|
+
After=network.target
|
|
268
|
+
|
|
269
|
+
[Service]
|
|
270
|
+
Type=simple
|
|
271
|
+
EnvironmentFile=/etc/kingbase-mcp-server.env
|
|
272
|
+
WorkingDirectory=/opt/kingbase-mcp-server
|
|
273
|
+
ExecStart=/usr/bin/node dist/index.js
|
|
274
|
+
Restart=on-failure
|
|
275
|
+
RestartSec=5
|
|
276
|
+
|
|
277
|
+
[Install]
|
|
278
|
+
WantedBy=multi-user.target
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
启动服务:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
sudo systemctl daemon-reload
|
|
285
|
+
sudo systemctl enable kingbase-mcp
|
|
286
|
+
sudo systemctl start kingbase-mcp
|
|
287
|
+
sudo systemctl status kingbase-mcp # 查看状态
|
|
288
|
+
sudo journalctl -u kingbase-mcp -f # 查看日志
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### 4. 验证
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
curl -X POST http://localhost:3000/mcp \
|
|
295
|
+
-H "Content-Type: application/json" \
|
|
296
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
成功会返回 JSON 响应,response header 中包含 `mcp-session-id`。
|
|
300
|
+
|
|
301
|
+
### 5. 安全提示
|
|
302
|
+
|
|
303
|
+
当前未内置认证机制。如果服务暴露在公网,建议:
|
|
304
|
+
|
|
305
|
+
- 通过防火墙限制访问来源 IP
|
|
306
|
+
- 在前面加 nginx 反向代理 + 基础认证
|
|
307
|
+
- 后续可按需添加 OAuth 认证
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
<a id="english"></a>
|
|
312
|
+
|
|
313
|
+
## English
|
|
314
|
+
|
|
315
|
+
MCP (Model Context Protocol) server for [KingBase](https://www.kingbase.com.cn/) — a PostgreSQL-compatible enterprise database widely used in Chinese government and enterprise environments.
|
|
316
|
+
|
|
317
|
+
### Quick Start
|
|
318
|
+
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"mcpServers": {
|
|
322
|
+
"kingbase": {
|
|
323
|
+
"command": "npx",
|
|
324
|
+
"args": ["-y", "kingbase-mcp-server"],
|
|
325
|
+
"env": {
|
|
326
|
+
"DB_HOST": "localhost",
|
|
327
|
+
"DB_PORT": "54321",
|
|
328
|
+
"DB_USER": "system",
|
|
329
|
+
"DB_PASSWORD": "your_password",
|
|
330
|
+
"DB_NAME": "kingbase",
|
|
331
|
+
"ACCESS_MODE": "readonly"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Features
|
|
339
|
+
|
|
340
|
+
- 11 database tools: query, DML, DDL, schema inspection, statistics
|
|
341
|
+
- Two transport modes: stdio (local) and Streamable HTTP (remote)
|
|
342
|
+
- Fine-grained access control: `readonly` / `readwrite` / `full` / `admin`
|
|
343
|
+
- Two-phase confirmation for write operations
|
|
344
|
+
- Auto schema qualification for table names
|
|
345
|
+
- Parameterized queries for safe value substitution
|
|
346
|
+
|
|
347
|
+
See above sections for detailed documentation (in Chinese).
|
|
348
|
+
|
|
349
|
+
## License
|
|
350
|
+
|
|
351
|
+
[MIT](./LICENSE)
|