MCP Toolbox for Databases 预置配置指南:SingleStore 快速接入与工具详解
2026/9/15 14:28:29 网站建设 项目流程

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_sqllist_tables两个工具的调用链与实现原理。

预置配置概述:--prebuilt singlestore

MCP Toolbox for Databases 将常见的“数据源 + 工具 + 工具集”组合封装为预置配置,避免用户重复编写 YAML。singlestore预置配置正是其中之一,其完整定义位于仓库的 internal/prebuiltconfigs/tools/singlestore.yaml,包含三部分:

  • 一个kind: source的 SingleStore 数据源(类型为singlestore);
  • 两个kind: tool的工具定义;
  • 一个名为singlestore-database-toolskind: 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_HOSTSingleStore 服务器的主机名或 IP 地址
SINGLESTORE_PORTSingleStore 服务器的端口号
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 个字段(HostPortDatabaseUserPassword)全部标记为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的流程非常直接:

  1. 校验当前 source 是否实现了compatibleSource接口(要求提供SingleStorePool()RunSQL());
  2. 从参数表取出sql字符串,若类型断言失败会返回 Agent 错误;
  3. 调用source.RunSQL(ctx, sqlStr, nil)执行查询(无绑定参数);
  4. 将结果按行组织为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_nameobject_nameobject_type(固定为TABLE
  • owner(从INFORMATION_SCHEMA.SCHEMA_PRIVILEGES推断的表属主,缺失时为N/A
  • comment(表注释)
  • columns:列数组,每列含column_namedata_typeordinal_positionis_not_nullablecolumn_defaultcolumn_comment
  • indexes:索引数组,含index_nameis_uniqueis_primaryindex_columns
  • constraints:约束数组,含constraint_nameconstraint_type(主键/外键/唯一约束)、constraint_columns,外键还会带出foreign_key_referenced_tableforeign_key_referenced_columns
  • triggers:触发器数组(当前固定为空数组)

可选参数

list_tables提供一个可选参数:

参数类型默认值说明
table_namesstring""逗号分隔的表名列表;为空时列出用户 Schema 中所有表

该参数通过 SQL 中的?占位符绑定(对应parameters中定义的table_names)。当传入表名列表时,语句会精确过滤;留空则列出全部用户表。默认排除clusterinformation_schemamemsql三个系统 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_columnstable_indexestable_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_sqllist_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: trueCheckConnLiveness: 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:

字段类型必填说明
typestring必须为"singlestore"
hoststring目标主机名或 IP(如127.0.0.1
portstring端口(如3306
databasestring数据库名
userstring数据库用户名
passwordstring用户密码
queryTimeoutstring查询最长等待时间(如"30s""2m"),默认不限制
connectionParamsmap[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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询