1.0.5 • Published 5 months ago

@data_wise/database-mcp v1.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

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: 数据库主机地址,默认为 localhost
  • port: 数据库端口
  • username: 数据库用户名
  • password: 数据库密码
  • database: 数据库名称
  • storage: SQLite数据库文件路径(仅用于SQLite)
  • pool: 连接池配置(可选)
    • max: 最大连接数,默认10
    • min: 最小连接数,默认0
    • idle: 空闲超时(毫秒),默认10000
    • acquire: 获取超时(毫秒),默认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

1.0.5

5 months ago

1.0.3

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago