sqlite-guard-mcp
sqlite-guard-mcp
AIエージェントにSQLiteデータベースを操作させても、信用する必要はありません。
4つのツール(schema、query、execute、audit_log)を備えたMCPサーバーで、以下の3つの保証を提供します。
読み取りは書き込みできません。
queryはCレベルでSQLITE_OPEN_READONLYとして開かれた別の接続で実行されます。偽装された書き込み(/* just checking */ UPDATE …)は正規表現では検出されません。SQLite自体によって拒否されます。検査ではなく、構造によって強制されます。書き込みは最初にドライランされます。
executeは常にロールバックされるトランザクション内でステートメントを実行し、何が起こったか(changes、lastInsertRowid)を報告します。コミットするにはconfirm: trueを指定して再度呼び出す必要があります。エージェントは意図を2回表明しなければならず、その間にオペレーターは意図された効果を確認できます。コミットされた書き込みは追跡可能な痕跡を残します。 コミットの前に、DBファイルのスナップショットが作成されます(
VACUUM INTO— WALモードでアクティブなリーダーがいる場合でもトランザクション一貫性を保証)。書き込みとその追記専用の監査行は同じトランザクションでコミットされます。監査エントリのない変更や、発生しなかった変更に対する監査エントリが生じることはありません。
なぜこれが存在するのか
私は個人財務ダッシュボードを運用しています。そのUIは意図的に読み取り専用です。画面上のすべての数値は、AIエージェントがSQL経由で編集します。このアーキテクチャは素晴らしい(フォームなし、書き込みエンドポイントなし、エージェントが帳簿を管理する)のですが、エージェントがもっともらしいUPDATEを誤ったWHERE句で実行するまでは。
このシステムを運用して得られた洞察:エージェントのSQLに必要なのは、より賢いモデルではなく、人間の運用が何十年も必要としてきたものと同じ、読み取り/書き込みの分離、計画/適用ステップ、バックアップ、そして監査ログです。このサーバーはこれら4つをMCPの背後にパッケージ化し、任意のエージェント(Claude Code、またはMCPを話すその他のもの)が任意のSQLiteファイルに対してこれらを無料で利用できるようにします。
Related MCP server: SQLite Read-Only MCP Server
クイックスタート
npm install
npm run demo # full guardrail walkthrough on a temp DB — 10 seconds, no setup
npm test # 10 tests: rollback semantics, backup consistency, audit atomicityClaude Codeに組み込む:
claude mcp add sqlite-guard \
-e SQLITE_GUARD_DB=/path/to/app.db \
-- npx tsx src/server.tsまたは対話的に検査:npx @modelcontextprotocol/inspector npx tsx src/server.ts(SQLITE_GUARD_DBが設定されている場合)
ツール
ツール | 契約 |
| すべてのテーブルとそのカラム、型、主キー、行数 — エージェントの地図。 |
|
|
|
|
| コミットされたすべての書き込みの追記専用の証跡。新しい順。 |
設計ノート
ドライランは実際の実行であり、
EXPLAINベースの推定ではありません。ステートメントは実際に実行され(トリガー、制約などすべて含む)、ロールバックされます。表示されるのは、コミットが行うであろうこと(発生する制約エラーを含む)です。復元はファイルコピー1つ。 バックアップは
<db>-backup-<timestamp>という名前のプレーンなSQLiteファイルです。誤ったコミットからの復旧はcp+再起動で、監査行はどのスナップショットがどの書き込みより前のものかを正確に記録します。エージェントからの
BEGIN/COMMITは拒否されます — トランザクションのライフサイクルはガードに属します。さもないと、迷子のBEGINによって後続のステートメントが「ロールバックされた」ドライランをコミットしてしまう可能性があります。監査テーブルは意図的に
queryから読み取り可能です。 ここでは秘密よりも透明性が重要です。エージェントは自身の履歴を確認でき、オペレーターはエージェントに何をいつ変更したかを要約するよう依頼できます。ステートメント分類(
classify.ts)はラベル付けであり、セキュリティではありません。 監査行とエラーメッセージにタグを付けます。セキュリティ境界は接続フラグとトランザクションプロトコルです。正規表現が決定するものは、意図的な入力によって覆される可能性があります。
制限事項(正直に)
テーブルごとの許可/拒否リストは実装されていません(better-sqlite3はSQLiteのauthorizer APIを公開していません)。境界はデータベース単位です。エージェントに管理させたいデータベースをサーバーに指定してください。
VACUUM INTOにはSQLite 3.27(2019年)以降が必要です。古いビルドではファイルコピーにフォールバックしますが、これは非アクティブな場合にのみ安全です。1つのMCPサーバー=1つのデータベースファイルです。複数のファイルを扱うには複数のインスタンスを実行してください。
スタック
TypeScript · @modelcontextprotocol/sdk(stdioトランスポート) · better-sqlite3 · zod · vitest。
ライセンス
MIT © Brandon Ta
This server cannot be deployed
Maintenance
Related MCP Connectors
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
AI agents propose database changes as reviewable requests — no direct write access.
AI agents need permission before production SQL writes. Pilot $100 · Gateway $299. Lint≠authorize.
Deterministic safety, correctness & cost gate that vets Postgres SQL before your AI agent runs it.
Related MCP Servers
- AlicenseCqualityAmaintenanceProvides comprehensive SQLite database operations for LLMs with security features, transaction support, and separation of read-only and destructive operations.22174 npm20MIT
- AlicenseAqualityDmaintenanceEnables safe, read-only SQL access to SQLite databases for AI agents, allowing schema exploration and SELECT queries with defense-in-depth protections.3MIT
- AlicenseBqualityAmaintenanceEnables LLM agents to query databases with read-only access, while requiring human approval for writes through a token-based confirmation system.6GPL 3.0
- FlicenseAqualityBmaintenanceEnables AI assistants to query SQLite databases using plain language, with strict read-only enforcement and column-level access control to prevent damage or unauthorized data reads.4-