使用说明
db-mcp
轻量级 模型上下文协议(MCP) 用Rust编写的服务器,用于连接 MySQL 和 PostgreSQL 在编辑器内将数据库转换为LLM,例如 VS代码 和 泽德.
目录
概述
db-mcp 实现 模型上下文协议 超过 标准 (以换行符分隔的JSON-RPC 2.0)。当在编辑器中注册为MCP服务器时,它会公开一组AI助手可以调用的数据库工具:
- 同时连接/断开与一个或多个数据库的连接
- 持久保存连接凭据并按名称重新连接
- 检查模式和表定义
- 执行任意SQL查询并将结果作为结构化JSON返回
特性
- 多数据库支持 --MySQL、MariaDB和PostgreSQL通过
sqlx - 多个同时连接 --一次打开多个数据库,并按名称在它们之间切换
- 持久连接 --使用保存凭据
configure_server,只需一个名字即可立即重新连接 - 符合MCP标准 --与任何使用模型上下文协议的编辑器或代理一起工作
- 模式自省 --列出数据库、列表表、描述单个表或一次转储整个架构
- 安全凭证编辑 --密码在所有日志输出和连接信息响应中都被屏蔽
- 异步&轻量级 --建在东京;没有运行时依赖关系的单个二进制文件
- 静态musl二进制可用 --复制到任何Linux机器或Docker容器,无需安装任何东西即可运行
先决条件
| 工具 | 版本 |
|---|---|
| 锈蚀 | 1.75或更高 |
| 货物 | 生锈的船只 |
| 正在运行的MySQL/MariaDB 或 PostgreSQL实例 | 任何最新版本 |
安装
来自源代码(glibc--默认)
git clone https://github.com/your-org/db-mcp.git
cd db-mcp
cargo build --release
# Binary is at ./target/release/db-mcp
源代码(完全静态musl二进制文件——建议分发)
# Add the musl target once
rustup target add x86_64-unknown-linux-musl
# Install the musl linker (Debian / Ubuntu)
sudo apt-get install -y musl-tools
# Build
cargo build --release --target x86_64-unknown-linux-musl
# Binary is at ./target/x86_64-unknown-linux-musl/release/db-mcp
# Verify it is fully static
ldd ./target/x86_64-unknown-linux-musl/release/db-mcp
# → statically linked
musl二进制文件具有 零运行时依赖关系 --没有glibc,没有OpenSSL,没有系统库。将其复制到任何x86-64 Linux机器或Docker容器中,并直接运行。
安装到PATH
cargo install --path .
配置
注册 db-mcp 作为编辑器中的MCP服务器,以便在编辑器启动时自动启动。
VS代码
将以下内容添加到您的 settings.json (或前往工作区 .vscode/settings.json):
{
"mcp.servers": {
"db-mcp": {
"command": "/absolute/path/to/db-mcp",
"args": [],
"transport": "stdio"
}
}
}
泽德
将以下内容添加到您的 ~/.config/zed/settings.json:
{
"context_servers": {
"db-mcp": {
"command": {
"path": "/absolute/path/to/db-mcp",
"args": []
}
}
}
}
Qwen CLI
Qwen CLI从以下位置读取MCP服务器配置 ~/.qwen/settings.json.添加以下块:
{
"mcpServers": {
"db-mcp": {
"command": "/absolute/path/to/db-mcp",
"args": [],
"transport": "stdio"
}
}
}
如果文件还不存在,请创建它:
mkdir -p ~/.qwen
touch ~/.qwen/settings.json
然后将上面的JSON粘贴到文件中。在下一个 qwen 调用 db-mcp 工具将自动可用。
提示: 您可以通过运行以下命令来验证服务器是否已加载
qwen mcp list—db-mcp应该出现在输出中。
Gemini CLI
Gemini CLI从以下位置读取MCP服务器配置 ~/.gemini/settings.json.添加以下块:
{
"mcpServers": {
"db-mcp": {
"command": "/absolute/path/to/db-mcp",
"args": [],
"transport": "stdio"
}
}
}
如果文件还不存在,请创建它:
mkdir -p ~/.gemini
touch ~/.gemini/settings.json
然后将上面的JSON粘贴到文件中。Gemini CLI将启动 db-mcp 自动作为子进程,并通过stdio与之通信。
提示: 您可以通过运行以下命令来验证服务器是否已加载
gemini mcp list—db-mcp应该出现在输出中。
可用工具
注册后,以下工具将暴露给LLM:
| 工具 | 必需参数 | 描述 |
|---|---|---|
connect_database |
connection_string 或 saved_config_name |
打开连接。可选择用以下标签标记 connection_name. |
disconnect_database |
-- | 通过以下方式关闭连接 connection_name,或第一个活动的。 |
get_database_info |
-- | 返回连接的类型、主机和状态。 |
list_connections |
-- | 列出当前打开的所有连接名称。 |
list_databases |
-- | 列出连接用户可见的所有数据库/模式。 |
list_tables |
-- | 列出连接数据库中的所有表。 |
describe_table |
table_name |
返回列定义(名称、类型、可空性、默认值、键)。 |
get_full_schema |
-- | 转储整个架构--每个表及其所有列。 |
execute_query |
sql |
运行任何SQL。 SELECT/SHOW/EXPLAIN → JSON行; INSERT/UPDATE/DELETE → 行影响计数。 |
configure_server |
name, ip, port, username, password, dbtype |
保存 连接详细信息 ~/.db-mcp/config.json 以备将来使用。 |
所有在连接上操作的工具都接受可选
connection_name争论。 如果省略,则自动使用第一个打开的连接。
持久连接
db-mcp 可以将您的数据库凭据保存到配置文件中,这样您就不必再次键入它们。使用 configure_server 一次,然后在以后的任何会话中只使用一个名称重新连接。
保存连接
呼叫 configure_server 连接详细信息:
configure_server(
name = "pgdb",
ip = "127.0.0.1",
port = "5432",
username = "user",
password = "secret",
dbtype = "postgres",
database = "pgdb" ← optional; defaults to username if omitted
)
证书已写入 ~/.db-mcp/config.json 立即。该条目在重启后仍然有效-- db-mcp 每次启动时都会自动加载文件。
按名称重新连接
在以后的任何会话中,只使用保存的名称进行连接,不需要URL或凭据:
connect_database(saved_config_name = "pgdb")
# Give it a custom label for this session (optional)
connect_database(saved_config_name = "pgdb", connection_name = "production")
配置文件格式
文件是 换行符分隔的JSON (每行一个紧凑的JSON对象)。每行代表一个已保存的连接:
{"name":"pgdb","ip":"127.0.0.1","port":5432,"username":"root","password":"secret","dbtype":"postgres","database":"sasdb"}
{"name":"local-mysql","ip":"127.0.0.1","port":3306,"username":"dev","password":"devpass","dbtype":"mysql","database":"appdb"}
| 字段 | 类型 | 描述 |
|---|---|---|
name |
string | 用于重新连接的唯一标识符 |
ip |
string | 数据库服务器的主机名或IP地址 |
port |
number | 端口号(5432 对于PostgreSQL, 3306 MySQL) |
username |
string | 数据库用户名 |
password |
string | 数据库密码 |
dbtype |
字符串 | "postgres" 或 "mysql" |
database |
string | 目标数据库/架构。对于PostgreSQL,默认为 username 如果为空 |
PostgreSQL默认数据库: 如果
database如果为空,PostgreSQL将连接到数据库 随着 与用户名同名 (标准libpq行为)。始终指定database明确地避免意外。
配置文件位置
| 平台 | 路径 |
|---|---|
| Linux/macOS | ~/.db-mcp/config.json |
回退(否 $HOME) |
./db_config.json (当前工作目录) |
父目录 ~/.db-mcp/ 在第一次写入时自动创建。
手动编辑配置文件
您可以使用任何文本编辑器直接在文件中添加、编辑或删除条目。遵循的规则:
- 每行一个JSON对象 --不要使用漂亮的打印/多行JSON。
- 所有七个字段都应该存在;
database可能是空字符串"". - 重复
name值:文件中的最后一个在加载时获胜。 - 删除一行会永久删除已保存的连接。
示例--手动添加新条目:
echo '{"name":"staging","ip":"192.168.1.50","port":5432,"username":"app","password":"apppass","dbtype":"postgres","database":"stagingdb"}' \
>> ~/.db-mcp/config.json
使用示例
使用URL连接
connect_database(connection_string = "postgres://alice:secret@localhost:5432/mydb")
使用URL连接并为其添加标签
connect_database(
connection_string = "mysql://root:pass@127.0.0.1:3306/shop",
connection_name = "local-shop"
)
保存凭据以备后用
configure_server(
name = "pgdevdb",
ip = "localhost",
port = "5432",
username = "postgres",
password = "postgres",
dbtype = "postgres",
database = "myapp"
)
使用已保存的名称重新连接
connect_database(saved_config_name = "pgdevdb")
同时处理多个连接
connect_database(saved_config_name = "pgdevdb", connection_name = "dev")
connect_database(saved_config_name = "pgdb", connection_name = "prod")
list_connections()
# → { "connections": ["dev", "prod"] }
list_tables(connection_name = "dev")
execute_query(connection_name = "prod", sql = "SELECT COUNT(*) FROM orders")
列出所有表格
list_tables()
描述一张桌子
describe_table(table_name = "orders")
运行查询
execute_query(sql = "SELECT id, name, created_at FROM users WHERE active = true LIMIT 20")
断开特定连接
disconnect_database(connection_name = "prod")
项目结构
db-mcp/
├── Cargo.toml # Package manifest & dependencies
├── Cargo.lock
└── src/
├── main.rs # Entry point — JSON-RPC 2.0 stdio loop
├── db.rs # Multi-connection state, db operations, schema introspection
├── tools.rs # MCP tool definitions (list) and dispatch logic
├── protocol.rs # JSON-RPC & MCP protocol types and helpers
└── config.rs # Persistent connection config — load/save ~/.db-mcp/config.json
模块职责
main.rs--从stdin读取换行符分隔的JSON-RPC,分派给处理程序,将响应写入stdout。手柄initialize,ping,tools/list,以及tools/callMCP方法。db.rs--拥有ConfigVsDBstate一HashMap<name → SharedState>)以及DbState(池+数据库类型+每个连接的URL)。通过以下方式实现所有异步数据库操作sqlx::AnyPool因此,MySQL和PostgreSQL都使用相同的代码路径。tools.rs--声明返回给客户端的MCP工具清单,实现resolve_state_for_name按可选名称查找连接,并为每个连接路由tools/call请求正确db.rs功能。protocol.rs--轻量级JSON-RPC 2.0请求/响应结构和MCP助手构建器(tool_ok,tool_err,make_tool,str_prop).config.rs--负载~/.db-mcp/config.json启动时,暴露configure_server(坚持)和add_temporary_entry(仅限会话),并提供get_connection_url以从保存的条目重建连接URL。
从源头构建
# Debug build (faster compile, slower binary)
cargo build
# Release build (optimised)
cargo build --release
# Fully static musl build (runs on any x86-64 Linux, no dependencies)
cargo build --release --target x86_64-unknown-linux-musl
# Run directly
cargo run
# Run with verbose logging
RUST_LOG=db_mcp=debug cargo run
一次性musl设置
rustup target add x86_64-unknown-linux-musl # add Rust target
sudo apt-get install -y musl-tools # install musl-gcc linker
二进制位置
| 构建 | 路径 |
|---|---|
| 调试 | target/debug/db-mcp |
| 释放(glibc) | target/release/db-mcp |
| 释放(musl,静态) | target/x86_64-unknown-linux-musl/release/db-mcp |
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
RUST_LOG |
db_mcp=info |
日志级别筛选器。日志被写入 标准错误 所以它们永远不会污染MCP stdio信道。例子: RUST_LOG=db_mcp=debug |
连接字符串格式
# PostgreSQL
postgres://username:password@host:5432/database
# MySQL / MariaDB
mysql://username:password@host:3306/database
PostgreSQL默认数据库: 省略数据库段(
postgres://user:pass@host:5432/) 使PostgreSQL连接到数据库 与用户名同名. 始终明确包含数据库名称。
安全说明: 连接字符串包含凭据。避免将它们提交到版本 控制。使用
configure_server将它们存储在~/.db-mcp/config.json相反,或通过 通过编辑器的MCP服务器配置,在运行时执行这些操作。
依赖项
| 板条箱 | 用途 |
|---|---|
tokio |
异步运行时 |
serde / serde_json |
JSON序列化 |
sqlx |
异步数据库驱动程序(MySQL+PostgreSQL) |
anyhow |
人体工程学错误处理 |
tracing / tracing-subscriber |
结构化日志记录到stderr |