Skip to main content

qcp — Query Companion

PyPI Downloads Downloads PyPI Downloads PyPI Version License CI Release

Query your Postgres database in plain English, right from the terminal.

$ qcp query "what were the top 5 customers by revenue last month?"
Reading schema...
Generating SQL...

SELECT customer_name, SUM(amount) AS revenue
FROM orders
WHERE order_date >= date_trunc('month', now()) - interval '1 month'
  AND order_date < date_trunc('month', now())
GROUP BY customer_name
ORDER BY revenue DESC
LIMIT 5

customer_name   revenue
--------------  -------
Acme Corp       48210.50
Globex Inc      39120.00
...

(5 rows)

qcp is private, secure, safe and runs locally.

Features

  • 🗣️ Ask questions in natural language, get SQL + results
  • 🔒 Read-only by default — only SELECT/WITH statements are executed
  • 💡 qcp insights — AI-generated analytics suggestions for your schema
  • 🧠 Local schema memory with automatic 24-hour refresh
  • 🔑 Bring your own Gemini API key (free tier available)
  • 🪶 Minimal footprint — single CLI, no servers or daemons

Install

QCP requires Python 3.14 or newer.

macOS / Linux (curl)

curl -L https://github.com/Moduna-AI/qcp-cli/releases/latest/download/qcp-linux-x86_64 -o qcp
chmod +x qcp
sudo mv qcp /usr/local/bin/

macOS (Homebrew)

brew tap moduna-ai/qcp
brew install moduna-ai/qcp/qcp

Windows (PowerShell)

Invoke-WebRequest -Uri "https://github.com/Moduna-AI/qcp-cli/releases/latest/download/qcp-windows-x86_64.exe" -OutFile "qcp.exe"
Move-Item qcp.exe "$env:LOCALAPPDATA\Microsoft\WindowsApps\qcp.exe"

Via pip (any platform)

pip install qcp-cli

Via uv

uv tool install qcp-cli

Quickstart

# 1. Connect a Postgres database
qcp init

# 2. Add your Gemini API key (https://aistudio.google.com/apikey)
qcp auth

# 3. Ask away
qcp query "how many new signups did we get this week?"

# Or get general insights about your data
qcp insights

Running qcp query or qcp insights without a configured database raises a clear error and tells you to run qcp init first.

Configuration

qcp stores config at ~/.qcp/config.json (override with QCP_HOME). Validated schema metadata is cached separately at ~/.qcp/schema.json; it never contains credentials or query result rows. You can also use environment variables instead of (or to override) the config file:

Variable Purpose
QCP_DATABASE_URL Postgres connection string
GEMINI_API_KEY Gemini API key

Check current configuration any time with:

qcp status

Commands

Command Description
qcp init Connect a Postgres database
qcp auth Add/remove your Gemini API key
qcp query "<question>" Ask a question, get SQL + results
qcp insights Get AI-generated analytics suggestions
qcp status Show current configuration

Useful flags on qcp query:

  • --dry-run — print the generated SQL without executing it
  • --no-show-sql — only print results, hide the SQL

Safety

qcp only executes one SELECT/WITH statement. Validation is backed by a PostgreSQL read-only transaction, and there is no write override. Always review generated SQL (shown by default), especially on production databases. A read-only database role remains recommended as an additional boundary.

Agent tools

The LangChain agent has four narrow tools: lookup_schema, schema_memory, execute_read_query, and analyze_insights. Schema data is reused for 24 hours, then refreshed automatically. An undefined table, column, or schema invalidates the cache and permits one refresh-and-retry cycle.

Development

git clone https://github.com/Moduna-AI/qcp-cli
cd qcp
uv sync --extra dev
uv run pytest

Install the Git hook once with uv run pre-commit install. Use uv run <command> for project commands; uvx creates an isolated environment without QCP installed.

Clean install / clean build

A Makefile (plus equivalent standalone shell scripts) is included so you never get bitten by stale venvs or cached build artifacts:

Task Make Script
Wipe venv/dist/caches make clean ./scripts/clean.sh
Fresh editable install make install —
Fresh install + test deps make dev —
Clean build (sdist + wheel) make build ./scripts/build.sh
Clean install, then build make rebuild —
Run tests make test —
Run the CLI from venv make run ARGS="status" —
Run Ruff checks make lint —

make build / ./scripts/build.sh always wipe the tree first, so dist/ is never tainted by a previous build. Both are safe to re-run anytime.

Roadmap (post-MVP)

  • Additional LLM providers (OpenAI, Claude, local models)
  • MySQL / SQLite support
  • Query history and caching
  • Saved queries / scheduled reports

License

MIT — see LICENSE.

Contributions welcome! Please open an issue or PR.

Metadata

Release files for qcp-cli 0.1.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qcp-cli 0.1.11
File Size Uploaded
qcp_cli-0.1.11.tar.gz 116.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qcp-cli 0.1.11
File Interpreter ABI Platform
qcp_cli-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 140.8 kB

Release files / qcp_cli-0.1.11.tar.gz

Download URL qcp_cli-0.1.11.tar.gz
Size 116.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6b2b32a653bd031ec8237b3fecb71ec71a2cf5d839ea8591c04750b84152e732
BLAKE2b-256 checksum
How to use checksums
8bf16c9cd762ea97b9f9625478d70ed4015df875b7672e3072d3f040c6bc0e1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.

Transparency log

Release files / qcp_cli-0.1.11-py3-none-any.whl

Download URL qcp_cli-0.1.11-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c376de0f5e867a39f59adee5f18605e7928392ebbcf8a53a76c0a58bc013a34
BLAKE2b-256 checksum
How to use checksums
dd30f8e75c144bf42be56e67bb26e149bdf91ad14a31f99689bac7c84ad7e506
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page