db-mcp

db-mcp

A secure MCP server for connecting AI assistants to MySQL, Redis, and MongoDB with preconfigured connections, runtime protections, and graded security modes.

Category
访问服务器

README

<div align="center">db-mcp</div>

<div align="center"> <strong>中文</strong> | <a href="./README.en.md">English</a> </div>

<br />

<div align="center"> <strong>让 AI 安全地连上你的 MySQL、Redis、MongoDB</strong> </div>

<div align="center"> 一个面向 <code>Model Context Protocol</code> 的数据库 MCP Server,支持预配置连接、运行时保护、连接状态观测和分级安全模式。 </div>

<br />

<div align="center"> <img src="https://img.shields.io/github/license/wannanbigpig/db-mcp?style=for-the-badge" alt="license" /> <img src="https://img.shields.io/github/actions/workflow/status/wannanbigpig/db-mcp/node.js.yml?branch=main&style=for-the-badge" alt="build" /> <img src="https://img.shields.io/github/stars/wannanbigpig/db-mcp?style=for-the-badge" alt="stars" /> <img src="https://img.shields.io/github/last-commit/wannanbigpig/db-mcp?style=for-the-badge" alt="last commit" /> </div>

<br />

为什么做这个项目

大模型很擅长“查数据、做归纳、解释结果”,但直接把数据库完全暴露给模型,通常会遇到几个问题:

  • 凭证不想反复传给模型
  • 查询结果可能过大,把上下文和服务一起拖垮
  • 写操作需要分级控制,不能一把梭哈
  • 连接掉了、池满了、请求排队了,调用方却看不出来

db-mcp 的目标很明确:把数据库接入 AI 的过程做成一个更稳、更可控、也更适合放到真实工作流里的 MCP 服务。

核心特性

能力 说明
多数据库支持 同时支持 MySQLRedisMongoDB
默认更安全 默认 read_only,避免模型误写库
运行时保护 超时、响应裁剪、并发限制、Mongo 查询 limit、MySQL SQL_SELECT_LIMIT
连接感知 支持预配置连接、手动连接、实时连接健康检查
运维可观测 可直接查看连接状态、并发排队、连接池摘要
可接入 MCP 客户端 标准 MCP Server,可接入 Cursor、Claude Desktop 等客户端

示例预览

<table> <tr> <td width="50%"> <img src="screenshots/example.png" alt="db-mcp 示例图 1" width="100%" /> </td> <td width="50%"> <img src="screenshots/example_2.png" alt="db-mcp 示例图 2" width="100%" /> </td> </tr> </table>

快速开始

1. 安装

git clone git@github_pig:wannanbigpig/db-mcp.git
cd db-mcp
npm install
npm run build

要求:

  • Node.js >= 18
  • npm >= 9

2. 运行

npm run dev

或:

node dist/index.js

如果终端输出 db-mcp 服务器已启动,说明服务已正常启动。

3. 可选配置

cp config.json.example config.json

编辑 config.json,填入你的数据库连接信息。推荐优先使用预配置连接,而不是把数据库密码作为工具参数传给模型。

MCP 客户端配置

db-mcp 是标准 MCP 服务,可接入支持 MCP 的客户端,例如:

  • Codex
  • Cursor
  • Claude Desktop
  • 其他兼容 MCP 的工具

Codex

~/.codex/config.toml 中加入:

[mcp_servers.db-mcp]
command = "node"
args = ["/path/to/db-mcp/dist/index.js"]
enabled = true

[mcp_servers.db-mcp.env]
DB_MCP_SECURITY_MODE = "read_only"
DB_MCP_CONFIG_PATH = "/path/to/config.json"
DB_MCP_MAX_RESPONSE_BYTES = "65536"
DB_MCP_MYSQL_SELECT_LIMIT = "500"

也可以直接使用命令添加:

codex mcp add db-mcp \
  --env DB_MCP_SECURITY_MODE=read_only \
  --env DB_MCP_CONFIG_PATH=/path/to/config.json \
  --env DB_MCP_MAX_RESPONSE_BYTES=65536 \
  --env DB_MCP_MYSQL_SELECT_LIMIT=500 \
  -- node /path/to/db-mcp/dist/index.js

Cursor

{
  "mcpServers": {
    "db-mcp": {
      "command": "node",
      "args": ["/path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_MCP_SECURITY_MODE": "read_only",
        "DB_MCP_CONFIG_PATH": "/path/to/config.json"
      }
    }
  }
}

Claude Desktop

{
  "mcpServers": {
    "db-mcp": {
      "command": "node",
      "args": ["/path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_MCP_SECURITY_MODE": "read_only"
      }
    }
  }
}

/path/to/db-mcp/dist/index.js/path/to/config.json 替换成你的真实路径即可。

设计理念

预配置连接优先

服务启动时可从 config.json 或环境变量自动建立数据库连接。这样调用 MCP 的 AI 不需要接触数据库密码。

支持的典型环境变量:

  • MYSQL_HOST
  • MYSQL_USER
  • MYSQL_PASSWORD
  • REDIS_HOST
  • REDIS_URL
  • MONGODB_URL

运行时保护不是装饰

以下参数用于防止 MCP 服务被慢查询、大结果集或突发并发打爆:

  • DB_MCP_OPERATION_TIMEOUT_MS
  • DB_MCP_MAX_RESULT_ITEMS
  • DB_MCP_MAX_RESPONSE_BYTES
  • DB_MCP_DEFAULT_MONGO_LIMIT
  • DB_MCP_MAX_MONGO_LIMIT
  • DB_MCP_MYSQL_SELECT_LIMIT
  • DB_MCP_MAX_CONCURRENT_MYSQL
  • DB_MCP_MAX_CONCURRENT_REDIS
  • DB_MCP_MAX_CONCURRENT_MONGO

