googleapis/genai-toolbox

⭐ 6,013 🍴 455 Go📄 Apache License 2.0 GitHubで見る →

主な特徴

  • **簡素化された開発**: 10行以内のコードでエージェントにツールを統合、複数のエージェントやフレームワーク間でツールを再利用
  • **優れたパフォーマンス**: 接続プーリング、認証などのベストプラクティスを実装
  • **強化されたセキュリティ**: 統合認証による安全なデータアクセス
  • **エンドツーエンドオブザーバビリティ**: OpenTelemetryサポートによるメトリクスとトレーシング
  • **幅広いデータベースサポート**: 14種類以上のデータベースをサポート
  • **MCP互換**: Model Context Protocolに準拠し、IDEやAIツールとの統合が容易
  • **複数SDK提供**: Go、JavaScript、Python SDKを提供

リポジトリ解析: googleapis/genai-toolbox

基本情報

  • リポジトリ名: googleapis/genai-toolbox
  • 主要言語: Go
  • スター数: 6,013
  • フォーク数: 455
  • 最終更新: ベータ版で活発に更新中
  • ライセンス: Apache License 2.0
  • トピックス: MCP (Model Context Protocol)、データベース、AIツール、Gen AI、オブザーバビリティ

概要

一言で言うと

MCP Toolbox for Databasesは、AIエージェントが様々なデータベースにアクセスできるようにするオープンソースのMCPサーバーで、接続プーリング、認証、オブザーバビリティなどの複雑な問題を処理します。

詳細説明

MCP Toolbox for Databases(旧名: Gen AI Toolbox for Databases)は、Googleが開発したAIエージェント向けのデータベースアクセスソリューションです。このツールは、Model Context Protocol (MCP)をサポートし、AIアプリケーションが複数のデータベースシステムと安全かつ効率的にやり取りできるようにします。

アプリケーションのオーケストレーションフレームワークとデータベースの間に位置し、ツールの管理、配布、実行を担うコントロールプレーンを提供します。これにより、ツールの中央集権管理、エージェント間でのツール共有、アプリケーションの再デプロイなしでのツール更新が可能になります。

主な特徴

  • 簡素化された開発: 10行以内のコードでエージェントにツールを統合、複数のエージェントやフレームワーク間でツールを再利用
  • 優れたパフォーマンス: 接続プーリング、認証などのベストプラクティスを実装
  • 強化されたセキュリティ: 統合認証による安全なデータアクセス
  • エンドツーエンドオブザーバビリティ: OpenTelemetryサポートによるメトリクスとトレーシング
  • 幅広いデータベースサポート: 14種類以上のデータベースをサポート
  • MCP互換: Model Context Protocolに準拠し、IDEやAIツールとの統合が容易
  • 複数SDK提供: Go、JavaScript、Python SDKを提供

使用方法

インストール

前提条件

  • Go 1.23.8以上(ソースからビルドする場合)
  • データベースへのアクセス権
  • オプション: Docker(コンテナ実行の場合)

インストール手順

# 方法1: バイナリダウンロード
export VERSION=0.9.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

# 方法2: コンテナイメージ
export VERSION=0.9.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION

# 方法3: ソースからビルド
go install github.com/googleapis/genai-toolbox@v0.9.0

基本的な使い方

Hello World相当の例

# tools.yaml - 基本的な設定ファイル
sources:
  - id: mydb
    name: My Database
    type: postgres
    connectionString: "postgresql://user:pass@localhost:5432/mydb"

tools:
  - id: sql-query
    name: SQL Query Tool
    source: mydb
    type: postgres-sql
# サーバーの起動
./toolbox --config tools.yaml
# デフォルトでポート5000で起動

実践的な使用例

// Go SDKを使用したエージェントの統合
package main

import (
    "github.com/googleapis/genai-toolbox/client/go"
)

func main() {
    // Toolboxクライアントの初期化
    client := toolbox.NewClient("http://localhost:5000")
    
    // SQLクエリの実行
    result, err := client.InvokeTool("sql-query", map[string]any{
        "query": "SELECT * FROM users WHERE created_at > '2024-01-01'",
    })
    
    // 結果の処理
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Query result: %v\n", result)
}

高度な使い方

# 複数データベースと認証を使用した設定
sources:
  - id: cloud-sql-pg
    name: Cloud SQL PostgreSQL
    type: cloud-sql-postgres
    databaseName: production_db
    instanceName: my-project:us-central1:my-instance
    auth:
      type: google-iam
      
  - id: bigquery
    name: BigQuery Analytics
    type: bigquery
    projectId: my-analytics-project
    datasetId: sales_data
    auth:
      type: google-oauth

