数据库连接服务器

MCP数据库服务器是一个用于连接和操作多种数据库系统的实现,支持SQLite、PostgreSQL、Microsoft SQL Server和MongoDB,适用于需要多数据库支持的开发场景。

  • by cuongtl1992
  • TypeScript
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 cuongtl1992/mcp-dbs

使用说明

MCP数据库服务器

一种用于连接和使用各种数据库系统的模型上下文协议(MCP)实现。

支持的数据库

  • 数据库
  • PostgreSQL
  • Microsoft SQL Server
  • MongoDB

安装

npm install -g mcp-dbs

用法

MCP数据库服务器有两种使用模式:

SSE模式(默认)

默认情况下,服务器在端口3001上以SSE(服务器发送事件)模式运行:

npx mcp-dbs

这将启动一个具有SSE端点的HTTP服务器 http://localhost:3001/mcp.

自定义端口

您可以使用指定自定义端口 --port 选项:

npx mcp-dbs --port 8080

STDIO模式

对于通过标准输入/输出进行通信的工具,您可以使用 --stdio 选项:

npx mcp-dbs --stdio

Claude桌面集成

通过将mcp-dbs添加到Claude配置文件中,可以将其与Claude Desktop集成。

配置步骤

  1. 打开或创建您的Claude Desktop配置文件
  2. 将mcp-dbs配置添加到 mcpServers 章节:
{
  "mcpServers": {
    "mcp-dbs": {
      "command": "node",
      "args": [
        "/path/to/your/mcp-dbs/dist/cli.js",
        "--stdio"
      ],
      "env": {
        "MCP_MONGODB_URI": "mongodb://localhost:27017",
        "MCP_MONGODB_DATABASE": "your-database-name"
      }
    }
  }
}

用您自己的数据库连接详细信息替换环境变量。

备注

  • 这 command 应 node
  • 在……里面 args,提供mcp-dbs安装中cli.js文件的绝对路径
  • 为您的数据库类型配置适当的环境变量(请参阅下面的环境变量部分)
  • 您可以为任何受支持的数据库(SQLite、PostgreSQL、SQL Server或MongoDB)使用环境变量

与克劳德一起使用

配置后,Claude将能够使用下面描述的MCP工具访问您的数据库。你可以要求克劳德:

  • 连接到您的数据库
  • 执行查询并获取结果
  • 探索您的数据库架构
  • 使用表格和数据

工具

  • 连接数据库:连接到数据库
  • 断开数据库连接:断开与数据库的连接
  • 执行查询:执行查询并返回结果
  • 执行更新:执行查询而不返回结果

资源

  • 数据库模式:获取完整的数据库架构
  • 表模式:获取特定表的架构
  • 表格列表:获取所有表的列表

使用环境变量进行配置

您可以使用环境变量配置数据库连接:

数据库

# Set these environment variables before connecting
export MCP_SQLITE_FILENAME="path/to/database.db"
export MCP_SQLITE_CREATE_IF_NOT_EXISTS="true"

PostgreSQL

# Set these environment variables before connecting
export MCP_POSTGRES_HOST="your-postgres-host"
export MCP_POSTGRES_PORT="5432"
export MCP_POSTGRES_DATABASE="your-database-name"
export MCP_POSTGRES_USER="your-username"
export MCP_POSTGRES_PASSWORD="your-password"
export MCP_POSTGRES_SSL="false"

SQL Server

# Set these environment variables before connecting
export MCP_MSSQL_SERVER="your-server-address"
export MCP_MSSQL_PORT="1433"
export MCP_MSSQL_DATABASE="your-database-name"
export MCP_MSSQL_USER="your-username"
export MCP_MSSQL_PASSWORD="your-password"
export MCP_MSSQL_ENCRYPT="true"
export MCP_MSSQL_TRUST_SERVER_CERTIFICATE="true"

MongoDB

# Set these environment variables before connecting
export MCP_MONGODB_URI="mongodb://localhost:27017"
export MCP_MONGODB_DATABASE="your-database-name"
export MCP_MONGODB_MAX_POOL_SIZE="10"
export MCP_MONGODB_USE_UNIFIED_TOPOLOGY="true"

这些环境变量将优先于传递给连接数据库工具的任何配置。

MCP工具

服务器公开了以下MCP工具:

连接数据库

