googleapis/genai-toolbox
GitHub: googleapis/genai-toolbox
一个开源的数据库 MCP 服务器,旨在通过处理连接池和身份验证等复杂问题,简化 GenAI 智能体与数据库的集成与交互。
Stars: 13302 | Forks: 1255

# MCP Toolbox for Databases
[](https://googleapis.github.io/genai-toolbox/)
[](https://discord.gg/Dmm69peqjh)
[](https://medium.com/@mcp_toolbox)
[](https://goreportcard.com/report/github.com/googleapis/genai-toolbox)
MCP Toolbox for Databases 是一个开源的数据库 MCP 服务器。它通过处理连接池、身份验证等复杂问题,使您能够更简单、更快速、更安全地开发工具。
本 README 提供了简要概述。有关全面的详细信息,请参阅[完整文档](https://googleapis.github.io/genai-toolbox/)。
## 目录
- [为什么选择 Toolbox?](#why-toolbox)
- [总体架构](#general-architecture)
- [快速开始](#getting-started)
- [安装服务器](#installing-the-server)
- [运行服务器](#running-the-server)
- [集成您的应用程序](#integrating-your-application)
- [在 Gemini CLI 扩展中使用 Toolbox](#using-toolbox-with-gemini-cli-extensions)
- [配置](#configuration)
- [数据源](#sources)
- [工具](#tools)
- [工具集](#toolsets)
- [提示词](#prompts)
- [版本控制](#versioning)
- [1.0.0 之前的版本控制](#pre-100-versioning)
- [1.0.0 之后的版本控制](#post-100-versioning)
- [贡献](#contributing)
- [社区](#community)
## 为什么选择 Toolbox?
Toolbox 可帮助您构建 Gen AI 工具,让您的 Agent 能够访问数据库中的数据。Toolbox 提供:
- **简化的开发**:用不到 10 行代码即可将工具集成到您的 Agent 中,在多个 Agent 或框架之间重用工具,并更轻松地部署工具的新版本。
- **更好的性能**:采用连接池、身份验证等最佳实践。
- **增强的安全性**:集成的身份验证机制,以实现对数据更安全的访问。
- **端到端的可观测性**:开箱即用的指标和追踪,内置对 OpenTelemetry 的支持。
**⚡ 利用 AI 数据库助手为您的工作流赋能 ⚡**
告别频繁的上下文切换,让您的 AI 助手成为真正的共同开发者。通过 [使用 MCP Toolbox 将您的 IDE 连接到数据库][connect-ide],您可以将复杂且耗时的数据库任务委托给它,从而加快构建速度并专注于重要的事情。这不仅仅是代码补全,更是赋予您的 AI 处理整个开发生命周期所需的上下文。
以下是它能为您节省时间的方式:
- **用自然语言查询**:直接在 IDE 中使用自然语言与您的数据交互。无需编写任何 SQL,即可询问复杂问题,例如“2024 年交付了多少订单,里面有哪些商品?”
- **自动化数据库管理**:只需描述您的数据需求,让 AI 助手为您管理数据库。它可以处理生成查询、创建表、添加索引等任务。
- **生成具有上下文感知能力的代码**:赋予您的 AI 助手对实时数据库 Schema 的深入理解,从而生成应用程序代码和测试。这通过确保生成的代码可直接使用,加速了开发周期。
- **大幅减少开发开销**:从根本上减少手动设置和样板代码所花费的时间。MCP Toolbox 有助于简化冗长的数据库配置、重复代码以及容易出错的 Schema 迁移。
了解[如何使用 MCP 将您的 AI 工具 连接到 Toolbox][connect-ide]。
## 总体架构
Toolbox 位于应用程序的编排框架和数据库之间,提供一个用于修改、分发或调用工具的控制平面。它通过提供一个集中位置来存储和更新工具,简化了工具的管理,允许您在 Agent 和应用程序之间共享工具,并在不重新部署应用程序的情况下更新这些工具。
### 运行服务器
[配置](#configuration)一个 `tools.yaml` 来定义您的工具,然后执行 `toolbox` 启动服务器:
您可以使用 `toolbox help` 获取完整的标志列表!要停止服务器,请发送终止信号(在大多数平台上为 `ctrl+c`)。
有关部署到不同环境的更详细文档,请查看[操作指南部分](https://googleapis.github.io/genai-toolbox/how-to/)中的资源。
### 集成您的应用程序
服务器启动并运行后,您可以将工具加载到您的应用程序中。请参阅下方使用各种框架的 Client SDK 列表:
### 在 Gemini CLI 扩展中使用 Toolbox
[Gemini CLI 扩展][gemini-cli-extensions] 提供了直接从命令行与数据源交互的工具。以下是基于 **Toolbox** 构建的 Gemini CLI 扩展列表。它们允许您通过预定义或自定义工具,使用自然语言与数据源进行交互。点击链接查看其详细使用说明。
要在 Gemini CLI 中使用**自定义**工具:
- [MCP Toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox)
要在 Gemini CLI 中使用[预构建工具][prebuilt]:
- [AlloyDB for PostgreSQL](https://github.com/gemini-cli-extensions/alloydb)
- [AlloyDB for PostgreSQL
Observability](https://github.com/gemini-cli-extensions/alloydb-observability)
- [BigQuery Data
Analytics](https://github.com/gemini-cli-extensions/bigquery-data-analytics)
- [BigQuery Conversational
Analytics](https://github.com/gemini-cli-extensions/bigquery-conversational-analytics)
- [Cloud SQL for
MySQL](https://github.com/gemini-cli-extensions/cloud-sql-mysql)
- [Cloud SQL for MySQL
Observability](https://github.com/gemini-cli-extensions/cloud-sql-mysql-observability)
- [Cloud SQL for
PostgreSQL](https://github.com/gemini-cli-extensions/cloud-sql-postgresql)
- [Cloud SQL for PostgreSQL
Observability](https://github.com/gemini-cli-extensions/cloud-sql-postgresql-observability)
- [Cloud SQL for SQL
Server](https://github.com/gemini-cli-extensions/cloud-sql-sqlserver)
- [Cloud SQL for SQL Server
Observability](https://github.com/gemini-cli-extensions/cloud-sql-sqlserver-observability)
- [Looker](https://github.com/gemini-cli-extensions/looker)
- [Dataplex](https://github.com/gemini-cli-extensions/dataplex)
- [MySQL](https://github.com/gemini-cli-extensions/mysql)
- [PostgreSQL](https://github.com/gemini-cli-extensions/postgres)
- [Spanner](https://github.com/gemini-cli-extensions/spanner)
- [Firestore](https://github.com/gemini-cli-extensions/firestore-native)
- [SQL Server](https://github.com/gemini-cli-extensions/sql-server)
## 配置
配置 Toolbox 的主要方式是通过 `tools.yaml` 文件。如果您有多个文件,可以使用 `--tools-file tools.yaml` 标志告诉 Toolbox 加载哪一个。
您可以在[资源](https://googleapis.github.io/genai-toolbox/resources/)中找到所有资源类型的更详细参考文档。
### 数据源
`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
```
有关配置不同类型源的更多详细信息,请参阅[数据源](https://googleapis.github.io/genai-toolbox/resources/sources)。
### 工具
`tools.yaml` 中的 `tools` 部分定义了 Agent 可以执行的操作:工具类型、影响的源、使用的参数等。
```
kind: tools
name: search-hotels-by-name
type: postgres-sql
source: my-pg-source
description: Search for hotels based on name.
parameters:
- name: name
type: string
description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
```
有关配置不同类型工具的更多详细信息,请参阅[工具](https://googleapis.github.io/genai-toolbox/resources/tools)。
### 工具集
`tools.yaml` 中的 `toolsets` 部分允许您定义希望一起加载的工具组。这对于根据 Agent 或应用程序定义不同的组非常有用。
```
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: "Asks the LLM to analyze code quality and suggest improvements."
messages:
- content: "Please review the following code for quality, correctness, and potential improvements: \n\n{{.code}}"
arguments:
- name: "code"
description: "The code to review"
```
有关配置提示词的更多详细信息,请参阅[提示词](https://googleapis.github.io/genai-toolbox/resources/prompts)。
## 版本控制
本项目使用[语义化版本控制](https://semver.org/) (`MAJOR.MINOR.PATCH`)。
由于该项目处于预发布阶段(版本 `0.x.y`),我们遵循初始开发的标准惯例:
### 1.0.0 之前的版本控制
当主版本号为 `0` 时,公共 API 应被视为不稳定。版本号将按如下方式递增:
- **`0.MINOR.PATCH`**:当我们添加新功能或进行破坏性的、不兼容的 API 更改时,会递增 **MINOR** 版本。
- **`0.MINOR.PATCH`**:对于向后兼容的错误修复,会递增 **PATCH** 版本。
### 1.0.0 之后的版本控制
一旦项目达到稳定的 `1.0.0` 版本,版本号 **`MAJOR.MINOR.PATCH`** 将遵循更通用的惯例:
- **`MAJOR`**:对于不兼容的 API 更改递增。
- **`MINOR`**:对于新的、向后兼容的功能递增。
- **`PATCH`**:对于向后兼容的错误修复递增。
此规则适用的公共 API 包括与 Toolbox 关联的 CLI、与官方 SDK 的交互以及 `tools.yaml` 文件中的定义。
## 贡献
欢迎贡献。请参阅 [CONTRIBUTING](CONTRIBUTING.md) 开始。有关设置开发环境的技术详细信息,请参阅 [DEVELOPER](DEVELOPER.md) 指南。
请注意,本项目发布时附有贡献者行为准则。参与本项目即表示您同意遵守其条款。有关更多信息,请参阅[贡献者行为准则](CODE_OF_CONDUCT.md)。
## 社区
加入我们的 [Discord 社区](https://discord.gg/GQrFB3Ec3W)与我们的开发者交流!
Binary (二进制文件)
要将 Toolbox 安装为二进制文件:Container image (容器镜像)
您也可以将 Toolbox 安装为容器: ``` # 查看 releases 页面获取其他版本 export VERSION=0.28.0 docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION ```Homebrew
要在 macOS 或 Linux 上使用 Homebrew 安装 Toolbox: ``` brew install mcp-toolbox ```从源码编译
要从源码安装,请确保您安装了最新版本的 [Go](https://go.dev/doc/install),然后运行以下命令: ``` go install github.com/googleapis/genai-toolbox@v0.28.0 ```Gemini CLI 扩展
要安装 MCP Toolbox 的 Gemini CLI 扩展,请运行以下命令: ``` gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox ```Binary (二进制文件)
要从二进制文件运行 Toolbox: ``` ./toolbox --tools-file "tools.yaml" ```Container image (容器镜像)
在拉取[容器镜像](#installing-the-server)后运行服务器: ``` export VERSION=0.24.0 # Use the version you pulled 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" ```Source (源码)
要直接从源码运行服务器,请导航到项目根目录并运行: ``` go run . ```Homebrew
如果您使用 [Homebrew](https://brew.sh/) 安装了 Toolbox,`toolbox` 二进制文件将位于您的系统路径中。您可以使用相同的命令启动服务器: ``` toolbox --tools-file "tools.yaml" ```NPM
要在不手动下载二进制文件的情况下直接运行 Toolbox(需要 Node.js): ``` npx @toolbox-sdk/server --tools-file tools.yaml ```Gemini CLI
使用自然语言与您的自定义工具交互。查看 [gemini-cli-extensions/mcp-toolbox](https://github.com/gemini-cli-extensions/mcp-toolbox) 了解更多信息。Python (Github)
Core
1. 安装 [Toolbox Core SDK][toolbox-core]: pip install toolbox-core 2. 加载工具: 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 Core SDK 的更详细说明,请参阅[项目 README][toolbox-core-readme]。LangChain / LangGraph
1. 安装 [Toolbox LangChain SDK][toolbox-langchain]: pip install toolbox-langchain 2. 加载工具: 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][toolbox-langchain-readme]。LlamaIndex
1. 安装 [Toolbox Llamaindex SDK][toolbox-llamaindex]: pip install toolbox-llamaindex 2. 加载工具: 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-llamaindex-readme]。
Javascript/Typescript (Github)
Core
1. 安装 [Toolbox Core SDK][toolbox-core-js]: npm install @toolbox-sdk/core 2. 加载工具: 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 Core SDK 的更详细说明,请参阅[项目 README][toolbox-core-js-readme]。LangChain / LangGraph
1. 安装 [Toolbox Core SDK][toolbox-core-js]: npm install @toolbox-sdk/core 2. 加载工具: 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
1. 安装 [Toolbox Core SDK][toolbox-core-js]: npm install @toolbox-sdk/core 2. 加载工具: 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
1. 安装 [Toolbox ADK SDK][toolbox-adk-js]: npm install @toolbox-sdk/adk 2. 加载工具: 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][toolbox-adk-js-readme]。
Go (Github)
Core
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: package main import ( "github.com/googleapis/mcp-toolbox-sdk-go/core" "context" ) func main() { // Make sure to add the error checks // 更新 url 以指向您的服务器 URL := "http://127.0.0.1:5000"; ctx := context.Background() , err := core.NewToolboxClient(URL) // Framework agnostic tools tools, err := client.LoadToolset("toolsetName", ctx) } 有关使用 Toolbox Go SDK 的更详细说明,请参阅[项目 README][toolbox-core-go-readme]。LangChain Go
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" "github.com/tmc/langchaingo/llms" ) func main() { // Make sure to add the error checks // 更新 url 以指向您的服务器 URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // Framework agnostic tool tool, err := client.LoadTool("toolName", ctx) // Fetch the tool's input schema inputschema, err := tool.InputSchema() var paramsSchema map[string]any _ = json.Unmarshal(inputschema, ¶msSchema) // Use this tool with LangChainGo langChainTool := llms.Tool{ Type: "function", Function: &llms.FunctionDefinition{ Name: tool.Name(), Description: tool.Description(), Parameters: paramsSchema, }, } }Genkit
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: 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() { // Make sure to add the error checks // Update the url to point to your server URL := "http://127.0.0.1:5000" ctx := context.Background() g := genkit.Init(ctx) client, err := core.NewToolboxClient(URL) // Framework agnostic tool tool, err := client.LoadTool("toolName", ctx) // Convert the tool using the tbgenkit package // Use this tool with Genkit Go genkitTool, err := tbgenkit.ToGenkitTool(tool, g) if err != nil { log.Fatalf("Failed to convert tool: %v\n", err) } log.Printf("Successfully converted tool: %s", genkitTool.Name()) }Go GenAI
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" "google.golang.org/genai" ) func main() { // Make sure to add the error checks // Update the url to point to your server URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // Framework agnostic tool tool, err := client.LoadTool("toolName", ctx) // Fetch the tool's input schema inputschema, err := tool.InputSchema() var schema *genai.Schema _ = json.Unmarshal(inputschema, &schema) funcDeclaration := &genai.FunctionDeclaration{ Name: tool.Name(), Description: tool.Description(), Parameters: schema, } // Use this tool with Go GenAI genAITool := &genai.Tool{ FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration}, } }OpenAI Go
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: package main import ( "context" "encoding/json" "github.com/googleapis/mcp-toolbox-sdk-go/core" openai "github.com/openai/openai-go" ) func main() { // Make sure to add the error checks // Update the url to point to your server URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := core.NewToolboxClient(URL) // Framework agnostic tool tool, err := client.LoadTool("toolName", ctx) // Fetch the tool's input schema inputschema, err := tool.InputSchema() var paramsSchema openai.FunctionParameters _ = json.Unmarshal(inputschema, ¶msSchema) // Use this tool with OpenAI Go openAITool := openai.ChatCompletionToolParam{ Function: openai.FunctionDefinitionParam{ Name: tool.Name(), Description: openai.String(tool.Description()), Parameters: paramsSchema, }, } }ADK Go
1. 安装 [Toolbox Go SDK][toolbox-go]: go get github.com/googleapis/mcp-toolbox-sdk-go 2. 加载工具: package main import ( "github.com/googleapis/mcp-toolbox-sdk-go/tbadk" "context" ) func main() { // Make sure to add the error checks // Update the url to point to your server URL := "http://127.0.0.1:5000" ctx := context.Background() client, err := tbadk.NewToolboxClient(URL) if err != nil { return fmt.Sprintln("Could not start Toolbox Client", err) } // Use this tool with ADK Go tool, err := client.LoadTool("toolName", ctx) if err != nil { return fmt.Sprintln("Could not load Toolbox Tool", err) } } 有关使用 Toolbox Go SDK 的更详细说明,请参阅[项目 README][toolbox-core-go-readme]。
标签:AI代理, API封装, Cloud SQL, EVTX分析, GenAI, Go, Google, LLM工具, MCP, MCP服务器, Nuclei, PostgreSQL, RAG, Ruby工具, Spanner, 企业数据访问, 基础设施, 工具箱, 开发工具包, 开源, 数据库, 数据库中间件, 数据泄露, 日志审计, 模型上下文协议, 生成式AI, 用户代理, 索引, 请求拦截, 连接池, 逆向工具