Configuration

Every setting is an environment variable. Settings read through the server's settings reader are also read from CLAUDE_PLUGIN_OPTION_<NAME>, which is how the Claude Code plugin passes them; the bare name wins when both are set. The hook switches and the terminal settings are read by their bare name only.

Required says when a setting must be present:

  • yes: the server or command refuses to start without it.
  • one of: at least one setting of the group must be present.
  • with X: needed once X is set; the server refuses to start with X and without it.

The four settings S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY and S3_SECRET_KEY count as one: the bucket is used only when all four are present.

An empty value counts as not set.

Storage

Storage explains the choices.

Variable Required Default Meaning
VAULT_PATH one of Directory holding the vault. On a server, the folder holding every vault. Wins over S3_*.
S3_ENDPOINT one of Endpoint URL of the S3-compatible store, e.g. https://s3.example.com.
S3_BUCKET one of Bucket holding the vault. It must exist.
S3_ACCESS_KEY one of Access key.
S3_SECRET_KEY one of Secret key.
S3_PREFIX no empty Key prefix inside the bucket.
S3_REGION no us-east-1 Region the requests are signed for.
VAULT_SERVER_URL one of On a client machine: the vault server the machine signed in to. The stdio server, the hooks and the commands work through it. Wins over VAULT_PATH and S3_*.
VAULT_CACHE_DIR no ~/.cache/mindin; /data/cache in the image The search indexes, the model for search by meaning, and the model process's socket and log.
VAULT_SCHEMA no On a client machine: a local schema file that overrides the vault's .vault/schema.yml.

When the environment names none of VAULT_PATH, the four S3_* settings or VAULT_SERVER_URL, every command, the stdio server included, takes them from the vault setup saved, then from the Claude Code plugin's saved config; see Where commands find the vault. With none of them, the stdio server and the commands exit with one line saying so, and status answers "configured": false. An HTTP server starts without storage settings but cannot open any vault.

Server

These apply to serve --transport http. --host defaults to 127.0.0.1 and --port to 8765.

Variable Required Default Meaning
VAULT_PUBLIC_URL yes The address clients reach, path included when the server is not at the root. Must start with https://, or http://localhost for a trial. The Docker example sets it to https://VAULT_HOST.
VAULT_HOSTED_MASTER_KEY yes Base64 of 32 bytes that wraps every vault's data key; master-key generate makes one. The server also refuses to start when it does not open the vault keys it holds. See Encryption.
VAULT_HOSTED_MASTER_KEY_PREVIOUS no Older master keys, space or comma separated, still accepted while master-key rewrap moves the vault keys off them.
VAULT_REGISTRATION no invite invite: only invited addresses get an account. open: any verified email does.
VAULT_PASSKEYS no on on or off.
VAULT_HTTP_STATELESS no off on keeps no MCP session on the server between requests, so a restart drops no session a client holds. Each request then stands alone: the server sends nothing to a client outside the answer to a request.
VAULT_INDEX_SNAPSHOTS no off on keeps a sealed copy of each vault's search index in the folder or bucket, under <prefix>/indexes/<vault id>/, written when the vault goes idle, when the server shuts down, and at most once per VAULT_INDEX_SNAPSHOT_MINUTES while new notes are embedded, and only when the index changed since the last copy. A server whose VAULT_CACHE_DIR lacks a vault's index starts from that copy and indexes or embeds only the notes that changed since. Deleting the vault deletes the copy.
VAULT_INDEX_SNAPSHOT_MINUTES no 10 The least time between two copies of one vault's index while it is in use.
VAULT_ALLOWED_HOSTS no Extra Host header values the MCP endpoint answers, space or comma separated. See Behind a reverse proxy.
VAULT_FORWARDED_ALLOW_IPS no 127.0.0.1,::1; * in the Docker example The addresses of your reverse proxies, as IP addresses or CIDR ranges, comma separated. The server takes the client's address from X-Forwarded-For only on requests from these, and counts its rate limits per client address. * trusts every peer. See The client's address.
VAULT_AUTH_DIR no VAULT_CACHE_DIR/auth; /data/auth in the image Where hosted.sqlite lives: the accounts, vaults, keys, tokens and rate-limit counts.
VAULT_SUBJECT_PREFIX no users Where the vaults live in the folder or bucket: <prefix>/<vault id>/. See What is stored.

The server loads the extensions installed beside it, from the Python entry point group mindin.extensions.

Sign-in

At least one of VAULT_SMTP_HOST, VAULT_GITHUB_CLIENT_ID, VAULT_OIDC_ISSUER and VAULT_IDENTITY_PUBLIC_KEY must be set; passkeys are added after a first sign-in. Set up sign-in methods walks through each.

