The client is
the same binary
Nothing else to install. The binary you downloaded is the server, the MCP endpoint and this REPL, and it connects to http://localhost:9480 unless told otherwise.
./cameodb client -i # another node, over TLS ./cameodb client -i --connect https://cameodb.example.com # a self-signed certificate, development only ./cameodb client -i --connect https://localhost:9480 --insecure
A global --insecure covers the whole session. The same flag on a single command relaxes only that one remote fetch, so loading from a self-signed host does not lower the trust of the connection you are working over.
Tab knows what
the node holds
The session caches index metadata on startup and refreshes it after connect and either list command, so completion answers from the live schema rather than from whatever was true when the REPL opened.
healthCluster health, pretty-printed.list indexesEvery index with document counts and field names.list index <name>One index in full: stats and schema.search books <TAB>Field names with type hints: title: [text], year: [numeric], active: [true/false].A completed field arrives as title: with the colon already typed, ready for a value. A word the command continues past brings its own space, so one Tab settles it and the next moves on, and the +, − and ! modifiers survive completion rather than being eaten by it.
Point it at a file
or at a URL
CSV, TSV, JSON, JSONL and NDJSON, local or over HTTP(S). Gzip and Zip archives are decompressed in flight, so a public dataset loads without being downloaded and unpacked first.
schema detect <file>Read a file and report the schema it implies, without applying it.schema load <index> <file>The same detection, applied to an index.data load <index> <file>Batched ingest. 4,000 documents per batch unless --batch-size says otherwise.delete <index>Prompts for the index name and proceeds only on yes.cameodb@localhost ▶ data load hugdata \
https://huggingface.co/datasets/.../data.jsonl.gz
The same grammar
the agent uses
Queries typed here and queries an agent sends over MCP go to the same parser. The client passes the modifier run straight through. The server owns where one may appear, so the REPL cannot disagree with the engine about it.
cameodb@localhost ▶ search books title:"Harry Potter" limit 7 cameodb@localhost ▶ search books +title:rust +year:[2020 TO *] \ return title,author,year limit 10 sort year:desc
A limit can be a flag or the last word of the query: --limit 10, -l 10, or search books author:doe 15. The full grammar covers the rest.
Built to be left
open all day
The details that decide whether a tool gets used twice.
History that survives
Sessions persist to ~/.cameodb/client_history, with Ctrl-R reverse search, arrow keys, Home and End: Rustyline navigation, not a bare read line.
Readable, and pipeable
Colorized JSON by default, in the manner of jq, with a plain fallback so a pipe or a CI log gets text rather than escape codes.
The editor never blocks
The line editor runs under spawn_blocking while requests stay async, so a slow query does not freeze the prompt you are typing at.
Hints in your language
Field types are shown as [text], [numeric], [decimal], [exact] and [true/false] rather than engine type names.