- Category
- Developer Tools
- Rank
- No. 1266Tools index
Previous survey · No. 1290 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Data, Retrieval & Knowledge
- Interfaces
- CLI · Web
- GitHub
- 81 stars
- Date
About
An open-source, Apache-2.0 text-to-SQL engine that lets you configure and measure every stage of the pipeline (schema enrichment, retrieval, model choice, query verification) against your own database rather than relying on generic benchmark accuracy. It enforces read-only, permission-checked, dialect-valid queries before execution and will explicitly refuse to answer when the schema lacks the needed data, rather than fabricating a plausible result.
What it does
mnemiq turns a plain-English question into SQL, then splits the job in two. A language model drafts the statement; a rule-based gatekeeper decides whether it may run, checking that it only reads data, touches tables the asker is cleared for, compiles for that engine, and survives a dry-run plan. Before questions arrive, it can profile tables and attach meanings to cryptic codes, but only from evidence: lookup tables, standard vocabularies such as ICD-10, or a hand-written dictionary. Every answer comes back with the SQL that ran and the tables it touched, so a person can check the work.
Why it's ranked here
Apache 2.0, a Python 3.12 package with three front doors: a command line, an HTTP API behind a browser workbench, and an MCP (Model Context Protocol) server exposing three tools to agents. The design choice that matters is where trust sits. The model proposes, deterministic checks decide, and access grants nothing until a role is named. The evaluation harness reports right, declined and wrong as separate numbers, and grading lives in a separate repository so the engine does not mark its own homework. The caveat is maturity: the package declares a pre-release development version, so expect interfaces to move.
What's good
Code meanings follow a stated precedence: a standard vocabulary fills gaps, labels found in the data beat it, and an operator dictionary beats everything. A vocabulary only attaches to a column when values, name and eligibility all agree, and two competing matches bind neither. Private definitions are hidden by default; only vocabularies explicitly marked public are shown to everyone. A local-only switch refuses to start if any model endpoint is not a loopback or private-range address, and it does no DNS lookups it cannot trust. Writes exist but are refused unless both a write grant and a deployment setting allow them, and schema changes never run.
Tradeoffs
First install pulls about 230 MB of dependencies, mostly DuckDB, PyArrow and the OpenAI client. Enrichment needs a live model and prints nothing until each table finishes, which reads as a hang on large schemas. The local-only check skips database connection strings by design, so those need verifying by hand. Air-gapped runs are not turnkey: DuckDB downloads its search and source extensions on first use unless the cache is pre-seeded. The browser workbench requires a separate Node build step. The highest-precision answer mode runs five candidates plus a judge, roughly six times the cost of the default.
How to use it well
Built for a data team deciding whether natural-language querying will hold up on its own warehouse before buying a hosted product. Follow the project's own advice: take one schema slice, write 20 to 30 real questions tagged by whether column names, a definition, or nothing should answer them, then compare runs with enrichment on and off and two verifier thresholds. Always pass a role, since an empty one returns deferrals that look like bugs. Supply a dictionary for internal codes. It is not a migration tool, and Postgres, SQLite, Oracle, Snowflake and Databricks are the sources the repository names.
Technical notes+
Entry point is mnemiq.cli:main (pyproject.toml, hatchling build, src/mnemiq package, version 0.1.0.dev0). src/mnemiq/cli.py defines subcommands enrich, build, refresh, ask, write, feedback, config, digest-ontology, serve, metrics and eval; _cmd_enrich aborts before saving a snapshot when profile_outcome returns unread or empty, and applies grounding in the order ontology < correlated < lookup < certified < dictionary (docs/grounding.md documents the four-source chain without the certified tier). _identity delegates to identity_from_settings so CLI, MCP and HTTP resolve roles identically. src/mnemiq/mcp/server.py registers db_read, db_write, get_schema on FastMCP over stdio with a lazily built runtime; src/mnemiq/server/app.py serves /v1/ask, /v1/chat (SSE) and /v1/schema and returns deferrals as HTTP 200. src/mnemiq/verify/__init__.py exports grounding_check, sanity_check and SemanticJudge.
Observed
- License
- Apache License 2.0, copyright Agentic Fabriq
- Language
- Python, requires Python 3.12 or later
- Packaging
- Built with hatchling; installs a mnemiq console command; uv is the documented install path
- Core dependencies
- DuckDB, psycopg, the OpenAI client, sqlglot, PyArrow, pydantic and the MCP SDK
- Optional extras
- Oracle, Snowflake, Databricks, an HTTP server (FastAPI, uvicorn) and ontology digestion (rdflib)
- Interfaces
- CLI, HTTP API with an SSE chat endpoint, and an MCP server over stdio exposing db_read, db_write and get_schema
- HTTP API
- Serves /v1/ask, /v1/chat and /v1/schema and returns deferrals as HTTP 200 rather than errors
- Model endpoints
- Any OpenAI-compatible /v1 endpoint, including local servers such as vLLM, Ollama and llama.cpp
- Ontology input
- Accepts SKOS concept schemes and OWL class hierarchies from TTL files
- Testing
- pytest, with markers for integration (live database) and live_llm tests
- Local services
- Docker Compose file defines a Postgres 16 service
- Contract
- Snapshot and certified-record contract published as a JSON Schema file in the repository
Read from README.md, pyproject.toml, docs/grounding.md, src/mnemiq/__init__.py, src/mnemiq/cli.py, src/mnemiq/mcp/server.py, src/mnemiq/server/app.py, src/mnemiq/contract/__init__.py, src/mnemiq/verify/__init__.py, schemas/mnemiq-contract.schema.json, LICENSE, docker-compose.yml.
What it can do
Convert natural language questions into SQL queries
Natural language question → SQL query
Verify generated queries are read-only, permission-checked, and dialect-valid before execution
SQL query → Validated query or rejection
Refuse to answer when the database schema lacks the needed data
Natural language question and schema → Refusal response
Run an evaluation harness to measure text-to-SQL accuracy on a user's own database
Database and test queries → Accuracy metrics
Perform tiered semantic enrichment of database schema
Database schema → Enriched schema metadata
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.