hs-sql-agent は、AI が生成した SQL をそのまま信頼済みコマンドとして扱いません。実行前に解析、検証、対応能力の確認、アクセスポリシーの適用、接続先データベース向けのコンパイルを行います。
クエリの実行経路
クエリは大きく次の順序で処理されます。
- MCP キーを認証し、そのキーに設定されたデータベース、テーブル、ツール、実行上限を適用する。
- 対応している SQL を構造化された定義 / AST へ解析する。
- 文と入力側 SQL の意味がサポート範囲内にあるか検証する。
- 同じ意味を保つために必要な機能を、接続先データベースが安全に表現できるか確認する。
- 設定されたデータベース向けに SQL をコンパイルして出力する。
- 設定された実行上限の範囲内で SQL を実行する。
SQL コンパイラには、入力側の意味を検証する段階と、出力先の対応能力を確認する段階が明示的に分かれています。対応していない構文や、安全に同じ意味を表現できると確認できない機能は、見た目だけ似た別の構文へ置き換えずに拒否します。
なぜフェイルクローズなのか
複数のデータベースで SQL を扱うと、見た目が似ていても NULL の扱い、型規則、演算子の意味、ページング、識別子、関数、DML の動作が異なる構文が数多くあります。
AI から SQL を受け付ける実行基盤で「可能な範囲で書き換える」方式を採ると、構文としては正しくても意味が変わる危険があります。hs-sql-agent はそのため、暗黙の意味変更よりも明示的な拒否を選びます。
データベースごとの SQL 出力
MCP の公開インターフェースは共通ですが、最終的に生成される SQL はデータベースごとに異なります。現在対応しているデータベースは次のとおりです。
- PostgreSQL
- MySQL
- SQL Server
- Oracle
- SQLite
- Firebird
対応範囲は意図的に限定されています。データベース自体が対応一覧にあるからといって、その製品が提供するすべての SQL 構文を受け付けるわけではありません。個々の機能は、その意味を内部表現として保持し、検証できるようになった段階で追加されます。