Multi Database MCP Server

Multi Database MCP Server

多数据库 MCP 服务器是数据库模型上下文协议的高性能实现,旨在彻底改变 AI 代理与数据库交互的方式。目前支持 MySQL 和 PostgreSQL 数据库。

Category
访问服务器

README

<div align="center">

<img src="assets/logo.svg" alt="DB MCP Server Logo" width="300" />

多数据库 MCP 服务器

License: MIT Go Report Card Go Reference Contributors

<h3>一个强大的多数据库服务器,实现了模型上下文协议 (MCP),为 AI 助手提供对数据库的结构化访问。</h3>

<div class="toc"> <a href="#what-is-db-mcp-server">概述</a> • <a href="#core-concepts">核心概念</a> • <a href="#features">特性</a> • <a href="#quick-start">快速开始</a> • <a href="#running-the-server">运行</a> • <a href="#configuration">配置</a> • <a href="#available-tools">工具</a> • <a href="#examples">示例</a> • <a href="#troubleshooting">故障排除</a> • <a href="#contributing">贡献</a> </div>

</div>

什么是 DB MCP 服务器?

DB MCP 服务器为 AI 模型提供了一种标准化的方式来同时与多个数据库交互。它基于 FreePeak/cortex 框架构建,使 AI 助手能够通过统一的界面执行 SQL 查询、管理事务、浏览模式以及分析不同数据库系统上的性能。

核心概念

多数据库支持

与传统的数据库连接器不同,DB MCP 服务器可以并发连接和交互多个数据库:

{
  "connections": [
    {
      "id": "mysql1",
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "name": "db1",
      "user": "user1",
      "password": "password1"
    },
    {
      "id": "postgres1",
      "type": "postgres",
      "host": "localhost",
      "port": 5432,
      "name": "db2",
      "user": "user2",
      "password": "password2"
    }
  ]
}

动态工具生成

对于每个连接的数据库,服务器会自动生成一组专用工具:

// 对于 ID 为 "mysql1" 的数据库,将生成以下工具:
query_mysql1       // 执行 SQL 查询
execute_mysql1     // 运行数据修改语句
transaction_mysql1 // 管理事务
schema_mysql1      // 浏览数据库模式
performance_mysql1 // 分析查询性能

清晰的架构

服务器遵循具有以下层次结构的清晰架构原则:

  1. 领域层: 核心业务实体和接口
  2. 存储库层: 数据访问实现
  3. 用例层: 应用程序业务逻辑
  4. 交付层: 外部接口 (MCP 工具)

特性

  • 同时支持多数据库: 并发连接和交互多个 MySQL 和 PostgreSQL 数据库
  • 数据库特定工具生成: 为每个连接的数据库自动创建专用工具
  • 清晰的架构: 模块化设计,具有清晰的关注点分离
  • OpenAI Agents SDK 兼容性: 完全兼容 OpenAI Agents SDK,可与 AI 助手无缝集成
  • 动态数据库工具:
    • 使用参数执行 SQL 查询
    • 运行具有适当错误处理的数据修改语句
    • 跨会话管理数据库事务
    • 浏览数据库模式和关系
    • 分析查询性能并接收优化建议
  • 统一界面: 跨不同数据库类型的一致交互模式
  • 连接管理: 多个数据库连接的简单配置

当前支持的数据库

数据库 状态 特性
MySQL ✅ 完全支持 查询、事务、模式分析、性能洞察
PostgreSQL ✅ 完全支持 (v9.6-17) 查询、事务、模式分析、性能洞察

快速开始

使用 Docker

最快的入门方式是使用 Docker:

# 拉取最新镜像
docker pull freepeak/db-mcp-server:latest

# 选项 1:使用环境变量运行(推荐)
docker run -p 9092:9092 \
  -v $(pwd)/config.json:/app/my-config.json \
  -e TRANSPORT_MODE=sse \
  -e CONFIG_PATH=/app/my-config.json \
  freepeak/db-mcp-server

# 选项 2:覆盖入口点
docker run -p 9092:9092 \
  -v $(pwd)/config.json:/app/my-config.json \
  --entrypoint /app/server \
  freepeak/db-mcp-server \
  -t sse -c /app/my-config.json

# 选项 3:使用 shell 执行命令
docker run -p 9092:9092 \
  -v $(pwd)/config.json:/app/my-config.json \
  freepeak/db-mcp-server \
  /bin/sh -c "/app/server -t sse -c /app/my-config.json"