toolsets:
  - id: analytics-tools
    name: Analytics Toolset
    tools:
      - type: bigquery-execute-sql
        source: bigquery
      - type: postgres-execute-sql
        source: cloud-sql-pg
        
# MCPサーバーとしての設定
mcp:
  transport:
    - stdio
    - sse
  version: 2025-01-05
# Python SDKを使用したAIエージェントの実装
from genai_toolbox import ToolboxClient
from langchain.agents import Tool

client = ToolboxClient("http://localhost:5000")

# LangChainとの統合
def query_database(query: str) -> str:
    """Execute SQL query on the database"""
    result = client.invoke_tool("sql-query", {"query": query})
    return str(result.data)

tools = [
    Tool(
        name="DatabaseQuery",
        func=query_database,
        description="Execute SQL queries on the database"
    )
]

# AIエージェントで使用
agent = initialize_agent(tools, llm, agent="zero-shot-react-description")
agent.run("How many orders were completed last month?")

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • internal/prebuiltconfigs/tools/: 各データベース用の事前構成ファイル
  • MCP統合例: IDEとの接続方法のデモ
  • マルチデータベース例: 複数のデータソースを統合する例

チュートリアル・ガイド

  • Getting Startedガイド(公式サイト)
  • IDE接続ガイド(MCPを使用したAIアシスタント統合)
  • デプロイメントガイド(Cloud Run、Kubernetes、Docker Compose)
  • SDKリファレンス(Go、JavaScript、Python)

技術的詳細

アーキテクチャ

全体構造

Toolboxはアプリケーションのオーケストレーションフレームワークとデータベースの間に位置するコントロールプレーンです。レイヤードアーキテクチャを採用し、ソース(データベース接続)、ツール(操作の定義)、サーバー(APIとMCPエンドポイント)の3つの主要コンポーネントで構成されています。

ディレクトリ構成

genai-toolbox/
├── cmd/                # CLIコマンドの実装
├── internal/           # 内部パッケージ
│   ├── auth/          # 認証・許可モジュール
│   ├── sources/       # データベースドライバー実装
│   ├── tools/         # ツール実装
│   ├── server/        # HTTP/MCPサーバー
│   └── telemetry/     # オブザーバビリティ
├── docs/               # ドキュメント
├── tests/              # 統合テスト
└── sdks/               # 各言語SDK

主要コンポーネント

  • Sources: データベース接続の抽象化層

    • 場所: internal/sources/
    • 依存: 各データベースクライアントライブラリ
    • インターフェース: 統一されたソースインターフェース
  • Tools: データベース操作の実装

    • 場所: internal/tools/
    • 依存: Sourcesモジュール
    • インターフェース: Execute(), Validate() メソッド
  • Server: APIとMCPエンドポイント

    • 場所: internal/server/
    • 依存: Tools、Sources、Authモジュール
    • インターフェース: REST API、MCP(stdio/SSE)

技術スタック

コア技術

  • 言語: Go 1.23.8 / 1.24.5 (toolchain)
  • Webフレームワーク: chi/v5 - 軽量で高速なHTTPルーター
  • 主要ライブラリ:
    • データベースドライバー: pgx/v5 (PostgreSQL), go-sql-driver/mysql, redis/go-redis
    • Google Cloud: alloydbconn, cloudsqlconn, bigquery, spanner
    • オブザーバビリティ: OpenTelemetry SDK
    • 設定: goccy/go-yaml, spf13/cobra
    • バリデーション: go-playground/validator

開発・運用ツール

  • ビルドツール: Go Modules、Make(オプション)
  • テスト:
    • 単体テスト: go test
    • 統合テスト: Cloud Build(Google認証が必要な場合)
    • Lint: golangci-lint
  • CI/CD: GitHub Actions、Google Cloud Build
  • デプロイ: Docker、Cloud Run、Kubernetes対応

設計パターン・手法

  • プラグインアーキテクチャ: ツールとソースの動的登録
  • ファクトリパターン: ソースタイプごとのファクトリ
  • アダプターパターン: 異なるデータベースAPIの統一インターフェース化
  • レジストリパターン: ツールの中央管理と検索
  • オブザーバーパターン: OpenTelemetryを使用した監視

データフロー・処理フロー

  1. リクエスト受信: HTTP/MCPエンドポイントでリクエストを受け取る
  2. 認証・許可: Google IAM、OAuth、APIキーなどで認証
  3. ツール解決: リクエストされたツールIDから実装を取得
  4. ソース接続: コネクションプールからデータベース接続を取得
  5. ツール実行: パラメータをバリデートしてツールを実行
  6. 結果フォーマット: JSONで結果をフォーマット
  7. レスポンス返却: クライアントに結果を返す

API・インターフェース

公開API

REST API - /v1/tools/{toolId}/invoke

  • 目的: ツールの実行
  • 使用例:
