Architecture Journal

MCP Toolbox for Databases:把 Agent 接資料庫這件事標準化

現在談 AI agent,大家很容易把焦點放在 model、framework 或 prompting。

但一進到企業場景,真正麻煩的地方通常不是「agent 夠不夠聰明」,而是「它要怎麼安全、穩定、可治理地碰資料」。

這也是我覺得 MCP Toolbox for Databases 值得注意的原因。

它不是另一個 agent framework。更準確地說,它比較像一層把 database access 工程化的 tool layer。上面可以接 IDE、CLI、agent framework 或自建應用,下面接各種資料來源,中間用一致方式定義工具、權限與暴露面。

如果把名詞拆開來看,差別會更清楚:

名稱主要解的問題在架構裡比較像什麼
MCPclient 和 server 怎麼標準化溝通protocol
MCP Toolbox怎麼把資料能力包成可重用、可治理的工具server + tool framework

先講結論

如果要用一句話介紹它,我會這樣說:

MCP Toolbox for Databases 是一個開源的 MCP server,也是一個 tool framework。它把資料庫能力包成可重用、可治理的 tools,讓 AI agents、IDEs 和應用程式能用比較一致的方式接到企業資料。

這個專案早期叫做 Gen AI Toolbox for Databases,後來正式對齊 Model Context Protocol,repo 和文件也一起改名為 MCP Toolbox for Databases

這個 rename 不只是品牌調整。它更像是在表態:這個專案的重點不是替某個 agent framework 做 integration,而是想成為 MCP 生態裡的資料接入層。

MCP 解的是協定,Toolbox 解的是落地

MCP 解的是 protocol 問題,例如:

  1. client 和 tool server 怎麼溝通
  2. tool manifest、參數 schema、呼叫流程怎麼標準化

但只靠 protocol,還不夠把 agent 真正接到資料庫。實務上你還要處理不少事情:

  1. database connection lifecycle
  2. connection pooling
  3. authentication and authorization
  4. query safety
  5. observability
  6. tool definition and reuse

如果這一層每個團隊都自己做,最後很常變成:

  1. demo 可以跑
  2. production 不好治理
  3. 換一個 client 或 framework 就得重包一次

MCP Toolbox 的價值,就是把這層收斂成現成的 server 與 tool framework。

flowchart LR
    A[Gemini CLI / Claude Code / Codex / Agent App] --> B[MCP Toolbox]
    B --> C[Postgres / MySQL / BigQuery / Cloud SQL / Spanner / Neo4j ...]

所以更精確地說,MCP 是溝通規格,MCP Toolbox 則是把這個規格變成可部署、可共用、可治理的資料接入實作。

它其實有兩種用法

官方文件目前把 MCP Toolbox 的角色拆成兩個面向:

模式適合場景你得到什麼
Ready-to-use MCP Server想快速把 IDE 或 CLI 接到資料庫--prebuilt=<database> 拿到現成 generic tools
Custom Tools Framework想做 production-ready agent tools用設定檔定義可治理、可重用的 domain tools

第一種用法很直觀,就是先把資料接進來。

{
  "mcpServers": {
    "toolbox-postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@toolbox-sdk/server",
        "--prebuilt=postgres",
        "--stdio"
      ]
    }
  }
}

配好 environment variables 之後,就能直接拿到像 list_tablesexecute_sql 這類通用能力。這很適合 demo、PoC 或教學,因為你不用先寫一堆 server code 或 MCP wrapper。

第二種用法比較重要,也更接近真正落地。

當你知道 agent 常做的是「查詢訂單狀態」或「搜尋符合條件的飯店」,你通常就不會想一直把 generic SQL tool 直接丟給它。你會想把操作收斂成比較窄、比較穩、比較容易審計的 domain tools。

常見例子像是:

  1. 查詢某個訂單狀態
  2. 搜尋符合條件的飯店
  3. 只讀某些 schema 的分析工具
  4. 帶權限與參數限制的 NL2SQL tool

這時候,MCP Toolbox 的角色就不只是 MCP server,而更像一層 tool governance。

而且它不是非黑即白。現在的文件也明確支援把 --prebuilt 和自訂 config 混著用。你可以先用 generic tools 把流程跑通,再慢慢補成自己的 domain tools,不用一開始就把整套治理做完。

一個簡單例子就能看出差別

如果只是要先驗證 Claude Code、Gemini CLI 或其他 MCP client 能不能碰 PostgreSQL,prebuilt mode 就夠了:

{
  "mcpServers": {
    "toolbox-postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@toolbox-sdk/server",
        "--prebuilt=postgres",
        "--stdio"
      ]
    }
  }
}

再配上基本連線資訊:

export POSTGRES_HOST=127.0.0.1
export POSTGRES_PORT=5432
export POSTGRES_DATABASE=toolbox_db
export POSTGRES_USER=toolbox_user
export POSTGRES_PASSWORD=my-password

這樣的好處很直接:

  1. 不用先寫 server code
  2. 不用先包自己的 MCP tool
  3. 很快就能測 schema、查資料、驗證互動流程

但如果要進 production,通常就不該讓 agent 永遠拿著 execute_sql 到處跑。這時比較合理的做法會像下面這樣,用 tools.yaml 定義收斂過的 domain tool:

