自动编程开源技术

genai-toolbox

作者头像
项目作者googleapis

MCP Toolbox for Databases is an open source MCP server for databases.

genai-toolbox 预览图

genai-toolbox 介绍

了解项目的详细信息和使用方法

数据库MCP工具箱

文档

[!注意] 数据库MCP工具箱目前处于测试阶段,在首个稳定版本(v1.0)发布前可能会有重大变更。

数据库MCP工具箱是一个开源的数据库MCP服务器。它通过处理连接池、认证等复杂问题,让你能更轻松、快速、安全地开发工具。

本README提供简要概述。完整文档请参阅官方文档

[!注意] 该解决方案最初命名为"数据库生成式AI工具箱",因其开发早于MCP。为与新添加的MCP兼容性保持一致,现已更名。

目录

为什么选择工具箱?

工具箱帮助你构建能让智能体访问数据库数据的生成式AI工具。工具箱提供:

  • 简化开发:用不到10行代码将工具集成到智能体,在多个智能体或框架间复用工具,更轻松地部署新版本工具
  • 更佳性能:内置连接池、认证等最佳实践
  • 增强安全:集成认证机制保障数据安全访问
  • 端到端可观测:开箱即用的指标和追踪,原生支持OpenTelemetry

⚡ 用AI数据库助手提升工作效率 ⚡

告别频繁切换上下文,让你的AI助手成为真正的开发伙伴。通过MCP工具箱连接IDE和数据库后,你可以将复杂耗时的数据库任务委托给AI,从而更快构建并专注于重要事务。这不仅是代码补全,更是赋予AI处理整个开发生命周期所需的上下文。

它能为你节省时间:

  • 自然语言查询:直接在IDE中用自然语言与数据交互。无需编写SQL就能提问复杂问题,如"2024年交付了多少订单?包含哪些商品?"
  • 自动化数据库管理:只需描述数据需求,AI助手就能帮你管理数据库。它可以处理查询生成、表创建、索引添加等任务
  • 生成上下文感知代码:让AI助手基于实时数据库模式生成可直接使用的应用代码和测试,加速开发周期
  • 大幅减少开发开销:显著减少手动设置和样板代码时间。MCP工具箱帮助简化冗长的数据库配置、重复代码和易出错的模式迁移

了解如何通过MCP将AI工具(IDE)连接到工具箱

整体架构

工具箱位于应用编排框架和数据库之间,提供用于修改、分发或调用工具的控制平面。通过集中存储和更新工具,简化工具管理,让你能在不重新部署应用的情况下共享和更新工具。

架构图

快速开始

安装服务器

最新版本请查看发布页面,根据操作系统和CPU架构选择以下安装方式。

二进制安装

安装工具箱二进制文件:

sh
1# 其他版本请查看发布页面 2export VERSION=0.9.0 3curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox 4chmod +x toolbox
容器镜像 也可通过容器安装:
sh
1# 其他版本请查看发布页面 2export VERSION=0.9.0 3docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
源码编译

从源码安装需确保已安装最新版Go,然后运行:

sh
1go install github.com/googleapis/[email protected]

运行服务器

配置定义工具的tools.yaml后,执行toolbox启动服务器:

sh
1./toolbox --tools-file "tools.yaml"

[!注意] 工具箱默认启用动态重载。如需禁用,使用--disable-reload标志。

使用toolbox help查看完整标志列表!停止服务器可发送终止信号(多数平台为ctrl+c)。

更详细的部署文档请参阅操作指南

集成到应用

服务器运行后,可将工具加载到应用中。以下是各框架的客户端SDK:

Python (Github)
核心SDK
  1. 安装工具箱核心SDK

    bash
    1pip install toolbox-core
  2. 加载工具:

    python
    1from toolbox_core import ToolboxClient 2 3# 将url改为你的服务器地址 4async with ToolboxClient("http://127.0.0.1:5000") as client: 5 6 # 这些工具可传递给应用! 7 tools = await client.load_toolset("工具集名称")

