Skip to main content
Glama

📘 DataGate — セキュアなAI対応データゲートウェイ

Build Release License

DataGate は、ヘッドレスで安全かつポリシー駆動のゲートウェイであり、制御され、予測可能で、自由なSQLを排除した方法で、AIツール(GitHub Copilot など)にデータベースを公開します。

DataGate は、LLM と実際のデータベースの間の仲介役として機能します。データベースへの直接アクセスは許可されず、任意のクエリを公開せず、書き込み操作も許可しません。読み取り専用、スキーマ認識、マルチデータベース、そして完全にLLMセーフになるよう設計されています。

🎯 主な目標

  • 安全なデータアクセス — DBロール、ポリシーエンジン、制御されたクエリビルダーにより読み取り専用を保証。

  • データベースの抽象化 — モデルはSQLを生成せず、DataGate が安全で検証済みのクエリを構築。

  • マルチデータベース — ヘッドレスな DBeaver のように、さまざまなアプリケーションのさまざまなデータベースに接続可能。

  • ポリシーエンジン — テーブル、カラム、フィルター、制限、操作の複雑さをきめ細かく制御。

  • スキーマ認識 — データベーススキーマを自動的にロードし、セキュリティルールを適用。

  • 真の並行性 — Copilot からの並列リクエストに理想的な、安全な非同期アーキテクチャ。

  • メトリクスと監査 — デバッグと可観測性のためのリクエスト、時間、エラー、制限の追跡。

  • パフォーマンスプロファイリング — パフォーマンスの経時監視のためのインプロセスレイテンシープロファイル(min/平均/p50/p95/p99/max)。

  • 抽象化されたバックエンド — データベースバックエンド向けの共通読み取り専用トレイト。PostgreSQL、MySQL/MariaDB、SQLite の具体的な実装を備える。

Related MCP server: MCP DB Gateway

🧩 主な機能

  • 制御されたクエリビルダー — select、search、aggregate などの意味論的操作を自動検証付きで提供。

  • 型付き MCP select — JSONコントラクト、JSON行による読み取り専用実行、ポリシー、監査、サニタイズされたエラー。MCPトランスポートは次のステップ。

  • 型付き MCP search — 許可されたカラムに対する ILIKE を使った意味論的検索、パラメータ化クエリ、ポリシー/レート制限/メトリクス/監査、サーバーサイドの出力制限。

  • 型付き MCP aggregate — 許可されたカラムに対する count、sum、avg、min、max。パラメータ化されたフィルター付きで、自由なSQLや GROUP BY はサポートしない。

  • バージョン管理された MCP API — APIバージョンと利用可能なツールのための安定したディスクリプタ。

  • MCP stdio トランスポート — ポリシーセーフな経路上でのハンドシェイク、ディスカバリ、select、search、aggregate の呼び出し。

  • 高度なフィルター — パターン(LIKE/ILIKE)、範囲(BETWEEN)、全文検索(to_tsvector + plainto_tsquery)をサポート。常にパラメータ化され、ポリシーによって検証される。

  • 制御されたスキーマカタログ — テーブル、ビュー、インデックス、制約(PK/FK/UNIQUE/CHECK/EXCLUSION)、トリガー、関数、プロシージャ、シーケンスのポリシーフィルター付きイントロスペクション。DDL定義は安全な場合のみ。

  • レート制限 — モデルのループや過度に重いクエリからの保護。

  • 出力制限 — 応答は常に抑制され、安全で、構造化されている。

  • 決定的なエラー — スキーマの漏洩なし、SQLの露出なし、スタックトレースなし。

  • 構造化されたエラー — コード、一般的なメッセージ、retryable の表示を持つ安定したエンベロープ。

  • 外部設定 — ポリシー、制限、名前付きプロファイル(dev/staging/prod)のためのTOMLファイル。

  • MCP入力の堅牢化 — DoS/入力悪用の表面を減らすための request_id 検証、テキストペイロードとカーディナリティの制限。

  • 動的ポリシー — アクティブなポリシーは、MCPツールを再作成することなく、TOMLから再読み込みするなどして原子的に置き換え可能。

DataGate は自由なSQLクエリのMCP関数を公開しません。エージェントは構造化されたパラメータのみを送信し、パラメータ化クエリの構築前にスキーマとポリシーに対して検証されます。

公開エラーは invalid_request、policy_denied、backend_unavailable、internal_error のコードを使用します。SQL、スタックトレース、パスワード、フィルター値、許可されていないオブジェクト名はMCP境界を越えません。

PostgreSQL 設定

PostgreSQL の認証情報は設定ファイルやコードに保存されません。サービスはランタイム環境から接続を読み取ります。

  • コンパクトモード: DB_URL

  • コンポーネントモード: DB_HOST、DB_PORT(デフォルト 5432)、DB_USER、DB_PASSWORD、DB_NAME

  • PostgreSQL オプション: DB_OPTIONS、形式 key=value&key=value

  • プール: DB_MAX_CONNECTIONS と DB_ACQUIRE_TIMEOUT_SECS

SQLite 設定

SQLite を読み取り専用モードで使用するには、次の2つのいずれかを設定します。

  • 完全なURL: SQLITE_URL

  • ファイルパス: SQLITE_PATH

SQLite プールオプション:

  • SQLITE_MAX_CONNECTIONS

  • SQLITE_ACQUIRE_TIMEOUT_SECS

MySQL/MariaDB 設定

MySQL または MariaDB を読み取り専用モードで使用するには、次の2つのいずれかを設定します。

  • 完全なURL: MYSQL_URL

  • コンポーネントモード: MYSQL_HOST、MYSQL_PORT(デフォルト 3306)、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE

MySQL/MariaDB プールオプション:

  • MYSQL_MAX_CONNECTIONS

  • MYSQL_ACQUIRE_TIMEOUT_SECS

マルチデータベースバックエンドの選択

どのバックエンドを有効にするかを明示的に選択するには、DATAGATE_BACKEND を設定します。

  • auto(デフォルト): 優先順位 postgres -> mysql -> sqlite

  • postgres

  • mysql(または mariadb)

  • sqlite

DATAGATE_BACKEND が特定のバックエンドに設定されている場合、DataGate は対応する環境設定を要求します。そうでない場合は、明示的なエラーで終了します。

ブートストラップ時のバックエンド優先順位:

  1. PostgreSQL

  2. MySQL/MariaDB

  3. SQLite

リスト内で最初に設定されたバックエンドが有効になります。

オプションのサーバーサイドレート制限は RATE_LIMIT_REQUESTS と RATE_LIMIT_WINDOW_SECS を使用します。制限はポリシー、クエリビルダー、データベースの前に request_id ごとに適用されます。しきい値を超えたリクエストは rate_limited を受け取り、SQLは生成されません。

クエリビルダーはまた、ポリシー内で max_query_complexity によって設定可能な最大予算を適用します。各カラムはコスト1、各フィルターはコスト2です。予算を超えるリクエストはSQL生成前に拒否されます。

select 応答はポリシー内の max_output_bytes にも従います。最終的なJSONペイロードが制限を超える場合、DataGate はSQLや内部詳細を公開せずにポリシーエラーでリクエストを拒否します。

メトリクスレイヤーは、select ツールのサーバーサイドのカウンターとレイテンシも記録します。総リクエスト数/受理数/拒否数、バックエンドエラー、インメモリのp95レイテンシ、PostgreSQLプールのスナップショット(size、idle)です。

アプリケーションロギングは2つの形式をサポートしています。

  • LOG_FORMAT=pretty(デフォルト)

  • LOG_FORMAT=json(構造化、ログコレクターに適した形式)

ログの最小レベルは LOG_LEVEL(trace|debug|info|warn|error)または RUST_LOG で設定できます。

DB_URL が存在する場合はコンポーネントよりも優先されます。PostgreSQL ロールは読み取り専用の権限のみを持つ必要があります。さらに、各接続は default_transaction_read_only = on を設定します。

アクティブなプロファイルは profile = "dev" で選択され、[profiles.dev.policy] でポリシーを定義できます。名前付きプロファイルが存在しない場合、レガシー形式の [policy] も引き続きサポートされます。宣言されたが存在しないプロファイルは、データベース操作を開始せずに deny-all ポリシーを有効にします。

公開リリースには、Linux x64/ARM64、Windows x64/ARM64、macOS Intel/Apple Silicon 向けのバイナリが含まれ、プラットフォームごとに名前が付けられたアーカイブと、アーティファクト検証用の SHA256SUMS-* ファイルが含まれます。

🛡️ なぜ DataGate なのか?

LLM はデータベースと直接通信すべきではありません。 安全で、予測可能で、制御され、監査可能で、拡張可能で、マルチアプリケーション対応のレイヤーが必要です。DataGate はそのレイヤーです。

🔧 テクノロジー

  • 言語: Rust

  • データベース: PostgreSQL、MySQL/MariaDB、SQLite(現在)、他のDBは今後

  • プロトコル: MCP(Model Context Protocol)

  • アーキテクチャ: 非同期、ポリシー駆動、スキーマ認識

🚀 プロジェクトの状態

DataGate は設計段階にあります。リポジトリには初期構造、ドキュメント、技術ロードマップが含まれています。

🧪 マルチバックエンド統合テスト

バックエンド統合テストはオプションの環境変数を使用します。

  • DATAGATE_TEST_POSTGRES_URL

  • DATAGATE_TEST_MYSQL_URL

変数が存在する場合、対応するテストは読み取り専用バックエンドが制御された SELECT を実行し、書き込みステートメントを拒否することを検証します。変数が存在しない場合、テストはエラーなしでスキップされます。

完全なドキュメント:

VS Code から MCP で起動する場合:

  • デフォルトのローカルトランスポートは stdio です

  • ローカル stdio 用の mcp.json テンプレートは docs/mcp-tools.md と docs/configuration.md にあります

  • リモートHTTPはデフォルトの1.0の範囲外であり、専用のセキュリティ決定が必要です

📍 ロードマップ(概要)

  • ポリシーエンジンの定義

  • 制御されたクエリビルダーの実装(パラメータ化された select)

  • 読み取り専用接続の保証

  • 自動スキーマ認識(内部PostgreSQLカタログ)

  • 監査ログ基盤(AUDIT_LOG_PATH によるJSONL)

  • MCPツール(select、search、aggregate)

  • マルチデータベースサポート(PostgreSQL、MySQL/MariaDB、SQLite)

  • 初期エンタープライズレイヤー(可観測性、ハードニング、動的ポリシー)

  • MCP APIの安定性(バージョン管理されたディスクリプタ、stdioトランスポート)

  • MCP stdio トランスポート

  • ベンチマーク

  • 最終ハードニング

  • 1.0 候補版

📄 ライセンス

Apache License 2.0

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.
    101 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides governed, read-only PostgreSQL access for AI agents via MCP. Enforces schema/table allowlists, query limits, and audit events.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only, guarded access to business databases via MCP. Enables natural language querying with built-in security barriers like table allowlists, PII masking, and audit logging.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables secure, read-only querying of only predefined logical database views through MCP tools and a REST API, using validated SQL and semantic view metadata.
    -