datris) is a command-line interface for the Datris Data Platform. It communicates with the platform via the MCP server, providing a simple way to ingest data, run queries, search vector stores, and manage pipelines — all from the terminal.
Installation
Configuration
The CLI connects to the MCP server via SSE. Set the server URL with an environment variable:Authentication
When the Datris platform hasUSE_API_KEYS=true, every CLI command must present an API key. Set it as an environment variable:
x-api-key on every MCP request, which the MCP server forwards to the REST API.
Issue a key dedicated to the CLI from the UI: Configuration → API-Keys → Issue new key with a label like cli and the capability scope you want (e.g. read-only template for an analyst CLI, ops for a deploy runner). The value is shown once at issue time — set it as DATRIS_API_KEY in your shell. Each label is a distinct caller identity in the request logs and can be revoked independently. See API Keys for the full pattern.
When USE_API_KEYS=false (the OSS default), the CLI works without any key — the env var is ignored.
JSON Output
Every command supports--json to return raw JSON instead of human-readable output. This is useful for scripting and programmatic use.
Commands
datris help
Show all available commands and options.
datris pipelines
List all registered pipelines.
datris ingest
Create a pipeline and ingest a data file in one step. The schema is auto-detected from the file.
If the named pipeline already exists, the existing config is preserved and the file is uploaded into it — --dest, --table, --ai-validate, --ai-transform, and --catalog are ignored on re-ingest. Delete the pipeline first (datris delete <name>) if you need a fresh config.
| Option | Description |
|---|---|
--pipeline, -p | Pipeline name (default: derived from filename) |
--dest, -d | Destination: postgres, mongodb, qdrant, weaviate, milvus, chroma, pgvector (default: postgres) |
--table, -t | Table/collection name (default: pipeline name) |
--database | Database name (default: datris) |
--ai-validate | AI data quality rule — plain-English instruction |
--ai-transform | AI transformation instruction — plain-English instruction |
--ai-analyze | Ask a question about the data after ingestion completes |
--catalog | Catalog label to group this pipeline with related pipelines (e.g. openclaw). Free-form — no need to pre-create. Only applied when creating a new pipeline. |
--json | Return raw JSON |
datris query
Execute a read-only SQL SELECT query against PostgreSQL.
| Option | Description |
|---|---|
--limit | Max rows returned (default: 100, max: 1000) |
--json | Return raw JSON |
datris search
Semantic search across a vector database.
| Option | Description |
|---|---|
--store | Vector store: qdrant, weaviate, milvus, chroma, pgvector (default: pgvector) |
--collection | Collection/table name (required) |
--top-k | Number of results (default: 5) |
--json | Return raw JSON |
datris analyze
Ask a question about your data using AI. Works with any destination type — auto-picks the right approach based on --dest.
| Option | Description |
|---|---|
--table, -t | Table/collection name (required) |
--dest, -d | Data source type: postgres, mongodb, qdrant, weaviate, milvus, chroma, pgvector (default: postgres) |
--top-k, -k | Number of search results for vector stores (default: 5) |
--json | Return raw JSON instead of AI narrative |
- PostgreSQL — AI generates a SQL query from your question, executes it, then summarizes the results in a natural language answer
- MongoDB — fetches documents from the collection, then AI answers the question based on the data
- Vector stores — performs semantic search to find relevant chunks, then AI generates an answer from the retrieved context
datris query-mongo
Query a MongoDB collection with optional filter and projection.
| Option | Description |
|---|---|
--filter, -f | MongoDB filter JSON (default: {}) |
--projection | Fields to include/exclude |
--limit | Max documents (default: 20) |
--json | Return raw JSON |
datris status
Get the latest job status for a pipeline.
datris delete
Delete a pipeline configuration and optionally its destination data.
| Option | Description |
|---|---|
--keep-data | Keep destination data (only delete the pipeline config) |
--json | Return raw JSON |
datris health
Check the health of all backend services.
datris secrets
List all configured secrets.
datris taps
List all taps.
datris tap create
Create a tap. The instruction argument (a plain-English description) is optional — provide it to have AI generate the fetch script, or omit it and supply your own script with --script (or create a config-only tap with neither).
| Argument | Description |
|---|---|
instruction | Optional plain-English description of the data to fetch. When provided, AI generates the script. Omit when using --script or creating a config-only tap |
| Option | Description |
|---|---|
--pipeline, -p | Target pipeline name |
--name, -n | Tap name (default: derived from pipeline or instruction) |
--cron | CRON expression for scheduling (Quartz format) |
--secret | Vault secret name for credentials injected as env vars |
--script | Path to a Python script file with a fetch() function (skips AI generation) |
--type | structured (default) returns rows of records; document returns {uri, filename, content} dicts destined for a vector-store pipeline. See Document Taps |
--json | Return raw JSON |
unstructuredAttributes and whose destination is a vector store (qdrant, pgvector, weaviate, milvus, or chroma). The server rejects tap create --type document against a structured pipeline with HTTP 400.
datris tap run
Run a tap manually. Output reflects whether the fetched records actually landed in the target pipeline:
--json to get the full response including mode, persisted, persistedReason, publisherToken, and pipelineTokens.
datris tap show
Show full details of a tap, including its script. Prints the name, description, target pipeline, schedule, enabled state, secret, and last run/test results, followed by the stored script.
| Option | Description |
|---|---|
--json | Return raw JSON |
datris tap test
Test-run a tap without pushing the fetched records to the target pipeline. Reports the run status, record count, and data type.
| Option | Description |
|---|---|
--json | Return raw JSON |
datris tap logs
Show the run history for a tap — each entry’s timestamp, status, mode (run or test), record count, duration, and any error.
| Option | Description |
|---|---|
--json | Return raw JSON |
datris tap update
Update a tap’s configuration without regenerating its script. Specify at least one option.
| Option | Description |
|---|---|
--enabled / --disabled | Enable or disable the tap |
--cron | CRON expression for scheduling (Quartz format) |
--pipeline, -p | Target pipeline name |
--description, -d | New description |
--json | Return raw JSON |
datris tap delete
Delete a tap.
datris version
Get the server version.
Pipeline Name Auto-Detection
When--pipeline is not specified, the CLI derives the pipeline name from the filename:
sales-data.csv→sales_dataQ1 Revenue Report.csv→q1_revenue_reporttrades.json→trades
