universal-db-mcp 0.3.1 → 0.5.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 CHANGED
@@ -8,6 +8,9 @@
8
8
  - [PostgreSQL 使用示例](#postgresql-使用示例)
9
9
  - [Redis 使用示例](#redis-使用示例)
10
10
  - [Oracle 使用示例](#oracle-使用示例)
11
+ - [达梦 使用示例](#达梦-使用示例)
12
+ - [SQL Server 使用示例](#sql-server-使用示例)
13
+ - [MongoDB 使用示例](#mongodb-使用示例)
11
14
  - [Claude Desktop 配置示例](#claude-desktop-配置示例)
12
15
  - [常见使用场景](#常见使用场景)
13
16
 
@@ -351,6 +354,299 @@ npm install -g dmdb
351
354
 
352
355
  ---
353
356
 
357
+ ## SQL Server 使用示例
358
+
359
+ ### 基础配置(只读模式)
360
+
361
+ ```json
362
+ {
363
+ "mcpServers": {
364
+ "sqlserver-db": {
365
+ "command": "npx",
366
+ "args": [
367
+ "universal-db-mcp",
368
+ "--type", "sqlserver",
369
+ "--host", "localhost",
370
+ "--port", "1433",
371
+ "--user", "sa",
372
+ "--password", "YourPassword123",
373
+ "--database", "master"
374
+ ]
375
+ }
376
+ }
377
+ }
378
+ ```
379
+
380
+ **提示**: 也可以使用 `--type mssql` 作为别名。
381
+
382
+ ### 启用写入模式
383
+
384
+ ```json
385
+ {
386
+ "mcpServers": {
387
+ "sqlserver-write": {
388
+ "command": "npx",
389
+ "args": [
390
+ "universal-db-mcp",
391
+ "--type", "sqlserver",
392
+ "--host", "localhost",
393
+ "--port", "1433",
394
+ "--user", "sa",
395
+ "--password", "YourPassword123",
396
+ "--database", "MyDatabase",
397
+ "--danger-allow-write"
398
+ ]
399
+ }
400
+ }
401
+ }
402
+ ```
403
+
404
+ ### 连接 Azure SQL Database
405
+
406
+ ```json
407
+ {
408
+ "mcpServers": {
409
+ "azure-sql": {
410
+ "command": "npx",
411
+ "args": [
412
+ "universal-db-mcp",
413
+ "--type", "sqlserver",
414
+ "--host", "myserver.database.windows.net",
415
+ "--port", "1433",
416
+ "--user", "myadmin",
417
+ "--password", "MyPassword123!",
418
+ "--database", "mydatabase"
419
+ ]
420
+ }
421
+ }
422
+ }
423
+ ```
424
+
425
+ **注意**: 连接 Azure SQL Database 时会自动启用加密连接。
426
+
427
+ ### 与 Claude 对话示例
428
+
429
+ **用户**: 查看数据库中有哪些表?
430
+
431
+ **Claude 会自动**:
432
+
433
+ 1. 调用 `get_schema` 工具
434
+ 2. 执行查询: `SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'`
435
+ 3. 返回表列表
436
+
437
+ **用户**: 查看 Users 表的结构
438
+
439
+ **Claude 会自动**:
440
+
441
+ 1. 调用 `get_table_info` 工具
442
+ 2. 返回列信息、主键、索引等详细信息
443
+
444
+ **用户**: 统计每个部门的员工数量
445
+
446
+ **Claude 会自动**:
447
+
448
+ 1. 理解需求
449
+ 2. 生成 SQL: `SELECT DepartmentID, COUNT(*) as EmployeeCount FROM Employees GROUP BY DepartmentID ORDER BY EmployeeCount DESC`
450
+ 3. 执行并返回结果
451
+
452
+ **用户**: 查找最近一周创建的订单
453
+
454
+ **Claude 会自动**:
455
+
456
+ 1. 生成 SQL: `SELECT * FROM Orders WHERE CreatedDate >= DATEADD(day, -7, GETDATE()) ORDER BY CreatedDate DESC`
457
+ 2. 执行并返回结果
458
+
459
+ ### 注意事项
460
+
461
+ 1. **默认端口**: SQL Server 默认端口为 1433
462
+ 2. **身份验证**: 支持 SQL Server 身份验证(用户名/密码)
463
+ 3. **加密连接**: 连接 Azure SQL 时会自动启用加密,本地 SQL Server 默认不加密
464
+ 4. **数据库名**: 必须指定数据库名(如 master、tempdb 或自定义数据库)
465
+ 5. **权限**: 确保用户有足够的权限访问系统视图(INFORMATION_SCHEMA)
466
+ 6. **参数化查询**: 支持 `?` 占位符,会自动转换为 SQL Server 的 `@param0` 语法
467
+
468
+ ---
469
+
470
+ ## MongoDB 使用示例
471
+
472
+ ### 基础配置(只读模式)
473
+
474
+ ```json
475
+ {
476
+ "mcpServers": {
477
+ "mongodb-db": {
478
+ "command": "npx",
479
+ "args": [
480
+ "universal-db-mcp",
481
+ "--type", "mongodb",
482
+ "--host", "localhost",
483
+ "--port", "27017",
484
+ "--user", "admin",
485
+ "--password", "your_password",
486
+ "--database", "myapp"
487
+ ]
488
+ }
489
+ }
490
+ }
491
+ ```
492
+
493
+ ### 无认证连接(开发环境)
494
+
495
+ ```json
496
+ {
497
+ "mcpServers": {
498
+ "mongodb-local": {
499
+ "command": "npx",
500
+ "args": [
501
+ "universal-db-mcp",
502
+ "--type", "mongodb",
503
+ "--host", "localhost",
504
+ "--port", "27017",
505
+ "--database", "test"
506
+ ]
507
+ }
508
+ }
509
+ }
510
+ ```
511
+
512
+ ### 启用写入模式
513
+
514
+ ```json
515
+ {
516
+ "mcpServers": {
517
+ "mongodb-write": {
518
+ "command": "npx",
519
+ "args": [
520
+ "universal-db-mcp",
521
+ "--type", "mongodb",
522
+ "--host", "localhost",
523
+ "--port", "27017",
524
+ "--user", "dev_user",
525
+ "--password", "dev_password",
526
+ "--database", "development",
527
+ "--danger-allow-write"
528
+ ]
529
+ }
530
+ }
531
+ }
532
+ ```
533
+
534
+ ### 连接 MongoDB Atlas
535
+
536
+ ```json
537
+ {
538
+ "mcpServers": {
539
+ "mongodb-atlas": {
540
+ "command": "npx",
541
+ "args": [
542
+ "universal-db-mcp",
543
+ "--type", "mongodb",
544
+ "--host", "cluster0.xxxxx.mongodb.net",
545
+ "--port", "27017",
546
+ "--user", "myuser",
547
+ "--password", "mypassword",
548
+ "--database", "production"
549
+ ]
550
+ }
551
+ }
552
+ }
553
+ ```
554
+
555
+ ### 查询格式
556
+
557
+ MongoDB 适配器支持两种查询格式:
558
+
559
+ #### 1. JSON 格式(推荐)
560
+
561
+ ```json
562
+ {
563
+ "collection": "users",
564
+ "operation": "find",
565
+ "query": {"age": {"$gt": 18}},
566
+ "options": {"limit": 10}
567
+ }
568
+ ```
569
+
570
+ #### 2. 简化格式
571
+
572
+ ```javascript
573
+ db.users.find({"age": {"$gt": 18}})
574
+ ```
575
+
576
+ ### 与 Claude 对话示例
577
+
578
+ **用户**: 查看数据库中有哪些集合?
579
+
580
+ **Claude 会自动**:
581
+ 1. 调用 `get_schema` 工具
582
+ 2. 返回所有集合的列表和基本信息
583
+ 3. 显示每个集合的文档数量和推断的字段结构
584
+
585
+ **用户**: 查询 users 集合中年龄大于 18 的用户
586
+
587
+ **Claude 会自动**:
588
+ 1. 生成查询: `{"collection": "users", "operation": "find", "query": {"age": {"$gt": 18}}}`
589
+ 2. 执行并返回结果
590
+
591
+ **用户**: 统计每个城市的用户数量
592
+
593
+ **Claude 会自动**:
594
+ 1. 理解需求
595
+ 2. 生成聚合查询:
596
+ ```json
597
+ {
598
+ "collection": "users",
599
+ "operation": "aggregate",
600
+ "pipeline": [
601
+ {"$group": {"_id": "$city", "count": {"$sum": 1}}},
602
+ {"$sort": {"count": -1}}
603
+ ]
604
+ }
605
+ ```
606
+ 3. 执行并返回结果
607
+
608
+ **用户**: 查找最近创建的 10 个订单
609
+
610
+ **Claude 会自动**:
611
+ 1. 生成查询:
612
+ ```json
613
+ {
614
+ "collection": "orders",
615
+ "operation": "find",
616
+ "query": {},
617
+ "options": {"sort": {"createdAt": -1}, "limit": 10}
618
+ }
619
+ ```
620
+ 2. 执行并返回结果
621
+
622
+ ### 支持的操作
623
+
624
+ #### 查询操作(只读模式)
625
+ - `find` - 查询文档
626
+ - `findOne` - 查询单个文档
627
+ - `count` / `countDocuments` - 统计文档数量
628
+ - `distinct` - 获取字段的不同值
629
+ - `aggregate` - 聚合管道查询
630
+
631
+ #### 写入操作(需要 --danger-allow-write)
632
+ - `insert` / `insertOne` - 插入单个文档
633
+ - `insertMany` - 插入多个文档
634
+ - `update` / `updateOne` - 更新单个文档
635
+ - `updateMany` - 更新多个文档
636
+ - `delete` / `deleteOne` - 删除单个文档
637
+ - `deleteMany` - 删除多个文档
638
+
639
+ ### 注意事项
640
+
641
+ 1. **默认端口**: MongoDB 默认端口为 27017
642
+ 2. **认证**: 支持用户名/密码认证,默认认证数据库为 admin
643
+ 3. **集合结构**: MongoDB 是无模式数据库,Schema 信息通过采样文档推断
644
+ 4. **ObjectId**: 查询结果中的 ObjectId 会自动转换为字符串
645
+ 5. **查询语法**: 使用 MongoDB 原生查询语法,不是 SQL
646
+ 6. **聚合管道**: 支持完整的聚合管道功能
647
+
648
+ ---
649
+
354
650
  ## Claude Desktop 配置示例
355
651
 
356
652
  ### 同时连接多个数据库
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ✅ **智能表结构理解** - 自动获取数据库 Schema,提供精准建议
21
21
 
22
- ✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦 一键切换
22
+ ✅ **多数据库支持** - MySQL、PostgreSQL、Redis、Oracle、达梦、SQL Server、MongoDB 一键切换
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/达梦)
36
+ - 至少一个数据库实例(MySQL/PostgreSQL/Redis/Oracle/达梦/SQL Server/MongoDB)
37
37
 
38
38
  ### 安装
39
39
 
@@ -113,7 +113,8 @@ Claude 会自动调用数据库工具完成查询!
113
113
  | Redis | `--type redis` | 6379 | ✅ 已支持 | - |
114
114
  | Oracle(12c以上) | `--type oracle` | 1521 | ✅ 已支持 | - |
115
115
  | 达梦(DM7/DM8) | `--type dm` | 5236 | ✅ 已支持 | 驱动自动安装 |
116
- | MongoDB | `--type mongo` | - | 🚧 计划中 | - |
116
+ | SQL Server (2012+) | `--type sqlserver` 或 `--type mssql` | 1433 | 已支持 | 支持 Azure SQL Database |
117
+ | MongoDB | `--type mongodb` | 27017 | ✅ 已支持 | 支持 MongoDB 4.0+ |
117
118
  | SQLite | `--type sqlite` | - | 🚧 计划中 | - |
118
119
 
119
120
  **注意**: 达梦数据库驱动 `dmdb` 会作为可选依赖自动安装。如果安装失败,请手动运行 `npm install -g dmdb`。
@@ -124,7 +125,7 @@ Claude 会自动调用数据库工具完成查询!
124
125
  universal-db-mcp [选项]
125
126
 
126
127
  选项:
127
- --type <db> 数据库类型 (mysql|postgres|redis|oracle|dm)
128
+ --type <db> 数据库类型 (mysql|postgres|redis|oracle|dm|sqlserver|mssql|mongodb)
128
129
  --host <host> 数据库主机地址 (默认: localhost)
129
130
  --port <port> 数据库端口
130
131
  --user <user> 用户名
@@ -145,7 +146,9 @@ src/
145
146
  │ ├── postgres.ts
146
147
  │ ├── redis.ts
147
148
  │ ├── oracle.ts
148
- └── dm.ts
149
+ ├── dm.ts
150
+ │ ├── sqlserver.ts
151
+ │ └── mongodb.ts
149
152
  ├── types/ # TypeScript 类型定义
150
153
  │ └── adapter.ts
151
154
  ├── utils/ # 工具函数
@@ -0,0 +1,74 @@
1
+ /**
2
+ * MongoDB 数据库适配器
3
+ * 使用 mongodb 驱动实现 DbAdapter 接口
4
+ *
5
+ * 注意:MongoDB 是 NoSQL 文档数据库,没有固定的表结构
6
+ * 本适配器提供集合操作和文档查询功能
7
+ */
8
+ import type { DbAdapter, QueryResult, SchemaInfo } from '../types/adapter.js';
9
+ export declare class MongoDBAdapter implements DbAdapter {
10
+ private client;
11
+ private db;
12
+ private config;
13
+ constructor(config: {
14
+ host: string;
15
+ port: number;
16
+ user?: string;
17
+ password?: string;
18
+ database?: string;
19
+ authSource?: string;
20
+ });
21
+ /**
22
+ * 连接到 MongoDB 数据库
23
+ */
24
+ connect(): Promise<void>;
25
+ /**
26
+ * 断开数据库连接
27
+ */
28
+ disconnect(): Promise<void>;
29
+ /**
30
+ * 执行 MongoDB 查询
31
+ *
32
+ * 支持的查询格式:
33
+ * 1. JSON 格式的 MongoDB 查询:
34
+ * {"collection": "users", "operation": "find", "query": {"age": {"$gt": 18}}}
35
+ * 2. 简化的命令格式:
36
+ * db.users.find({"age": {"$gt": 18}})
37
+ * 3. 聚合管道:
38
+ * {"collection": "users", "operation": "aggregate", "pipeline": [...]}
39
+ */
40
+ executeQuery(query: string, _params?: unknown[]): Promise<QueryResult>;
41
+ /**
42
+ * 解析查询字符串
43
+ */
44
+ private parseQuery;
45
+ /**
46
+ * 执行 MongoDB 操作
47
+ */
48
+ private executeOperation;
49
+ /**
50
+ * 格式化 MongoDB 文档(将 ObjectId 转换为字符串)
51
+ */
52
+ private formatDocument;
53
+ /**
54
+ * 获取 MongoDB 数据库信息
55
+ *
56
+ * MongoDB 没有固定的表结构,这里通过采样文档来推断集合的字段
57
+ */
58
+ getSchema(): Promise<SchemaInfo>;
59
+ /**
60
+ * 获取 MongoDB 值的类型
61
+ */
62
+ private getMongoType;
63
+ /**
64
+ * 检查是否为写操作
65
+ *
66
+ * MongoDB 写操作包括:insert, update, delete, drop 等
67
+ */
68
+ isWriteOperation(query: string): boolean;
69
+ /**
70
+ * 检查操作名称是否为写操作
71
+ */
72
+ private isWriteOperationName;
73
+ }
74
+ //# sourceMappingURL=mongodb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAGX,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,MAAM,CAOZ;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;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAID;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;;;;;;;OAUG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA+B5E;;OAEG;IACH,OAAO,CAAC,UAAU;IA2ClB;;OAEG;YACW,gBAAgB;IA4H9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IA8FtC;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAsBxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAc7B"}