这两天试了谷歌新开的 MCP Toolbox for Databases,它用不到 10 行代码就能让 AI 助手(比如 LangChain 智能体)安全地操作数据库。作为一个常年和数据库连接池、凭证泄露搏斗的开发者,这东西确实解决了我的痛点——把数据库访问抽象成“工具”,通过集中管控的 MCP Server 隔离风险,还自带性能优化。下面分享实测体验和避坑指南。
传统 AI 代理直接连库有两大问题:
安全漏洞:LLM 可能生成危险 SQL 或泄露凭证;
性能瓶颈:频繁创建连接导致数据库资源耗尽。
MCP 的解法很聪明:在 AI 和数据库之间加一层“协议网关”。所有查询通过预定义的“工具”(如 search_hotels
)执行,AI 只接触工具接口,不碰真实库连接。
我优先选了 Docker 部署,二进制和源码编译见 GitHub:
# 新建配置目录
mkdir -p toolbox/config
cd toolbox
# 创建docker-compose.yml
cat > docker-compose.yml <<EOF
version: '3.9'
services:
toolbox:
image: us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
ports:
- "5000:5000"
volumes:
- ./config:/config # 挂载本地配置目录
command: ["toolbox", "--tools-file", "/config/tools.yaml"]
EOF
# 配置数据库连接(以PostgreSQL为例)
cat > config/tools.yaml <<EOF
sources:
my-db: # 数据源名称
kind: postgres
host: 10.0.0.5 # 数据库IP
database: orders
user: agent-user
password: ${DB_PASSWORD} # 建议用环境变量注入
tools:
get_orders: # 工具名称
kind: postgres-sql
source: my-db
description: "按用户ID查订单"
statement: "SELECT * FROM orders WHERE user_id = $1;"
EOF
# 启动服务
docker-compose up -d
关键说明:
数据库密码通过环境变量 DB_PASSWORD
传递,避免硬编码;
tools.yaml
中的 $1
代表参数占位符,实际调用时由 AI 传入用户 ID。
from toolbox_core import ToolboxClient
from langchain.agents import AgentExecutor, create_tool_calling_agent
async def load_tools():
async with ToolboxClient("http://localhost:5000") as client: # 连本地MCP Server
tools = await client.load_toolset() # 加载所有工具
return tools
# 初始化LangChain智能体
agent_tools = await load_tools()
agent = create_tool_calling_agent(llm, agent_tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=agent_tools)
实测效果:
调用 get_orders
时,LangChain 自动提取用户提问中的 ID 参数(如“查用户 12345 的订单”),无需手动解析;
MCP Server 会复用连接池,50 个并发请求时数据库连接数稳定在 5 个。
动态重载配置:修改 tools.yaml
后,执行 docker-compose restart
即可生效,无需重部署 AI应用;
权限隔离:为 AI 创建专用数据库账号,仅授权 SELECT
操作(关键!),从根源避免删库风险。
网络配置:若数据库与 MCP Server 不在同一 Docker 网络,需在 tools.yaml
中用宿主机 IP 而非容器名;
复杂查询优化:多表关联查询建议在 tools.yaml
中预写 SQL,LLM 生成的 JOIN 语句可能有性能问题。
MCP Toolbox不是革命性创新,但精准解决了 AI 访问数据库的工程化痛点**:
安全:通过协议隔离,凭证和查询可控;
性能:内置连接池,避免资源泄漏;
低代码:YAML 配置+简单 SDK,省去胶水代码。
目前对 PostgreSQL/MySQL 支持最成熟,Cloud SQL 和 BigQuery 需参考官方示例。如果你是 LangChain/LlamaIndex 用户,值得花半小时试试——至少能告别手写 SQL 注入防护逻辑了。
往期回顾:
【开源项目】拆解机器学习全流程:一份GitHub手册的工程实践指南
【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
【开源项目】比 PyInstaller 更方便:图形界面打包 Python 脚本的体验