copilot-datagate について
copilot-datagateは、AIツールにポリシー管理された読み取り専用のデータベースアクセスを提供するRust製MCPサーバーです。任意のSQLを公開せず、構造化操作からパラメーター化クエリを構築し、PostgreSQL、MySQL/MariaDB、SQLiteに対応します。
主な機能
- 01読み取り専用のデータベースアクセス
- 02ポリシー検証付きselect・search・aggregate
- 03スキーマを考慮したクエリ構築
- 04PostgreSQL、MySQL/MariaDB、SQLite対応
- 05監査ログ、メトリクス、レート制限
活用シーン
- 01Copilotによる許可済みレコードの取得
- 02任意のSQLを使わない許可列の検索
- 03ポリシー制限付きの複数DB集計
MCP 対応
MCP stdio経由で型付きのselect、search、aggregateツールを公開します。リクエストはスキーマとポリシーで検証されてからパラメーター化クエリに変換され、MCP境界では自由形式のSQLを受け付けません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
📘 DataGate — セキュアな AI 対応データゲートウェイ
DataGate は、GitHub Copilot などの AI ツールにデータベースを制御された予測可能な方法で公開する、ヘッドレスでセキュアなポリシー主導型ゲートウェイです。自由な SQL は使用できません。
DataGate は、LLM と実際のデータベースの間の仲介役として機能します。データベースへの直接アクセスや任意のクエリの公開を許可せず、書き込み操作もできません。 読み取り専用、スキーマ対応、マルチデータベース、そして完全にLLM セーフとなるよう設計されています。
🎯 主な目標
- 安全なデータアクセス — DB ロール、ポリシーエンジン、制御されたクエリビルダーにより、読み取り専用を保証します。
- データベースの抽象化 — モデルが SQL を生成するのではなく、DataGate が安全性を検証したクエリを構築します。
- マルチデータベース — ヘッドレスの DBeaver のように、さまざまなアプリケーションの複数のデータベースに接続できます。
- ポリシーエンジン — テーブル、列、フィルター、上限、操作の複雑さを細かく制御します。
- スキーマ認識 — データベースのスキーマを自動的に読み込み、セキュリティルールを適用します。
- 実際の並行処理 — 非同期で安全なアーキテクチャにより、Copilot からの並列リクエストに最適です。
- メトリクスと監査 — デバッグとオブザーバビリティのために、リクエスト、時間、エラー、上限を追跡します。
- パフォーマンスプロファイリング — プロセス内でレイテンシ(最小/平均/p50/p95/p99/最大)をプロファイリングし、パフォーマンスの推移を監視します。
- 抽象バックエンド — データベースバックエンド共通の読み取り専用トレイトと、PostgreSQL、MySQL/MariaDB、SQLite の具体的な実装を備えています。
🧩 主な機能
- 制御されたクエリビルダー —
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 入力のハードニング —
request_idの検証、テキストペイロードとカーディナリティの制限により、DoS や入力悪用の攻撃対象領域を縮小します。 - 動的ポリシー — 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 を読み取り専用モードで使用するには、次のいずれかを設定します。
- 完全な URL:
SQLITE_URL - ファイルパス:
SQLITE_PATH
SQLite プールのオプション:
SQLITE_MAX_CONNECTIONSSQLITE_ACQUIRE_TIMEOUT_SECS
MySQL/MariaDB の設定
MySQL または MariaDB を読み取り専用モードで使用するには、次のいずれかを設定します。
- 完全な URL:
MYSQL_URL - 個別指定形式:
MYSQL_HOST、MYSQL_PORT(デフォルトは3306)、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE
MySQL/MariaDB プールのオプション:
MYSQL_MAX_CONNECTIONSMYSQL_ACQUIRE_TIMEOUT_SECS
マルチデータベースのバックエンド選択
有効にするバックエンドを明示的に選択するには、DATAGATE_BACKEND を設定します。
auto(デフォルト):優先順位はpostgres->mysql->sqlitepostgresmysql(またはmariadb)sqlite
DATAGATE_BACKEND に特定のバックエンドを設定すると、DataGate は対応する環境設定を必須とします。設定されていない場合は、明確なエラーを出して終了します。
ブートストラップ時のバックエンドの優先順位:
- PostgreSQL
- MySQL/MariaDB
- 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 用のバイナリが含まれます。プラットフォーム別の名前が付いたアーカイブと、artifact の検証に使う
SHA256SUMS-* ファイルも含まれます。
🛡️ DataGate を選ぶ理由
LLM がデータベースと直接やり取りしてはいけません。 安全で、予測可能かつ制御可能で、監査可能、拡張可能なマルチアプリケーション対応レイヤーが必要です。DataGate はそのレイヤーです。
🔧 技術
- 言語:Rust
- データベース:PostgreSQL、MySQL/MariaDB、SQLite(現在)。今後、ほかの DB にも対応予定
- プロトコル:MCP(Model Context Protocol)
- アーキテクチャ:非同期、ポリシー駆動、スキーマ認識型
🚀 プロジェクトの状況
DataGate は設計段階です。リポジトリには、初期構成、ドキュメント、技術ロードマップが含まれています。
🧪 マルチバックエンド統合テスト
バックエンドの統合テストでは、任意の環境変数を使用します。
DATAGATE_TEST_POSTGRES_URLDATAGATE_TEST_MYSQL_URL
環境変数が設定されている場合、該当するテストでは、読み取り専用バックエンドが制御された SELECT を実行し、書き込みステートメントを拒否することを検証します。
環境変数が設定されていない場合、テストはエラーを発生させずにスキップされます。
詳細なドキュメント:
- Architecture.md — 設計原則とレイヤーアーキテクチャ
- ROADMAP.md — 1.0 に向けた詳細なロードマップ
- docs/configuration.md — クイックスタート、バックエンド、ポリシー、運用
- docs/benchmarks.md — SQLite のローカルベンチマークと実 PostgreSQL のベンチマーク
- docs/hardening.md — MCP/データベース境界の最終ハードニングチェックリスト
- docs/http-transport-decision.md — リモート MCP HTTP トランスポートに関するセキュリティ上の決定
- docs/editor-registry-evaluation.md — MCP Registry の要件とエディター間クライアントの評価
- docs/packaging.md — パッケージングチャネルとアーティファクトの正式なソース
- docs/postgres-mcp-comparison.md — 他の PostgreSQL MCP サーバーとの比較
- docs/registry-publication.md — MCP Registry 戦略、エディター間インストール、名前付き接続
- docs/mcp-registry-metadata.json — MCP レジストリ/ギャラリー向けのメタデータ候補
- docs/release-candidate.md — 1.0 候補版の基準とゲート
- docs/mcp-tools.md — MCP ツールの内部契約とルール
- CONTRIBUTING.md — コントリビューション、コミット、ブランチのルール
- SECURITY.md — セキュリティポリシーと脆弱性の報告
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 候補版
📄 ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。