Skip to content

CLI Reference

Dynoxide has four subcommands: serve (the default), mcp, import, and healthcheck.

Running dynoxide with no subcommand is the same as dynoxide serve, and the bare form accepts --host, --port, --db-path, --encryption-key-file and --schema directly. Those top-level flags exist only for that form. Combining one with an explicit subcommand is a parse error rather than a silent no-op:

dynoxide --port 8000                    # fine - bare form
dynoxide serve --port 8000              # fine - flag belongs to the subcommand
dynoxide --db-path data.db serve        # error: the flag is ignored, so it's rejected

serve

Starts the DynamoDB-compatible HTTP server.

dynoxide --port 8000
dynoxide serve --db-path data.db --port 8000
Flag Default Description
--host 127.0.0.1 Bind address
--port 8000 HTTP port
--db-path (in-memory) SQLite file for persistent storage
--encryption-key-file none File holding the encryption key (needs an encrypted build)
--schema none DescribeTable JSON; creates the tables on startup
--mcp off Also start the MCP server over Streamable HTTP
--mcp-host 127.0.0.1 Bind address for the MCP transport
--mcp-port 19280 Port for the MCP transport
--mcp-token (persisted) Bearer token for MCP. Also DYNOXIDE_MCP_AUTH_TOKEN
--mcp-no-auth off Disable MCP authentication. Loopback binds only
--mcp-allowed-host none Extra Host header to accept (repeatable)
--mcp-read-only off Restrict MCP to read-only operations
--mcp-data-model none OneTable schema file for MCP data model context

Pre-creating tables with --schema

--schema takes the same DescribeTable JSON that import --schema does, and creates each table in it on startup, skipping any that already exist. It pre-populates an empty database with the right structure without running an import first:

aws dynamodb describe-table --table-name Users > schema.json
dynoxide --schema schema.json --db-path dev.db

mcp

Starts the MCP (Model Context Protocol) server for coding agents. See the MCP docs for the full setup guide, including the bearer-token requirement on the HTTP transport.

dynoxide mcp
dynoxide mcp --http --port 19280

Stdio transport is the default. Use --http for the Streamable HTTP transport.

Flag Default Description
--db-path (in-memory) SQLite file for persistent storage
--encryption-key-file none File holding the encryption key (needs an encrypted build)
--http off Use Streamable HTTP instead of stdio
--host 127.0.0.1 Bind address (requires --http)
--port 19280 Port for the HTTP transport
--token (persisted) Bearer token. Also DYNOXIDE_MCP_AUTH_TOKEN
--no-auth off Disable authentication. Loopback binds only
--allowed-host none Extra Host header to accept (repeatable)
--read-only off Reject all write operations
--max-items none Cap the number of items query and scan return
--max-size-bytes none Cap the response size for query and scan
--data-model none OneTable schema file for data model context
--data-model-summary-limit 20 Entities shown in the instructions summary (0 suppresses)

On serve these same flags carry an --mcp- prefix, because serve already owns --host and --port for the DynamoDB server.

import

Imports data from a DynamoDB Export (the S3 export format). Useful for creating local snapshots of production data. See the import guide for the anonymisation rules format and the export directory layout.

dynoxide import \
  --source ./export-data/ \
  --schema schema.json \
  --output snapshot.db

--source points at the directory of exported JSON files, and --schema takes DescribeTable JSON.

Flag Default Description
--source (required) Directory of DynamoDB Export files
--schema (required) DescribeTable JSON for the tables being imported
--output none SQLite file to write. Conflicts with --serve and --mcp
--rules none Anonymisation rules TOML file
--tables (all) Comma-separated list of tables to import
--compress off Compress the output with zstd (requires --output)
--force off Overwrite an existing output file
--continue-on-error off Carry on when a batch fails instead of aborting
--serve off Import to memory and start an HTTP server
--mcp off Import to memory and start an MCP server

Anonymisation is built in - mask, hash, redact, or replace fields with fake data:

dynoxide import \
  --source ./export/ \
  --schema schema.json \
  --rules rules.toml \
  --output anonymised.db

The rules file is TOML. Available actions are fake, mask, hash, redact, and null. The import guide covers the format, the generator list, and how to keep a value consistent across tables.

healthcheck

Probes a running server for liveness. The Docker image uses it for its HEALTHCHECK directive, and it works as a Kubernetes readiness or liveness probe.

dynoxide healthcheck --port 8000
Flag Default Description
--host 127.0.0.1 Host to probe. Wildcards (0.0.0.0, ::) are rewritten to loopback
--port 8000 Port to probe
--timeout 3 Total deadline in seconds for the whole probe

--host and --port also read DYNOXIDE_HEALTHCHECK_HOST and DYNOXIDE_HEALTHCHECK_PORT, so a container that overrides CMD can point the probe somewhere else with -e DYNOXIDE_HEALTHCHECK_PORT=....