连接状态可观测

你可以通过工具直接查看:

  • 当前数据库是否配置过
  • 当前连接是否仍然可用
  • MySQL 连接池摘要
  • 各类工具的并发执行和排队情况

安全模式

通过环境变量 DB_MCP_SECURITY_MODE 或工具 set_security_mode 进行设置。

模式 定位 适用场景
read_only 默认只读 生产排查、只读分析
restricted 允许部分写操作 开发调试、日常维护
full_access 完全开放 本地开发、受控测试环境

read_only

  • MySQL:允许 SELECTSHOWDESCRIBEDESCEXPLAIN
  • Redis:允许 redis_getredis_typeredis_memory_usageredis_top_memory_keysredis_memory_usage_by_prefixesredis_auto_prefix_memory_usageredis_hgetredis_hgetallredis_keys
  • MongoDB:允许 mongodb_findmongodb_find_onemongodb_countmongodb_list_collections

禁止任何数据修改和结构变更。

restricted

  • MySQL:允许常见 SELECTINSERTUPDATE
  • MySQL:禁止 DROPTRUNCATEALTER TABLE
  • MySQL:DELETE 必须带 WHERE,结构化工具 mysql_delete 仍会被禁止
  • Redis:允许 redis_set,禁止 redis_del
  • MongoDB:允许插入和更新,禁止删除

full_access

  • MySQL:允许查询、写入和结构变更
  • Redis:允许所有已提供工具
  • MongoDB:允许所有已提供工具

建议:

  • 默认使用 read_only
  • 只在确实需要写数据时切到 restricted
  • 只有明确知道要执行高风险操作时,才使用 full_access

数据库配置

config.json 示例

{
  "databases": {
    "mysql": {
      "host": "localhost",
      "port": 3306,
      "user": "root",
      "password": "your_password",
      "database": "mydb",
      "pool": {
        "min": 2,
        "max": 10,
        "idleTimeout": 60000
      }
    },
    "redis": {
      "host": "localhost",
      "port": 6379,
      "password": "your_password",
      "db": 0
    },
    "mongodb": {
      "url": "mongodb://localhost:27017",
      "database": "mydb"
    }
  },
  "security": {
    "mode": "read_only"
  }
}

动态连接

除了预配置连接,也支持使用 *_connect 工具在运行时手动连接,使用 *_disconnect 断开。

如果你担心凭证暴露给模型,优先使用预配置连接。

工具一览

MySQL

  • mysql_connect: 手动连接 MySQL;仅在未预配置连接或需要覆盖默认连接时使用
  • mysql_query: 执行 SQL;已预配置连接时可直接使用
  • mysql_insert
  • mysql_update
  • mysql_delete
  • mysql_disconnect
  • mysql_pool_status
  • mysql_connection_status

Redis

  • redis_connect
  • redis_get
  • redis_type
  • redis_memory_usage
  • redis_top_memory_keys
  • redis_memory_usage_by_prefixes
  • redis_auto_prefix_memory_usage
  • redis_set
  • redis_keys
  • redis_del
  • redis_hget
  • redis_hgetall
  • redis_disconnect

MongoDB

  • mongodb_connect
  • mongodb_find
  • mongodb_find_one
  • mongodb_insert_one
  • mongodb_insert_many
  • mongodb_update_one
  • mongodb_delete_one
  • mongodb_count
  • mongodb_list_collections
  • mongodb_disconnect

运行时 / 安全

  • set_security_mode
  • get_security_mode
  • server_runtime_status

工具调用示例

以下示例展示各个工具常见的调用参数格式。

MySQL 查询

{ "sql": "SELECT * FROM users WHERE id = ?", "params": [1] }

MySQL 插入

{ "table": "users", "data": { "name": "John", "email": "john@example.com" } }

Redis 写入

{ "key": "user:1", "value": "John Doe", "ttl": 3600 }

Redis 键扫描

{ "pattern": "user:*", "count": 100, "limit": 200 }

MongoDB 查询

{ "collection": "users", "filter": { "age": { "$gte": 18 } }, "limit": 10 }

运行状态

{}

可观测性

server_runtime_status 可用于快速排查:

  • 为什么请求超时
  • 为什么结果被裁剪
  • 为什么查询在排队
  • 为什么 MySQL 连接池被打满
  • 当前服务的保护阈值是多少
  • 当前数据库连接是否真的还活着

开发

npm install
npm run build
npm run dev
npm run watch
npm test

常见问题

<details> <summary><strong>为什么建议优先使用预配置连接?</strong></summary> <br /> 因为这样数据库凭证不需要通过 MCP 工具参数传给模型,风险更低,也更适合长期运行。 </details>

<details> <summary><strong>这个项目适合直接连生产库吗?</strong></summary> <br /> 可以,但建议使用 <code>read_only</code>,并配置合理的超时、结果裁剪和并发限制。 </details>

<details> <summary><strong>为什么还要做运行时保护?</strong></summary> <br /> 因为模型天然会倾向“多查一点再总结”,没有保护的话,很容易拉出过大的结果集或积压并发请求。 </details>

💝 赞助项目

感谢你使用 db-mcp

如果这个项目对你有帮助,欢迎赞助项目的持续开发和维护。

<a href="./docs/SPONSOR.md"> <img src="https://img.shields.io/badge/BUY_ME_A_COFFEE-%E6%94%AF%E6%8C%81%E4%BD%9C%E8%80%85-f08a24?style=for-the-badge&logo=buymeacoffee&logoColor=ffdd00&labelColor=4a4a4a" alt="支持作者" /> </a>

许可证

MIT

参与贡献

欢迎提交 Issue 和 Pull Request。

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选