universal-db-mcp 0.6.0 → 0.8.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/EXAMPLES.md +350 -0
- package/README.md +61 -4
- package/dist/adapters/gaussdb.d.ts +42 -0
- package/dist/adapters/gaussdb.d.ts.map +1 -0
- package/dist/adapters/gaussdb.js +211 -0
- package/dist/adapters/gaussdb.js.map +1 -0
- package/dist/adapters/kingbase.d.ts +42 -0
- package/dist/adapters/kingbase.d.ts.map +1 -0
- package/dist/adapters/kingbase.js +211 -0
- package/dist/adapters/kingbase.js.map +1 -0
- package/dist/index.js +27 -4
- package/dist/index.js.map +1 -1
- package/dist/types/adapter.d.ts +2 -2
- package/dist/types/adapter.d.ts.map +1 -1
- package/package.json +7 -1
package/EXAMPLES.md
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
- [SQL Server 使用示例](#sql-server-使用示例)
|
|
13
13
|
- [MongoDB 使用示例](#mongodb-使用示例)
|
|
14
14
|
- [SQLite 使用示例](#sqlite-使用示例)
|
|
15
|
+
- [KingbaseES 使用示例](#kingbasees-使用示例)
|
|
16
|
+
- [GaussDB / OpenGauss 使用示例](#gaussdb--opengauss-使用示例)
|
|
15
17
|
- [Claude Desktop 配置示例](#claude-desktop-配置示例)
|
|
16
18
|
- [常见使用场景](#常见使用场景)
|
|
17
19
|
|
|
@@ -817,6 +819,328 @@ Claude 会:
|
|
|
817
819
|
|
|
818
820
|
---
|
|
819
821
|
|
|
822
|
+
## KingbaseES 使用示例
|
|
823
|
+
|
|
824
|
+
### 基础配置(只读模式)
|
|
825
|
+
|
|
826
|
+
```json
|
|
827
|
+
{
|
|
828
|
+
"mcpServers": {
|
|
829
|
+
"kingbase-db": {
|
|
830
|
+
"command": "npx",
|
|
831
|
+
"args": [
|
|
832
|
+
"universal-db-mcp",
|
|
833
|
+
"--type", "kingbase",
|
|
834
|
+
"--host", "localhost",
|
|
835
|
+
"--port", "54321",
|
|
836
|
+
"--user", "system",
|
|
837
|
+
"--password", "your_password",
|
|
838
|
+
"--database", "test"
|
|
839
|
+
]
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
### 启用写入模式
|
|
846
|
+
|
|
847
|
+
```json
|
|
848
|
+
{
|
|
849
|
+
"mcpServers": {
|
|
850
|
+
"kingbase-write": {
|
|
851
|
+
"command": "npx",
|
|
852
|
+
"args": [
|
|
853
|
+
"universal-db-mcp",
|
|
854
|
+
"--type", "kingbase",
|
|
855
|
+
"--host", "localhost",
|
|
856
|
+
"--port", "54321",
|
|
857
|
+
"--user", "system",
|
|
858
|
+
"--password", "your_password",
|
|
859
|
+
"--database", "mydb",
|
|
860
|
+
"--danger-allow-write"
|
|
861
|
+
]
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
### 连接远程 KingbaseES
|
|
868
|
+
|
|
869
|
+
```json
|
|
870
|
+
{
|
|
871
|
+
"mcpServers": {
|
|
872
|
+
"kingbase-prod": {
|
|
873
|
+
"command": "npx",
|
|
874
|
+
"args": [
|
|
875
|
+
"universal-db-mcp",
|
|
876
|
+
"--type", "kingbase",
|
|
877
|
+
"--host", "kingbase.example.com",
|
|
878
|
+
"--port", "54321",
|
|
879
|
+
"--user", "readonly_user",
|
|
880
|
+
"--password", "secure_password",
|
|
881
|
+
"--database", "production"
|
|
882
|
+
]
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
### 与 Claude 对话示例
|
|
889
|
+
|
|
890
|
+
**用户**: 查看数据库中有哪些表?
|
|
891
|
+
|
|
892
|
+
**Claude 会自动**:
|
|
893
|
+
1. 调用 `get_schema` 工具
|
|
894
|
+
2. 执行查询获取 public schema 下的所有表
|
|
895
|
+
3. 返回表列表
|
|
896
|
+
|
|
897
|
+
**用户**: 查看 users 表的结构
|
|
898
|
+
|
|
899
|
+
**Claude 会自动**:
|
|
900
|
+
1. 调用 `get_table_info` 工具
|
|
901
|
+
2. 返回列信息、主键、索引等详细信息
|
|
902
|
+
|
|
903
|
+
**用户**: 统计每个部门的员工数量
|
|
904
|
+
|
|
905
|
+
**Claude 会自动**:
|
|
906
|
+
1. 理解需求
|
|
907
|
+
2. 生成 SQL: `SELECT department_id, COUNT(*) as count FROM employees GROUP BY department_id ORDER BY count DESC`
|
|
908
|
+
3. 执行并返回结果
|
|
909
|
+
|
|
910
|
+
**用户**: 查找最近一周创建的订单
|
|
911
|
+
|
|
912
|
+
**Claude 会自动**:
|
|
913
|
+
1. 生成 SQL: `SELECT * FROM orders WHERE created_at >= CURRENT_DATE - INTERVAL '7 days' ORDER BY created_at DESC`
|
|
914
|
+
2. 执行并返回结果
|
|
915
|
+
|
|
916
|
+
### 注意事项
|
|
917
|
+
|
|
918
|
+
1. **默认端口**: KingbaseES 默认端口为 54321
|
|
919
|
+
2. **兼容性**: 基于 PostgreSQL 开发,兼容 PostgreSQL 协议和 SQL 语法
|
|
920
|
+
3. **驱动**: 使用 PostgreSQL 的 `pg` 驱动
|
|
921
|
+
4. **Schema**: 默认查询 public schema 下的表
|
|
922
|
+
5. **参数化查询**: 支持 `$1, $2, ...` 占位符
|
|
923
|
+
6. **国产化**: 适用于国产化替代场景
|
|
924
|
+
|
|
925
|
+
### 支持的 KingbaseES 版本
|
|
926
|
+
|
|
927
|
+
- ✅ KingbaseES V8
|
|
928
|
+
- ✅ KingbaseES V9
|
|
929
|
+
- ✅ 其他兼容 PostgreSQL 协议的版本
|
|
930
|
+
|
|
931
|
+
### 常见使用场景
|
|
932
|
+
|
|
933
|
+
#### 1. 国产化数据库迁移
|
|
934
|
+
|
|
935
|
+
从 PostgreSQL 迁移到 KingbaseES:
|
|
936
|
+
|
|
937
|
+
```
|
|
938
|
+
用户: 帮我分析现有表结构,准备迁移到 KingbaseES
|
|
939
|
+
|
|
940
|
+
Claude 会:
|
|
941
|
+
1. 获取完整的 Schema 信息
|
|
942
|
+
2. 分析表结构、索引、约束
|
|
943
|
+
3. 提供迁移建议
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
#### 2. 数据分析和报表
|
|
947
|
+
|
|
948
|
+
```
|
|
949
|
+
用户: 统计最近一个月的销售数据
|
|
950
|
+
|
|
951
|
+
Claude 会:
|
|
952
|
+
1. 理解需求
|
|
953
|
+
2. 生成复杂的聚合查询
|
|
954
|
+
3. 返回分析结果
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
#### 3. 开发和测试
|
|
958
|
+
|
|
959
|
+
```
|
|
960
|
+
用户: 在测试环境创建测试数据
|
|
961
|
+
|
|
962
|
+
Claude 会(在写入模式下):
|
|
963
|
+
1. 生成 INSERT 语句
|
|
964
|
+
2. 执行并验证结果
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
---
|
|
968
|
+
|
|
969
|
+
## GaussDB / OpenGauss 使用示例
|
|
970
|
+
|
|
971
|
+
### 基础配置(只读模式)
|
|
972
|
+
|
|
973
|
+
```json
|
|
974
|
+
{
|
|
975
|
+
"mcpServers": {
|
|
976
|
+
"gaussdb-db": {
|
|
977
|
+
"command": "npx",
|
|
978
|
+
"args": [
|
|
979
|
+
"universal-db-mcp",
|
|
980
|
+
"--type", "gaussdb",
|
|
981
|
+
"--host", "localhost",
|
|
982
|
+
"--port", "5432",
|
|
983
|
+
"--user", "gaussdb",
|
|
984
|
+
"--password", "your_password",
|
|
985
|
+
"--database", "postgres"
|
|
986
|
+
]
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
**提示**: 也可以使用 `--type opengauss` 作为别名。
|
|
993
|
+
|
|
994
|
+
### 启用写入模式
|
|
995
|
+
|
|
996
|
+
```json
|
|
997
|
+
{
|
|
998
|
+
"mcpServers": {
|
|
999
|
+
"gaussdb-write": {
|
|
1000
|
+
"command": "npx",
|
|
1001
|
+
"args": [
|
|
1002
|
+
"universal-db-mcp",
|
|
1003
|
+
"--type", "gaussdb",
|
|
1004
|
+
"--host", "localhost",
|
|
1005
|
+
"--port", "5432",
|
|
1006
|
+
"--user", "gaussdb",
|
|
1007
|
+
"--password", "your_password",
|
|
1008
|
+
"--database", "mydb",
|
|
1009
|
+
"--danger-allow-write"
|
|
1010
|
+
]
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
### 连接华为云 GaussDB
|
|
1017
|
+
|
|
1018
|
+
```json
|
|
1019
|
+
{
|
|
1020
|
+
"mcpServers": {
|
|
1021
|
+
"gaussdb-cloud": {
|
|
1022
|
+
"command": "npx",
|
|
1023
|
+
"args": [
|
|
1024
|
+
"universal-db-mcp",
|
|
1025
|
+
"--type", "gaussdb",
|
|
1026
|
+
"--host", "gaussdb.cn-north-4.myhuaweicloud.com",
|
|
1027
|
+
"--port", "5432",
|
|
1028
|
+
"--user", "dbuser",
|
|
1029
|
+
"--password", "secure_password",
|
|
1030
|
+
"--database", "production"
|
|
1031
|
+
]
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
```
|
|
1036
|
+
|
|
1037
|
+
### 与 Claude 对话示例
|
|
1038
|
+
|
|
1039
|
+
**用户**: 查看数据库中有哪些表?
|
|
1040
|
+
|
|
1041
|
+
**Claude 会自动**:
|
|
1042
|
+
1. 调用 `get_schema` 工具
|
|
1043
|
+
2. 执行查询获取 public schema 下的所有表
|
|
1044
|
+
3. 返回表列表
|
|
1045
|
+
|
|
1046
|
+
**用户**: 查看 products 表的结构
|
|
1047
|
+
|
|
1048
|
+
**Claude 会自动**:
|
|
1049
|
+
1. 调用 `get_table_info` 工具
|
|
1050
|
+
2. 返回列信息、主键、索引等详细信息
|
|
1051
|
+
|
|
1052
|
+
**用户**: 统计每个类别的产品数量
|
|
1053
|
+
|
|
1054
|
+
**Claude 会自动**:
|
|
1055
|
+
1. 理解需求
|
|
1056
|
+
2. 生成 SQL: `SELECT category, COUNT(*) as count FROM products GROUP BY category ORDER BY count DESC`
|
|
1057
|
+
3. 执行并返回结果
|
|
1058
|
+
|
|
1059
|
+
**用户**: 查找价格最高的 10 个产品
|
|
1060
|
+
|
|
1061
|
+
**Claude 会自动**:
|
|
1062
|
+
1. 生成 SQL: `SELECT * FROM products ORDER BY price DESC LIMIT 10`
|
|
1063
|
+
2. 执行并返回结果
|
|
1064
|
+
|
|
1065
|
+
### 注意事项
|
|
1066
|
+
|
|
1067
|
+
1. **默认端口**: GaussDB/OpenGauss 默认端口为 5432(与 PostgreSQL 相同)
|
|
1068
|
+
2. **兼容性**: 基于 PostgreSQL 9.2 开发,兼容 PostgreSQL 协议和大部分 SQL 语法
|
|
1069
|
+
3. **驱动**: 使用 PostgreSQL 的 `pg` 驱动
|
|
1070
|
+
4. **Schema**: 默认查询 public schema 下的表
|
|
1071
|
+
5. **参数化查询**: 支持 `$1, $2, ...` 占位符
|
|
1072
|
+
6. **国产化**: 华为自研数据库,适用于国产化替代场景
|
|
1073
|
+
7. **开源版本**: OpenGauss 是 GaussDB 的开源版本
|
|
1074
|
+
|
|
1075
|
+
### 支持的版本
|
|
1076
|
+
|
|
1077
|
+
- ✅ GaussDB 100/200/300 系列
|
|
1078
|
+
- ✅ OpenGauss 2.x / 3.x / 5.x
|
|
1079
|
+
- ✅ 其他兼容 PostgreSQL 协议的版本
|
|
1080
|
+
|
|
1081
|
+
### 常见使用场景
|
|
1082
|
+
|
|
1083
|
+
#### 1. 华为云数据库管理
|
|
1084
|
+
|
|
1085
|
+
连接华为云 GaussDB 进行数据查询和分析:
|
|
1086
|
+
|
|
1087
|
+
```
|
|
1088
|
+
用户: 帮我分析最近一周的用户增长趋势
|
|
1089
|
+
|
|
1090
|
+
Claude 会:
|
|
1091
|
+
1. 查询用户表
|
|
1092
|
+
2. 按日期分组统计
|
|
1093
|
+
3. 生成趋势分析报告
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
#### 2. 国产化数据库迁移
|
|
1097
|
+
|
|
1098
|
+
从 PostgreSQL 迁移到 GaussDB:
|
|
1099
|
+
|
|
1100
|
+
```
|
|
1101
|
+
用户: 帮我分析现有表结构,准备迁移到 GaussDB
|
|
1102
|
+
|
|
1103
|
+
Claude 会:
|
|
1104
|
+
1. 获取完整的 Schema 信息
|
|
1105
|
+
2. 分析表结构、索引、约束
|
|
1106
|
+
3. 提供迁移建议和兼容性分析
|
|
1107
|
+
```
|
|
1108
|
+
|
|
1109
|
+
#### 3. 性能优化
|
|
1110
|
+
|
|
1111
|
+
```
|
|
1112
|
+
用户: 这个查询很慢,帮我优化
|
|
1113
|
+
|
|
1114
|
+
Claude 会:
|
|
1115
|
+
1. 分析查询语句
|
|
1116
|
+
2. 检查索引情况
|
|
1117
|
+
3. 提供优化建议(添加索引、重写查询等)
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
#### 4. 数据分析和报表
|
|
1121
|
+
|
|
1122
|
+
```
|
|
1123
|
+
用户: 生成本月销售报表
|
|
1124
|
+
|
|
1125
|
+
Claude 会:
|
|
1126
|
+
1. 理解需求
|
|
1127
|
+
2. 生成复杂的聚合查询
|
|
1128
|
+
3. 返回格式化的分析结果
|
|
1129
|
+
```
|
|
1130
|
+
|
|
1131
|
+
### GaussDB 特色功能
|
|
1132
|
+
|
|
1133
|
+
虽然使用 PostgreSQL 协议,但 GaussDB 有一些特色功能:
|
|
1134
|
+
|
|
1135
|
+
- **列存储**: 支持列存储表(需要特定语法)
|
|
1136
|
+
- **分区表**: 增强的分区表功能
|
|
1137
|
+
- **并行查询**: 更强的并行查询能力
|
|
1138
|
+
- **AI 能力**: 内置 AI 引擎(部分版本)
|
|
1139
|
+
|
|
1140
|
+
**注意**: 这些特色功能可能需要特定的 SQL 语法,Claude 会根据标准 PostgreSQL 语法生成查询。
|
|
1141
|
+
|
|
1142
|
+
---
|
|
1143
|
+
|
|
820
1144
|
## Claude Desktop 配置示例
|
|
821
1145
|
|
|
822
1146
|
### 同时连接多个数据库
|
|
@@ -879,6 +1203,30 @@ Claude 会:
|
|
|
879
1203
|
"--type", "sqlite",
|
|
880
1204
|
"--file", "/Users/yourname/data/local.db"
|
|
881
1205
|
]
|
|
1206
|
+
},
|
|
1207
|
+
"kingbase-db": {
|
|
1208
|
+
"command": "npx",
|
|
1209
|
+
"args": [
|
|
1210
|
+
"universal-db-mcp",
|
|
1211
|
+
"--type", "kingbase",
|
|
1212
|
+
"--host", "localhost",
|
|
1213
|
+
"--port", "54321",
|
|
1214
|
+
"--user", "system",
|
|
1215
|
+
"--password", "your_password",
|
|
1216
|
+
"--database", "test"
|
|
1217
|
+
]
|
|
1218
|
+
},
|
|
1219
|
+
"gaussdb-db": {
|
|
1220
|
+
"command": "npx",
|
|
1221
|
+
"args": [
|
|
1222
|
+
"universal-db-mcp",
|
|
1223
|
+
"--type", "gaussdb",
|
|
1224
|
+
"--host", "localhost",
|
|
1225
|
+
"--port", "5432",
|
|
1226
|
+
"--user", "gaussdb",
|
|
1227
|
+
"--password", "your_password",
|
|
1228
|
+
"--database", "postgres"
|
|
1229
|
+
]
|
|
882
1230
|
}
|
|
883
1231
|
}
|
|
884
1232
|
}
|
|
@@ -891,6 +1239,8 @@ Claude 会:
|
|
|
891
1239
|
- "检查 Redis 缓存中的..."
|
|
892
1240
|
- "在 Oracle 数据仓库中统计..."
|
|
893
1241
|
- "从 SQLite 本地数据库查询..."
|
|
1242
|
+
- "在 KingbaseES 数据库中查询..."
|
|
1243
|
+
- "从 GaussDB 数据库获取..."
|
|
894
1244
|
|
|
895
1245
|
---
|
|
896
1246
|
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
✅ **智能表结构理解** - 自动获取数据库 Schema,提供精准建议
|
|
21
21
|
|
|
22
|
-
✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB、SQLite 一键切换
|
|
22
|
+
✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB、SQLite、KingbaseES、GaussDB/OpenGauss 一键切换
|
|
23
23
|
|
|
24
24
|
✅ **安全第一** - 默认只读模式,防止误操作删库
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
- Node.js >= 20
|
|
35
35
|
- Claude Desktop 应用
|
|
36
|
-
- 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB/SQLite)
|
|
36
|
+
- 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB/SQLite/KingbaseES/GaussDB)
|
|
37
37
|
|
|
38
38
|
### 安装
|
|
39
39
|
|
|
@@ -100,6 +100,59 @@ npx universal-db-mcp
|
|
|
100
100
|
- Windows 路径示例:`"C:\\Users\\YourName\\data\\mydb.db"`
|
|
101
101
|
- macOS/Linux 路径示例:`"/Users/YourName/data/mydb.db"`
|
|
102
102
|
|
|
103
|
+
#### KingbaseES 示例
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"mcpServers": {
|
|
108
|
+
"kingbase-db": {
|
|
109
|
+
"command": "npx",
|
|
110
|
+
"args": [
|
|
111
|
+
"universal-db-mcp",
|
|
112
|
+
"--type", "kingbase",
|
|
113
|
+
"--host", "localhost",
|
|
114
|
+
"--port", "54321",
|
|
115
|
+
"--user", "system",
|
|
116
|
+
"--password", "your_password",
|
|
117
|
+
"--database", "test"
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**说明**:
|
|
125
|
+
- KingbaseES 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
126
|
+
- 默认端口为 54321
|
|
127
|
+
- 使用与 PostgreSQL 相同的驱动(pg)
|
|
128
|
+
|
|
129
|
+
#### GaussDB / OpenGauss 示例
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"gaussdb-db": {
|
|
135
|
+
"command": "npx",
|
|
136
|
+
"args": [
|
|
137
|
+
"universal-db-mcp",
|
|
138
|
+
"--type", "gaussdb",
|
|
139
|
+
"--host", "localhost",
|
|
140
|
+
"--port", "5432",
|
|
141
|
+
"--user", "gaussdb",
|
|
142
|
+
"--password", "your_password",
|
|
143
|
+
"--database", "postgres"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**说明**:
|
|
151
|
+
- GaussDB 和 OpenGauss 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
152
|
+
- 默认端口为 5432
|
|
153
|
+
- 可以使用 `--type gaussdb` 或 `--type opengauss`
|
|
154
|
+
- 使用与 PostgreSQL 相同的驱动(pg)
|
|
155
|
+
|
|
103
156
|
### 启动使用
|
|
104
157
|
|
|
105
158
|
1. 重启 Claude Desktop
|
|
@@ -141,6 +194,8 @@ Claude 会自动调用数据库工具完成查询!
|
|
|
141
194
|
| SQL Server (2012+) | `--type sqlserver` 或 `--type mssql` | 1433 | ✅ 已支持 | 支持 Azure SQL Database |
|
|
142
195
|
| MongoDB | `--type mongodb` | 27017 | ✅ 已支持 | 支持 MongoDB 4.0+ |
|
|
143
196
|
| SQLite | `--type sqlite` | - | ✅ 已支持 | 本地文件数据库 |
|
|
197
|
+
| KingbaseES(人大金仓) | `--type kingbase` | 54321 | ✅ 已支持 | 兼容 PostgreSQL 协议 |
|
|
198
|
+
| GaussDB / OpenGauss | `--type gaussdb` 或 `--type opengauss` | 5432 | ✅ 已支持 | 华为高斯数据库,兼容 PostgreSQL |
|
|
144
199
|
|
|
145
200
|
**注意**:
|
|
146
201
|
- 达梦数据库驱动 `dmdb` 会作为可选依赖自动安装。如果安装失败,请手动运行 `npm install -g dmdb`。
|
|
@@ -152,7 +207,7 @@ Claude 会自动调用数据库工具完成查询!
|
|
|
152
207
|
universal-db-mcp [选项]
|
|
153
208
|
|
|
154
209
|
选项:
|
|
155
|
-
--type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite)
|
|
210
|
+
--type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss)
|
|
156
211
|
--host <host> 数据库主机地址 (默认: localhost)
|
|
157
212
|
--port <port> 数据库端口
|
|
158
213
|
--user <user> 用户名
|
|
@@ -177,7 +232,9 @@ src/
|
|
|
177
232
|
│ ├── dm.ts
|
|
178
233
|
│ ├── sqlserver.ts
|
|
179
234
|
│ ├── mongodb.ts
|
|
180
|
-
│
|
|
235
|
+
│ ├── sqlite.ts
|
|
236
|
+
│ ├── kingbase.ts
|
|
237
|
+
│ └── gaussdb.ts
|
|
181
238
|
├── types/ # TypeScript 类型定义
|
|
182
239
|
│ └── adapter.ts
|
|
183
240
|
├── utils/ # 工具函数
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GaussDB / OpenGauss 数据库适配器
|
|
3
|
+
* 使用 pg 驱动实现 DbAdapter 接口
|
|
4
|
+
* GaussDB 和 OpenGauss 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
5
|
+
*/
|
|
6
|
+
import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
|
|
7
|
+
export declare class GaussDBAdapter implements DbAdapter {
|
|
8
|
+
private client;
|
|
9
|
+
private config;
|
|
10
|
+
constructor(config: {
|
|
11
|
+
host: string;
|
|
12
|
+
port: number;
|
|
13
|
+
user?: string;
|
|
14
|
+
password?: string;
|
|
15
|
+
database?: string;
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* 连接到 GaussDB / OpenGauss 数据库
|
|
19
|
+
*/
|
|
20
|
+
connect(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* 断开数据库连接
|
|
23
|
+
*/
|
|
24
|
+
disconnect(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 执行 SQL 查询
|
|
27
|
+
*/
|
|
28
|
+
executeQuery(query: string, params?: unknown[]): Promise<QueryResult>;
|
|
29
|
+
/**
|
|
30
|
+
* 获取数据库结构信息
|
|
31
|
+
*/
|
|
32
|
+
getSchema(): Promise<SchemaInfo>;
|
|
33
|
+
/**
|
|
34
|
+
* 获取单个表的详细信息
|
|
35
|
+
*/
|
|
36
|
+
private getTableInfo;
|
|
37
|
+
/**
|
|
38
|
+
* 检查是否为写操作
|
|
39
|
+
*/
|
|
40
|
+
isWriteOperation(query: string): boolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=gaussdb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussdb.d.ts","sourceRoot":"","sources":["../../src/adapters/gaussdb.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAK7B,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAMZ;gBAEU,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B3E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IA4CtC;;OAEG;YACW,YAAY;IA2G1B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGzC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GaussDB / OpenGauss 数据库适配器
|
|
3
|
+
* 使用 pg 驱动实现 DbAdapter 接口
|
|
4
|
+
* GaussDB 和 OpenGauss 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
5
|
+
*/
|
|
6
|
+
import pg from 'pg';
|
|
7
|
+
import { isWriteOperation as checkWriteOperation } from '../utils/safety.js';
|
|
8
|
+
const { Client } = pg;
|
|
9
|
+
export class GaussDBAdapter {
|
|
10
|
+
client = null;
|
|
11
|
+
config;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 连接到 GaussDB / OpenGauss 数据库
|
|
17
|
+
*/
|
|
18
|
+
async connect() {
|
|
19
|
+
try {
|
|
20
|
+
this.client = new Client({
|
|
21
|
+
host: this.config.host,
|
|
22
|
+
port: this.config.port,
|
|
23
|
+
user: this.config.user,
|
|
24
|
+
password: this.config.password,
|
|
25
|
+
database: this.config.database,
|
|
26
|
+
});
|
|
27
|
+
await this.client.connect();
|
|
28
|
+
// 测试连接
|
|
29
|
+
await this.client.query('SELECT 1');
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`GaussDB 连接失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 断开数据库连接
|
|
37
|
+
*/
|
|
38
|
+
async disconnect() {
|
|
39
|
+
if (this.client) {
|
|
40
|
+
await this.client.end();
|
|
41
|
+
this.client = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 执行 SQL 查询
|
|
46
|
+
*/
|
|
47
|
+
async executeQuery(query, params) {
|
|
48
|
+
if (!this.client) {
|
|
49
|
+
throw new Error('数据库未连接');
|
|
50
|
+
}
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
try {
|
|
53
|
+
const result = await this.client.query(query, params);
|
|
54
|
+
const executionTime = Date.now() - startTime;
|
|
55
|
+
return {
|
|
56
|
+
rows: result.rows,
|
|
57
|
+
affectedRows: result.rowCount || 0,
|
|
58
|
+
executionTime,
|
|
59
|
+
metadata: {
|
|
60
|
+
command: result.command,
|
|
61
|
+
fields: result.fields?.map(f => ({
|
|
62
|
+
name: f.name,
|
|
63
|
+
dataTypeID: f.dataTypeID,
|
|
64
|
+
})),
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error(`查询执行失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 获取数据库结构信息
|
|
74
|
+
*/
|
|
75
|
+
async getSchema() {
|
|
76
|
+
if (!this.client) {
|
|
77
|
+
throw new Error('数据库未连接');
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// 获取数据库版本
|
|
81
|
+
const versionResult = await this.client.query('SELECT version()');
|
|
82
|
+
const version = versionResult.rows[0]?.version || 'unknown';
|
|
83
|
+
// 获取当前数据库名
|
|
84
|
+
const dbResult = await this.client.query('SELECT current_database()');
|
|
85
|
+
const databaseName = dbResult.rows[0]?.current_database || this.config.database || 'unknown';
|
|
86
|
+
// 获取所有表(仅 public schema)
|
|
87
|
+
const tablesResult = await this.client.query(`
|
|
88
|
+
SELECT table_name
|
|
89
|
+
FROM information_schema.tables
|
|
90
|
+
WHERE table_schema = 'public'
|
|
91
|
+
AND table_type = 'BASE TABLE'
|
|
92
|
+
ORDER BY table_name
|
|
93
|
+
`);
|
|
94
|
+
const tableInfos = [];
|
|
95
|
+
for (const row of tablesResult.rows) {
|
|
96
|
+
const tableName = row.table_name;
|
|
97
|
+
const tableInfo = await this.getTableInfo(tableName);
|
|
98
|
+
tableInfos.push(tableInfo);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
databaseType: 'gaussdb',
|
|
102
|
+
databaseName,
|
|
103
|
+
tables: tableInfos,
|
|
104
|
+
version,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw new Error(`获取数据库结构失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 获取单个表的详细信息
|
|
113
|
+
*/
|
|
114
|
+
async getTableInfo(tableName) {
|
|
115
|
+
if (!this.client) {
|
|
116
|
+
throw new Error('数据库未连接');
|
|
117
|
+
}
|
|
118
|
+
// 获取列信息
|
|
119
|
+
const columnsResult = await this.client.query(`
|
|
120
|
+
SELECT
|
|
121
|
+
column_name,
|
|
122
|
+
data_type,
|
|
123
|
+
is_nullable,
|
|
124
|
+
column_default,
|
|
125
|
+
character_maximum_length,
|
|
126
|
+
numeric_precision,
|
|
127
|
+
numeric_scale
|
|
128
|
+
FROM information_schema.columns
|
|
129
|
+
WHERE table_schema = 'public'
|
|
130
|
+
AND table_name = $1
|
|
131
|
+
ORDER BY ordinal_position
|
|
132
|
+
`, [tableName]);
|
|
133
|
+
const columnInfos = columnsResult.rows.map((col) => {
|
|
134
|
+
let dataType = col.data_type;
|
|
135
|
+
// 添加长度/精度信息
|
|
136
|
+
if (col.character_maximum_length) {
|
|
137
|
+
dataType += `(${col.character_maximum_length})`;
|
|
138
|
+
}
|
|
139
|
+
else if (col.numeric_precision) {
|
|
140
|
+
dataType += `(${col.numeric_precision}${col.numeric_scale ? `,${col.numeric_scale}` : ''})`;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
name: col.column_name,
|
|
144
|
+
type: dataType,
|
|
145
|
+
nullable: col.is_nullable === 'YES',
|
|
146
|
+
defaultValue: col.column_default || undefined,
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
// 获取主键
|
|
150
|
+
const pkResult = await this.client.query(`
|
|
151
|
+
SELECT a.attname
|
|
152
|
+
FROM pg_index i
|
|
153
|
+
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
154
|
+
WHERE i.indrelid = $1::regclass
|
|
155
|
+
AND i.indisprimary
|
|
156
|
+
`, [tableName]);
|
|
157
|
+
const primaryKeys = pkResult.rows.map(row => row.attname);
|
|
158
|
+
// 获取索引信息
|
|
159
|
+
const indexResult = await this.client.query(`
|
|
160
|
+
SELECT
|
|
161
|
+
i.relname as index_name,
|
|
162
|
+
a.attname as column_name,
|
|
163
|
+
ix.indisunique as is_unique
|
|
164
|
+
FROM pg_class t
|
|
165
|
+
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
166
|
+
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
167
|
+
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
168
|
+
WHERE t.relname = $1
|
|
169
|
+
AND t.relkind = 'r'
|
|
170
|
+
AND NOT ix.indisprimary
|
|
171
|
+
ORDER BY i.relname, a.attnum
|
|
172
|
+
`, [tableName]);
|
|
173
|
+
const indexMap = new Map();
|
|
174
|
+
for (const idx of indexResult.rows) {
|
|
175
|
+
const indexName = idx.index_name;
|
|
176
|
+
if (!indexMap.has(indexName)) {
|
|
177
|
+
indexMap.set(indexName, {
|
|
178
|
+
columns: [],
|
|
179
|
+
unique: idx.is_unique,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
indexMap.get(indexName).columns.push(idx.column_name);
|
|
183
|
+
}
|
|
184
|
+
const indexInfos = Array.from(indexMap.entries()).map(([name, info]) => ({
|
|
185
|
+
name,
|
|
186
|
+
columns: info.columns,
|
|
187
|
+
unique: info.unique,
|
|
188
|
+
}));
|
|
189
|
+
// 获取表行数估算
|
|
190
|
+
const statsResult = await this.client.query(`
|
|
191
|
+
SELECT reltuples::bigint as estimate
|
|
192
|
+
FROM pg_class
|
|
193
|
+
WHERE relname = $1
|
|
194
|
+
`, [tableName]);
|
|
195
|
+
const estimatedRows = Number(statsResult.rows[0]?.estimate || 0);
|
|
196
|
+
return {
|
|
197
|
+
name: tableName,
|
|
198
|
+
columns: columnInfos,
|
|
199
|
+
primaryKeys,
|
|
200
|
+
indexes: indexInfos,
|
|
201
|
+
estimatedRows,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 检查是否为写操作
|
|
206
|
+
*/
|
|
207
|
+
isWriteOperation(query) {
|
|
208
|
+
return checkWriteOperation(query);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=gaussdb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaussdb.js","sourceRoot":"","sources":["../../src/adapters/gaussdb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KingbaseES(人大金仓)数据库适配器
|
|
3
|
+
* 使用 pg 驱动实现 DbAdapter 接口
|
|
4
|
+
* KingbaseES 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
5
|
+
*/
|
|
6
|
+
import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
|
|
7
|
+
export declare class KingbaseAdapter implements DbAdapter {
|
|
8
|
+
private client;
|
|
9
|
+
private config;
|
|
10
|
+
constructor(config: {
|
|
11
|
+
host: string;
|
|
12
|
+
port: number;
|
|
13
|
+
user?: string;
|
|
14
|
+
password?: string;
|
|
15
|
+
database?: string;
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* 连接到 KingbaseES 数据库
|
|
19
|
+
*/
|
|
20
|
+
connect(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* 断开数据库连接
|
|
23
|
+
*/
|
|
24
|
+
disconnect(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 执行 SQL 查询
|
|
27
|
+
*/
|
|
28
|
+
executeQuery(query: string, params?: unknown[]): Promise<QueryResult>;
|
|
29
|
+
/**
|
|
30
|
+
* 获取数据库结构信息
|
|
31
|
+
*/
|
|
32
|
+
getSchema(): Promise<SchemaInfo>;
|
|
33
|
+
/**
|
|
34
|
+
* 获取单个表的详细信息
|
|
35
|
+
*/
|
|
36
|
+
private getTableInfo;
|
|
37
|
+
/**
|
|
38
|
+
* 检查是否为写操作
|
|
39
|
+
*/
|
|
40
|
+
isWriteOperation(query: string): boolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=kingbase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kingbase.d.ts","sourceRoot":"","sources":["../../src/adapters/kingbase.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAK7B,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAMZ;gBAEU,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B3E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IA4CtC;;OAEG;YACW,YAAY;IA2G1B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGzC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KingbaseES(人大金仓)数据库适配器
|
|
3
|
+
* 使用 pg 驱动实现 DbAdapter 接口
|
|
4
|
+
* KingbaseES 基于 PostgreSQL 开发,兼容 PostgreSQL 协议
|
|
5
|
+
*/
|
|
6
|
+
import pg from 'pg';
|
|
7
|
+
import { isWriteOperation as checkWriteOperation } from '../utils/safety.js';
|
|
8
|
+
const { Client } = pg;
|
|
9
|
+
export class KingbaseAdapter {
|
|
10
|
+
client = null;
|
|
11
|
+
config;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 连接到 KingbaseES 数据库
|
|
17
|
+
*/
|
|
18
|
+
async connect() {
|
|
19
|
+
try {
|
|
20
|
+
this.client = new Client({
|
|
21
|
+
host: this.config.host,
|
|
22
|
+
port: this.config.port,
|
|
23
|
+
user: this.config.user,
|
|
24
|
+
password: this.config.password,
|
|
25
|
+
database: this.config.database,
|
|
26
|
+
});
|
|
27
|
+
await this.client.connect();
|
|
28
|
+
// 测试连接
|
|
29
|
+
await this.client.query('SELECT 1');
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`KingbaseES 连接失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 断开数据库连接
|
|
37
|
+
*/
|
|
38
|
+
async disconnect() {
|
|
39
|
+
if (this.client) {
|
|
40
|
+
await this.client.end();
|
|
41
|
+
this.client = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 执行 SQL 查询
|
|
46
|
+
*/
|
|
47
|
+
async executeQuery(query, params) {
|
|
48
|
+
if (!this.client) {
|
|
49
|
+
throw new Error('数据库未连接');
|
|
50
|
+
}
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
try {
|
|
53
|
+
const result = await this.client.query(query, params);
|
|
54
|
+
const executionTime = Date.now() - startTime;
|
|
55
|
+
return {
|
|
56
|
+
rows: result.rows,
|
|
57
|
+
affectedRows: result.rowCount || 0,
|
|
58
|
+
executionTime,
|
|
59
|
+
metadata: {
|
|
60
|
+
command: result.command,
|
|
61
|
+
fields: result.fields?.map(f => ({
|
|
62
|
+
name: f.name,
|
|
63
|
+
dataTypeID: f.dataTypeID,
|
|
64
|
+
})),
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error(`查询执行失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 获取数据库结构信息
|
|
74
|
+
*/
|
|
75
|
+
async getSchema() {
|
|
76
|
+
if (!this.client) {
|
|
77
|
+
throw new Error('数据库未连接');
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// 获取数据库版本
|
|
81
|
+
const versionResult = await this.client.query('SELECT version()');
|
|
82
|
+
const version = versionResult.rows[0]?.version || 'unknown';
|
|
83
|
+
// 获取当前数据库名
|
|
84
|
+
const dbResult = await this.client.query('SELECT current_database()');
|
|
85
|
+
const databaseName = dbResult.rows[0]?.current_database || this.config.database || 'unknown';
|
|
86
|
+
// 获取所有表(仅 public schema)
|
|
87
|
+
const tablesResult = await this.client.query(`
|
|
88
|
+
SELECT table_name
|
|
89
|
+
FROM information_schema.tables
|
|
90
|
+
WHERE table_schema = 'public'
|
|
91
|
+
AND table_type = 'BASE TABLE'
|
|
92
|
+
ORDER BY table_name
|
|
93
|
+
`);
|
|
94
|
+
const tableInfos = [];
|
|
95
|
+
for (const row of tablesResult.rows) {
|
|
96
|
+
const tableName = row.table_name;
|
|
97
|
+
const tableInfo = await this.getTableInfo(tableName);
|
|
98
|
+
tableInfos.push(tableInfo);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
databaseType: 'kingbase',
|
|
102
|
+
databaseName,
|
|
103
|
+
tables: tableInfos,
|
|
104
|
+
version,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw new Error(`获取数据库结构失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 获取单个表的详细信息
|
|
113
|
+
*/
|
|
114
|
+
async getTableInfo(tableName) {
|
|
115
|
+
if (!this.client) {
|
|
116
|
+
throw new Error('数据库未连接');
|
|
117
|
+
}
|
|
118
|
+
// 获取列信息
|
|
119
|
+
const columnsResult = await this.client.query(`
|
|
120
|
+
SELECT
|
|
121
|
+
column_name,
|
|
122
|
+
data_type,
|
|
123
|
+
is_nullable,
|
|
124
|
+
column_default,
|
|
125
|
+
character_maximum_length,
|
|
126
|
+
numeric_precision,
|
|
127
|
+
numeric_scale
|
|
128
|
+
FROM information_schema.columns
|
|
129
|
+
WHERE table_schema = 'public'
|
|
130
|
+
AND table_name = $1
|
|
131
|
+
ORDER BY ordinal_position
|
|
132
|
+
`, [tableName]);
|
|
133
|
+
const columnInfos = columnsResult.rows.map((col) => {
|
|
134
|
+
let dataType = col.data_type;
|
|
135
|
+
// 添加长度/精度信息
|
|
136
|
+
if (col.character_maximum_length) {
|
|
137
|
+
dataType += `(${col.character_maximum_length})`;
|
|
138
|
+
}
|
|
139
|
+
else if (col.numeric_precision) {
|
|
140
|
+
dataType += `(${col.numeric_precision}${col.numeric_scale ? `,${col.numeric_scale}` : ''})`;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
name: col.column_name,
|
|
144
|
+
type: dataType,
|
|
145
|
+
nullable: col.is_nullable === 'YES',
|
|
146
|
+
defaultValue: col.column_default || undefined,
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
// 获取主键
|
|
150
|
+
const pkResult = await this.client.query(`
|
|
151
|
+
SELECT a.attname
|
|
152
|
+
FROM pg_index i
|
|
153
|
+
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
154
|
+
WHERE i.indrelid = $1::regclass
|
|
155
|
+
AND i.indisprimary
|
|
156
|
+
`, [tableName]);
|
|
157
|
+
const primaryKeys = pkResult.rows.map(row => row.attname);
|
|
158
|
+
// 获取索引信息
|
|
159
|
+
const indexResult = await this.client.query(`
|
|
160
|
+
SELECT
|
|
161
|
+
i.relname as index_name,
|
|
162
|
+
a.attname as column_name,
|
|
163
|
+
ix.indisunique as is_unique
|
|
164
|
+
FROM pg_class t
|
|
165
|
+
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
166
|
+
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
167
|
+
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
168
|
+
WHERE t.relname = $1
|
|
169
|
+
AND t.relkind = 'r'
|
|
170
|
+
AND NOT ix.indisprimary
|
|
171
|
+
ORDER BY i.relname, a.attnum
|
|
172
|
+
`, [tableName]);
|
|
173
|
+
const indexMap = new Map();
|
|
174
|
+
for (const idx of indexResult.rows) {
|
|
175
|
+
const indexName = idx.index_name;
|
|
176
|
+
if (!indexMap.has(indexName)) {
|
|
177
|
+
indexMap.set(indexName, {
|
|
178
|
+
columns: [],
|
|
179
|
+
unique: idx.is_unique,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
indexMap.get(indexName).columns.push(idx.column_name);
|
|
183
|
+
}
|
|
184
|
+
const indexInfos = Array.from(indexMap.entries()).map(([name, info]) => ({
|
|
185
|
+
name,
|
|
186
|
+
columns: info.columns,
|
|
187
|
+
unique: info.unique,
|
|
188
|
+
}));
|
|
189
|
+
// 获取表行数估算
|
|
190
|
+
const statsResult = await this.client.query(`
|
|
191
|
+
SELECT reltuples::bigint as estimate
|
|
192
|
+
FROM pg_class
|
|
193
|
+
WHERE relname = $1
|
|
194
|
+
`, [tableName]);
|
|
195
|
+
const estimatedRows = Number(statsResult.rows[0]?.estimate || 0);
|
|
196
|
+
return {
|
|
197
|
+
name: tableName,
|
|
198
|
+
columns: columnInfos,
|
|
199
|
+
primaryKeys,
|
|
200
|
+
indexes: indexInfos,
|
|
201
|
+
estimatedRows,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 检查是否为写操作
|
|
206
|
+
*/
|
|
207
|
+
isWriteOperation(query) {
|
|
208
|
+
return checkWriteOperation(query);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=kingbase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kingbase.js","sourceRoot":"","sources":["../../src/adapters/kingbase.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,12 +12,14 @@ import { DMAdapter } from './adapters/dm.js';
|
|
|
12
12
|
import { SQLServerAdapter } from './adapters/sqlserver.js';
|
|
13
13
|
import { MongoDBAdapter } from './adapters/mongodb.js';
|
|
14
14
|
import { SQLiteAdapter } from './adapters/sqlite.js';
|
|
15
|
+
import { KingbaseAdapter } from './adapters/kingbase.js';
|
|
16
|
+
import { GaussDBAdapter } from './adapters/gaussdb.js';
|
|
15
17
|
const program = new Command();
|
|
16
18
|
program
|
|
17
19
|
.name('universal-db-mcp')
|
|
18
20
|
.description('MCP 数据库万能连接器 - 让 Claude Desktop 直接连接你的数据库')
|
|
19
21
|
.version('0.1.0')
|
|
20
|
-
.requiredOption('--type <type>', '数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite)')
|
|
22
|
+
.requiredOption('--type <type>', '数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb|sqlite|kingbase|gaussdb|opengauss)')
|
|
21
23
|
.option('--host <host>', '数据库主机地址')
|
|
22
24
|
.option('--port <port>', '数据库端口', parseInt)
|
|
23
25
|
.option('--user <user>', '用户名')
|
|
@@ -29,15 +31,18 @@ program
|
|
|
29
31
|
.action(async (options) => {
|
|
30
32
|
try {
|
|
31
33
|
// 验证数据库类型
|
|
32
|
-
if (!['mysql', 'postgres', 'redis', 'oracle', 'dm', 'sqlserver', 'mssql', 'mongodb', 'sqlite'].includes(options.type)) {
|
|
33
|
-
console.error('❌ 错误: 不支持的数据库类型。支持的类型: mysql, postgres, redis, oracle, dm, sqlserver (或 mssql), mongodb, sqlite');
|
|
34
|
+
if (!['mysql', 'postgres', 'redis', 'oracle', 'dm', 'sqlserver', 'mssql', 'mongodb', 'sqlite', 'kingbase', 'gaussdb', 'opengauss'].includes(options.type)) {
|
|
35
|
+
console.error('❌ 错误: 不支持的数据库类型。支持的类型: mysql, postgres, redis, oracle, dm, sqlserver (或 mssql), mongodb, sqlite, kingbase, gaussdb (或 opengauss)');
|
|
34
36
|
process.exit(1);
|
|
35
37
|
}
|
|
36
|
-
// 规范化 SQL Server 别名
|
|
38
|
+
// 规范化 SQL Server 和 GaussDB 别名
|
|
37
39
|
let dbType = options.type;
|
|
38
40
|
if (dbType === 'mssql') {
|
|
39
41
|
dbType = 'sqlserver';
|
|
40
42
|
}
|
|
43
|
+
if (dbType === 'opengauss') {
|
|
44
|
+
dbType = 'gaussdb';
|
|
45
|
+
}
|
|
41
46
|
// SQLite 特殊处理:需要文件路径而不是 host/port
|
|
42
47
|
if (dbType === 'sqlite') {
|
|
43
48
|
if (!options.file) {
|
|
@@ -148,6 +153,24 @@ program
|
|
|
148
153
|
readonly: !config.allowWrite,
|
|
149
154
|
});
|
|
150
155
|
break;
|
|
156
|
+
case 'kingbase':
|
|
157
|
+
adapter = new KingbaseAdapter({
|
|
158
|
+
host: config.host,
|
|
159
|
+
port: config.port,
|
|
160
|
+
user: config.user,
|
|
161
|
+
password: config.password,
|
|
162
|
+
database: config.database,
|
|
163
|
+
});
|
|
164
|
+
break;
|
|
165
|
+
case 'gaussdb':
|
|
166
|
+
adapter = new GaussDBAdapter({
|
|
167
|
+
host: config.host,
|
|
168
|
+
port: config.port,
|
|
169
|
+
user: config.user,
|
|
170
|
+
password: config.password,
|
|
171
|
+
database: config.database,
|
|
172
|
+
});
|
|
173
|
+
break;
|
|
151
174
|
default:
|
|
152
175
|
throw new Error(`不支持的数据库类型: ${config.type}`);
|
|
153
176
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/adapter.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export interface QueryResult {
|
|
|
49
49
|
*/
|
|
50
50
|
export interface SchemaInfo {
|
|
51
51
|
/** 数据库类型 */
|
|
52
|
-
databaseType: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite';
|
|
52
|
+
databaseType: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb';
|
|
53
53
|
/** 数据库名称 */
|
|
54
54
|
databaseName: string;
|
|
55
55
|
/** 表信息列表 */
|
|
@@ -102,7 +102,7 @@ export interface IndexInfo {
|
|
|
102
102
|
* 数据库连接配置
|
|
103
103
|
*/
|
|
104
104
|
export interface DbConfig {
|
|
105
|
-
type: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite';
|
|
105
|
+
type: 'mysql' | 'postgres' | 'redis' | 'oracle' | 'dm' | 'sqlserver' | 'mongodb' | 'sqlite' | 'kingbase' | 'gaussdb';
|
|
106
106
|
host?: string;
|
|
107
107
|
port?: number;
|
|
108
108
|
user?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7H,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IACrH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "universal-db-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "MCP 数据库万能连接器 - 让 Claude Desktop 直接连接你的数据库",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -30,6 +30,12 @@
|
|
|
30
30
|
"mongodb",
|
|
31
31
|
"mongo",
|
|
32
32
|
"sqlite",
|
|
33
|
+
"kingbase",
|
|
34
|
+
"kingbasees",
|
|
35
|
+
"gaussdb",
|
|
36
|
+
"opengauss",
|
|
37
|
+
"华为高斯",
|
|
38
|
+
"人大金仓",
|
|
33
39
|
"数据库",
|
|
34
40
|
"AI"
|
|
35
41
|
],
|