curl -X POST http://localhost:5000/v1/tools/sql-query/invoke \
  -H "Content-Type: application/json" \
  -d '{
    "params": {
      "query": "SELECT * FROM users LIMIT 10"
    }
  }'

MCPインターフェース

  • 目的: Model Context ProtocolによるAIツール統合
  • stdioとSSEトランスポートをサポート
  • 使用例:
// MCPリクエスト
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "sql-query",
    "arguments": {
      "query": "SELECT COUNT(*) FROM orders"
    }
  },
  "id": 1
}

設定・カスタマイズ

設定ファイル

# tools.yaml - 主要設定項目
sources:
  - id: mydb
    type: postgres  # サポート: postgres, mysql, bigquery, spanner等
    connectionString: "..."
    auth:
      type: google-iam  # オプション: google-iam, google-oauth, password

tools:
  - id: custom-query
    source: mydb
    type: postgres-execute-sql
    parameters:
      allowedTables: ["users", "orders"]  # アクセス制限

# サーバー設定
server:
  port: 5000
  telemetry:
    enabled: true
    exporter: google-cloud  # またはotlp

拡張・プラグイン開発

新しいツールの追加:

  1. internal/tools/にツール実装を作成
  2. Toolインターフェースを実装
  3. init()関数でツールを登録
type MyTool struct{}

func (t *MyTool) Execute(ctx context.Context, params map[string]any) (any, error) {
    // ツールのロジック
}

func init() {
    tools.Register("my-tool", &MyTool{})
}

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • 接続プーリング: データベース接続の再利用によるレイテンシ削減
  • 非同期処理: Goのゴルーチンを活用した並行処理
  • メモリ効率: ストリーミング処理による大量データの効率的な処理
  • キャッシュ: ツール定義と設定のメモリキャッシュ

スケーラビリティ

  • 水平スケーリング: 複数インスタンスでの負荷分散
  • マルチテナント: 設定ファイルで複数のデータソースを管理
  • Cloud Run/Kubernetes: コンテナ環境でのオートスケーリング
  • オブザーバビリティ: ボトルネックの特定と最適化

制限事項

  • 技術的な制限:
    • ベータ版のため、破壊的変更の可能性
    • MCPプロトコルの一部機能が未実装
    • データベース固有の機能制限
  • 運用上の制限:
    • データベース認証情報の管理が必要
    • ネットワークアクセスの設定が必要
    • 大量の同時接続時のリソース管理

評価・所感

技術的評価

強み

  • 幅広いデータベースサポート: 14種類以上の主要データベースに対応
  • MCP標準準拠: AIツールとの標準的な統合方法を提供
  • セキュリティ重視: Google IAM、OAuthなど企業グレードの認証
  • オブザーバビリティ: OpenTelemetryを活用した充実した監視
  • エンタープライズ対応: Cloud Run、Kubernetesデプロイメントサポート
  • 開発者体験: シンプルなYAML設定とクリアなAPI

改善の余地

  • ベータステータス: v1.0まで破壊的変更の可能性
  • ドキュメント分散: SDKドキュメントが未整備
  • エラーハンドリング: データベース固有エラーの統一的な処理
  • テストカバレッジ: 統合テストの拡充

向いている用途

  • AIエージェントのデータアクセス: LLMアプリケーションのデータベース統合
  • IDE統合: MCP経由でのAIアシスタント機能
  • マルチデータベースアプリケーション: 複数のデータソースを統合
  • エンタープライズGen AI: 企業内データへの安全なアクセス
  • ラピッドプロトタイピング: AIツールの迅速な開発とテスト

向いていない用途

  • リアルタイムトランザクション: 高頻度・低レイテンシ要求
  • 小規模アプリケーション: オーバーヘッドが大きい
  • スタンドアロンDBクライアント: 直接アクセスの方が効率的
  • 非構造化データ処理: 主にSQLベースのツール

総評

MCP Toolbox for Databasesは、AIエージェントとデータベースをつなぐ重要なブリッジとして位置づけられる優れたソリューションです。Googleが開発していることから、特にGoogle Cloudプラットフォームとの統合が強力で、エンタープライズ環境での使用に適しています。

MCPプロトコルへの対応により、IDEやAIツールとの統合が容易になり、開発者の生産性向上に大きく貢献する可能性を持っています。特に「プレーン英語でクエリを実行」「データベース管理の自動化」「コンテキストを理解したコード生成」といった機能は、開発ワークフローを変革するポテンシャルを秘めています。

現在ベータ版であることが懸念点ですが、活発な開発とコミュニティサポートを考慮すると、今後の成熟が期待できます。エンタープライズGen AIアプリケーションの開発において、検討すべき重要なツールと言えるでしょう。