googleapis/genai-toolbox

GitHub: googleapis/genai-toolbox

一个开源的数据库 MCP 服务器,旨在通过处理连接池和身份验证等复杂问题,简化 GenAI 智能体与数据库的集成与交互。

Stars: 13302 | Forks: 1255

![logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7335f6b5b9230934.png) # MCP Toolbox for Databases googleapis%2Fgenai-toolbox | Trendshift [![文档](https://img.shields.io/badge/docs-MCP_Toolbox-blue)](https://googleapis.github.io/genai-toolbox/) [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/Dmm69peqjh) [![Medium](https://img.shields.io/badge/Medium-12100E?style=flat&logo=medium&logoColor=white)](https://medium.com/@mcp_toolbox) [![Go Report Card](https://goreportcard.com/badge/github.com/googleapis/genai-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 和应用程序之间共享工具,并在不重新部署应用程序的情况下更新这些工具。

architecture

## 快速开始 ### 快速入门:使用 NPX 运行 Toolbox 您可以使用[配置文件](#configuration)直接运行 Toolbox: ``` npx @toolbox-sdk/server --tools-file tools.yaml ``` 这将使用您的配置文件运行最新版本的 Toolbox 服务器。 ### 安装服务器 关于最新版本,请查看 [releases 页面][releases] 并根据您的操作系统和 CPU 架构使用以下说明。
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 ```
### 运行服务器 [配置](#configuration)一个 `tools.yaml` 来定义您的工具,然后执行 `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) 了解更多信息。
您可以使用 `toolbox help` 获取完整的标志列表!要停止服务器,请发送终止信号(在大多数平台上为 `ctrl+c`)。 有关部署到不同环境的更详细文档,请查看[操作指南部分](https://googleapis.github.io/genai-toolbox/how-to/)中的资源。 ### 集成您的应用程序 服务器启动并运行后,您可以将工具加载到您的应用程序中。请参阅下方使用各种框架的 Client SDK 列表:
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]。
### 在 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)与我们的开发者交流!
标签:AI代理, API封装, Cloud SQL, EVTX分析, GenAI, Go, Google, LLM工具, MCP, MCP服务器, Nuclei, PostgreSQL, RAG, Ruby工具, Spanner, 企业数据访问, 基础设施, 工具箱, 开发工具包, 开源, 数据库, 数据库中间件, 数据泄露, 日志审计, 模型上下文协议, 生成式AI, 用户代理, 索引, 请求拦截, 连接池, 逆向工具