详细使用说明见项目README

LangChain/LangGraph
  1. 安装工具箱LangChain SDK

    bash
    1pip install toolbox-langchain
  2. 加载工具:

    python
    1from toolbox_langchain import ToolboxClient 2 3# 将url改为你的服务器地址 4async with ToolboxClient("http://127.0.0.1:5000") as client: 5 6 # 这些工具可传递给应用! 7 tools = client.load_toolset()

    详细使用说明见项目README

LlamaIndex
  1. 安装工具箱LlamaIndex SDK

    bash
    1pip install toolbox-llamaindex
  2. 加载工具:

    python
    1from toolbox_llamaindex import ToolboxClient 2 3# 将url改为你的服务器地址 4async with ToolboxClient("http://127.0.0.1:5000") as client: 5 6 # 这些工具可传递给应用! 7 tools = client.load_toolset()

    详细使用说明见项目README

Javascript/Typescript (Github)
核心SDK
  1. 安装工具箱核心SDK

    bash
    1npm install @toolbox-sdk/core
  2. 加载工具:

    javascript
    1import { ToolboxClient } from '@toolbox-sdk/core'; 2 3// 将url改为你的服务器地址 4const URL = 'http://127.0.0.1:5000'; 5let client = new ToolboxClient(URL); 6 7// 这些工具可传递给应用! 8const tools = await client.loadToolset('工具集名称');

    详细使用说明见项目README

LangChain/LangGraph
  1. 安装工具箱核心SDK

    bash
    1npm install @toolbox-sdk/core
  2. 加载工具:

    javascript
    1import { ToolboxClient } from '@toolbox-sdk/core'; 2 3// 将url改为你的服务器地址 4const URL = 'http://127.0.0.1:5000'; 5let client = new ToolboxClient(URL); 6 7// 这些工具可传递给应用! 8const toolboxTools = await client.loadToolset('工具集名称'); 9 10// 定义工具基础属性:名称、描述、模式和核心逻辑 11const getTool = (toolboxTool) => tool(currTool, { 12 name: toolboxTool.getName(), 13 description: toolboxTool.getDescription(), 14 schema: toolboxTool.getParamSchema() 15}); 16 17// 在Langchain/Langraph应用中使用这些工具 18const tools = toolboxTools.map(getTool);
Genkit
  1. 安装工具箱核心SDK

    bash
    1npm install @toolbox-sdk/core
  2. 加载工具:

    javascript
    1import { ToolboxClient } from '@toolbox-sdk/core'; 2import { genkit } from 'genkit'; 3 4// 初始化genkit 5const ai = genkit({ 6 plugins: [ 7 googleAI({ 8 apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY 9 }) 10 ], 11 model: googleAI.model('gemini-2.0-flash'), 12}); 13 14// 将url改为你的服务器地址 15const URL = 'http://127.0.0.1:5000'; 16let client = new ToolboxClient(URL); 17 18// 这些工具可传递给应用! 19const toolboxTools = await client.loadToolset('工具集名称'); 20 21// 定义工具基础属性:名称、描述、模式和核心逻辑 22const getTool = (toolboxTool) => ai.defineTool({ 23 name: toolboxTool.getName(), 24 description: toolboxTool.getDescription(), 25 schema: toolboxTool.getParamSchema() 26}, toolboxTool) 27 28// 在Genkit应用中使用这些工具 29const tools = toolboxTools.map(getTool);
Go (Github)
核心SDK
  1. 安装工具箱Go SDK

    bash
    1go get github.com/googleapis/mcp-toolbox-sdk-go
  2. 加载工具:

    go
    1package main 2 3import ( 4 "github.com/googleapis/mcp-toolbox-sdk-go/core" 5 "context" 6) 7 8func main() { 9 // 请确保添加错误检查 10 // 将url改为你的服务器地址 11 URL := "http://127.0.0.1:5000"; 12 ctx := context.Background() 13 14 client, err := core.NewToolboxClient(URL) 15 16 // 框架无关的工具 17 tools, err := client.LoadToolset("工具集名称", ctx) 18}

    详细使用说明见项目README

LangChain Go
  1. 安装工具箱Go SDK

    bash
    1go get github.com/googleapis/mcp-toolbox-sdk-go
  2. 加载工具:

    go
    1package main 2 3import ( 4 "context" 5 "encoding/json" 6 7 "github.com/googleapis/mcp-toolbox-sdk-go/core" 8 "github.com/tmc/langchaingo/llms" 9) 10 11func main() { 12 // 请确保添加错误检查 13 // 将url改为你的服务器地址 14 URL := "http://127.0.0.1:5000" 15 ctx := context.Background() 16 17 client, err := core.NewToolboxClient(URL) 18 19 // 框架无关的工具 20 tool, err := client.LoadTool("工具名称", ctx) 21 22 // 获取工具输入模式 23 inputschema, err := tool.InputSchema() 24 25 var paramsSchema map[string]any 26 _ = json.Unmarshal(inputschema, &paramsSchema) 27 28 // 在LangChainGo中使用此工具 29 langChainTool := llms.Tool{ 30 Type: "function", 31 Function: &llms.FunctionDefinition{ 32 Name: tool.Name(), 33 Description: tool.Description(), 34 Parameters: paramsSchema, 35 }, 36 } 37} 38
Genkit
  1. 安装工具箱Go SDK

    bash
    1go get github.com/googleapis/mcp-toolbox-sdk-go
  2. 加载工具:

    go
    1package main 2import ( 3 "context" 4 "encoding/json" 5 6 "github.com/firebase/genkit/go/ai" 7 "github.com/firebase/genkit/go/genkit" 8 "github.com/googleapis/mcp-toolbox-sdk-go/core" 9 "github.com/invopop/jsonschema" 10) 11 12func main() { 13 // 请确保添加错误检查 14 // 将url改为你的服务器地址 15 URL := "http://127.0.0.1:5000" 16 ctx := context.Background() 17 g, err := genkit.Init(ctx) 18 19 client, err := core.NewToolboxClient(URL) 20 21 // 框架无关的工具 22 tool, err := client.LoadTool("工具名称", ctx) 23 24 // 获取工具输入模式 25 inputschema, err := tool.InputSchema() 26 27 var schema *jsonschema.Schema 28 _ = json.Unmarshal(inputschema, &schema) 29 30 executeFn := func(ctx *ai.ToolContext, input any) (string, error) { 31 result, err := tool.Invoke(ctx, input.(map[string]any)) 32 if err != nil { 33 // 传播工具调用错误 34 return "", err 35 } 36 37 return result.(string), nil 38 } 39 40 // 在Genkit Go中使用此工具 41 genkitTool := genkit.DefineToolWithInputSchema( 42 g, 43 tool.Name(), 44 tool.Description(), 45 schema, 46 executeFn, 47 ) 48}
Go GenAI
  1. 安装工具箱Go SDK

    bash
    1go get github.com/googleapis/mcp-toolbox-sdk-go
  2. 加载工具:

    go
    1package main 2 3import ( 4 "context" 5 "encoding/json" 6 7 "github.com/googleapis/mcp-toolbox-sdk-go/core" 8 "google.golang.org/genai" 9) 10 11func main() { 12 // 请确保添加错误检查 13 // 将url改为你的服务器地址 14 URL := "http://127.0.0.1:5000" 15 ctx := context.Background() 16 17 client, err := core.NewToolboxClient(URL) 18 19 // 框架无关的工具 20 tool, err := client.LoadTool("工具名称", ctx) 21 22 // 获取工具输入模式 23 inputschema, err := tool.InputSchema() 24 25 var schema *genai.Schema 26 _ = json.Unmarshal(inputschema, &schema) 27 28 funcDeclaration := &genai.FunctionDeclaration{ 29 Name: tool.Name(), 30 Description: tool.Description(), 31 Parameters: schema, 32 } 33 34 // 在Go GenAI中使用此工具 35 genAITool := &genai.Tool{ 36 FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration}, 37 } 38}
OpenAI Go
  1. 安装工具箱Go SDK

    bash
    1go get github.com/googleapis/mcp-toolbox-sdk-go
  2. 加载工具:

    go
    1package main 2 3import ( 4 "context" 5 "encoding/json" 6 7 "github.com/googleapis/mcp-toolbox-sdk-go/core" 8 openai "github.com/openai/openai-go" 9) 10 11func main() { 12 // 请确保添加错误检查 13 // 将url改为你的服务器地址 14 URL := "http://127.0.0.1:5000" 15 ctx := context.Background() 16 17 client, err := core.NewToolboxClient(URL) 18 19 // 框架无关的工具 20 tool, err := client.LoadTool("工具名称", ctx) 21 22 // 获取工具输入模式 23 inputschema, err := tool.InputSchema() 24 25 var paramsSchema openai.FunctionParameters 26 _ = json.Unmarshal(inputschema, &paramsSchema) 27 28 // 在OpenAI Go中使用此工具 29 openAITool := openai.ChatCompletionToolParam{ 30 Function: openai.FunctionDefinitionParam{ 31 Name: tool.Name(), 32 Description: openai.String(tool.Description()), 33 Parameters: paramsSchema, 34 }, 35 } 36 37}

配置

主要通过tools.yaml文件配置工具箱。如有多个文件,可用--tools-file tools.yaml标志指定加载哪个文件。

各资源类型的详细参考文档见资源

数据源

tools.yamlsources部分定义工具箱可访问的数据源。多数工具至少需要一个数据源执行操作。

yaml
1sources: 2 我的pg数据源: 3 kind: postgres 4 host: 127.0.0.1 5 port: 5432 6 database: toolbox_db 7 user: toolbox_user 8 password: 我的密码

不同类型数据源的详细配置见数据源

工具

tools.yamltools部分定义智能体可执行的操作:工具类型、影响的数据源、使用参数等。

yaml
1tools: 2 按名称搜索酒店: 3 kind: postgres-sql 4 source: 我的pg数据源 5 description: 根据名称搜索酒店。 6 parameters: 7 - name: 名称 8 type: string 9 description: 酒店名称。 10 statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';

不同类型工具的详细配置见工具

工具集

tools.yamltoolsets部分可定义要一起加载的工具组。便于基于不同智能体或应用定义工具组。

yaml
1toolsets: 2 我的第一个工具集: 3 - 我的第一个工具 4 - 我的第二个工具 5 我的第二个工具集: 6 - 我的第二个工具 7 - 我的第三个工具

可按名称加载工具集:

python
1# 这将加载所有工具 2all_tools = client.load_toolset() 3 4# 这将仅加载'我的第二个工具集'中列出的工具 5my_second_toolset = client.load_toolset("我的第二个工具集")

版本控制

本项目采用语义化版本,包括随以下情况递增的主版本.次版本.修订号

  • 主版本:进行不兼容的API变更时
  • 次版本:以向后兼容方式添加功能时
  • 修订号:进行向后兼容的问题修复时

这适用于工具箱的CLI、与官方SDK的交互以及tools.yaml文件中的定义。

贡献指南

欢迎贡献。请参阅贡献指南开始参与。

请注意本项目采用贡献者行为准则。参与即表示你同意遵守其条款。详情见贡献者行为准则

社区

加入我们的Discord社区与开发者交流!

Stars
11.8k
Forks
1.0k
Watch
75
版本 v0.23.0
Apache License 2.0
更新于 2025年12月14日
agent, agents, ai, bigquery, clickhouse, database, elasticsearch, firestore, genai, llm, mcp, mongodb, mysql, oracle, postgresql, redis, server, spanner, tidb
免责声明:本站大资源来自网络收集整理,小部分资源来自原创,如有侵权等,请联系处理。

相关项目

探索更多类似的开源项目