MCP Toolbox for Databases 预置配置指南:SingleStore 快速接入与工具详解
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
SingleStore 是面向数据密集型应用的云原生分布式 SQL 数据库,同时支持关系型与多模型工作负载。在 MCP Toolbox for Databases 中,singlestore预置配置(Prebuilt Configuration)让你无需手写任何 YAML,仅通过一条--prebuilt singlestore命令和 5 个环境变量即可把 SingleStore 实例暴露为 MCP 工具。读完本文,你将掌握预置配置的启用方式、全部环境变量与底层连接行为,并深入理解execute_sql与list_tables两个工具的调用链与实现原理。
预置配置概述:--prebuilt singlestore
MCP Toolbox for Databases 将常见的“数据源 + 工具 + 工具集”组合封装为预置配置,避免用户重复编写 YAML。singlestore预置配置正是其中之一,其完整定义位于仓库的 internal/prebuiltconfigs/tools/singlestore.yaml,包含三部分:
- 一个
kind: source的 SingleStore 数据源(类型为singlestore); - 两个
kind: tool的工具定义; - 一个名为
singlestore-database-tools的kind: toolset,将两个工具聚合为一个工具集。
预置配置的加载逻辑由 internal/prebuiltconfigs/prebuiltconfigs.go 实现:启动时通过embed.FS读取tools/目录下的全部 YAML 文件,并按 source 类型建立索引。当你指定--prebuilt singlestore时,配置加载器会返回对应的 YAML 内容并注册其中的 source、tool 与 toolset;若指定了不存在的预置配置,则会在报错信息中列出所有可用的预置 source 名称。
启用预置配置的方式如下:
go run . serve --prebuilt singlestore在运行前,你需要为以下 5 个环境变量赋值(它们会被 YAML 中的${VAR}占位符引用并替换)。
环境变量:5 个必填项决定连接目标
singlestore预置配置的所有连接参数都通过环境变量注入,不直接硬编码在配置文件中。下表来自官方预置配置文档(singlestore.md):
| 环境变量 | 说明 |
|---|---|
SINGLESTORE_HOST | SingleStore 服务器的主机名或 IP 地址 |
SINGLESTORE_PORT | SingleStore 服务器的端口号 |
SINGLESTORE_DATABASE | 要连接的数据库名称 |
SINGLESTORE_USER | 数据库用户名 |
SINGLESTORE_PASSWORD | 数据库用户对应的密码 |
启动前按如下方式导出:
export SINGLESTORE_HOST=127.0.0.1 export SINGLESTORE_PORT=3306 export SINGLESTORE_DATABASE=my_db export SINGLESTORE_USER=admin export SINGLESTORE_PASSWORD=your_password go run . serve --prebuilt singlestore从源码结构看,internal/sources/singlestore/singlestore.go 中的Config结构体将这 5 个字段(Host、Port、Database、User、Password)全部标记为validate:"required",即缺少任何一个都会导致 source 校验失败,服务无法正常启动。此外,预置 YAML 中还设置了queryTimeout: 30s,为查询执行提供默认超时保护。
工具一:execute_sql— 直接执行任意 SQL
execute_sql是预置配置提供的第一个工具,对应工具类型singlestore-execute-sql。它的作用正如其名:把用户传入的sql参数原样提交到 SingleStore 执行。
参数与配置
该工具仅接收一个字符串参数sql,无其他可选参数。在预置配置中它的定义如下:
kind: tool name: execute_sql type: singlestore-execute-sql source: singlestore-source description: Use this tool to execute SQL.底层调用链
从实现看,internal/tools/singlestore/singlestoreexecutesql/singlestoreexecutesql.go 中Tool.Invoke的流程非常直接:
- 校验当前 source 是否实现了
compatibleSource接口(要求提供SingleStorePool()与RunSQL()); - 从参数表取出
sql字符串,若类型断言失败会返回 Agent 错误; - 调用
source.RunSQL(ctx, sqlStr, nil)执行查询(无绑定参数); - 将结果按行组织为
map[string]any(键为列名)返回给上层。
值得注意的一点是,RunSQL在 singlestore.go 中的实现会利用mysqlcommon.ConvertToType依据列类型转换值,并特别处理NULL值。此外,官方工具文档(singlestore-execute-sql.md)明确提示:该工具面向“带人工确认的开发者助手工作流”,不应用于生产环境的无监督 Agent——因为它可以执行任意 SQL,包括写操作。
工具二:list_tables— 获取用户表的完整 Schema 信息
list_tables是预置配置的第二个工具,对应工具类型singlestore-sql(通用 SQL 模板工具)。它的价值在于:让 LLM 在写 SQL 之前,先拿到目标库中用户表的详细结构信息(对象类型、列、约束、索引、触发器、注释),从而生成更准确的查询语句。
输出内容
根据预置 YAML 中的描述(singlestore.yaml),该工具以 JSON 形式返回用户创建的表(普通表或分区表)的完整 Schema,每个对象包含:
schema_name、object_name、object_type(固定为TABLE)owner(从INFORMATION_SCHEMA.SCHEMA_PRIVILEGES推断的表属主,缺失时为N/A)comment(表注释)columns:列数组,每列含column_name、data_type、ordinal_position、is_not_nullable、column_default、column_commentindexes:索引数组,含index_name、is_unique、is_primary、index_columnsconstraints:约束数组,含constraint_name、constraint_type(主键/外键/唯一约束)、constraint_columns,外键还会带出foreign_key_referenced_table与foreign_key_referenced_columnstriggers:触发器数组(当前固定为空数组)
可选参数
list_tables提供一个可选参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
table_names | string | "" | 逗号分隔的表名列表;为空时列出用户 Schema 中所有表 |
该参数通过 SQL 中的?占位符绑定(对应parameters中定义的table_names)。当传入表名列表时,语句会精确过滤;留空则列出全部用户表。默认排除cluster、information_schema、memsql三个系统 Schema,且只统计BASE TABLE类型。
背后的 SQL 实现
该工具属于singlestore-sql类型,其核心是一条基于INFORMATION_SCHEMA的复杂 CTE 查询,运行时会先经 singlestoresql.go 的ResolveTemplateParams处理模板参数,再通过RunSQL执行。查询共使用 6 个 CTE 组装信息:
constraint_columns_cte:按约束聚合其覆盖的列(来自KEY_COLUMN_USAGE);foreign_key_columns_cte:聚合外键引用的目标列;table_owners:从SCHEMA_PRIVILEGES去重推断每个 Schema 的属主;table_columns、table_indexes、table_constraints:分别聚合列、索引与约束的 JSON 数组;
最终通过JSON_BUILD_OBJECT将所有信息打包为object_details字段输出。若你想自定义该工具的过滤逻辑或返回字段,可参考其 YAML 定义自行编写singlestore-sql类型工具(该类型支持statement+parameters组合,具备模板参数与标准参数两套机制)。
工具集:singlestore-database-tools
预置配置最后声明了一个工具集:
kind: toolset name: singlestore-database-tools tools: - execute_sql - list_tables启用预置配置后,singlestore-database-tools会把execute_sql与list_tables作为一个整体向 MCP 客户端暴露,便于 Agent 先list_tables探查 Schema,再execute_sql执行查询,形成“感知—执行”的闭环。
底层连接行为:TLS、超时与驱动
理解连接细节有助于排查生产环境问题。从 singlestore.go 的initSingleStoreConnectionPool可以看出,SingleStore source 底层复用了go-sql-driver/mysql驱动(SingleStore 兼容 MySQL 协议),其默认连接行为包括:
- 协议与寻址:
Net: "tcp",地址为host:port; - TLS 默认值:
tls=preferred,即服务器支持 SSL/TLS 就启用加密,否则回退到明文连接; - 时间解析:
ParseTime: true,DATETIME/TIMESTAMP 列会解析为time.Time; - 兼容性:
AllowNativePasswords: true、CheckConnLiveness: true; - 包大小:
MaxAllowedPacket为 64 MiB; - 矢量类型:通过 DSN 参数
vector_type_project_format=JSON让 SingleStore 以 JSON 格式返回矢量类型,便于 LLM 消费; - 连接标识:
ConnectionAttributes标记为_connector_name:MCP toolbox for Databases; - 查询超时:
queryTimeout(如30s)会被转换为驱动层的readTimeout参数。
queryTimeout支持 Go 的时长格式(如"30s"、"2m"),解析失败会直接返回错误。如果你需要自定义连接参数(例如强制 TLS 校验、关闭 TLS、启用压缩等),可以在自建 source 配置中通过connectionParams追加任意 go-sql-driver/mysql 支持的 DSN 参数,其优先级高于默认值。
从预置配置到自定义配置
预置配置适合快速验证;需要更多控制时,可将 singlestore.yaml 展开为独立配置文件,并使用toolbox serve --config指定。展开后的 source 配置支持额外字段,详见 source.md:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | 必须为"singlestore" |
host | string | 是 | 目标主机名或 IP(如127.0.0.1) |
port | string | 是 | 端口(如3306) |
database | string | 是 | 数据库名 |
user | string | 是 | 数据库用户名 |
password | string | 是 | 用户密码 |
queryTimeout | string | 否 | 查询最长等待时间(如"30s"、"2m"),默认不限制 |
connectionParams | map[string]string | 否 | 追加到 DSN 的驱动参数,常用作 TLS 配置 |
自定义配置在 TLS 方面有四种典型用法:
# 默认:服务器支持 TLS 则启用,否则回退明文 kind: source name: my-singlestore-source type: singlestore host: 127.0.0.1 port: 3306 database: my_db user: ${USER_NAME} password: ${PASSWORD} queryTimeout: 30s# 强制 TLS 并校验服务器证书 connectionParams: tls: "true"# 强制 TLS 但跳过证书校验 connectionParams: tls: "skip-verify"# 完全禁用 TLS connectionParams: tls: "false"建议所有场景都使用${ENV_NAME}占位符引用敏感信息,避免把密码硬编码进配置文件——这与预置配置的环境变量设计理念保持一致。
小结
--prebuilt singlestore提供了一条零 YAML 的 SingleStore 接入路径:5 个环境变量确定连接目标,两个工具覆盖“Schema 探查 + SQL 执行”的完整 Agent 工作流。若需更精细的控制(TLS 策略、超时、自定义查询模板),可参考 source.md、singlestore-execute-sql.md 与 singlestore-sql.md 展开为自定义配置,底层连接行为与驱动参数均可在 singlestore.go 中找到依据。
【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考