数据库MCP工具箱添加福利群:解决AI开发者的「MCP实战痛点」
[!注意] 数据库MCP工具箱目前处于测试阶段,在首个稳定版本(v1.0)发布前可能会有重大变更。
数据库MCP工具箱是一个开源的数据库MCP服务器。它通过处理连接池、认证等复杂问题,让您能更轻松、快速且安全地开发工具。
本README提供简要概述。完整细节请参阅完整文档。
[!注意] 该解决方案最初名为"Gen AI数据库工具箱",因其开发早于MCP,后为与新添加的MCP兼容性保持一致而更名。
工具箱帮助您构建让代理访问数据库数据的Gen AI工具。工具箱提供:
⚡ 用AI数据库助手提升工作流效率 ⚡
停止上下文切换,让AI助手成为真正的开发伙伴。通过用MCP工具箱连接IDE和数据库,您可以委托复杂耗时的数据库任务,从而更快构建并专注重要事务。这不仅是代码补全,更是让AI掌握处理完整开发生命周期所需的上下文。
节省时间的体现:
工具箱位于应用编排框架和数据库之间,提供用于修改、分发或调用工具的控制平面。它通过集中存储和更新工具简化管理,让您能在代理和应用间共享工具,且无需重新部署应用即可更新工具。
您可以直接用配置文件运行工具箱:
npx @toolbox-sdk/server --tools-file tools.yaml
这会用您的配置文件运行最新版工具箱服务器。
最新版本请查看发布页面,根据您的操作系统和CPU架构选择以下说明。
安装工具箱二进制文件:
Linux (AMD64)
在Linux(AMD64)安装二进制:
# 其他版本见发布页 export VERSION=0.26.0 curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox chmod +x toolboxmacOS (Apple芯片)
在macOS(Apple芯片)安装二进制:
# 其他版本见发布页 export VERSION=0.26.0 curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/arm64/toolbox chmod +x toolboxmacOS (Intel)
在macOS(Intel)安装二进制:
# 其他版本见发布页 export VERSION=0.26.0 curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/darwin/amd64/toolbox chmod +x toolboxWindows (命令提示符)
在Windows(命令提示符)安装二进制:
:: 其他版本见发布页 set VERSION=0.26.0 curl -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v%VERSION%/windows/amd64/toolbox.exe"Windows (PowerShell)
在Windows(PowerShell)安装二进制:
# 其他版本见发布页 $VERSION = "0.26.0" curl.exe -o toolbox.exe "https://storage.googleapis.com/genai-toolbox/v$VERSION/windows/amd64/toolbox.exe"
# 其他版本见发布页
export VERSION=0.26.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION

在macOS或Linux用Homebrew安装:
brew install mcp-toolbox
安装MCP工具箱的Gemini CLI扩展:
gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox
配置tools.yaml定义工具后,执行toolbox启动服务器:
运行二进制:
./toolbox --tools-file "tools.yaml"

ⓘ 注意
工具箱默认启用动态重载。禁用请用--disable-reload标志。
拉取容器镜像后运行:
export VERSION=0.24.0 # 使用您拉取的版本
docker run -p 5000:5000 \
-v $(pwd)/tools.yaml:/app/tools.yaml \
us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
--tools-file "/app/tools.yaml"

ⓘ 注意
-v将本地tools.yaml挂载到容器,-p将容器端口5000映射到主机端口5000。
toolbox --tools-file "tools.yaml"

