Skip to main content
Glama
egoring

sql-guard-mcp

by egoring

sql-guard-mcp

CI

AIエージェント向けの読み取り専用SQL。多層セーフティガード付き。

LLMエージェントに生のデータベースアクセスを与えるのは自爆行為です。このMCPサーバーは、4つの独立したガードレイヤーを通じてSQLiteデータベースをエージェントに公開します。エージェントが引き起こせる最悪の事態は読み取りが遅すぎることだけであり、それさえも遮断されます。

韓国語ドキュメント: README.ko.md

ガードレイヤー

レイヤー

阻止するもの

仕組み

クエリ検証

書き込み、スキーマ変更、スタックされたステートメントによるインジェクション

単一のSELECT/WITHステートメントのみ許可。禁止キーワードのスキャン(INSERT、DROP、PRAGMA、ATTACH、...)を実行。複数ステートメントは拒否

テーブル許可リスト

機密テーブル(PII、認証情報)の読み取り

FROM/JOIN識別子をSQLGUARD_ALLOWED_TABLESと照合。list_tables/describe_tableもフィルタリング

行数上限

コンテキストウィンドウの氾濫

すべてのクエリはサーバー側のLIMIT付きサブクエリとしてラップされる — ユーザー指定のLIMIT 999999では上書き不可。切り詰めはフラグで通知される

実行上限

暴走クエリ(デカルト結合)

SQLiteのプログレスハンドラによるウォッチドッグが、N回のVMステップ後に、対処可能なメッセージ付きで中止する

OSレベルの読み取り専用

上記すべてが失敗した場合

mode=roで接続をオープン — SQLite自身によって強制される最後の防衛線

この設計原理は、本番環境のLLMエージェント向け意思決定ガードの構築から生まれました: モデルが注意深いことを信頼するな — 不注意を不可能にし、すべての拒否メッセージがエージェントに代わりの行動を伝えるようにせよ。

Related MCP server: sqlite-analyst

ツール

  • sql_list_tables — 表示可能なテーブル(許可リスト適用済み)

  • sql_describe_table — 列、型、行数

  • sql_query — ガード付き読み取り専用クエリ

  • sql_guard_status — 現在のガード設定(デバッグのための透明性)

デモ

Claude Desktopに接続し、同梱の広告キャンペーンデモDBに対してクエリを実行 — そして削除リクエストを拒否:

sql-guard-mcpのデモ: CTRランキングに回答、DELETEリクエストを拒否

エージェントは自由に探索・集計します(「どのアクティブなキャンペーンが最もCTRが高いか?」)。しかしcampaignsテーブルの消去を求められると、ガードが拒否し、エージェントはその理由を説明します — 設計上読み取り専用であり、プロンプトではなくコードで強制されます。

セットアップ

MCP SDK以外の依存関係はゼロ — 合成広告キャンペーンのデモDBが同梱されており、初回実行時に自動作成されます。

pip install -e .

# optional configuration
export SQLGUARD_DB="/path/to/your.db"                      # default: bundled demo
export SQLGUARD_ALLOWED_TABLES="campaigns,daily_stats"     # default: all tables
export SQLGUARD_MAX_ROWS="200"

Claude Desktop

{
  "mcpServers": {
    "sql-guard-mcp": {
      "command": "sql-guard-mcp",
      "env": { "SQLGUARD_ALLOWED_TABLES": "campaigns,daily_stats" }
    }
  }
}

次に、*「先週最もCTRが高かったアクティブなキャンペーンはどれ?」*と尋ねてみてください — エージェントがスキーマを探索し、ガードレール内でクエリを実行します。何かを削除するよう依頼してみてください。拒否メッセージを読んでみましょう。

テスト

pip install -e ".[dev]"
pytest   # guard validation + execution enforcement, no external DB needed

テストには敵対的なケースが含まれます: スタックされたステートメント、SELECT接頭辞付きの書き込み、JOINによる許可リストのバイパス、ユーザー指定のLIMITによる上書き試行、VMステップのウォッチドッグによって中止されるデカルト結合の暴走。

ライセンス

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to explore and query SQLite databases through read-only tools, with defense-in-depth sandboxing preventing any data modifications.
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to safely explore and query a SQLite database in read-only mode, allowing them to inspect schema and run analytical SQL queries without risking data modification.
    3
    -