kind: source
name: my-pg-source
type: postgres
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: ${POSTGRES_PASSWORD}
---
kind: tool
name: search-hotels-by-location
type: postgres-sql
source: my-pg-source
description: Search for hotels based on location.
annotations:
  readOnlyHint: true
parameters:
  - name: location
    type: string
    description: The location of the hotel.
statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';
---
kind: toolset
name: booking-agent
tools:
  - search-hotels-by-location

這段設定最重要的不是 SQL 本身,而是它把幾件事固定下來:

  1. agent 只能做特定動作,不是任意查
  2. 參數結構是清楚的
  3. tool 可以帶有 read-only 語意
  4. 不同 agent 可以用不同 toolset 切開能力範圍

也就是說,從這一步開始,你不再只是讓 agent 連資料庫,而是在定義它可以做什麼、不能做什麼。

如果你有自己的應用程式,也可以直接把這些 tools 載進去:

import { ToolboxClient } from '@toolbox-sdk/core';

const client = new ToolboxClient('http://127.0.0.1:5000');

const bookingTools = await client.loadToolset('booking-agent');
const searchHotels = await client.loadTool('search-hotels-by-location');

const result = await searchHotels({ location: 'Basel' });
console.log(result);

這點很實用,因為它代表同一個 Toolbox server 可以同時服務 MCP client 和你自己的 agent service。你可以先在 Claude Code 或 Gemini CLI 裡驗證工具,再把同一套東西接進正式系統,不用重做一遍。

它真正有價值的地方

如果只看新聞標題,這件事很容易被理解成「Google 也支援 MCP 了」。但我覺得真正值得看的,主要是下面三件事。

1. 它把 database access 從零碎實作拉成共用層

很多團隊做 agent,最後會在各自的 repo 裡長出一堆資料工具。有些包得很薄,有些直接把 SQL 暴露出去,有些權限和觀測幾乎沒有統一。

MCP Toolbox 的方向,則是把這件事往共享層拉。這代表工具可以被多個 agent 或 app 共用,也比較容易集中更新、集中治理,而不是每個專案各做各的。

2. 它的定位不只是一個 MCP adapter

目前文件提到的整合面,不只 MCP client,也包含 ADK、LangChain、LlamaIndex、自建應用,以及 Python、JavaScript、Go SDK。

這表示它想站的位置,不只是「幫 IDE 讀 mcp.json」,而是同時服務 MCP world 和 application SDK world 的資料工具層。

3. 它把安全、邊界和可觀測性提早放進設計裡

官方文件一直強調的,不只是「連得上資料庫」,還包括:

  1. connection pooling
  2. integrated auth
  3. OpenTelemetry-based observability
  4. restricted access
  5. 用 tool 與 toolset 控制暴露面

這些問題一旦走到真實資料場景,就不太可能只靠 prompt 解決。你最後一定還是要回到工具邊界、權限模型與可觀測性。

我認為比較合理的採用方式

如果今天真的要把它帶進團隊,我覺得最實際的路徑是三步。

第一步:先用 prebuilt tools 驗證需求

這個階段先不要急著談完整治理,而是先回答幾個問題:

  1. agent 到底需不需要直接碰資料
  2. 最常見的查詢模式是什麼
  3. 哪些資訊不適合暴露給 generic tools

這時候 MCP Toolbox 比較像 discovery layer。

第二步:把高頻操作收斂成 custom tools

等你知道 agent 真的在做什麼,就不要讓它一直用泛用 query 能力。把高價值、高頻率的操作收斂成少數幾個 domain tools,才會有比較穩定的 contract、比較清楚的權限邊界,也比較容易審計。

第三步:再把 production concern 補完整

例如:

  1. read-only 預設
  2. write access 明確 opt-in
  3. row limit 與 timeout
  4. client-to-server auth
  5. telemetry 與 trace
  6. toolset 分群

這條 adoption path 比一開始就直接開一個 agent 去碰資料庫成熟很多。

它提醒我們的,其實是另一件事

很多 agent 討論都把重心放在 model、planning、memory、reasoning 或 multi-agent orchestration。

但一旦進到真實資料環境,瓶頸常常不是模型,而是更下面那層:

  1. tool contract
  2. permissions
  3. data access
  4. observability
  5. operational boundary

MCP Toolbox 值得注意,不只是因為它掛著 Google 或 MCP,而是因為它把這些原本很零散、很容易被每個團隊重做一遍的東西,整理成一個比較一致的 product surface。

我覺得更準確的定位是:

它不是在跟 agent framework 競爭,而是在替 agent framework 補上一層可治理的資料接入能力。

結論

如果把 AI agent 看成「推理 + 工具 + 資料」的組合,那 MCP Toolbox 真正重要的地方,不是讓 agent 更會做事,而是讓資料接入這件事比較像工程,而不是 patchwork。

對團隊來說,這通常比「又多一個 agent framework」更有價值。

因為真正難 scale 的,往往不是 demo 裡那個 agent,而是 demo 成功之後,整個團隊要怎麼共享、限制、審計、更新那些 tools。

MCP Toolbox for Databases 給的一個很實際的答案是:

把資料庫能力收斂成標準化、可重用、可治理的工具層。

參考資料

  1. MCP Toolbox for Databases docs
  2. JS Quickstart (Local)
  3. Prebuilt Configs
  4. Tools
  5. Toolsets
  6. GitHub repo
  7. Google Cloud Blog:MCP Toolbox for Databases now supports Model Context Protocol
  8. Model Context Protocol