MCP Tools

All tools return JSON payloads.

Memora MCP reads configuration from {vault}/.memora/config.toml (embedder, retrieval top_k, privacy, and LLM provider settings), matching the CLI.

Environment variables

VariableRequiredPurpose
MEMORA_VAULTyesPath to your Obsidian-compatible vault
MEMORA_INDEX_DBoptionalOverride index DB path (default: {vault}/.memora/memora.db)
MEMORA_VECTOR_INDEXoptionalOverride vector index path (default: {vault}/.memora/vectors)
MEMORA_ENABLE_NETWORK_LLMfor LLM toolsSet to 1 to enable network LLM calls

When MEMORA_ENABLE_NETWORK_LLM is unset, memora_query_cited still works using extractive verified fallback (indexed claims only, degraded: true). memora_consolidate and memora_challenge require network LLM and return an error if it is disabled.

Example Claude Desktop config:

{
  "mcpServers": {
    "memora": {
      "command": "/absolute/path/to/memora-mcp",
      "env": {
        "MEMORA_VAULT": "/absolute/path/to/your-vault",
        "MEMORA_ENABLE_NETWORK_LLM": "1"
      }
    }
  }
}

memora_query

Input:

{"query":"What did the team decide about drift's serialization format?","k":5}

Output:

{"hits":[{"id":"note-1","summary":"drift moved to MessagePack in Q3","region":"projects/drift","score":0.12,"snippet":"..."}],"regions_used":["projects/drift"]}

Snippets redact secret note bodies and inline <!--privacy:secret--> regions.

memora_query_cited

Input:

{"query":"What did the team decide about drift's serialization format?","k":5}

Output:

{
  "clean_text": "drift switched from JSON to MessagePack [claim:drf75a1c9e10b2aa]",
  "verified_count": 1,
  "degraded": false,
  "checks": [{"claim_id": "drf75a1c9e10b2aa", "status": "verified"}]
}

When network LLM is disabled, responses are built extractively from indexed claims with degraded: true. Secret claims sent to cloud providers are redacted per [privacy].redact_secret_in_cloud in vault config.

memora_get_note

Input: {"id":"note-1"}

Output keys: id, region, summary, privacy, body, body_redacted, tags, refs, wikilinks

Secret notes return "body": "[redacted]" and "body_redacted": true.

memora_get_atlas

Input: {"region":"projects/drift"}

Output keys: region, atlas_markdown, note_count

memora_get_world_map

Input: {}

Output: {"markdown":"# World Map ..."}

memora_capture

Input:

{"region":"inbox","summary":"Quick capture","body":"...", "tags":["inbox"], "privacy":"private"}

Output: {"id":"note-...","path":"inbox/note-....md"}

Region paths must stay inside the vault (.. and absolute paths are rejected). Captured notes are indexed with claim extraction when network LLM is enabled.

memora_consolidate

Input: {"scope":"all"} or {"scope":"region:work/projects"}

Output keys: regions_rebuilt, notes_moved

Requires MEMORA_ENABLE_NETWORK_LLM=1.

memora_verify_claim

Input: {"claim_id":"abcd1234"}

Output keys: exists, span_intact, current_text

memora_stale_claims

Input: {}

Output: array of stale claim rows.

memora_contradictions

Input: {"subject":"drift-bench"} (optional)

Output: array of contradiction rows.

memora_challenge

Input: {}

Output: ChallengerReport JSON.

Requires MEMORA_ENABLE_NETWORK_LLM=1.

memora_decisions

Input: {}

Output: [{id,title,decided_on,status}]