# vault-cortex — local quickstart # Copy to .env and fill in values, then: docker compose up # Required ────────────────────────────────────────────────── # Bearer token for MCP authentication. # Generate one: openssl rand -hex 32 MCP_AUTH_TOKEN= # Absolute path to your Obsidian vault on this machine. # Example: /Users/you/Documents/MyVault VAULT_PATH= # Optional ────────────────────────────────────────────────── # Public URL for OAuth issuer URL in discovery metadata (default: http://localhost:8000). # Override if you expose the server on a different URL (e.g. via a reverse proxy). PUBLIC_URL=http://localhost:8000 # Largest file vault_read_file will read, in bytes (default: 52428800 = 50 MiB). # Reading a larger file returns an error instead of content. MAX_FILE_BYTES=52428800 # Byte budget for images returned by vault_read_file, in binary bytes before # base64 encoding (default: 49152 = 48 KiB, sized for Claude Code's response cap). # Images exceeding the budget are downscaled/recompressed to fit. Raise it for clients # that accept larger tool responses. MAX_IMAGE_OUTPUT_BYTES=49152 # Maximum number of PDF pages to render as images when raw: true is set on # vault_read_file (default: 5). The per-page byte budget is MAX_IMAGE_OUTPUT_BYTES # divided evenly across the rendered pages. Fewer pages = higher quality each. MAX_PDF_RENDER_PAGES=5 # Your IANA timezone — affects daily note resolution and memory timestamps. # TZ=America/New_York # Enable or disable the embedding pipeline (default: true). # When true, notes are chunked and embedded via a local ONNX model # (bge-small-en-v1.5) for hybrid search — FTS5 keyword + vector semantic # similarity fused via RRF. First startup is slow (~5min for 700 notes); # subsequent starts are fast via content-hash caching. # Set to false to disable model download and use FTS5 search only. EMBEDDING_ENABLED=true # Reranking mode for hybrid search results (default: blended). # "blended" uses a cross-encoder to refine result ordering with # position-aware score blending (~200ms added latency). # "none" skips reranking for lower latency. # Only takes effect when EMBEDDING_ENABLED=true. RERANK_MODE=blended # Enable or disable the memory layer (default: true). # Set to false to hide memory tools and skip About Me/ creation. MEMORY_ENABLED=true # Enable or disable file tools — vault_read_file and vault_list_files (default: true). # Set to false when Obsidian Sync has attachment syncing disabled. FILE_TOOLS_ENABLED=true # Run the server in read-only mode (default: false). # Set to true to hide every tool that changes the vault — clients can only # read and search. The memory folder is not auto-created in this mode. READONLY_MODE=false # Hide individual tools by name, comma-separated (default: none hidden). # Names match the README tools table: https://github.com/aliasunder/vault-cortex#tools # Subtractive only — it cannot re-enable a tool another setting hides; an # unknown tool name stops the server at startup so typos surface immediately. # DISABLED_TOOLS=vault_delete_note,vault_move_note # Memory folder name in your vault (default: About Me). MEMORY_DIR=About Me # Daily notes folder and filename format (default: read from the # vault's .obsidian/daily-notes.json, falling back to "Daily Notes" and # YYYY-MM-DD). Folder is any vault-relative path (Journal, Planner/Daily); # format takes the same tokens as Obsidian's date format setting. # DAILY_NOTES_FOLDER=Journal # DAILY_NOTES_FORMAT=YYYY-MM-DD # Comma-separated folders protected from deletion (default: MEMORY_DIR plus # the daily notes folder — DAILY_NOTES_FOLDER when set, otherwise "Daily Notes"). # A custom folder set only in daily-notes.json is not auto-protected. # PROTECTED_PATHS=About Me,Daily Notes # Comma-separated folders excluded from orphan detection (default: the daily # notes folder — DAILY_NOTES_FOLDER when set, otherwise "Daily Notes" — plus # Templates and MEMORY_DIR). # ORPHAN_EXCLUDE_FOLDERS=Daily Notes,Templates,About Me # URL shown in OAuth discovery metadata # (default: https://github.com/aliasunder/vault-cortex). # SERVICE_DOCUMENTATION_URL=https://github.com/youruser/your-fork # Host port to expose (default: 8000). PORT=8000 # Log verbosity: debug | info | warn | error (default: info). LOG_LEVEL=info # Directory for persistent log files inside the container. # Unset by default — logs go to stdout only. Set a path to also write # date-stamped log files there (the /data volume persists them). # LOG_DIR=/data/logs # Days to retain persistent log files before cleanup (default: 30). LOG_RETENTION_DAYS=30 # Windows users: set this to true. Makes a vault stored on a C: drive work # through Docker Desktop (switches the file watcher to polling and note moves # to rename-based writes). Only strictly needed when your vault is on a C: # drive rather than inside WSL2, but harmless to enable for any Windows setup. WINDOWS_MODE=false