DataGate
📘 DataGate — Secure AI-Ready Data Gateway
DataGate è un gateway headless, sicuro e policy-driven che espone basi dati a strumenti AI (come GitHub Copilot) in modo controllato, prevedibile e privo di SQL libero.
DataGate funge da intermediario tra un LLM e una base dati reale: non permette accesso diretto al database, non espone query arbitrarie, non consente operazioni di scrittura. È progettato per essere read-only, schema-aware, multi-database, e completamente LLM-safe.
🎯 Obiettivi principali
Accesso sicuro ai dati — read-only garantito tramite ruoli DB, policy engine e query builder controllato.
Astrazione del database — il modello non genera SQL: DataGate costruisce query sicure e validate.
Multi-database — può collegarsi a diverse basi dati di diverse applicazioni, come un DBeaver headless.
Policy engine — controllo granulare su tabelle, colonne, filtri, limiti e complessità delle operazioni.
Schema awareness — carica automaticamente lo schema del database e applica regole di sicurezza.
Concorrenza reale — architettura asincrona e sicura, ideale per richieste parallele da Copilot.
Metriche e audit — tracciamento di richieste, tempi, errori e limiti per debugging e osservabilità.
Profilazione performance — profilo latenza in-process (min/media/p50/p95/p99/max) per monitoraggio evolutivo delle performance.
Backend astratto — trait read-only comune per backend database, con implementazioni concrete per PostgreSQL, MySQL/MariaDB e SQLite.
Related MCP server: MCP DB Gateway
🧩 Funzionalità principali
Query builder controllato — operazioni semantiche come
select,search,aggregate, con validazione automatica.MCP
selecttipizzato — contratto JSON, esecuzione read-only con righe JSON, policy, audit ed errori sanitizzati; il transport MCP resta lo step successivo.MCP
searchtipizzato — ricerca semantica conILIKEsu colonne consentite, query parametrizzate, policy/rate-limit/metriche/audit e output limit server-side.MCP
aggregatetipizzato —count,sum,avg,minemaxsu colonne consentite, con filtri parametrizzati e senza supporto a SQL libero oGROUP BY.API MCP versionata — descriptor stabile per versione API e tool disponibili.
Transport MCP stdio — handshake, discovery e chiamate
select,searcheaggregatesopra il percorso policy-safe.Filtri avanzati — supporto a pattern (
LIKE/ILIKE), range (BETWEEN) e full-text (to_tsvector+plainto_tsquery) sempre parametrizzati e validati da policy.Catalogo schema controllato — introspezione policy-filtered di tabelle, viste, indici, vincoli (PK/FK/UNIQUE/CHECK/EXCLUSION), trigger, funzioni, procedure e sequenze; definizioni DDL solo quando sicure.
Rate limiting — protezione contro loop del modello e query troppo pesanti.
Limiti di output — risposte sempre contenute, sicure e strutturate.
Errori deterministici — nessun leak di schema, nessun SQL esposto, nessun stack trace.
Errori strutturati — envelope stabile con codice, messaggio generico e indicazione
retryable.Configurazione esterna — file TOML per policy, limiti e profili nominati (dev/staging/prod).
Hardening input MCP — validazione
request_id, limiti su payload testuali e cardinalità per ridurre superfici DoS/input abuse.Policy dinamica — la policy attiva può essere sostituita atomicamente, anche ricaricandola da TOML, senza ricreare i tool MCP.
DataGate non espone una funzione MCP di query SQL libera: l'agente invia esclusivamente parametri strutturati, validati contro schema e policy prima della costruzione della query parametrizzata.
Gli errori pubblici usano i codici invalid_request, policy_denied,
backend_unavailable e internal_error. SQL, stack trace, password, valori dei filtri
e nomi di oggetti non autorizzati non attraversano il confine MCP.
Configurazione PostgreSQL
Le credenziali PostgreSQL non vengono salvate nei file di configurazione o nel codice. Il servizio legge la connessione dall'ambiente runtime:
modalità compatta:
DB_URLmodalità a componenti:
DB_HOST,DB_PORT(default5432),DB_USER,DB_PASSWORD,DB_NAMEopzioni PostgreSQL:
DB_OPTIONS, nel formatokey=value&key=valuepool:
DB_MAX_CONNECTIONSeDB_ACQUIRE_TIMEOUT_SECS
Configurazione SQLite
Per usare SQLite in modalità read-only, configura una delle due varianti:
URL completo:
SQLITE_URLpath file:
SQLITE_PATH
Opzioni pool SQLite:
SQLITE_MAX_CONNECTIONSSQLITE_ACQUIRE_TIMEOUT_SECS
Configurazione MySQL/MariaDB
Per usare MySQL o MariaDB in modalità read-only, configura una delle due varianti:
URL completo:
MYSQL_URLmodalità a componenti:
MYSQL_HOST,MYSQL_PORT(default3306),MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE
Opzioni pool MySQL/MariaDB:
MYSQL_MAX_CONNECTIONSMYSQL_ACQUIRE_TIMEOUT_SECS
Selezione backend multi-database
Per scegliere esplicitamente quale backend attivare, imposta DATAGATE_BACKEND:
auto(default): precedenzapostgres->mysql->sqlitepostgresmysql(omariadb)sqlite
Quando DATAGATE_BACKEND è impostato a un backend specifico, DataGate richiede
la relativa configurazione ambiente; in caso contrario termina con errore esplicito.
Precedenza backend in bootstrap:
PostgreSQL
MySQL/MariaDB
SQLite
Il primo backend configurato nella lista viene attivato.
Il rate limiting server-side opzionale usa RATE_LIMIT_REQUESTS e
RATE_LIMIT_WINDOW_SECS. Il limite è applicato per request_id prima di policy,
query builder e database; richieste oltre soglia ricevono rate_limited e non
generano SQL.
Il query builder applica anche un budget massimo configurabile nella policy tramite
max_query_complexity: ogni colonna costa 1 e ogni filtro costa 2. Le richieste oltre
budget vengono rifiutate prima di generare SQL.
La risposta select è soggetta anche a max_output_bytes nella policy: se il payload
JSON finale supera il limite, DataGate rifiuta la richiesta con errore di policy senza
esporre SQL o dettagli interni.
Il layer metriche registra anche contatori e latenza lato server per il tool select:
richieste totali/accettate/rifiutate, errori backend, p95 latenza in memoria e snapshot
del pool PostgreSQL (size, idle).
Il logging applicativo supporta due formati:
LOG_FORMAT=pretty(default)LOG_FORMAT=json(strutturato, adatto a log collector)
Il livello minimo dei log può essere configurato con LOG_LEVEL
(trace|debug|info|warn|error) oppure tramite RUST_LOG.
Se DB_URL è presente ha precedenza sui componenti. Il ruolo PostgreSQL deve avere
solo permessi di lettura; inoltre ogni connessione imposta
default_transaction_read_only = on.
Il profilo attivo si seleziona con profile = "dev" e può definire la policy in
[profiles.dev.policy]. Se non sono presenti profili nominati, resta supportata la
forma legacy [policy]. Un profilo dichiarato ma inesistente attiva una policy
deny-all, senza avviare operazioni sul database.
Le release pubblicate includono binari per Linux x64/ARM64, Windows x64/ARM64 e
macOS Intel/Apple Silicon, con archivi nominati per piattaforma e file
SHA256SUMS-* per la verifica degli artifact.
🛡️ Perché DataGate?
Gli LLM non devono parlare direttamente ai database. Serve un layer sicuro, prevedibile, controllato, auditabile, estensibile e multi-applicazione. DataGate è questo layer.
🔧 Tecnologie
Linguaggio: Rust
Database: PostgreSQL, MySQL/MariaDB e SQLite (oggi), altri DB domani
Protocollo: MCP (Model Context Protocol)
Architettura: asincrona, policy-driven, schema-aware
🚀 Stato del progetto
DataGate è in fase di progettazione. Il repository contiene la struttura iniziale, la documentazione e la roadmap tecnica.
🧪 Test integrazione multi-backend
I test di integrazione backend usano variabili ambiente opzionali:
DATAGATE_TEST_POSTGRES_URLDATAGATE_TEST_MYSQL_URL
Quando una variabile è presente, il relativo test verifica che il backend
read-only esegua SELECT controllate e rifiuti statement di scrittura.
Se la variabile non è presente, il test viene saltato senza errore.
Documentazione completa:
Architecture.md — design principles e architettura a layer
ROADMAP.md — roadmap dettagliata verso la 1.0
docs/configuration.md — quick start, backend, policy e operazioni
docs/benchmarks.md — benchmark locali SQLite e PostgreSQL reale
docs/hardening.md — checklist hardening finale per il confine MCP/database
docs/http-transport-decision.md — decisione sicurezza sul transport MCP HTTP remoto
docs/editor-registry-evaluation.md — valutazione requisiti MCP Registry e client cross-editor
docs/packaging.md — canali packaging e sorgente canonica degli artifact
docs/postgres-mcp-comparison.md — confronto con altri server MCP PostgreSQL
docs/registry-publication.md — strategia MCP Registry, installazione cross-editor e connessioni nominate
docs/mcp-registry-metadata.json — metadata candidate per registry/gallerie MCP
docs/release-candidate.md — criteri e gate della 1.0 candidate
docs/mcp-tools.md — contratti interni e regole dei tool MCP
CONTRIBUTING.md — regole di contribuzione, commit e branch
SECURITY.md — policy di sicurezza e segnalazione vulnerabilità
Per l'avvio da VS Code con MCP:
il transport locale di default è
stdioi template
mcp.jsonper stdio locale sono in docs/mcp-tools.md e docs/configuration.mdHTTP remoto è fuori dal default 1.0 e richiede una decisione di sicurezza dedicata
📍 Roadmap (sintesi)
Definizione del policy engine
Implementazione del query builder controllato (select parametrizzato)
Connessione read-only garantita
Schema awareness automatica (catalogo interno PostgreSQL)
Audit log foundation (JSONL via
AUDIT_LOG_PATH)Tool MCP (
select,search,aggregate)Supporto multi-database (PostgreSQL, MySQL/MariaDB, SQLite)
Enterprise layer iniziale (osservabilità, hardening, policy dinamica)
Stabilità API MCP (descriptor versionato; transport stdio)
Transport MCP stdio
Benchmark
Hardening finale
Versione 1.0 candidate
📄 Licenza
This server cannot be deployed
Maintenance
Related MCP Connectors
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
One governed MCP endpoint for 40+ business systems. Read-only, source-cited answers.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.101 npm3MIT

MCP DB Gatewayofficial
AlicenseNot gradedqualityBmaintenanceProvides governed, read-only PostgreSQL access for AI agents via MCP. Enforces schema/table allowlists, query limits, and audit events.1MIT- AlicenseNot gradedqualityBmaintenanceProvides read-only, guarded access to business databases via MCP. Enables natural language querying with built-in security barriers like table allowlists, PII masking, and audit logging.MIT
- FlicenseNot gradedqualityBmaintenanceEnables secure, read-only querying of only predefined logical database views through MCP tools and a REST API, using validated SQL and semantic view metadata.-