跳到主内容Loading...
genai-toolbox - 开源项目详情自动编程开源技术
MCP Toolbox for Databases is an open source MCP server for databases.
项目详情
深入了解 genai-toolbox 的功能与特性
数据库MCP工具箱

[!注意]
数据库MCP工具箱目前处于测试阶段,在首个稳定版本(v1.0)发布前可能会有重大变更。
数据库MCP工具箱是一个开源的数据库MCP服务器。它通过处理连接池、认证等复杂问题,让你能更轻松、快速、安全地开发工具。
本README提供简要概述。完整文档请参阅官方文档。
[!注意]
该解决方案最初命名为"数据库生成式AI工具箱",因其开发早于MCP。为与新添加的MCP兼容性保持一致,现已更名。
目录
为什么选择工具箱?
工具箱帮助你构建能让智能体访问数据库数据的生成式AI工具。工具箱提供:
- 简化开发:用不到10行代码将工具集成到智能体,在多个智能体或框架间复用工具,更轻松地部署新版本工具
- :内置连接池、认证等最佳实践
免责声明:本站大资源来自网络收集整理,小部分资源来自原创,如有侵权等,请联系处理。
更佳性能
增强安全:集成认证机制保障数据安全访问端到端可观测:开箱即用的指标和追踪,原生支持OpenTelemetry告别频繁切换上下文,让你的AI助手成为真正的开发伙伴。通过MCP工具箱连接IDE和数据库后,你可以将复杂耗时的数据库任务委托给AI,从而更快构建并专注于重要事务。这不仅是代码补全,更是赋予AI处理整个开发生命周期所需的上下文。
- 自然语言查询:直接在IDE中用自然语言与数据交互。无需编写SQL就能提问复杂问题,如"2024年交付了多少订单?包含哪些商品?"
- 自动化数据库管理:只需描述数据需求,AI助手就能帮你管理数据库。它可以处理查询生成、表创建、索引添加等任务
- 生成上下文感知代码:让AI助手基于实时数据库模式生成可直接使用的应用代码和测试,加速开发周期
- 大幅减少开发开销:显著减少手动设置和样板代码时间。MCP工具箱帮助简化冗长的数据库配置、重复代码和易出错的模式迁移
整体架构
工具箱位于应用编排框架和数据库之间,提供用于修改、分发或调用工具的控制平面。通过集中存储和更新工具,简化工具管理,让你能在不重新部署应用的情况下共享和更新工具。
快速开始
安装服务器
最新版本请查看发布页面,根据操作系统和CPU架构选择以下安装方式。
二进制安装
安装工具箱二进制文件:
export VERSION=0.9.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
容器镜像
也可通过容器安装:
export VERSION=0.9.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
源码编译
从源码安装需确保已安装最新版Go,然后运行:
运行服务器
配置定义工具的tools.yaml后,执行toolbox启动服务器:
./toolbox --tools-file "tools.yaml"
[!注意]
工具箱默认启用动态重载。如需禁用,使用--disable-reload标志。
使用toolbox help查看完整标志列表!停止服务器可发送终止信号(多数平台为ctrl+c)。
集成到应用
服务器运行后,可将工具加载到应用中。以下是各框架的客户端SDK:
Python (Github)
核心SDK
-
安装工具箱核心SDK:
-
加载工具:
from toolbox_core import ToolboxClient
async with ToolboxClient("http://127.0.0.1:5000") as client:
tools = await client.load_toolset("工具集名称")
详细使用说明见项目README。
LangChain/LangGraph
-
安装工具箱LangChain SDK:
pip install toolbox-langchain
-
加载工具:
from toolbox_langchain import ToolboxClient
async with ToolboxClient("http://127.0.0.1:5000") as client:
tools = client.load_toolset()
详细使用说明见项目README。
LlamaIndex
-
安装工具箱LlamaIndex SDK:
pip install toolbox-llamaindex
-
加载工具:
from toolbox_llamaindex import ToolboxClient
async with ToolboxClient("http://127.0.0.1:5000") as client:
tools = client.load_toolset()
详细使用说明见项目README。
Javascript/Typescript (Github)
核心SDK
-
安装工具箱核心SDK:
npm install @toolbox-sdk/core
-
加载工具:
import { ToolboxClient } from '@toolbox-sdk/core';
const URL = 'http://127.0.0.1:5000';
let client = new ToolboxClient(URL);
const tools = await client.loadToolset('工具集名称');
详细使用说明见项目README。
LangChain/LangGraph
-
安装工具箱核心SDK:
npm install @toolbox-sdk/core
-
加载工具:
import { ToolboxClient } from '@toolbox-sdk/core';
const URL = 'http://127.0.0.1:5000';
let client = new ToolboxClient(URL);
const toolboxTools = await client.loadToolset('工具集名称');
const getTool = (toolboxTool) => tool(currTool, {
name: toolboxTool.getName(),
description: toolboxTool.getDescription(),
schema: toolboxTool.getParamSchema()
});
const tools = toolboxTools.map(getTool);
Genkit
-
安装工具箱核心SDK:
npm install @toolbox-sdk/core
-
加载工具:
import { ToolboxClient } from '@toolbox-sdk/core';
import { genkit } from 'genkit';
const ai = genkit({
plugins: [
googleAI({
apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY
})
],
model: googleAI.model('gemini-2.0-flash'),
});
const URL = 'http://127.0.0.1:5000';
let client = new ToolboxClient(URL);
const toolboxTools = await client.loadToolset('工具集名称');
= () => ai.({
: toolboxTool.(),
: toolboxTool.(),
: toolboxTool.()
}, toolboxTool)
tools = toolboxTools.(getTool);
Go (Github)
核心SDK
-
安装工具箱Go SDK:
go get github.com/googleapis/mcp-toolbox-sdk-go
-
加载工具:
package main
import (
"github.com/googleapis/mcp-toolbox-sdk-go/core"
"context"
)
func main() {
URL := "http://127.0.0.1:5000";
ctx := context.Background()
client, err := core.NewToolboxClient(URL)
tools, err := client.LoadToolset("工具集名称", ctx)
}
详细使用说明见项目README。
LangChain Go
-
安装工具箱Go SDK:
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 := "http://127.0.0.1:5000"
ctx := context.Background()
client, err := core.NewToolboxClient(URL)
tool, err := client.LoadTool("工具名称", ctx)
inputschema, err := tool.InputSchema()
var paramsSchema map[string]any
_ = json.Unmarshal(inputschema, ¶msSchema)
langChainTool := llms.Tool{
Type: "function",
Function: &llms.FunctionDefinition{
Name: tool.Name(),
Description: tool.Description(),
Parameters: paramsSchema,
},
}
}
Genkit
-
安装工具箱Go SDK:
go get github.com/googleapis/mcp-toolbox-sdk-go
-
加载工具:
package main
import (
"context"
"encoding/json"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/googleapis/mcp-toolbox-sdk-go/core"
"github.com/invopop/jsonschema"
)
func main() {
URL := "http://127.0.0.1:5000"
ctx := context.Background()
g, err := genkit.Init(ctx)
client, err := core.NewToolboxClient(URL)
tool, err := client.LoadTool("工具名称", ctx)
inputschema, err := tool.InputSchema()
var schema *jsonschema.Schema
_ = json.Unmarshal(inputschema, &schema)
executeFn := func(ctx *ai.ToolContext, input any) (string, error) {
result, err := tool.Invoke(ctx, input.([]any))
err != {
, err
}
result.(),
}
genkitTool := genkit.DefineToolWithInputSchema(
g,
tool.Name(),
tool.Description(),
schema,
executeFn,
)
}
Go GenAI
-
安装工具箱Go SDK:
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 := "http://127.0.0.1:5000"
ctx := context.Background()
client, err := core.NewToolboxClient(URL)
tool, err := client.LoadTool("工具名称", ctx)
inputschema, err := tool.InputSchema()
var schema *genai.Schema
_ = json.Unmarshal(inputschema, &schema)
funcDeclaration := &genai.FunctionDeclaration{
Name: tool.Name(),
Description: tool.Description(),
Parameters: schema,
}
genAITool := &genai.Tool{
FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration},
}
}
OpenAI Go
-
安装工具箱Go SDK:
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 := "http://127.0.0.1:5000"
ctx := context.Background()
client, err := core.NewToolboxClient(URL)
tool, err := client.LoadTool("工具名称", ctx)
inputschema, err := tool.InputSchema()
var paramsSchema openai.FunctionParameters
_ = json.Unmarshal(inputschema, ¶msSchema)
openAITool := openai.ChatCompletionToolParam{
Function: openai.FunctionDefinitionParam{
Name: tool.Name(),
Description: openai.String(tool.Description()),
Parameters: paramsSchema,
},
}
}
配置
主要通过tools.yaml文件配置工具箱。如有多个文件,可用--tools-file tools.yaml标志指定加载哪个文件。
数据源
tools.yaml的sources部分定义工具箱可访问的数据源。多数工具至少需要一个数据源执行操作。
sources:
我的pg数据源:
kind: postgres
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: 我的密码
工具
tools.yaml的tools部分定义智能体可执行的操作:工具类型、影响的数据源、使用参数等。
tools:
按名称搜索酒店:
kind: postgres-sql
source: 我的pg数据源
description: 根据名称搜索酒店。
parameters:
- name: 名称
type: string
description: 酒店名称。
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
工具集
tools.yaml的toolsets部分可定义要一起加载的工具组。便于基于不同智能体或应用定义工具组。
toolsets:
我的第一个工具集:
- 我的第一个工具
- 我的第二个工具
我的第二个工具集:
- 我的第二个工具
- 我的第三个工具
all_tools = client.load_toolset()
my_second_toolset = client.load_toolset("我的第二个工具集")
版本控制
本项目采用语义化版本,包括随以下情况递增的主版本.次版本.修订号:
- 主版本:进行不兼容的API变更时
- 次版本:以向后兼容方式添加功能时
- 修订号:进行向后兼容的问题修复时
这适用于工具箱的CLI、与官方SDK的交互以及tools.yaml文件中的定义。
贡献指南
请注意本项目采用贡献者行为准则。参与即表示你同意遵守其条款。详情见贡献者行为准则。
社区
#agent#agents#ai#bigquery#clickhouse#cockroachdb#database#elasticsearch#firestore#genai#llm#mcp#mongodb#mysql#oracle#postgresql#redis#server#spanner#tidb
bolt.diy
Prompt, run, edit, and deploy full-stack web applications using any LLM you want!
#agent#agents#ai#bigquery#clickhouse#cockroachdb#database#elasticsearch#firestore#genai#llm#mcp#mongodb#mysql#oracle#postgresql#redis#server#spanner#tidb
const
getTool
toolboxTool
defineTool
name
getName
description
getDescription
schema
getParamSchema
const
map
map
string
if
nil
return
""
return
string
nil