sqlite-guard-mcp
sqlite-guard-mcp
Permite que un agente de IA trabaje en tu base de datos SQLite sin confiar en él.
Un servidor MCP con cuatro herramientas — schema, query, execute, audit_log — y tres garantías:
Las lecturas no pueden escribir.
queryse ejecuta en una conexión separada abierta conSQLITE_OPEN_READONLYa nivel de C. Una escritura disfrazada (/* solo comprobando */ UPDATE …) no es detectada por una expresión regular — es rechazada por el propio SQLite. Cumplimiento por construcción, no por inspección.Las escrituras se ejecutan primero en seco.
executeejecuta la sentencia dentro de una transacción que siempre se revierte e informa lo que habría sucedido (changes,lastInsertRowid). Confirmar requiere volver a llamar conconfirm: true— el agente debe declarar su intención dos veces, y su operador ve el efecto previsto entre medias.Las escrituras confirmadas dejan un rastro que puedes recorrer hacia atrás. Antes de cualquier confirmación, se crea una instantánea del archivo de la base de datos (
VACUUM INTO— transaccionalmente consistente incluso bajo WAL con lectores activos). La escritura y su fila de auditoría de solo anexión se confirman en la misma transacción: no puedes terminar con un cambio sin una entrada de auditoría, o una entrada de auditoría para un cambio que no ocurrió.
Por qué existe esto
Ejecuto un panel de control de finanzas personales cuya interfaz de usuario es deliberadamente de solo lectura — cada número en él es editado por agentes de IA a través de SQL. Esa arquitectura es maravillosa (sin formularios, sin puntos finales de escritura, los agentes mantienen los libros) hasta que un agente ejecuta un UPDATE de aspecto plausible con una cláusula WHERE incorrecta.
La conclusión de operar ese sistema: lo que el SQL de los agentes necesita no es un modelo más inteligente, es lo mismo que las operaciones humanas necesitaron durante décadas — separación de lectura/escritura, un paso de planificar/aplicar, copias de seguridad y un registro de auditoría. Este servidor empaqueta esas cuatro cosas detrás de MCP para que cualquier agente (Claude Code, o cualquier otra cosa que hable MCP) las obtenga gratis en cualquier archivo SQLite.
Related MCP server: SQLite Read-Only MCP Server
Inicio rápido
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 atomicityConéctalo a Claude Code:
claude mcp add sqlite-guard \
-e SQLITE_GUARD_DB=/path/to/app.db \
-- npx tsx src/server.tsO inspecciónalo interactivamente: npx @modelcontextprotocol/inspector npx tsx src/server.ts
(con SQLITE_GUARD_DB configurada).
Las herramientas
Herramienta | Contrato |
| Cada tabla con columnas, tipos, claves primarias, conteos de filas — el mapa del agente. |
| SQL de solo lectura con parámetros |
| Sentencia de escritura única con parámetros |
| El rastro de solo anexión de cada escritura confirmada, la más reciente primero. |
Notas de diseño
La ejecución en seco es ejecución real, no una estimación basada en
EXPLAIN: la sentencia se ejecuta genuinamente (desencadenadores, restricciones y todo) y se revierte. Lo que ves es lo que haría una confirmación — incluyendo el error de restricción que encontrarías.Restaurar es copiar un archivo. Las copias de seguridad son archivos SQLite planos nombrados
<db>-backup-<timestamp>; la recuperación de una escritura confirmada incorrecta escp+ reinicio, y la fila de auditoría registra exactamente qué instantánea es anterior a qué escritura.BEGIN/COMMITdel agente son rechazados — el ciclo de vida de la transacción pertenece al guardia. De lo contrario, unBEGINfuera de lugar permitiría que una sentencia posterior confirme la ejecución en seco "revertida".La tabla de auditoría es legible a través de
queryintencionadamente. La transparencia supera al secretismo aquí: el agente puede revisar su propio historial, y el operador puede pedir al agente que resuma qué cambió y cuándo.La clasificación de sentencias (
classify.ts) es etiquetado, no seguridad. Etiqueta filas de auditoría y mensajes de error; los límites de seguridad son el indicador de conexión y el protocolo de transacción. Cualquier cosa que decida una expresión regular, una entrada determinada puede deshacerla.
Limitaciones (honestas)
No se implementan listas de permitir/denegar por tabla (la API de autorización de SQLite no está expuesta por better-sqlite3); el límite es por base de datos. Apunta el servidor a una base de datos que pretendas que los agentes administren.
VACUUM INTOnecesita SQLite ≥ 3.27 (2019); las compilaciones más antiguas recurren a una copia de archivo, que solo es segura cuando está inactiva.Un servidor MCP = un archivo de base de datos. Ejecuta varias instancias para varios archivos.
Stack
TypeScript · @modelcontextprotocol/sdk (transporte stdio) · better-sqlite3 · zod · vitest.
Licencia
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-