Natural-language query engine — open-source core (CLI, connectors, MCP server)
Project description
nlqueries-core
NLQueries Core turns plain-English questions into validated SQL, builds a self-updating YAML knowledge base from your schema and query history, and exposes everything as an MCP server your AI assistant can call directly. It also answers questions from your documents (PDF, Word, Excel, Notion, Confluence) and can blend both in a single hybrid answer.
Features
| Capability | Description |
|---|---|
| Database connectors | PostgreSQL, MySQL, Snowflake, BigQuery, Redshift, SQL Server / Azure SQL, DuckDB |
| Document connectors | PDF, Word, Excel, Notion, Confluence — ask questions over ingested documents with citations |
| Query pipeline | Filter, cluster, and parameterize query history into reusable QueryCapsule templates |
| Knowledge base | Auto-generated YAML schema + capsule file, with coverage reporting via kb-stats |
| Multi-agent orchestration | Routes each question to a SQL agent, document agent, or both in parallel (hybrid) |
| Semantic cache | Returns previously-answered similar questions in under 50 ms, no LLM or DB round-trip |
| Embedding daemon | Keeps the embedding model resident in memory — ~10 ms per call instead of ~9 s |
| LLM client | Anthropic, OpenAI, or any LiteLLM-supported provider |
| MCP server | Query execution and schema/knowledge lookup exposed as MCP tools for Claude, Cursor, etc. |
| CLI | nlqueries (or the shorter nlq alias) — connect, build, query, and inspect from your terminal |
See docs/architecture.md for how these pieces fit together.
Quickstart
Prerequisite: Python 3.11 or 3.12. Python 3.14+ is not yet supported — see docs/troubleshooting.md before installing on a newer interpreter.
Option A — Docker (recommended)
Pulls the published nlqueries/core image from Docker Hub — no clone required, just the compose file:
curl -O https://raw.githubusercontent.com/nlqueries/nlqueries/main/docker-compose.yml
Create a .env file next to it with at least one LLM key:
ANTHROPIC_API_KEY=sk-ant-...
# or OPENAI_API_KEY=sk-...
Then start the stack:
docker compose up
This pulls nlqueries/core:latest and starts it alongside Qdrant (:6333), with the MCP server on :8080. Run CLI commands against the running stack from a second terminal:
docker exec -it nlqueries-core nlqueries health
Option B — pip install
pip install nlqueries-core
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
nlqueries health
Optional extras for specific connectors:
pip install "nlqueries-core[mysql]" # MySQL
pip install "nlqueries-core[redshift]" # Amazon Redshift
pip install "nlqueries-core[mssql]" # SQL Server / Azure SQL
pip install "nlqueries-core[duckdb]" # DuckDB
pip install "nlqueries-core[docs]" # PDF / Word / Excel ingestion
pip install "nlqueries-core[wiki]" # Notion / Confluence sync
Option C — Clone and install from source
No Docker required — for contributing, or to run against unreleased changes:
git clone https://github.com/nlqueries/nlqueries.git
cd nlqueries
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -e ".[dev]"
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
nlqueries health
See CONTRIBUTING.md for linting and test commands.
First query
nlqueries connect postgres --host localhost --database mydb --user alice --password secret --alias dev
nlqueries process-history dev --days 30 --annotate
nlqueries export-kb dev
nlqueries query dev "How many orders shipped last month?"
Full walkthrough: docs/getting-started.md.
Documentation
| Doc | Covers |
|---|---|
| docs/getting-started.md | Step-by-step setup and your first query |
| docs/cli-reference.md | Every command and flag |
| docs/connectors.md | Database and document connector setup, per-connector notes and caveats |
| docs/configuration.md | Environment variables |
| docs/troubleshooting.md | Common warnings and errors explained |
| docs/qdrant-setup.md | Setting up Qdrant (required for embeddings, semantic cache, document search) |
| docs/architecture.md | Module layout and request flow |
Contributing
See CONTRIBUTING.md. All contributors must sign the CLA before a PR can be merged — see CONTRIBUTOR_LICENSE_AGREEMENT.md.
License
Business Source License 1.1 — each release converts to Apache 2.0 four years after its release date.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nlqueries_core-0.1.0.tar.gz.
File metadata
- Download URL: nlqueries_core-0.1.0.tar.gz
- Upload date:
- Size: 214.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf398463ea43ec399210fc076e5debb2bfca6ac1311f505cc7542dc8c324203d
|
|
| MD5 |
83626dba1b6539af7bd3ff3fbd0ad7bf
|
|
| BLAKE2b-256 |
38c592aeb2cf750fa59e9adb7125019dc41cf78feff23122fa649a60f61e2b52
|
Provenance
The following attestation bundles were made for nlqueries_core-0.1.0.tar.gz:
Publisher:
release.yml on nlqueries/nlqueries
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nlqueries_core-0.1.0.tar.gz -
Subject digest:
bf398463ea43ec399210fc076e5debb2bfca6ac1311f505cc7542dc8c324203d - Sigstore transparency entry: 2036401534
- Sigstore integration time:
-
Permalink:
nlqueries/nlqueries@67da2cfaeafa0da5a22358607bee756ec9987b4b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nlqueries
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@67da2cfaeafa0da5a22358607bee756ec9987b4b -
Trigger Event:
push
-
Statement type:
File details
Details for the file nlqueries_core-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nlqueries_core-0.1.0-py3-none-any.whl
- Upload date:
- Size: 144.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bc3ff8f4b896747873b1c91b6ef056d591f7c4f1b264cf90b0ede7eb5c97db9
|
|
| MD5 |
58190808d592da46516b5a46b93fef9d
|
|
| BLAKE2b-256 |
ed9ef0f1c3d17829291ad50d73ae4e60e4caf2cacea28f11b592a2e906fa10ce
|
Provenance
The following attestation bundles were made for nlqueries_core-0.1.0-py3-none-any.whl:
Publisher:
release.yml on nlqueries/nlqueries
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nlqueries_core-0.1.0-py3-none-any.whl -
Subject digest:
2bc3ff8f4b896747873b1c91b6ef056d591f7c4f1b264cf90b0ede7eb5c97db9 - Sigstore transparency entry: 2036401668
- Sigstore integration time:
-
Permalink:
nlqueries/nlqueries@67da2cfaeafa0da5a22358607bee756ec9987b4b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/nlqueries
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@67da2cfaeafa0da5a22358607bee756ec9987b4b -
Trigger Event:
push
-
Statement type: