谷歌MCP Toolbox for Databases拆解:助你快速构建数据访问智能体的神器

0 阅读8分钟

在企业Agent的运行过程中,可能会经常需要访问数据库,比如一个AI客服可能需要查询某订单的状态等。实现这样的Agent工具固然并不复杂,但你可能会遇到诸如工具共享、安全管控、连接池等一系列工程问题。本文将详解来自谷歌公司的开源项目:MCP Toolbox for Databases,看它如何帮助我们更轻松便捷的开发与维护数据库访问的工具。

  • 了解基本概念
  • 安装、配置与启动Toolbox Server
  • 使用Tools:原生SDK模式
  • 使用Tools:MCP模式
  • 安全、可观测性、小结

01 了解基本概念

【MCP Toolbox for Databases是什么】

谷歌的MCP Toolbox for Databases是一个开源的数据库访问工具(Tool)服务器。可以让你的AI客户端(比如智能体、IDE等)更简单快速的拥有访问各种数据库的工具。这里的数据库可以是RDBMS、图数据库、缓存,甚至还可以是HTTP访问的数据服务。

尽管名字中带有MCP,但MCP Toolbox for Databases并不依赖于MCP,它诞生在MCP之前,后来添加了对MCP协议访问的兼容性。

借助MCP Toolbox for Databases,你可以:

  • 快速定义访问数据库的工具(Tool)或工具集
  • 支持多种常见数据库,比如Postgres、Neo4j、Redis等
  • 对这些数据库工具做集中管控、维护、观察与共享
  • 在主流的Agent开发框架中快速加载与使用这些工具
  • 在支持MCP的客户端中方便的集成与使用这些工具

【它有什么好处】

LLM应用对企业数据库的访问,通常的方案通常是自行开发,比如:

  • 编写函数工具直接用SQL访问数据库
  • 将企业现有的微服务/API包装成工具
  • 直接借助Text2SQL方案实现自然语言访问

不过在大型企业应用中,这些实现方法存在一些可以预见的问题:

  • 大量分散的工具在企业内难以实现集中管控,并在多个应用或框架间复用
  • 一些常见的工程问题会带来额外的成本与隐患,比如安全性与并发性能
  • 至于Text2SQL,存在很明显的可靠性不足、权限失控、延时过大等风险

而借助MCP Toolbox for Databases,这些问题可以有效的得到解决或者缓解。当然它也远非万能,一些复杂的数据访问逻辑或许仍然需要传统方案的结合。

【怎么使用它】

MCP Toolbox for Databases目前有两种主要使用方式:

方式1:通过传统HTTP(原生SDK)

使用借助官方提供的客户端集成SDK,可以轻松的在LangGraph、LlamaIndex、Google ADK框架开发的Agent中导入并使用Toolbox Server中的工具。

方式2:通过MCP

使用借助MCP客户端SDK以及开发框架提供的适配器(如langgrap-mcp-adaper),将Toolbox Server作为独立的MCP Server,加载与使用其中的工具。在MCP访问模式下,有少量功能目前存在限制。总的建议是:如果你是基于LangGraph、LlamaIndex、ADK框架开发Agent,直接使用SDK访问;其他情况下(如支持MCP的IDE、现有基于MCP的应用等)则使用MCP模式使用。

02 安装、配置与启动Toolbox Server

我们创建一个Demo演示MCP Toolbox for Databases的能力与用法。这个Demo将实现一个简单的ReAct Agent,使用Toolbox Server中的多个工具来完成一些模拟的CRM客户服务中的常见任务。比如订单查询统计、物流状态查询等。原料如下:

  • Agent框架:LangGraph
  • 数据库:Postgres
  • Toolbox访问:通过SDK访问
  • LLM:gpt-4o-mini

【1. 准备模拟数据库】

创建一个测试用的Postgres数据库,模拟一些客户服务相关的表,并让AI帮我们生成一些模拟数据:

【2. 安装MCP Toolbox for Databases】

直接在github上下载release版本。与一些MCP Server不同, MCP Toolbox for Databases以可执行的介质(go语言编写)发行:

github.com/googleapis/…

下载完成将获得一个toolbox可执行文件,将这个文件拷贝到你的环境下,并增加可执行权限:

chmod u+x toolbox

【3. 配置tools.yaml】

创建一个配置文件tools.yaml,用来定义数据库的连接信息及发布的工具。以下是我们配置文件的一部分:

sources:
  # 数据库信息
  crm-database:
      kind: postgres
      host: 127.0.0.1
      port: 5432
      database: crm
      user: postgres
      password: yourpassword
tools:
  # 通用SQL执行工具
  execute_sql_tool:
    kind: postgres-execute-sql
    source: crm-database
    description: 在CRM数据库上执行自定义SQL语句。

  # 客户管理工具
  search-customer-by-phone:
    kind: postgres-sql
    source: crm-database
    description: 根据电话号码搜索客户。
    parameters:
      - name: phone
        type: string
        description: 要搜索的电话号码。
    statement: SELECT customer_id, name, phone, email, address, vip_level, registration_date FROM customers WHERE phone ILIKE '%' || $1 || '%';
  
  #....其他自定义工具....