注意: 我们挂载到 /app/my-config.json 是因为容器中已经存在 /app/config.json 文件。 如果遇到平台不匹配警告,可以指定平台:--platform linux/amd64--platform linux/arm64

从源代码

# 克隆存储库
git clone https://github.com/FreePeak/db-mcp-server.git
cd db-mcp-server

# 构建服务器
make build

# 在 SSE 模式下运行服务器
./server -t sse -c config.json

运行服务器

服务器支持多种传输模式以适应不同的用例:

STDIO 模式(用于 IDE 集成)

非常适合与 AI 编码助手集成:

# 在 STDIO 模式下运行服务器
./server -t stdio -c config.json

输出将作为 JSON-RPC 消息发送到 stdout,而日志将发送到 stderr。

对于 Cursor 集成,请将其添加到您的 .cursor/mcp.json

{
    "mcpServers": {
        "stdio-db-mcp-server": {
            "command": "/path/to/db-mcp-server/server",
            "args": [
                "-t", "stdio",
                "-c", "/path/to/config.json"
            ]
        }
    }
}

SSE 模式(服务器发送事件)

适用于基于 Web 的应用程序和服务:

# 使用默认主机 (localhost) 和端口 (9092) 运行
./server -t sse -c config.json

# 指定自定义主机和端口
./server -t sse -host 0.0.0.0 -port 8080 -c config.json

将您的客户端连接到 http://localhost:9092/sse 以获取事件流。

Docker Compose

适用于具有数据库容器的开发环境:

# docker-compose.yml
version: '3'
services:
  db-mcp-server:
    image: freepeak/db-mcp-server:latest
    ports:
      - "9092:9092"
    volumes:
      - ./config.json:/app/my-config.json
    environment:
      - TRANSPORT_MODE=sse
      - CONFIG_PATH=/app/my-config.json
    # Alternative using entrypoint
    # entrypoint: ["/app/server"]
    # command: ["-t", "sse", "-c", "/app/my-config.json"]
    depends_on:
      - mysql
      - postgres
  
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
  
  postgres:
    image: postgres:17
    environment:
      POSTGRES_DB: testdb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"

配置

数据库配置

创建一个包含数据库连接的 config.json 文件:

{
  "connections": [
    {
      "id": "mysql1",
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "name": "db1",
      "user": "user1",
      "password": "password1"
    },
    {
      "id": "postgres1",
      "type": "postgres",
      "host": "localhost",
      "port": 5432,
      "name": "db2",
      "user": "user2",
      "password": "password2"
    }
  ]
}

命令行选项

服务器支持各种命令行选项:

# 基本选项
./server -t <transport> -c <config-file>

# 可用传输方式:stdio, sse
# 对于 SSE 传输,其他选项:
./server -t sse -host <hostname> -port <port> -c <config-file>

# 直接数据库配置:
./server -t stdio -db-config '{"connections":[...]}'

# 环境变量配置:
export DB_CONFIG='{"connections":[...]}'
./server -t stdio

可用工具

对于每个连接的数据库(例如,“mysql1”,“mysql2”),服务器都会创建:

工具命名约定

服务器自动生成名称遵循以下格式的工具:

<tool_type>_<database_id>

其中:

  • <tool_type>:以下之一:query、execute、transaction、schema、performance
  • <database_id>:数据库的 ID,如您的配置中所定义

数据库 ID 为 "mysql1" 的示例工具名称:

  • query_mysql1
  • execute_mysql1
  • transaction_mysql1
  • schema_mysql1
  • performance_mysql1

数据库特定工具

  • query_<dbid>:在指定的数据库上执行 SQL 查询

    {
      "query": "SELECT * FROM users WHERE age > ?",
      "params": [30]
    }
    
  • execute_<dbid>:执行 SQL 语句(INSERT、UPDATE、DELETE)

    {
      "statement": "INSERT INTO users (name, email) VALUES (?, ?)",
      "params": ["John Doe", "john@example.com"]
    }
    
  • transaction_<dbid>:管理数据库事务

    // 开始事务
    {
      "action": "begin",
      "readOnly": false
    }
    
    // 在事务中执行
    {
      "action": "execute",
      "transactionId": "<from begin response>",
      "statement": "UPDATE users SET active = ? WHERE id = ?",
      "params": [true, 42]
    }
    
    // 提交事务
    {
      "action": "commit",
      "transactionId": "<from begin response>"
    }
    
  • schema_<dbid>:获取数据库模式信息

    {
      "random_string": "dummy"
    }
    
  • performance_<dbid>:分析查询性能

    {
      "action": "analyzeQuery",
      "query": "SELECT * FROM users WHERE name LIKE ?"
    }
    