连接到数据库。

参数:

  • connectionId:连接的唯一标识符
  • type:数据库类型(sqlite, postgres, mssql,或 mongodb)

SQLite示例:

{
  "connectionId": "my-sqlite-db",
  "type": "sqlite"
}

PostgreSQL示例:

{
  "connectionId": "my-postgres-db",
  "type": "postgres"
}

SQL Server示例:

{
  "connectionId": "my-mssql-db",
  "type": "mssql"
}

MongoDB示例:

{
  "connectionId": "my-mongodb-db",
  "type": "mongodb"
}

断开数据库连接

断开与数据库的连接。

参数:

  • connectionId:要断开的连接ID

执行查询

执行一个返回结果的查询。

参数:

  • connectionId:连接ID
  • query:SQL查询或MongoDB聚合管道(JSON字符串)
  • params:(可选)查询的参数数组。对于MongoDB,第一个参数是集合名称。

SQL示例:

{
  "connectionId": "my-postgres-db",
  "query": "SELECT * FROM users WHERE age > $1",
  "params": [21]
}

MongoDB示例:

{
  "connectionId": "my-mongodb-db",
  "query": "[{\"$match\": {\"age\": {\"$gt\": 21}}}, {\"$sort\": {\"name\": 1}}]",
  "params": ["users"]
}

MongoDB示例(带有嵌入式集合的新格式):

{
  "connectionId": "my-mongodb-db",
  "query": "{\"collection\": \"users\", \"pipeline\": [{\"$match\": {\"age\": {\"$gt\": 21}}}, {\"$sort\": {\"name\": 1}}]}"
}

MongoDB示例(shell语法):

{
  "connectionId": "my-mongodb-db",
  "query": "db.getCollection('users').find({\"age\": {\"$gt\": 21}})"
}

MongoDB示例(直接集合引用shell语法):

{
  "connectionId": "my-mongodb-db",
  "query": "db.users.find({\"age\": {\"$gt\": 21}})"
}

MongoDB示例(原始命令):

{
  "connectionId": "my-mongodb-db", 
  "query": "{\"find\": \"users\", \"filter\": {\"age\": {\"$gt\": 21}}}"
}

执行更新

执行不返回结果的查询(INSERT、UPDATE、DELETE)。

参数:

  • connectionId:连接ID
  • query:SQL查询或MongoDB命令(JSON字符串)
  • params:(可选)查询的参数数组。对于MongoDB,第一个参数是集合名称。

SQL示例:

{
  "connectionId": "my-postgres-db",
  "query": "INSERT INTO users (name, age) VALUES ($1, $2)",
  "params": ["John Doe", 30]
}

MongoDB示例:

{
  "connectionId": "my-mongodb-db",
  "query": "{\"insertOne\": {\"name\": \"John Doe\", \"age\": 30}}",
  "params": ["users"]
}

MongoDB示例(带有嵌入式集合的新格式):

{
  "connectionId": "my-mongodb-db",
  "query": "{\"collection\": \"users\", \"operation\": {\"insertOne\": {\"name\": \"John Doe\", \"age\": 30}}}"
}

MongoDB示例(shell语法):

{
  "connectionId": "my-mongodb-db",
  "query": "db.getCollection('users').insertOne({\"name\": \"John Doe\", \"age\": 30})"
}

MongoDB示例(直接集合引用shell语法):

{
  "connectionId": "my-mongodb-db",
  "query": "db.users.insertOne({\"name\": \"John Doe\", \"age\": 30})"
}

MongoDB示例(原始命令):

{
  "connectionId": "my-mongodb-db",
  "query": "{\"insert\": \"users\", \"documents\": [{\"name\": \"John Doe\", \"age\": 30}]}"
}

MCP资源

服务器公开以下MCP资源:

数据库模式

URI: database://{connectionId}/schema

返回有关数据库的架构信息,包括所有表及其列。

表模式

URI: database://{connectionId}/tables/{tableName}

返回特定表的架构信息,包括其列。

表格列表

URI: database://{connectionId}/tables

返回数据库中所有表的列表。

发展

测试

运行测试:

npm test

支持项目

如果你觉得这个项目有帮助,可以考虑给我买杯咖啡!

扫描上面的二维码或 点击此处 支持该项目的发展。

许可证

麻省理工学院