Skip to main content

Agent-friendly ClickHouse query CLI — JSON-first, read-only by default, semantic exit codes.

Project description

chsql

English · 简体中文

Agent-friendly ClickHouse query CLI — JSON-first, read-only by default, semantic exit codes. A thin wrapper over clickhouse-driver / clickhouse-connect with zero third-party CLI framework (stdlib argparse). Batteries included: native + HTTP transports and OS-keyring password storage all work out of the box (~8 MB installed). Built for LLM agents to call over the shell instead of standing up an MCP server.

Install

uv tool install chsql     # recommended (puts chsql on your PATH)
# or
pipx install chsql

Then install the bundled agent skill (cross-agent path ~/.agents/skills):

chsql skill install

Use

chsql databases
chsql tables system --like '%part%'
chsql describe system.parts
chsql query "SELECT count() FROM system.tables"

Default output is JSONEachRow (NDJSON). Switch with --format json|table|csv|tsv. Results are capped at 100k rows by default (--max-rows N, --max-rows 0 to disable).

Connection — one URL

A connection is a single URL:

clickhouse://user:password@host:port/database?secure=1&protocol=http
Part Meaning
scheme clickhouse://, or clickhouses:// to imply TLS
user:password@ credentials (optional; percent-encode any @ : / ? in the password)
host:port server; port is optional (defaults per protocol: native 9000/9440, http 8123/8443)
/database default database (optional; defaults to default)
?secure=1 use TLS. Accepts 1/true/yes/on. Also implied by clickhouses:// or a secure port
?protocol= auto (default), native, or http. auto picks http for ports 443/8123/8443, else native

chsql login stores it in the OS keyring (the password never touches a config file) — then everything just works with no flags:

chsql login 'clickhouse://me:pw@ch.example.com:443?secure=1'   # paste once
chsql databases                                                # zero-config
chsql login --show     # print the stored URL (password masked)
chsql logout           # remove it

Resolution order: --url flag > $CHSQL_URL env > the stored login. Individual --host/--port/--user/--password/--secure/--protocol/--database flags override fields for one-off use:

# Public read-only playground — no login needed
chsql --host play.clickhouse.com --user explorer --secure databases

Headless servers / VPS: there's no OS keyring, so skip chsql login and use the env var (the standard 12-factor way):

export CHSQL_URL='clickhouse://user:pass@host:443?secure=1'   # e.g. in ~/.bashrc
chsql databases

Transport

Protocol Ports Driver When
native (default) 9000 / 9440 clickhouse-driver direct TCP access
http 8123 / 8443 / 443 clickhouse-connect HTTPS reverse-proxied servers

--protocol auto (default) picks http for ports 443/8123/8443, else native.

Agent contract

Aspect Behavior
Output data → stdout (JSONEachRow by default); errors → stderr as {"error","code"}
Exit codes 0 ok · 1 query error · 2 connection error · 3 write/DDL blocked
Safety read-only by default; --write for DML, --allow-ddl for DDL; multi-statement aware
Limits results capped at --max-rows (default 100k); truncation noted on stderr
Params --param k=v bound as %(k)s (numeric values passed unquoted)

Commands

  • chsql query "<sql>" — run SQL (reads stdin if no arg). Read-only unless --write/--allow-ddl.
  • chsql databases — list databases.
  • chsql tables [db] --like ... --not-like ... — list tables with engine and counts.
  • chsql describe <table|db.table> — list columns (name, type, default, comment).
  • chsql login [URL] | logout | login --show — manage the stored connection.
  • chsql skill install [--path DIR] — install the bundled agent skill.
  • chsql --version

Develop

pip install -e '.[dev]'
pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chsql-0.4.1.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chsql-0.4.1-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file chsql-0.4.1.tar.gz.

File metadata

  • Download URL: chsql-0.4.1.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chsql-0.4.1.tar.gz
Algorithm Hash digest
SHA256 48d07428e02a745eba270a39d1180e878a6a43759f1fec44541a5409399faef3
MD5 d8df4045e5acf6ccdc33acd359c095f7
BLAKE2b-256 e0de409399b99d75d1b7422646236e34bd15ebf60d938c9fee84c40fb4c5bc74

See more details on using hashes here.

Provenance

The following attestation bundles were made for chsql-0.4.1.tar.gz:

Publisher: release.yml on dengshu2/chsql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chsql-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: chsql-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 17.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chsql-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 07094ae041d5539a5a47dfe8f2cb9032033248b2446a21b2e301e811ed4e2043
MD5 5001161b297d9c71e8ed94867c6b4be1
BLAKE2b-256 90ed0b400ce94a73b533c75e10780395d330f3143a7383e381c180ba1ee2703d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chsql-0.4.1-py3-none-any.whl:

Publisher: release.yml on dengshu2/chsql

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page