全局工具

  • list_databases:列出所有配置的数据库连接
    {}
    

示例

查询多个数据库

// 查询第一个数据库
{
  "name": "query_mysql1",
  "parameters": {
    "query": "SELECT * FROM users LIMIT 5"
  }
}

// 查询第二个数据库
{
  "name": "query_mysql2",
  "parameters": {
    "query": "SELECT * FROM products LIMIT 5"
  }
}

执行事务

// 开始事务
{
  "name": "transaction_mysql1",
  "parameters": {
    "action": "begin"
  }
}
// 响应包含 transactionId

// 在事务中执行
{
  "name": "transaction_mysql1",
  "parameters": {
    "action": "execute",
    "transactionId": "tx_12345",
    "statement": "INSERT INTO orders (user_id, product_id) VALUES (?, ?)",
    "params": [1, 2]
  }
}

// 提交事务
{
  "name": "transaction_mysql1",
  "parameters": {
    "action": "commit",
    "transactionId": "tx_12345"
  }
}

路线图

我们致力于扩展 DB MCP 服务器以支持各种数据库系统:

2025 年第三季度

  • MongoDB - 支持面向文档的数据库操作
  • SQLite - 轻量级嵌入式数据库集成
  • MariaDB - 与 MySQL 实现完全相同的功能

2025 年第四季度

  • Microsoft SQL Server - 具有 T-SQL 功能的企业数据库支持
  • Oracle Database - 企业级集成
  • Redis - 键值存储操作

2026 年

  • Cassandra - 分布式 NoSQL 数据库支持
  • Elasticsearch - 专门的搜索和分析功能
  • CockroachDB - 用于全球规模应用程序的分布式 SQL 数据库
  • DynamoDB - AWS 原生 NoSQL 数据库集成
  • Neo4j - 图数据库支持
  • ClickHouse - 分析数据库支持

故障排除

常见问题

  1. 连接错误: 验证 config.json 中的数据库连接设置
  2. 未找到工具: 确保服务器正在运行并检查工具名称前缀
  3. 查询失败: 检查您的 SQL 语法和数据库权限
  4. Docker 卷挂载错误: 如果您看到类似 mountpoint for /app/config.json: not a directory 的错误,这是因为容器中已经存在该路径的文件。 挂载到不同的路径(例如,/app/my-config.json)并相应地更新您的配置。
  5. Docker 命令错误: 如果您遇到与 Docker 相关的命令错误,请使用以下方法之一:
    • 使用环境变量:-e TRANSPORT_MODE=sse -e CONFIG_PATH=/app/my-config.json
    • 覆盖入口点:--entrypoint /app/server freepeak/db-mcp-server -t sse -c /app/my-config.json
    • 使用 shell 执行:freepeak/db-mcp-server /bin/sh -c "/app/server -t sse -c /app/my-config.json"

日志

服务器将日志写入:

  • STDIO 模式:stderr
  • SSE 模式:stdout 和 ./logs/db-mcp-server.log

使用 -debug 标志启用调试日志记录:

./server -t sse -debug -c config.json

贡献

欢迎贡献! 您可以通过以下方式提供帮助:

  1. Fork 存储库
  2. 创建 一个功能分支:git checkout -b new-feature
  3. 提交 您的更改:git commit -am 'Add new feature'
  4. 推送 到分支:git push origin new-feature
  5. 提交 一个拉取请求

请确保您的代码遵循我们的编码标准并包含适当的测试。

许可证

该项目已获得 MIT 许可证的许可 - 有关详细信息,请参阅 LICENSE 文件。

支持与联系方式

<p align=""> <a href="https://www.buymeacoffee.com/linhdmn"> <img src="https://img.buymeacoffee.com/button-api/?text=Support DB MCP Server&emoji=☕&slug=linhdmn&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" alt="Buy Me A Coffee"/> </a> </p>

Cursor 集成

工具命名约定

MCP 服务器注册的工具名称与 Cursor 期望的格式匹配。 工具名称遵循以下格式:

mcp_<servername>_<tooltype>_<dbID>