toolsets:
  crm-customer-management:
    - search-customer-by-email
    - search-customer-by-phone
    - get-customer-stats
......

配置信息很好理解:

sources部分:

用来定义数据源。这些源将用作下面工具的访问对象。可以是:

  • 关系型数据库如postgres
  • 图数据库如neo4j
  • 缓存数据库如redis
  • HTTP访问端点,表示一个HTTP Server

tools部分:

用来定义多个数据访问的工具。每个工具包括它的类型(kind)、数据源(source)、描述(description)、参数(parameters)、以及具体的数据访问方法。访问方法根据不同的数据源而有所不同:

  • 关系数据库,通常是参数化的SQL语句(statement)。比如上面例子中SQL的$1就代表parameters部分定义的第一个参数;
  • 图数据库,比如neo4j,定义访问的参数化的Cypher语句(statement)
  • 缓存数据库,比如redis,定义缓存访问的参数化命令(commands)
  • HTTP数据源,定义访问的Method、Path以及参数化的Header、Body等

注意这里kind为postgres-execute-sql的工具无需定义任何SQL,这是一个预置的用来执行任意SQL的工具,但不要在生产环境中开放。

toolsets部分:

用来将大量的工具进行分组管理,形成多个工具集。你可以把不同的工具集交给不同的Agent使用或者做不同的安全控制等;

【4.启动Toolbox Server】

在配置完成tools.yaml后,就可以启动Toolbox Server:

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

当你看到如下的加载信息后,代表Server启动成功,现在你就可以使用这个Server中的各种工具了!

03 使用Tools:原生SDK模式

Toolbox Server本质上就是一个HTTP Server,用来暴露你定义的工具并提供端点调用。事实上你可以用浏览器查看到工具信息。比如查看以下地址:

http://127.0.0.1:5000/api/tool/execute_sql_tool

你可以直接看到这样的信息:

所以,原生SDK就是通过标准HTTP方法来发现与调用Server中的各种工具。这里我们使用LangChain框架适配的SDK:

pip install toolbox-langchain

接着就可以在LangGraph Agent中来加载使用Toolbox Server中的工具/工具集。核心方法如下:

image.png

通过简单的aload_toolset就可以加载Toolbox Server中你定义的数据访问工具,然后将它交给Agent使用。

对这个Agent做简单测试,以验证工具的可用性(使用流式调用跟踪中间步骤):

可以看到,Agent调用了两个工具来回答用户的输入问题,并且完美的回答了问题。相对于使用Text2SQL,这种预定义工具牺牲了一定的灵活性,但提供了生产环境下绝对的确定性与准确性。而对于分析环境,常面临较复杂的SQL,也可以把它们固化下来作为工具:

04 使用Tools:MCP模式

通过MCP使用MCP Toolbox for Databases有两种常见场景:

【在IDE(比如Cursor、VSCode)中使用】

这种场景下通常不需要定义tools.yaml,直接使用预构建的工具即可,通常包括list_tables(列出所有表)或者execute_sql(执行任何SQL)工具。所以只需配置MCP Server的启动参数即可,比如:

{
  "mcpServers": {
    "postgres": {
      "command": "./PATH/TO/toolbox",
      "args": ["--prebuilt","postgres","--stdio"],
      "env": {
        "POSTGRES_HOST": "",
        "POSTGRES_PORT": "",
        "POSTGRES_DATABASE": "",
        "POSTGRES_USER": "",
        "POSTGRES_PASSWORD": ""
      }
    }
  }
}

【在自定义LLM应用中使用】

只需借助MCP官方的Client SDK或langgraph-mcp-adapter这样的框架适配器,就可用标准的方式访问Toolbox Server中的工具。目前支持stdio与sse两种模式。

这里不再做编程展示,我们用MCP官方的调试工具MCP Inspector简单验证Toolbox Server中的工具。首先启动Inspector:

npx @modelcontextprotocol/inspector

然后进入MCP Inspector的Web界面,使用SSE方式连接,并确保URL正确(通常为http://xxxxx:5000/mcp/sse),然后连接。如果连接成功,你可以在右边的Tools页面看到所有Toolbox Server中的工具,然后对其测试:

05 安全、可观测性、小结

以上展示了Google的一个实用开源项目MCP Toolbox for Databases的用法。它可以帮助我们快速构建生成式AI应用所需要的工具,以访问企业中各种数据源中的数据,并提供了良好的性能、兼容性与可管理性。

作为面向企业环境的工具服务器,MCP Toolbox for Databases还提供了一定的安全管控与可观测能力。

  • 目前MCP Toolbox for Databases支持通过Google账号进行OAuth 2.0的认证流程,以获得工具调用的安全令牌。
  • MCP Toolbox for Databases提供了基于OpenTelemetry标准的可观测性,用于进行统一的分布式追踪、指标搜集与日志管理。

期待随着版本的持续迭代,MCP Toolbox for Databases会变得越来越强大易用。

**END**