无需手动下载二进制文件即可直接运行Toolbox(需要Node.js环境):
npx @toolbox-sdk/server --tools-file tools.yaml
使用自然语言与您的自定义工具交互。查看 gemini-cli-extensions/mcp-toolbox 获取更多信息。
您可以使用toolbox help查看完整参数列表!要停止服务器,发送终止信号(大多数平台使用ctrl+c)。
关于部署到不同环境的详细文档,请查阅操作指南中的资源。
当您的服务器启动运行后,可以将工具加载到应用程序中。以下是支持不同框架的客户端SDK列表:
核心功能
安装Toolbox核心SDK:
pip install toolbox-core加载工具:
from toolbox_core import ToolboxClient # 将url更新为您的服务器地址 async with ToolboxClient("http://127.0.0.1:5000") as client: # 这些工具可以传递给您的应用程序! tools = await client.load_toolset("toolset_name")关于Toolbox核心SDK的详细使用说明,请参阅项目README。
LangChain / LangGraph
pip install toolbox-langchain加载工具:
from toolbox_langchain import ToolboxClient # 将url更新为您的服务器地址 async with ToolboxClient("http://127.0.0.1:5000") as client: # 这些工具可以传递给您的应用程序! tools = client.load_toolset()关于Toolbox LangChain SDK的详细使用说明,请参阅项目README。
LlamaIndex
pip install toolbox-llamaindex加载工具:
from toolbox_llamaindex import ToolboxClient # 将url更新为您的服务器地址 async with ToolboxClient("http://127.0.0.1:5000") as client: # 这些工具可以传递给您的应用程序! tools = client.load_toolset()关于Toolbox Llamaindex SDK的详细使用说明,请参阅项目README。
核心功能
安装Toolbox核心SDK:
npm install @toolbox-sdk/core加载工具:
import { ToolboxClient } from '@toolbox-sdk/core'; // 将url更新为您的服务器地址 const URL = 'http://127.0.0.1:5000'; let client = new ToolboxClient(URL); // 这些工具可以传递给您的应用程序! const tools = await client.loadToolset('toolsetName');关于Toolbox核心SDK的详细使用说明,请参阅项目README。
LangChain / LangGraph
安装Toolbox核心SDK:
npm install @toolbox-sdk/core加载工具:
import { ToolboxClient } from '@toolbox-sdk/core'; // 将url更新为您的服务器地址 const URL = 'http://127.0.0.1:5000'; let client = new ToolboxClient(URL); // 这些工具可以传递给您的应用程序! const toolboxTools = await client.loadToolset('toolsetName'); // 定义工具基础信息:名称、描述、参数模式和核心逻辑 const getTool = (toolboxTool) => tool(currTool, { name: toolboxTool.getName(), description: toolboxTool.getDescription(), schema: toolboxTool.getParamSchema() }); // 在Langchain/Langraph应用中使用这些工具 const tools = toolboxTools.map(getTool);Genkit
安装Toolbox核心SDK:
npm install @toolbox-sdk/core加载工具:
import { ToolboxClient } from '@toolbox-sdk/core'; import { genkit } from 'genkit'; // 初始化genkit const ai = genkit({ plugins: [ googleAI({ apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY }) ], model: googleAI.model('gemini-2.0-flash'), }); // 将url更新为您的服务器地址 const URL = 'http://127.0.0.1:5000'; let client = new ToolboxClient(URL); // 这些工具可以传递给您的应用程序! const toolboxTools = await client.loadToolset('toolsetName'); // 定义工具基础信息:名称、描述、参数模式和核心逻辑 const getTool = (toolboxTool) => ai.defineTool({ name: toolboxTool.getName(), description: toolboxTool.getDescription(), schema: toolboxTool.getParamSchema() }, toolboxTool) // 在Genkit应用中使用这些工具 const tools = toolboxTools.map(getTool);ADK
npm install @toolbox-sdk/adk加载工具:
import { ToolboxClient } from '@toolbox-sdk/adk'; // 将url更新为您的服务器地址 const URL = 'http://127.0.0.1:5000'; let client = new ToolboxClient(URL); // 这些工具可以传递给您的应用程序! const tools = await client.loadToolset('toolsetName');关于Toolbox ADK SDK的详细使用说明,请参阅项目README。
核心功能
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "github.com/googleapis/mcp-toolbox-sdk-go/core" "context" ) func main() { // 请确保添加错误检查 // 将url更新为您的服务器地址 URL := "http://127.0.0.1:5000"; ctx := context.Background() client, err := core.NewToolboxClient(URL) // 框架无关的工具 tools, err := client.LoadToolset("toolsetName", ctx) }关于Toolbox Go SDK的详细使用说明,请参阅项目README。
LangChain Go
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" "github.com/tmc/langchaingo/llms" ) func main() { // 请确保添加错误检查 // 将url更新为您的服务器地址 URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // 框架无关的工具 tool, err := client.LoadTool("toolName", ctx) // 获取工具的输入模式 inputschema, err := tool.InputSchema() var paramsSchema map[string]any _ = json.Unmarshal(inputschema, ¶msSchema) // 在LangChainGo中使用此工具 langChainTool := llms.Tool{ Type: "function", Function: &llms.FunctionDefinition{ Name: tool.Name(), Description: tool.Description(), Parameters: paramsSchema, }, } }Genkit
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "context" "log" "github.com/firebase/genkit/go/genkit" "github.com/googleapis/mcp-toolbox-sdk-go/core" "github.com/googleapis/mcp-toolbox-sdk-go/tbgenkit" )func main() { // 请确保添加错误检查 // 将url更新为指向您的服务器 URL := "http://127.0.0.1:5000" ctx := context.Background() g := genkit.Init(ctx) client, err := core.NewToolboxClient(URL) // 框架无关的工具 tool, err := client.LoadTool("toolName", ctx) // 使用tbgenkit包转换工具 // 将此工具与Genkit Go一起使用 genkitTool, err := tbgenkit.ToGenkitTool(tool, g) if err != nil { log.Fatalf("工具转换失败: %v\n", err) } log.Printf("工具转换成功: %s", genkitTool.Name()) }Go GenAI
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" "google.golang.org/genai" ) func main() { // 请确保添加错误检查 // 将url更新为指向您的服务器 URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // 框架无关的工具 tool, err := client.LoadTool("toolName", ctx) // 获取工具的输入模式 inputschema, err := tool.InputSchema() var schema *genai.Schema _ = json.Unmarshal(inputschema, &schema) funcDeclaration := &genai.FunctionDeclaration{ Name: tool.Name(), Description: tool.Description(), Parameters: schema, } // 将此工具与Go GenAI一起使用 genAITool := &genai.Tool{ FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration}, } }OpenAI Go
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" openai "github.com/openai/openai-go" ) func main() { // 请确保添加错误检查 // 将url更新为指向您的服务器 URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // 框架无关的工具 tool, err := client.LoadTool("toolName", ctx) // 获取工具的输入模式 inputschema, err := tool.InputSchema() var paramsSchema openai.FunctionParameters _ = json.Unmarshal(inputschema, ¶msSchema) // 将此工具与OpenAI Go一起使用 openAITool := openai.ChatCompletionToolParam{ Function: openai.FunctionDefinitionParam{ Name: tool.Name(), Description: openai.String(tool.Description()), Parameters: paramsSchema, }, } }ADK Go
go get github.com/googleapis/mcp-toolbox-sdk-go加载工具:
package main import ( "github.com/googleapis/mcp-toolbox-sdk-go/tbadk" "context" ) func main() { // 请确保添加错误检查 // 将url更新为指向您的服务器 URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := tbadk.NewToolboxClient(URL) if err != nil { return fmt.Sprintln("无法启动Toolbox客户端", err) } // 将此工具与ADK Go一起使用 tool, err := client.LoadTool("toolName", ctx) if err != nil { return fmt.Sprintln("无法加载Toolbox工具", err) } }有关使用Toolbox Go SDK的更详细说明,请参阅 项目README。
Gemini CLI扩展提供了直接从命令行与数据源交互的工具。以下是基于Toolbox构建的Gemini CLI扩展列表。它们允许您通过预定义或自定义工具使用自然语言与数据源交互。点击链接查看详细的使用说明。
要将自定义工具与Gemini CLI一起使用:
要将预构建工具与Gemini CLI一起使用:
配置Toolbox的主要方式是通过tools.yaml文件。如果有多个文件,可以使用--tools-file tools.yaml标志告诉toolbox加载哪个文件。
您可以在资源中找到所有资源类型的详细参考文档。
tools.yaml的sources部分定义了Toolbox应有权访问的数据源。大多数工具至少需要一个数据源来执行。
kind: sources
name: my-pg-source
type: postgres
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: my-password

有关配置不同类型数据源的更多详细信息,请参阅数据源。
tools.yaml的tools部分定义了代理可以采取的操作:工具的类型、影响的源、使用的参数等。
kind: tools
name: search-hotels-by-name
type: postgres-sql
source: my-pg-source
description: 根据名称搜索酒店。
parameters:
- name: name
type: string
description: 酒店名称。
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';

有关配置不同类型工具的更多详细信息,请参阅工具。
tools.yaml的toolsets部分允许您定义要一起加载的工具组。这对于基于代理或应用程序定义不同的组非常有用。
toolsets:
my_first_toolset:
- my_first_tool
- my_second_tool
my_second_toolset:
- my_second_tool
- my_third_tool

可以按名称加载工具集:
# 这将加载所有工具
all_tools = client.load_toolset()
# 这将仅加载'my_second_toolset'中列出的工具
my_second_toolset = client.load_toolset("my_second_toolset")

tools.yaml的prompts部分定义了可用于与LLM交互的提示。
prompts:
code_review:
description: "要求LLM分析代码质量并提出改进建议。"
messages:
- content: "请审查以下代码的质量、正确性和潜在改进:\n\n{{.code}}"
arguments:
- name: "code"
description: "要审查的代码"

有关配置提示的更多详细信息,请参阅提示。
本项目使用语义化版本控制(主版本号.次版本号.修订号)。由于项目处于预发布阶段(版本0.x.y),我们遵循初始开发的标准约定:
当主版本号为0时,公共API应视为不稳定。版本将按以下方式递增:
0.次版本号.修订号:当我们添加新功能或进行破坏性、不兼容的API更改时,次版本号递增。0.次版本号.修订号:对于向后兼容的错误修复,修订号递增。项目达到稳定的1.0.0版本后,版本号**主版本号.次版本号.修订号**将遵循更常见的约定:
主版本号:不兼容的API更改时递增。次版本号:新增向后兼容的功能时递增。修订号:向后兼容的错误修复时递增。这适用于与Toolbox相关的CLI、与官方SDK的交互以及tools.yaml文件中的定义。
欢迎贡献代码。请先阅读贡献指南了解如何参与。
请注意,本项目采用贡献者行为准则。参与本项目即表示您同意遵守相关条款。详见 贡献者行为准则获取更多信息。
加入我们的Discord社区,与开发者们直接交流!
(注:根据中文阅读习惯调整了部分表述,如将"get started"译为"了解如何参与"更符合技术文档语境;"discord community"采用官方中文译名"Discord社区";保留所有超链接和专有名词的原文格式)