Search / io.github.aliasunder/vault-cortex
Vault Cortex
L0· runs locallyStandalone MCP server for Obsidian vaults — hybrid search, notes & files, memory, tasks, OAuth 2.1
v0.54.15 · active · repository · website · descriptor JSON · versions
Search / io.github.aliasunder/vault-cortex
L0· runs locallyStandalone MCP server for Obsidian vaults — hybrid search, notes & files, memory, tasks, OAuth 2.1
v0.54.15 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"vault-cortex": {
"command": "docker",
"args": [
"-p",
"8000:8000",
"-v",
"${VAULT_PATH}:/vault:rw",
"-v",
"vault-cortex-data:/data",
"-e",
"MCP_AUTH_TOKEN",
"-e",
"PUBLIC_URL",
"-e",
"EMBEDDING_ENABLED",
"-e",
"RERANK_MODE",
"-e",
"WINDOWS_MODE",
"-e",
"MEMORY_ENABLED",
"-e",
"FILE_TOOLS_ENABLED",
"-e",
"READONLY_MODE",
"-e",
"MEMORY_DIR",
"-e",
"DAILY_NOTES_FOLDER",
"-e",
"DAILY_NOTES_FORMAT",
"-e",
"TRUST_PROXY_HOPS",
"-e",
"TRUST_FORWARDED_HOPS",
"-e",
"TZ",
"-e",
"LOG_LEVEL",
"-e",
"LOG_RETENTION_DAYS",
"-e",
"SERVICE_DOCUMENTATION_URL",
"-e",
"MAX_FILE_BYTES",
"-e",
"MAX_IMAGE_OUTPUT_BYTES",
"-e",
"MAX_PDF_RENDER_PAGES",
"ghcr.io/aliasunder/vault-cortex:0.54.15"
],
"env": {
"MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}",
"PUBLIC_URL": "http://localhost:8000",
"EMBEDDING_ENABLED": "true",
"RERANK_MODE": "blended",
"WINDOWS_MODE": "false",
"MEMORY_ENABLED": "true",
"FILE_TOOLS_ENABLED": "true",
"READONLY_MODE": "false",
"MEMORY_DIR": "About Me",
"DAILY_NOTES_FOLDER": "Daily Notes",
"DAILY_NOTES_FORMAT": "YYYY-MM-DD",
"TRUST_PROXY_HOPS": "0",
"TRUST_FORWARDED_HOPS": "0",
"TZ": "UTC",
"LOG_LEVEL": "info",
"LOG_RETENTION_DAYS": "90",
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex",
"MAX_FILE_BYTES": "52428800",
"MAX_IMAGE_OUTPUT_BYTES": "49152",
"MAX_PDF_RENDER_PAGES": "5"
}
}
}
}claude mcp add vault-cortex -e "MCP_AUTH_TOKEN=${MCP_AUTH_TOKEN}" -e "PUBLIC_URL=http://localhost:8000" -e "EMBEDDING_ENABLED=true" -e "RERANK_MODE=blended" -e "WINDOWS_MODE=false" -e "MEMORY_ENABLED=true" -e "FILE_TOOLS_ENABLED=true" -e "READONLY_MODE=false" -e "MEMORY_DIR=About Me" -e "DAILY_NOTES_FOLDER=Daily Notes" -e "DAILY_NOTES_FORMAT=YYYY-MM-DD" -e "TRUST_PROXY_HOPS=0" -e "TRUST_FORWARDED_HOPS=0" -e "TZ=UTC" -e "LOG_LEVEL=info" -e "LOG_RETENTION_DAYS=90" -e "SERVICE_DOCUMENTATION_URL=https://github.com/aliasunder/vault-cortex" -e "MAX_FILE_BYTES=52428800" -e "MAX_IMAGE_OUTPUT_BYTES=49152" -e "MAX_PDF_RENDER_PAGES=5" -- docker -p 8000:8000 -v "${VAULT_PATH}:/vault:rw" -v vault-cortex-data:/data -e MCP_AUTH_TOKEN -e PUBLIC_URL -e EMBEDDING_ENABLED -e RERANK_MODE -e WINDOWS_MODE -e MEMORY_ENABLED -e FILE_TOOLS_ENABLED -e READONLY_MODE -e MEMORY_DIR -e DAILY_NOTES_FOLDER -e DAILY_NOTES_FORMAT -e TRUST_PROXY_HOPS -e TRUST_FORWARDED_HOPS -e TZ -e LOG_LEVEL -e LOG_RETENTION_DAYS -e SERVICE_DOCUMENTATION_URL -e MAX_FILE_BYTES -e MAX_IMAGE_OUTPUT_BYTES -e MAX_PDF_RENDER_PAGES ghcr.io/aliasunder/vault-cortex:0.54.15[mcp_servers.vault-cortex]
command = "docker"
args = ["-p", "8000:8000", "-v", "${VAULT_PATH}:/vault:rw", "-v", "vault-cortex-data:/data", "-e", "MCP_AUTH_TOKEN", "-e", "PUBLIC_URL", "-e", "EMBEDDING_ENABLED", "-e", "RERANK_MODE", "-e", "WINDOWS_MODE", "-e", "MEMORY_ENABLED", "-e", "FILE_TOOLS_ENABLED", "-e", "READONLY_MODE", "-e", "MEMORY_DIR", "-e", "DAILY_NOTES_FOLDER", "-e", "DAILY_NOTES_FORMAT", "-e", "TRUST_PROXY_HOPS", "-e", "TRUST_FORWARDED_HOPS", "-e", "TZ", "-e", "LOG_LEVEL", "-e", "LOG_RETENTION_DAYS", "-e", "SERVICE_DOCUMENTATION_URL", "-e", "MAX_FILE_BYTES", "-e", "MAX_IMAGE_OUTPUT_BYTES", "-e", "MAX_PDF_RENDER_PAGES", "ghcr.io/aliasunder/vault-cortex:0.54.15"]
env = { "MCP_AUTH_TOKEN" = "${MCP_AUTH_TOKEN}", "PUBLIC_URL" = "http://localhost:8000", "EMBEDDING_ENABLED" = "true", "RERANK_MODE" = "blended", "WINDOWS_MODE" = "false", "MEMORY_ENABLED" = "true", "FILE_TOOLS_ENABLED" = "true", "READONLY_MODE" = "false", "MEMORY_DIR" = "About Me", "DAILY_NOTES_FOLDER" = "Daily Notes", "DAILY_NOTES_FORMAT" = "YYYY-MM-DD", "TRUST_PROXY_HOPS" = "0", "TRUST_FORWARDED_HOPS" = "0", "TZ" = "UTC", "LOG_LEVEL" = "info", "LOG_RETENTION_DAYS" = "90", "SERVICE_DOCUMENTATION_URL" = "https://github.com/aliasunder/vault-cortex", "MAX_FILE_BYTES" = "52428800", "MAX_IMAGE_OUTPUT_BYTES" = "49152", "MAX_PDF_RENDER_PAGES" = "5" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vault-cortex": {
"type": "local",
"command": [
"docker",
"-p",
"8000:8000",
"-v",
"{env:VAULT_PATH}:/vault:rw",
"-v",
"vault-cortex-data:/data",
"-e",
"MCP_AUTH_TOKEN",
"-e",
"PUBLIC_URL",
"-e",
"EMBEDDING_ENABLED",
"-e",
"RERANK_MODE",
"-e",
"WINDOWS_MODE",
"-e",
"MEMORY_ENABLED",
"-e",
"FILE_TOOLS_ENABLED",
"-e",
"READONLY_MODE",
"-e",
"MEMORY_DIR",
"-e",
"DAILY_NOTES_FOLDER",
"-e",
"DAILY_NOTES_FORMAT",
"-e",
"TRUST_PROXY_HOPS",
"-e",
"TRUST_FORWARDED_HOPS",
"-e",
"TZ",
"-e",
"LOG_LEVEL",
"-e",
"LOG_RETENTION_DAYS",
"-e",
"SERVICE_DOCUMENTATION_URL",
"-e",
"MAX_FILE_BYTES",
"-e",
"MAX_IMAGE_OUTPUT_BYTES",
"-e",
"MAX_PDF_RENDER_PAGES",
"ghcr.io/aliasunder/vault-cortex:0.54.15"
],
"enabled": true,
"environment": {
"MCP_AUTH_TOKEN": "{env:MCP_AUTH_TOKEN}",
"PUBLIC_URL": "http://localhost:8000",
"EMBEDDING_ENABLED": "true",
"RERANK_MODE": "blended",
"WINDOWS_MODE": "false",
"MEMORY_ENABLED": "true",
"FILE_TOOLS_ENABLED": "true",
"READONLY_MODE": "false",
"MEMORY_DIR": "About Me",
"DAILY_NOTES_FOLDER": "Daily Notes",
"DAILY_NOTES_FORMAT": "YYYY-MM-DD",
"TRUST_PROXY_HOPS": "0",
"TRUST_FORWARDED_HOPS": "0",
"TZ": "UTC",
"LOG_LEVEL": "info",
"LOG_RETENTION_DAYS": "90",
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex",
"MAX_FILE_BYTES": "52428800",
"MAX_IMAGE_OUTPUT_BYTES": "49152",
"MAX_PDF_RENDER_PAGES": "5"
}
}
}
}{
"mcpServers": {
"vault-cortex": {
"command": "docker",
"args": [
"-p",
"8000:8000",
"-v",
"${VAULT_PATH}:/vault:rw",
"-v",
"vault-cortex-data:/data",
"-e",
"MCP_AUTH_TOKEN",
"-e",
"PUBLIC_URL",
"-e",
"EMBEDDING_ENABLED",
"-e",
"RERANK_MODE",
"-e",
"WINDOWS_MODE",
"-e",
"MEMORY_ENABLED",
"-e",
"FILE_TOOLS_ENABLED",
"-e",
"READONLY_MODE",
"-e",
"MEMORY_DIR",
"-e",
"DAILY_NOTES_FOLDER",
"-e",
"DAILY_NOTES_FORMAT",
"-e",
"TRUST_PROXY_HOPS",
"-e",
"TRUST_FORWARDED_HOPS",
"-e",
"TZ",
"-e",
"LOG_LEVEL",
"-e",
"LOG_RETENTION_DAYS",
"-e",
"SERVICE_DOCUMENTATION_URL",
"-e",
"MAX_FILE_BYTES",
"-e",
"MAX_IMAGE_OUTPUT_BYTES",
"-e",
"MAX_PDF_RENDER_PAGES",
"ghcr.io/aliasunder/vault-cortex:0.54.15"
],
"env": {
"MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}",
"PUBLIC_URL": "http://localhost:8000",
"EMBEDDING_ENABLED": "true",
"RERANK_MODE": "blended",
"WINDOWS_MODE": "false",
"MEMORY_ENABLED": "true",
"FILE_TOOLS_ENABLED": "true",
"READONLY_MODE": "false",
"MEMORY_DIR": "About Me",
"DAILY_NOTES_FOLDER": "Daily Notes",
"DAILY_NOTES_FORMAT": "YYYY-MM-DD",
"TRUST_PROXY_HOPS": "0",
"TRUST_FORWARDED_HOPS": "0",
"TZ": "UTC",
"LOG_LEVEL": "info",
"LOG_RETENTION_DAYS": "90",
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex",
"MAX_FILE_BYTES": "52428800",
"MAX_IMAGE_OUTPUT_BYTES": "49152",
"MAX_PDF_RENDER_PAGES": "5"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=vault-cortex&config=eyJjb21tYW5kIjoiZG9ja2VyIiwiYXJncyI6WyItcCIsIjgwMDA6ODAwMCIsIi12IiwiJHtWQVVMVF9QQVRIfTovdmF1bHQ6cnciLCItdiIsInZhdWx0LWNvcnRleC1kYXRhOi9kYXRhIiwiLWUiLCJNQ1BfQVVUSF9UT0tFTiIsIi1lIiwiUFVCTElDX1VSTCIsIi1lIiwiRU1CRURESU5HX0VOQUJMRUQiLCItZSIsIlJFUkFOS19NT0RFIiwiLWUiLCJXSU5ET1dTX01PREUiLCItZSIsIk1FTU9SWV9FTkFCTEVEIiwiLWUiLCJGSUxFX1RPT0xTX0VOQUJMRUQiLCItZSIsIlJFQURPTkxZX01PREUiLCItZSIsIk1FTU9SWV9ESVIiLCItZSIsIkRBSUxZX05PVEVTX0ZPTERFUiIsIi1lIiwiREFJTFlfTk9URVNfRk9STUFUIiwiLWUiLCJUUlVTVF9QUk9YWV9IT1BTIiwiLWUiLCJUUlVTVF9GT1JXQVJERURfSE9QUyIsIi1lIiwiVFoiLCItZSIsIkxPR19MRVZFTCIsIi1lIiwiTE9HX1JFVEVOVElPTl9EQVlTIiwiLWUiLCJTRVJWSUNFX0RPQ1VNRU5UQVRJT05fVVJMIiwiLWUiLCJNQVhfRklMRV9CWVRFUyIsIi1lIiwiTUFYX0lNQUdFX09VVFBVVF9CWVRFUyIsIi1lIiwiTUFYX1BERl9SRU5ERVJfUEFHRVMiLCJnaGNyLmlvL2FsaWFzdW5kZXIvdmF1bHQtY29ydGV4OjAuNTQuMTUiXSwiZW52Ijp7Ik1DUF9BVVRIX1RPS0VOIjoiJHtNQ1BfQVVUSF9UT0tFTn0iLCJQVUJMSUNfVVJMIjoiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiRU1CRURESU5HX0VOQUJMRUQiOiJ0cnVlIiwiUkVSQU5LX01PREUiOiJibGVuZGVkIiwiV0lORE9XU19NT0RFIjoiZmFsc2UiLCJNRU1PUllfRU5BQkxFRCI6InRydWUiLCJGSUxFX1RPT0xTX0VOQUJMRUQiOiJ0cnVlIiwiUkVBRE9OTFlfTU9ERSI6ImZhbHNlIiwiTUVNT1JZX0RJUiI6IkFib3V0IE1lIiwiREFJTFlfTk9URVNfRk9MREVSIjoiRGFpbHkgTm90ZXMiLCJEQUlMWV9OT1RFU19GT1JNQVQiOiJZWVlZLU1NLUREIiwiVFJVU1RfUFJPWFlfSE9QUyI6IjAiLCJUUlVTVF9GT1JXQVJERURfSE9QUyI6IjAiLCJUWiI6IlVUQyIsIkxPR19MRVZFTCI6ImluZm8iLCJMT0dfUkVURU5USU9OX0RBWVMiOiI5MCIsIlNFUlZJQ0VfRE9DVU1FTlRBVElPTl9VUkwiOiJodHRwczovL2dpdGh1Yi5jb20vYWxpYXN1bmRlci92YXVsdC1jb3J0ZXgiLCJNQVhfRklMRV9CWVRFUyI6IjUyNDI4ODAwIiwiTUFYX0lNQUdFX09VVFBVVF9CWVRFUyI6IjQ5MTUyIiwiTUFYX1BERl9SRU5ERVJfUEFHRVMiOiI1In19"
}{
"servers": {
"vault-cortex": {
"type": "stdio",
"command": "docker",
"args": [
"-p",
"8000:8000",
"-v",
"${VAULT_PATH}:/vault:rw",
"-v",
"vault-cortex-data:/data",
"-e",
"MCP_AUTH_TOKEN",
"-e",
"PUBLIC_URL",
"-e",
"EMBEDDING_ENABLED",
"-e",
"RERANK_MODE",
"-e",
"WINDOWS_MODE",
"-e",
"MEMORY_ENABLED",
"-e",
"FILE_TOOLS_ENABLED",
"-e",
"READONLY_MODE",
"-e",
"MEMORY_DIR",
"-e",
"DAILY_NOTES_FOLDER",
"-e",
"DAILY_NOTES_FORMAT",
"-e",
"TRUST_PROXY_HOPS",
"-e",
"TRUST_FORWARDED_HOPS",
"-e",
"TZ",
"-e",
"LOG_LEVEL",
"-e",
"LOG_RETENTION_DAYS",
"-e",
"SERVICE_DOCUMENTATION_URL",
"-e",
"MAX_FILE_BYTES",
"-e",
"MAX_IMAGE_OUTPUT_BYTES",
"-e",
"MAX_PDF_RENDER_PAGES",
"ghcr.io/aliasunder/vault-cortex:0.54.15"
],
"env": {
"MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}",
"PUBLIC_URL": "http://localhost:8000",
"EMBEDDING_ENABLED": "true",
"RERANK_MODE": "blended",
"WINDOWS_MODE": "false",
"MEMORY_ENABLED": "true",
"FILE_TOOLS_ENABLED": "true",
"READONLY_MODE": "false",
"MEMORY_DIR": "About Me",
"DAILY_NOTES_FOLDER": "Daily Notes",
"DAILY_NOTES_FORMAT": "YYYY-MM-DD",
"TRUST_PROXY_HOPS": "0",
"TRUST_FORWARDED_HOPS": "0",
"TZ": "UTC",
"LOG_LEVEL": "info",
"LOG_RETENTION_DAYS": "90",
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex",
"MAX_FILE_BYTES": "52428800",
"MAX_IMAGE_OUTPUT_BYTES": "49152",
"MAX_PDF_RENDER_PAGES": "5"
}
}
}
}{
"mcpServers": {
"vault-cortex": {
"command": "docker",
"args": [
"-p",
"8000:8000",
"-v",
"${VAULT_PATH}:/vault:rw",
"-v",
"vault-cortex-data:/data",
"-e",
"MCP_AUTH_TOKEN",
"-e",
"PUBLIC_URL",
"-e",
"EMBEDDING_ENABLED",
"-e",
"RERANK_MODE",
"-e",
"WINDOWS_MODE",
"-e",
"MEMORY_ENABLED",
"-e",
"FILE_TOOLS_ENABLED",
"-e",
"READONLY_MODE",
"-e",
"MEMORY_DIR",
"-e",
"DAILY_NOTES_FOLDER",
"-e",
"DAILY_NOTES_FORMAT",
"-e",
"TRUST_PROXY_HOPS",
"-e",
"TRUST_FORWARDED_HOPS",
"-e",
"TZ",
"-e",
"LOG_LEVEL",
"-e",
"LOG_RETENTION_DAYS",
"-e",
"SERVICE_DOCUMENTATION_URL",
"-e",
"MAX_FILE_BYTES",
"-e",
"MAX_IMAGE_OUTPUT_BYTES",
"-e",
"MAX_PDF_RENDER_PAGES",
"ghcr.io/aliasunder/vault-cortex:0.54.15"
],
"env": {
"MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}",
"PUBLIC_URL": "http://localhost:8000",
"EMBEDDING_ENABLED": "true",
"RERANK_MODE": "blended",
"WINDOWS_MODE": "false",
"MEMORY_ENABLED": "true",
"FILE_TOOLS_ENABLED": "true",
"READONLY_MODE": "false",
"MEMORY_DIR": "About Me",
"DAILY_NOTES_FOLDER": "Daily Notes",
"DAILY_NOTES_FORMAT": "YYYY-MM-DD",
"TRUST_PROXY_HOPS": "0",
"TRUST_FORWARDED_HOPS": "0",
"TZ": "UTC",
"LOG_LEVEL": "info",
"LOG_RETENTION_DAYS": "90",
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex",
"MAX_FILE_BYTES": "52428800",
"MAX_IMAGE_OUTPUT_BYTES": "49152",
"MAX_PDF_RENDER_PAGES": "5"
}
}
}
}extensions:
"vault-cortex":
enabled: true
name: "vault-cortex"
type: stdio
cmd: "docker"
args:
- "-p"
- "8000:8000"
- "-v"
- "${VAULT_PATH}:/vault:rw"
- "-v"
- "vault-cortex-data:/data"
- "-e"
- "MCP_AUTH_TOKEN"
- "-e"
- "PUBLIC_URL"
- "-e"
- "EMBEDDING_ENABLED"
- "-e"
- "RERANK_MODE"
- "-e"
- "WINDOWS_MODE"
- "-e"
- "MEMORY_ENABLED"
- "-e"
- "FILE_TOOLS_ENABLED"
- "-e"
- "READONLY_MODE"
- "-e"
- "MEMORY_DIR"
- "-e"
- "DAILY_NOTES_FOLDER"
- "-e"
- "DAILY_NOTES_FORMAT"
- "-e"
- "TRUST_PROXY_HOPS"
- "-e"
- "TRUST_FORWARDED_HOPS"
- "-e"
- "TZ"
- "-e"
- "LOG_LEVEL"
- "-e"
- "LOG_RETENTION_DAYS"
- "-e"
- "SERVICE_DOCUMENTATION_URL"
- "-e"
- "MAX_FILE_BYTES"
- "-e"
- "MAX_IMAGE_OUTPUT_BYTES"
- "-e"
- "MAX_PDF_RENDER_PAGES"
- "ghcr.io/aliasunder/vault-cortex:0.54.15"
envs:
"MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}"
"PUBLIC_URL": "http://localhost:8000"
"EMBEDDING_ENABLED": "true"
"RERANK_MODE": "blended"
"WINDOWS_MODE": "false"
"MEMORY_ENABLED": "true"
"FILE_TOOLS_ENABLED": "true"
"READONLY_MODE": "false"
"MEMORY_DIR": "About Me"
"DAILY_NOTES_FOLDER": "Daily Notes"
"DAILY_NOTES_FORMAT": "YYYY-MM-DD"
"TRUST_PROXY_HOPS": "0"
"TRUST_FORWARDED_HOPS": "0"
"TZ": "UTC"
"LOG_LEVEL": "info"
"LOG_RETENTION_DAYS": "90"
"SERVICE_DOCUMENTATION_URL": "https://github.com/aliasunder/vault-cortex"
"MAX_FILE_BYTES": "52428800"
"MAX_IMAGE_OUTPUT_BYTES": "49152"
"MAX_PDF_RENDER_PAGES": "5"
timeout: 300
Placeholders to fill from your own secret store: ${MCP_AUTH_TOKEN}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website ~liveness-unmeasured +updated-2d-ago -multi-version-spam(159) -unpinned-packages(1)
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
ghcr.io/aliasunder/vault-cortex:0.54.15 | oci | unpinned | docker | MCP_AUTH_TOKEN |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.aliasunder/vault-cortex",
"title": "Vault Cortex",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "0.54.15",
"packages": [
{
"transport": {
"url": "http://localhost:8000/mcp",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"value": "Bearer {MCP_AUTH_TOKEN}",
"isSecret": true,
"variables": {
"MCP_AUTH_TOKEN": {
"isSecret": true,
"isRequired": true,
"description": "Bearer token for MCP client authentication. Generate with: openssl rand -hex 32"
}
},
"isRequired": true,
"description": "Bearer token used by the MCP client. Must match the MCP_AUTH_TOKEN env var passed to the container."
}
]
},
"identifier": "ghcr.io/aliasunder/vault-cortex:0.54.15",
"runtimeHint": "docker",
"registryType": "oci",
"runtimeArguments": [
{
"name": "-p",
"type": "named",
"value": "8000:8000",
"description": "Publish the container's port 8000 on the host."
},
{
"name": "-v",
"type": "named",
"value": "{VAULT_PATH}:/vault:rw",
"variables": {
"VAULT_PATH": {
"format": "filepath",
"isRequired": true,
"description": "Absolute path to your Obsidian vault on the host machine."
}
},
"isRequired": true,
"description": "Bind-mount your Obsidian vault into the container at /vault."
},
{
"name": "-v",
"type": "named",
"value": "vault-cortex-data:/data",
"description": "Named volume for persistent state under /data — search index, OAuth token DB, and any log files. Keeps OAuth sessions alive across container restarts."
}
],
"environmentVariables": [
{
"name": "MCP_AUTH_TOKEN",
"isSecret": true,
"isRequired": true,
"description": "Bearer token for MCP client authentication. Must match the Authorization header sent by clients. Generate with: openssl rand -hex 32"
},
{
"name": "PUBLIC_URL",
"default": "http://localhost:8000",
"description": "Public URL clients use to reach this server. Used as the OAuth issuer URL in discovery metadata. Override when exposing the server outside localhost or on a non-default port."
},
{
"name": "EMBEDDING_ENABLED",
"default": "true",
"description": "Enable or disable the embedding pipeline. When false, no ONNX model is downloaded, no vector tables are created, and search uses FTS5 only."
},
{
"name": "RERANK_MODE",
"choices": [
"blended",
"none"
],
"default": "blended",
"description": "Cross-encoder reranking mode: blended (position-aware score blending after RRF fusion) or none (skip reranking). Only takes effect when EMBEDDING_ENABLED is true."
},
{
"name": "WINDOWS_MODE",
"default": "false",
"description": "Windows bind-mount mode: enables filesystem polling for the file watcher and rename-based moves across the Docker Desktop/WSL2 bridge. Set to true when the vault lives on a Windows drive."
},
{
"name": "MEMORY_ENABLED",
"default": "true",
"description": "Enable or disable the structured memory layer. When false, memory tools are hidden, bootstrap is skipped, and server metadata omits memory references."
},
{
"name": "FILE_TOOLS_ENABLED",
"default": "true",
"description": "Enable or disable file tools (vault_read_file, vault_list_files). When false, file tools are hidden and server metadata omits file tool references."
},
{
"name": "READONLY_MODE",
"default": "false",
"description": "Run the server read-only: every vault-writing tool is hidden, the memory folder is not auto-created, and server metadata omits write references."
},
{
"name": "DISABLED_TOOLS",
"description": "Hide individual tools by name, comma-separated. Subtractive only — it cannot re-enable a tool another setting hides; an unknown tool name stops the server at startup."
},
{
"name": "MEMORY_DIR",
"default": "About Me",
"description": "Vault folder for structured memory files (About Me-style notes). Memory tools are hidden when MEMORY_ENABLED is false, but this value still feeds the defaults for PROTECTED_PATHS and ORPHAN_EXCLUDE_FOLDERS."
},
{
"name": "DAILY_NOTES_FOLDER",
"default": "Daily Notes",
"description": "Vault folder for daily notes. Overrides the folder configured in Obsidian's daily-notes plugin. When unset, read from the vault's .obsidian/daily-notes.json (an empty folder there follows Obsidian's new-note location), falling back to \"Daily Notes\" when that file is missing. Set to / for the vault root."
},
{
"name": "DAILY_NOTES_FORMAT",
"default": "YYYY-MM-DD",
"description": "Filename date format for daily notes (Moment.js tokens). Overrides the format configured in Obsidian's daily-notes plugin. When unset, read from the vault's .obsidian/daily-notes.json, falling back to \"YYYY-MM-DD\"."
},
{
"name": "TRUST_PROXY_HOPS",
"default": "0",
"description": "Number of trusted reverse-proxy hops used to derive the client IP from X-Forwarded-For for OAuth rate limiting and request logs. With 0, injected forwarding headers are ignored."
},
{
"name": "TRUST_FORWARDED_HOPS",
"default": "0",
"description": "How many entries from the end of the RFC 7239 Forwarded header's for= list to count to reach the client IP for OAuth rate limiting and request logs. 0 ignores the header; 1 when the proxy in front writes it (e.g. AWS API Gateway); 2 when a CDN fronts that proxy and is the only way to reach it."
},
{
"name": "TZ",
"default": "UTC",
"description": "IANA timezone for timestamps and daily note resolution."
},
{
"name": "LOG_LEVEL",
"choices": [
"debug",
"info",
"warn",
"error"
],
"default": "info",
"description": "Logging verbosity."
},
{
"name": "LOG_DIR",
"format": "filepath",
"description": "Directory for log files that survive container re-creation. The container's own log is always written but discarded when the container is recreated; date-stamped files under LOG_DIR persist on the data volume. Default: /data/logs (remote image), $STORAGE_ROOT/data/logs (single-volume mode), none (local image). none keeps only the container log."
},
{
"name": "LOG_RETENTION_DAYS",
"format": "number",
"default": "90",
"description": "Days to keep log files before automatic cleanup on startup; only applies when LOG_DIR is a path."
},
{
"name": "PROTECTED_PATHS",
"description": "Comma-separated vault folder names blocked from vault_delete_note and vault_move_note. Default: MEMORY_DIR plus the daily notes folder, read from DAILY_NOTES_FOLDER or .obsidian/daily-notes.json (default Daily Notes; none when that setting is the vault root or empty). When set, overrides the default entirely."
},
{
"name": "ORPHAN_EXCLUDE_FOLDERS",
"description": "Comma-separated vault folder names excluded from vault_find_orphans. Default: the daily notes folder, \"Templates\", and MEMORY_DIR. DAILY_NOTES_FOLDER wins; otherwise .obsidian/daily-notes.json is read per query (fallback \"Daily Notes\"; no daily folder when that setting is the vault root or empty). When set, replaces the defaults entirely. Set to a comma (,) to exclude nothing; an empty value uses the defaults."
},
{
"name": "SERVICE_DOCUMENTATION_URL",
"default": "https://github.com/aliasunder/vault-cortex",
"description": "Override the OAuth service documentation URL exposed via discovery metadata."
},
{
"name": "MAX_FILE_BYTES",
"format": "number",
"default": "52428800",
"description": "Largest file vault_read_file will read, in bytes. Reading a larger file returns an error instead of content."
},
{
"name": "MAX_IMAGE_OUTPUT_BYTES",
"format": "number",
"default": "49152",
"description": "Byte budget for images returned by vault_read_file, in binary bytes before base64 encoding. Images exceeding the budget are downscaled/recompressed server-side to fit; raise for clients that accept larger tool responses."
},
{
"name": "MAX_PDF_RENDER_PAGES",
"format": "number",
"default": "5",
"description": "Maximum PDF pages to render as images when raw: true is set on vault_read_file. The per-page byte budget is MAX_IMAGE_OUTPUT_BYTES divided evenly across the rendered pages."
}
]
}
],
"repository": {
"id": "1226067541",
"url": "https://github.com/aliasunder/vault-cortex",
"source": "github"
},
"websiteUrl": "https://github.com/aliasunder/vault-cortex",
"description": "Standalone MCP server for Obsidian vaults — hybrid search, notes & files, memory, tasks, OAuth 2.1"
}