sqlite-guard-mcp
sqlite-guard-mcp
Позвольте AI-агенту работать с вашей базой данных SQLite, не доверяя ему.
MCP-сервер с четырьмя инструментами — schema, query, execute, audit_log — и
тремя гарантиями:
Чтение не может писать.
queryработает через отдельное соединение, открытое какSQLITE_OPEN_READONLYна уровне C. Замаскированная запись (/* just checking */ UPDATE …) не отлавливается регулярным выражением — она отклоняется самим SQLite. Обеспечение через архитектуру, а не через проверку.Запись сначала выполняется в режиме "сухого прогона".
executeвыполняет оператор внутри транзакции, которая всегда откатывается, и сообщает, что бы произошло (changes,lastInsertRowid). Фиксация требует повторного вызова сconfirm: true— агент должен дважды заявить о своем намерении, а его оператор видит предполагаемый эффект между этими вызовами.Зафиксированные записи оставляют след, по которому можно вернуться. Перед любой фиксацией файл базы данных сохраняется в виде снимка (
VACUUM INTO— транзакционно целостно даже в режиме WAL с активными читателями). Запись и соответствующая строка неизменяемого аудита фиксируются в одной и той же транзакции: невозможно получить изменение без записи в аудите или запись в аудите для изменения, которого не было.
Зачем это нужно
Я веду панель личных финансов, интерфейс которой намеренно только для чтения —
каждое число в ней редактируется AI-агентами через SQL. Такая архитектура
прекрасна (никаких форм, никаких конечных точек записи, агенты ведут учет) ровно до того момента,
пока агент не выполнит правдоподобный UPDATE с неправильным предложением WHERE.
Вывод из работы этой системы: SQL-агенту нужна не более умная модель, а то же самое, что требовалось людям-операторам десятилетиями — разделение чтения и записи, этап планирования/применения, резервные копии и журнал аудита. Этот сервер упаковывает эти четыре вещи за 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 atomicityПодключите к Claude 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).
Инструменты
Инструмент | Контракт |
| Каждая таблица с колонками, типами, первичными ключами, количеством строк — карта агента. |
| SQL только для чтения с параметрами |
| Один оператор записи с параметрами |
| Неизменяемый след каждой зафиксированной записи, сначала самые новые. |
Замечания по дизайну
"Сухой прогон" — это реальное выполнение, а не оценка на основе
EXPLAIN: оператор действительно выполняется (триггеры, ограничения и все остальное), а затем откатывается. Вы видите именно то, что сделала бы фиксация — включая ошибку ограничения, с которой бы столкнулись.Восстановление — это копирование одного файла. Резервные копии — это обычные файлы SQLite с именами
<db>-backup-<timestamp>; восстановление после неудачной зафиксированной записи — этоcp+ перезапуск, а строка аудита точно записывает, какой снимок предшествовал какой записи.BEGIN/COMMITот агента отклоняются — жизненный цикл транзакции принадлежит защите. Иначе случайныйBEGINпозволил бы последующему оператору зафиксировать "откаченный" сухой прогон.Таблица аудита намеренно доступна для чтения через
query. Прозрачность здесь перевешивает секретность: агент может просмотреть свою собственную историю, а оператор может попросить агента подвести итог того, что и когда было изменено.Классификация операторов (
classify.ts) — это маркировка, а не безопасность. Она помечает строки аудита и сообщения об ошибках; границами безопасности являются флаг соединения и протокол транзакций. Все, что решает регулярное выражение, решительный ввод может отменить.
Ограничения (честные)
Списки разрешений/запретов для отдельных таблиц не реализованы (API авторизации SQLite не предоставляется better-sqlite3); граница проходит по всей базе данных. Направляйте сервер на базу данных, управление которой вы предполагаете доверить агентам.
VACUUM INTOтребует SQLite ≥ 3.27 (2019); более старые сборки используют копирование файла, которое безопасно только в неактивном состоянии.Один MCP-сервер = один файл базы данных. Запустите несколько экземпляров для нескольких файлов.
Стек
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-