Variable Required Default Meaning
VAULT_SMTP_HOST one of Turns on email links.
VAULT_SMTP_FROM with VAULT_SMTP_HOST The sender, e.g. Vault <vault@example.com>.
VAULT_SMTP_USERNAME no The SMTP login.
VAULT_SMTP_PASSWORD no The SMTP password.
VAULT_SMTP_SECURITY no starttls starttls, ssl or none. none is refused with a username or password.
VAULT_SMTP_PORT no 587, 465 or 25 by VAULT_SMTP_SECURITY The SMTP port.
VAULT_GITHUB_CLIENT_ID one of Turns on GitHub sign-in.
VAULT_GITHUB_CLIENT_SECRET with VAULT_GITHUB_CLIENT_ID The OAuth app's secret.
VAULT_OIDC_ISSUER one of Turns on your OpenID Connect provider.
VAULT_OIDC_CLIENT_ID with VAULT_OIDC_ISSUER The client's ID.
VAULT_OIDC_CLIENT_SECRET with VAULT_OIDC_ISSUER The client's secret.
VAULT_OIDC_NAME no your organisation The provider's button label.
VAULT_OIDC_SCOPES no openid email profile Scopes asked of the provider, space separated.
VAULT_IDENTITY_PUBLIC_KEY one of Turns on a trusted proxy: its PEM public key (RS256 or ES256), raw or base64 on one line.
VAULT_IDENTITY_ISSUER with VAULT_IDENTITY_PUBLIC_KEY The iss in the proxy's tokens.
VAULT_IDENTITY_HEADER no X-Forwarded-Identity The header carrying the token.
VAULT_IDENTITY_TYP no When set, the token's typ must match.
VAULT_IDENTITY_WRITE_CLAIMS no vault:write Entitlements that grant read and write, space separated.
VAULT_IDENTITY_READ_CLAIMS no vault:read Entitlements that grant read only. A token with neither is refused.
VAULT_IDENTITY_NAME no your company's sign-in The proxy's button label.

Import

Variable Required Default Meaning
IMPORT_S3_ACCESS_KEY no S3_ACCESS_KEY The access key accounts import --from-s3-bucket reads the old bucket with.
IMPORT_S3_SECRET_KEY no S3_SECRET_KEY Its secret key.

Search by meaning

Search by meaning explains these. They need the semantic extra.

Variable Required Default Meaning
VAULT_SEMANTIC no off on, 1, true or yes adds search by meaning.
VAULT_SEMANTIC_MODEL no sentence-transformers/paraphrase-multilingual-mpnet-base-v2 The fastembed model.
VAULT_EMBED_URL no tcp://host:port of an embed-worker that this server sends its sections and queries to, instead of starting its own model process. The server then needs numpy but not fastembed. See The model in its own process.
VAULT_EMBED_TOKEN with embed-worker --listen on an address other than loopback The secret an embed-worker asks of every request. Set the same value on the worker and on the server whose VAULT_EMBED_URL points at it.
VAULT_EMBED_BATCH no 16 Sections the model process runs through the model at once. Fewer lowers its peak memory during a first sync.
VAULT_EMBED_THREADS no half the usable cores, at most 4 Threads the model runs on. The usable cores count a container's CPU limit (cgroup v2 cpu.max); ONNX Runtime on its own takes every physical core of the node.
VAULT_EMBED_MAX_TOKENS no 256 Tokens of a section the model reads. Prose sections stay under it; a section of links or code is cut there instead of padding its batch to 512.

Hooks

Read by their bare name only. Hooks describes the checks.

Variable Required Default Meaning
VAULT_STOP_HOOK no on off silences the stop hook, for sessions started by a tool that writes the log itself.
VAULT_STOP_HOOK_COMMITS no on off turns off the stop hook's checks for unlogged commits and stale notes, and keeps the message check, for sessions whose log another tool writes.
VAULT_STOP_HOOK_PROMPTS no 3 How many messages you write after the agent's last vault write before the stop hook asks it to save them; off turns that check off.

Terminal and Claude Code

Read by their bare name only.

Variable Required Default Meaning
NO_COLOR no Any value keeps the terminal layout without colour. TERM=dumb does the same.
XDG_CONFIG_HOME no ~/.config The folder holding mindin/config.toml, the vault setup saved, and mindin/credentials.json, the keys from login and setup. A notes-vault-mcp folder there, and one in ~/.cache, is moved to mindin the first time mindin runs, keeping its old name as a link.
CLAUDE_CONFIG_DIR no ~/.claude Where the commands look for the Claude Code plugin's saved settings.

Docker Compose

Variable Required Default Meaning
VAULT_HOST yes Read by compose.yml, not by the server: the domain Caddy fetches a certificate for, and the host of VAULT_PUBLIC_URL.