例如:mcp_mysql1_db_mcp_server_stdio_schema_mysql1_db

服务器默认使用名称 mysql1_db_mcp_server_stdio,该名称应与 mcp.json 文件中的 Cursor 配置匹配。

Cursor 配置

在您的 Cursor 配置 (~/.cursor/mcp.json) 中,您应该具有如下配置:

{
    "mcpServers": {
        "multidb": {
            "command": "/path/to/db-mcp-server/server",
            "args": [
                "-t",
                "stdio",
                "-c",
                "/path/to/database_config.json"
            ]
        }
    }
}

服务器将自动注册具有简单名称的工具,这些名称与您配置中的数据库标识符匹配。

在 Cursor 中使用 MCP 工具

一旦您的 DB MCP Server 正在运行并在 Cursor 中正确配置,您就可以在 AI 助手对话中使用 MCP 工具。 这些工具遵循以下命名模式:

mcp_<server_name>_<tool_type>_<database_id>

其中:

  • <server_name> 是在 .cursor/mcp.json 中定义的名称(例如,“multidb”)
  • <tool_type> 是以下之一:query、execute、transaction、schema、performance、list_databases
  • <database_id> 是您配置中的数据库 ID(list_databases 不需要)

示例:

对于名为 "multidb" 且数据库 ID 为 "mysql1" 的服务器:

  1. 列出所有数据库
mcp_multidb_list_databases
  1. 查询数据库
mcp_multidb_query_mysql1
Query: SELECT * FROM users LIMIT 10
  1. 查看数据库模式
mcp_multidb_schema_mysql1
  1. 执行语句
mcp_multidb_execute_mysql1
Statement: INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')
  1. 管理事务
mcp_multidb_transaction_mysql1
Action: begin

故障排除 Cursor 中的 MCP 工具

如果 AI 助手无法调用 MCP 工具:

  1. 确保服务器正在运行(使用 ps aux | grep server 检查)
  2. 验证您的 .cursor/mcp.json 配置是否正确
  3. 确保 .env 中的 server_name 与您的 MCP 工具调用中的名称匹配
  4. 在进行配置更改后重新启动 Cursor
  5. 检查 logs/ 目录中的日志以查找任何错误

OpenAI Agents SDK 集成

DB MCP Server 完全支持 OpenAI 的 Agents SDK,允许您创建可以直接与数据库交互的 AI 代理。

前提条件

  • 具有 API 访问权限的 OpenAI 帐户
  • 已安装 OpenAI Agents SDK:pip install openai-agents
  • 正在运行的 DB MCP Server 实例(SSE 模式)

基本集成示例

以下是如何将 DB MCP Server 与 OpenAI Agent 集成:

from openai import OpenAI
from agents.agent import Agent, ModelSettings
from agents.tools.mcp_server import MCPServerSse, MCPServerSseParams

# 连接到 MCP 服务器
db_server = MCPServerSse(
    params=MCPServerSseParams(
        url="http://localhost:9095/sse",  # 指向您正在运行的 DB MCP 服务器的 URL
        schema={
            "params": {
                "type": "array", 
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string"},
                        "description": {"type": "string"},
                        "parameters": {"type": "object"}
                    }
                }
            }
        }
    ),
)

# 创建具有数据库工具访问权限的代理
agent = Agent(
    name="Database Agent",
    model="gpt-4o",
    model_settings=ModelSettings(temperature=0.1),
    instructions="""
    您是一个数据库助手代理。 您可以执行 SQL 查询、
    管理数据库事务并浏览模式信息。
    """,
    mcp_servers=[db_server],
)

# 现在可以使用该代理通过 OpenAI API 与您的数据库进行交互

测试您的集成

该存储库包含一个测试脚本,用于验证与 OpenAI Agents SDK 的兼容性:

# 运行测试脚本
./test_tools/openai-agent-sdk-test/run_test.sh

该脚本将:

  1. 使用最新更改构建服务器
  2. 启动服务器(如果尚未运行)
  3. 测试与 OpenAI Agents SDK 的连接
  4. 报告集成是否正常工作

故障排除 Agents SDK 集成

如果您遇到问题:

  1. 确保服务器在预期端口上的 SSE 模式下运行
  2. 检查您的 OpenAI API 密钥是否设置为环境变量
  3. 验证您的代理的说明是否专门提到了数据库工具
  4. 检查服务器日志中是否有任何错误消息

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选