1.0.5 • Published 5 months ago
@data_wise/database-mcp v1.0.5
Database MCP Server
一个基于 Model Context Protocol (MCP) 的数据库查询服务,同时支持关系型数据库(通过Sequelize)和OLAP分析型数据库(通过DuckDB)。
功能特点
- 支持多种关系型数据库(MySQL, PostgreSQL, SQLite, Microsoft SQL Server, MariaDB)
- 支持DuckDB分析型数据库
- 多数据库连接配置
- 执行SQL查询
- 数据库表结构查询
- 支持从关系型数据库提取数据到DuckDB进行分析
- 从csv文件导入数据到DuckDB(超高性能:50万行数据导入用时1.6s)
安装
全局安装
npm install -g @data_wise/database-mcp
本地安装
npm install @data_wise/database-mcp
使用方法
数据库连接管理
数据库连接信息会自动保存到用户目录下的 .datawise/database.db
文件中,连接一次后就会保存,无需每次配置。可以通过提供的API工具添加、测试和管理数据库连接。
关系型数据库配置参数
name
: 数据库连接的唯一标识名(必填)dialect
: 数据库类型(mysql, postgres, sqlite, mssql, mariadb)host
: 数据库主机地址,默认为 localhostport
: 数据库端口username
: 数据库用户名password
: 数据库密码database
: 数据库名称storage
: SQLite数据库文件路径(仅用于SQLite)pool
: 连接池配置(可选)max
: 最大连接数,默认10min
: 最小连接数,默认0idle
: 空闲超时(毫秒),默认10000acquire
: 获取超时(毫秒),默认30000
DuckDB配置参数
name
: 数据库连接的唯一标识名(必填)filename
: 数据库文件路径,使用':memory:'表示内存数据库options
: 数据库选项(可选)access_mode
: 访问模式,'READ_ONLY'或'READ_WRITE'max_memory
: 最大内存限制threads
: 线程数
MCP示例配置
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["@data_wise/database-mcp"],
"env": {}
}
}
}
可用工具
关系型数据库工具
1. 列出可用关系型数据库 (listRelationalDatabases)
请求格式:
{}
响应格式:
{
"success": true,
"data": [
{
"name": "main",
"dialect": "mysql",
"host": "localhost",
"database": "main_db",
"pool": {
"max": 10,
"min": 0,
"idle": 10000,
"acquire": 30000
}
},
{
"name": "analytics",
"dialect": "postgres",
"host": "db.example.com",
"database": "analytics_db"
}
],
"metadata": {
"count": 2
}
}
2. 添加数据库连接 (addDatabaseConnection)
请求格式:
{
"name": "new_db",
"dialect": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "testdb"
}
响应格式:
{
"success": true,
"data": {
"name": "new_db",
"dialect": "mysql",
"connected": true
},
"message": "数据库连接 'new_db' 已成功添加并连接"
}
3. 测试数据库连接 (testDatabaseConnection)
请求格式(测试已存在的连接):
{
"mode": "existing",
"name": "main"
}
请求格式(测试新连接配置):
{
"mode": "new",
"name": "test_conn",
"dialect": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "testdb"
}
响应格式:
{
"success": true,
"data": {
"name": "test_conn",
"mode": "new",
"connectionTestResult": true
},
"message": "数据库连接测试成功"
}
4. 更新数据库连接 (updateDatabaseConnection)
请求格式:
{
"name": "main",
"host": "new-host.example.com",
"port": 3307,
"password": "new-password"
}
响应格式:
{
"success": true,
"data": {
"name": "main",
"updated": true,
"host": "new-host.example.com",
"port": 3307,
"password": "new-password"
},
"message": "数据库连接 'main' 已成功更新并重新连接"
}
5. 列出关系型数据库表 (listRelationalTables)
请求格式:
{
"dbName": "main"
}
响应格式:
{
"success": true,
"data": [
"users",
"products",
"orders",
"categories"
],
"metadata": {
"dbName": "main",
"count": 4
}
}
6. 查询关系型数据库表结构 (describeRelationalTable)
请求格式:
{
"dbName": "main",
"tableName": "users"
}
响应格式:
{
"success": true,
"data": {
"id": {
"type": "INTEGER",
"allowNull": false,
"primaryKey": true,
"autoIncrement": true
},
"name": {
"type": "VARCHAR(255)",
"allowNull": false
},
"created_at": {
"type": "DATETIME",
"allowNull": false
}
},
"metadata": {
"dbName": "main",
"tableName": "users"
}
}
7. 执行关系型数据库SQL查询 (query)
请求格式:
{
"dbName": "main",
"sql": "SELECT * FROM users LIMIT 1",
"params": []
}
响应格式:
{
"success": true,
"data": [
{
"id": 1,
"name": "example",
"created_at": "2024-03-19T15:00:00.000Z"
}
],
"metadata": {
"dbName": "main",
"rowCount": 1,
"fields": ["id", "name", "created_at"]
}
}
DuckDB分析型数据库工具
1. 列出可用DuckDB数据库 (listOlapDatabases)
请求格式:
{}
响应格式:
{
"success": true,
"data": [
{
"name": "analytics",
"filename": "/home/user/.datawise/analytics.duckdb"
},
{
"name": "default",
"filename": ":memory:"
}
],
"metadata": {
"count": 2
}
}
2. 列出DuckDB数据库表 (listOlapTables)
请求格式:
{
"dbName": "analytics"
}
响应格式:
{
"success": true,
"data": [
"sales",
"marketing",
"inventory"
],
"metadata": {
"dbName": "analytics",
"count": 3
}
}
3. 查询DuckDB表结构 (describeOlapTable)
请求格式:
{
"dbName": "analytics",
"tableName": "sales"
}
响应格式:
{
"success": true,
"data": {
"id": {
"type": "INTEGER",
"nullable": false,
"primary_key": true
},
"amount": {
"type": "DOUBLE",
"nullable": true
},
"date": {
"type": "DATE",
"nullable": false
}
},
"metadata": {
"dbName": "analytics",
"tableName": "sales"
}
}
4. 执行DuckDB查询 (queryOlap)
请求格式:
{
"dbName": "analytics",
"sql": "SELECT * FROM sales WHERE amount > 1000 LIMIT 10",
"params": []
}
响应格式:
{
"success": true,
"data": [
{
"id": 1,
"amount": 1500.0,
"date": "2024-03-20"
}
],
"metadata": {
"dbName": "analytics",
"rowCount": 1,
"fields": ["id", "amount", "date"]
}
}
5. 从关系型数据库下载数据到DuckDB (downloadDataFromDatabase)
请求格式:
{
"dbName": "analytics",
"fromDbName": "main",
"fromTable": "sales",
"toTable": "sales_analytics",
"where": "amount > 1000",
"limit": 1000,
"orderBy": "date DESC"
}
响应格式:
{
"success": true,
"data": {
"rowCount": 500,
"fromDb": "main",
"fromTable": "sales",
"toDb": "analytics",
"toTable": "sales_analytics"
},
"metadata": {
"executionTime": "1.2s"
}
}
6. 从CSV文件导入数据到DuckDB (importCsvToOlap)
请求格式:
{
"dbName": "analytics",
"csvFilePath": "/path/to/data.csv",
"tableName": "sales_data",
"delimiter": ",",
"header": true,
"autoDetect": true,
"columns": {
"id": "INTEGER",
"name": "VARCHAR",
"amount": "DOUBLE",
"date": "DATE"
}
}
响应格式:
{
"success": true,
"data": {
"tableName": "sales_data",
"rowCount": 1500,
"csvFile": "/path/to/data.csv",
"executionTime": "1.2s"
}
}
错误响应格式
当发生错误时,所有工具都会返回统一的错误响应格式:
{
"success": false,
"error": "错误信息描述"
}
系统要求
- Node.js >= 14.0.0
- 支持 ES Modules
许可证
MIT