You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The documentation lives in docs/, sorted into install guides, how-tos, reference and explanation, with a page listing every environment variable.
deploy/docker/ holds the Docker Compose setup, and each GitHub release carries its compose.yml, Caddyfile and example.env, so a server installs with two curl lines. Its .env keeps the vaults in the container's volume unless you set a bucket.
VAULT_HTTP_STATELESS=on serves MCP without sessions, so a server restart drops no session a client holds.
notes-vault-mcp embed-worker --listen host:port runs the model for search by meaning in a process of its own that the server reaches through VAULT_EMBED_URL, with VAULT_EMBED_TOKEN as its secret, so the server restarts fast and stays small.
GET /ready answers 200 when the server is ready for requests and 503 with the names of the failing checks, for a load balancer or a readiness probe.
VAULT_INDEX_SNAPSHOTS=on keeps a sealed copy of each vault's search index in storage, so a restarted or moved server restores a vault's index instead of indexing and embedding every note again. A busy vault's copy is written at most once per VAULT_INDEX_SNAPSHOT_MINUTES (default 10) and only when the index changed, plus once when it goes idle and once when the server stops.
VAULT_FORWARDED_ALLOW_IPS names the reverse proxies, as addresses or CIDR ranges, whose X-Forwarded-For the server trusts, so rate limits count each real client; the limits are kept in the account store and survive a restart.
Extensions import what they build on from notes_vault_mcp.extension_api; Extensions describes each hook.
A vault server has one address, /mcp; another vault than the one picked when connecting is /mcp?vault=<slug>, and a slug is one lowercase word, unique among the vaults an account reaches. A new account's first vault is notes, and existing slugs that break the rule are rewritten on the first start.
Fixed
Two writes to one note at the same moment both land: append_file, set_status, close, log_append, write_file and the monthly log pages write over the version they read and read again when the note changed meanwhile, two backlog_add calls with one title get two notes, and a new vault's first files never overwrite a file already there.
WebDAV PUT honours If-Match and If-None-Match: * and answers 412 when the file changed.
A note's age counts calendar days in local time, so a note from five days back reads "5 days" also just after midnight.
A vault server's root address opens the account page instead of answering not found.
The access log leaves out query strings, so sign-in and invitation links never land in it.
An unknown vault address answers like a known one the caller cannot reach.
WebDAV opens vaults and talks to storage off the event loop, so a slow vault never stalls other requests or /up.
An edit from Obsidian over WebDAV shows in search at once instead of after up to 20 seconds.
close keeps a change that lands on the note while it is being archived.