mcpField
C
copilot-datagate

copilot-datagate

ローカル
github.com/afurlaneデータベース04 週間前に更新

copilot-datagate について

copilot-datagateは、AIツールにポリシー管理された読み取り専用のデータベースアクセスを提供するRust製MCPサーバーです。任意のSQLを公開せず、構造化操作からパラメーター化クエリを構築し、PostgreSQL、MySQL/MariaDB、SQLiteに対応します。

主な機能

  1. 01読み取り専用のデータベースアクセス
  2. 02ポリシー検証付きselect・search・aggregate
  3. 03スキーマを考慮したクエリ構築
  4. 04PostgreSQL、MySQL/MariaDB、SQLite対応
  5. 05監査ログ、メトリクス、レート制限

活用シーン

  1. 01Copilotによる許可済みレコードの取得
  2. 02任意のSQLを使わない許可列の検索
  3. 03ポリシー制限付きの複数DB集計

MCP 対応

MCP stdio経由で型付きのselect、search、aggregateツールを公開します。リクエストはスキーマとポリシーで検証されてからパラメーター化クエリに変換され、MCP境界では自由形式のSQLを受け付けません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"afurlane-copilot-datagate": {
"command": "npx",
"args": [
"-y",
"@copilot-datagate/cli"
],
"env": {
"DATAGATE_PROJECT_ROOT": "<DATAGATE_PROJECT_ROOT>"
}
}
}
}
起動コマンドnpx -y @copilot-datagate/cli
設定が必要な環境変数
DATAGATE_PROJECT_ROOTWorkspace root used to resolve .datagate/datagate.toml, datagate.toml, or user-level config.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@copilot-datagate/cli0.4.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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

Build Release License

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_CONNECTIONS
  • SQLITE_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_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 用のバイナリが含まれます。プラットフォーム別の名前が付いたアーカイブと、artifact の検証に使う 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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。