news 2026/9/10 10:32:07

配好 tools.yaml:MCP Toolbox 配置实战与避坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
配好 tools.yaml:MCP Toolbox 配置实战与避坑

配好 tools.yaml:MCP Toolbox 配置实战与避坑

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

凌晨排查一个 AI Agent 连不上数据库的问题:日志里反复刷 connection refused,Agent 那边只回"无法访问数据"。最后发现不是数据库挂了,而是 tools.yaml 里端口写死了本地 3306,环境变量名和部署环境对不上。MCP Toolbox 把数据源连接、工具能力和工具集组合全部收敛在这一个 YAML 文件里,改对它就是解决问题的唯一入口。

先把厨房想明白:数据源、工具、工具集各管什么

把 MCP Toolbox 想成一家餐厅的后厨,三类配置就各归其位了。sources 是备菜区:每种食材(数据源)洗好备好放在那儿,Toolbox 启动时为每个数据源建好一条独立的连接池;tools 是菜品:具体做什么动作,执行 SQL、查表结构、看锁,每道菜指定用哪个备菜区;toolsets 是套餐:把几道菜组成一个逻辑单元,让不同 Agent 按角色各取所需。

MCP Toolbox 是一个开源的数据库 MCP 服务器,支持 MySQL、Postgres 到 BigQuery 等二十多种数据源,全部通过 tools.yaml 这一个文件声明,格式是带---分隔符的多文档 YAML。

逐层拆解:每块只记三样东西

下面按 sources → tools → toolsets 的顺序拆。每一块我都按"最小可跑片段 → 参数速查 → 一句易错提醒"来讲,看完三段就能照抄改造。

sources:5 行 YAML 连上 MySQL

先给数据源起个名字,写 5 行让它连上 MySQL:

kind: source name: mysql-source type: mysql host: ${MYSQL_HOST:localhost} port: ${MYSQL_PORT:3306} database: ${MYSQL_DATABASE} user: ${MYSQL_USER} password: ${MYSQL_PASSWORD}

值里支持环境变量替换:${变量名:默认值},冒号后面给兜底值,冒号留空就是没有默认值。密码这类敏感信息永远走环境变量,别写死。

核心参数速查:

参数必填作用
kind固定写 source,声明这是一段数据源配置
name数据源唯一名,工具靠它引用这个源
type数据源类型,决定要哪些连接参数,如 mysql、postgres、cloud-sql-postgres
host / port / database / user / password视 type 定常规数据库的连接五件套;托管型数据源换成 project、region、instance
queryParams连接串附加查询参数
queryTimeout查询超时时间,如 30s

⚠️ 易错提醒:name是工具引用数据源的唯一句柄,type 里拼错一个字母,服务启动时就会直接报未知类型。

tools:让 AI 看懂你的工具描述

数据源连上了,接下来要告诉 Toolbox 拿它做什么。工具最小片段:

kind: tool name: execute_sql type: mysql-execute-sql source: mysql-source description: Use this tool to execute SQL.

type决定工具能力,命名规则是"数据源类型-能力",比如mysql-execute-sqlmysql-list-tablespostgres-sql。除了这些内置类型,还可以自己写一条带占位符的 SQL:

kind: tool name: get_query_plan type: mysql-sql source: mysql-source statement: | EXPLAIN FORMAT=JSON {{.sql_statement}} templateParameters: - name: sql_statement type: string description: 要分析执行计划的 SQL 语句 required: true

注意占位符是 Go 模板写法{{.参数名}},不是$1也不是?templateParameters里的参数会直接替换进 SQL 文本,比预编译参数更易注入,文档建议尽量给allowedValues收紧取值范围。

参数速查(工具级):

参数必填作用
name工具唯一名,toolset 和 SDK 都靠它引用
type内置能力名,或 *-sql 类用于自定义语句
source指向哪个数据源,必须是上面定义过的 name
statement视 type 定自定义 SQL 模板
description强烈建议直接喂给 LLM 的工具说明,写清用途、输入、边界

description 是 Agent 理解这个工具的唯一依据:写清什么时候该用、输入是什么、返回什么,模型才会选对工具;写得含糊,调用就会飘。required不写默认就是必填,想留空用required: false,千万别写default: null——YAML 里它等于没给默认值,参数依然是必填。

⚠️ 易错提醒:source填的是数据源的 name,不是 type;把mysql填进source是新手最常见的写法。

toolsets:把工具打包成职能套餐

工具集就是一张清单,零配置,把工具按职能装进篮子:

kind: toolset name: data_analyst_set tools: - execute_sql - list_tables - get_query_plan

速查:

参数必填作用
name工具集唯一名,给 Agent 或应用按名加载
tools成员工具名列表,按行罗列
description已废弃写上去会被丢弃并告警

客户端 SDK 可以load_toolset("data_analyst_set")按名加载,不传名字则默认加载全部工具。仓库文档现在建议迁移到kind: group(能挂描述、能和 prompts 组合),但 toolset 语法照常工作,老配置不用急着动。

⚠️ 易错提醒:tools 列表里每一项必须和上面 tools 的 name 一字不差,多一个空格都会导致启动时校验失败。

完整拼装:一份能跑的 MySQL tools.yaml

把三段拼起来,就是一个可以直接启动的完整配置:

kind: source name: mysql-source type: mysql host: ${MYSQL_HOST:localhost} port: ${MYSQL_PORT:3306} database: ${MYSQL_DATABASE} user: ${MYSQL_USER} password: ${MYSQL_PASSWORD} queryTimeout: 30s --- kind: tool name: execute_sql type: mysql-execute-sql source: mysql-source description: Use this tool to execute SQL. --- kind: tool name: list_tables type: mysql-list-tables source: mysql-source description: Lists detailed schema information as JSON for user-created tables. --- kind: toolset name: data_analyst_set tools: - execute_sql - list_tables

设好环境变量后执行toolbox serve。启动日志会依次打印数据源初始化完成、加载的工具数量;如果工具数和你定义的对不上,先怀疑---分隔符和缩进——YAML 用 tab 缩进会直接解析错。

故障速查:现象、根因、修复动作

现象常见根因修复动作
启动即报 connection refused 或连接挂起端口/环境变量名写错,或数据库不在白名单网段核对 host、port、queryParams,确认数据库监听正常且 Toolbox 所在网段可达
启动报 source not found工具里 source 填的不是已定义的 name全文搜索 source 字段,与 source 的 name 逐一比对
调用被拒:parameter ... is required参数默认必填,Agent 少传了确认真必填就补齐说明;想留空改required: falsedefault: null无效

收尾

一份 tools.yaml 只说三件事:连哪里(sources)、能做什么(tools)、按职能怎么分(toolsets),把这三件事写对,配置基本就稳了。仓库 internal/prebuiltconfigs/tools/ 里有 40 个预置 YAML 示例,从 MySQL 到 BigQuery 可以直接抄改造;遇到某个数据源参数拿不准,欢迎提 issue 交流。

【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 10:32:03

Koodo Reader:免费跨平台电子书阅读器与书库同步完全指南

Koodo Reader:免费跨平台电子书阅读器与书库同步完全指南 【免费下载链接】koodo-reader A modern ebook manager and reader with sync and backup capacities for Windows, macOS, Linux, Android, iOS and Web 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/9/10 10:31:01

个人微信二次开发可以做自己的客服工具吗?从接口能力简单了解

完全可以,而且个人微信做客服有天然优势——客户本来就在微信里,不用跳转、不用装 App。一个客服工具拆开看是四个组件,每个组件对应的接口能力都很明确。 一、消息接入组件——客服对话能进来 入口靠 Webhook 回调:客户消息实时…

作者头像 李华
网站建设 2026/9/10 10:30:35

如何用 zx within() 隔离配置变更的作用域?

如何用 zx within() 隔离配置变更的作用域? 【免费下载链接】zx A tool for writing better scripts 项目地址: https://gitcode.com/GitHub_Trending/zx/zx 用 zx 写脚本时,$ 对象保存着 zx 的全部默认配置($.cwd、$.env、$.prefix、…

作者头像 李华
网站建设 2026/9/10 10:29:45

莱维飞行与随机游动增强的灰狼优化算法

简介:本资源是面向算法研究者与Matlab初学者的灰狼优化算法进阶实践包,聚焦于提升GWO在复杂优化问题中的全局搜索能力与收敛稳定性。通过融合莱维飞行(增强长距离探索)和随机游动(补充局部扰动)两大策略&am…

作者头像 李华
网站建设 2026/9/10 10:26:00

MySQL与Redis核心对比:缓存穿透、击穿、雪崩实战指南

1. 先想清楚一个核心问题:项目里已经有了 MySQL,为什么还要用 Redis我接触过不少团队,尤其是刚起步的小项目,经常会有这样的争论:我们的数据量也不算大,MySQL 完全扛得住,为什么要引入 Redis 这…

作者头像 李华