Skip to content
Agentmart
Submit a tool

Enquire MCP

Long-term memory for AI agents — your Obsidian vault as searchable persistent memory.

Connector by oomkapwn · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 34
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/oomkapwn-enquire-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Long-term memory for AI agents — your Obsidian vault as searchable persistent memory.

Use cases: note-taking, knowledge-base

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
37 read · 9 write · 1 delete
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Tools by what they do 47

Read from the source code; the running server may list different tools.

Read 37 · Look things up without changing anything.

  • obsidian_chat_thread_read
  • obsidian_context_pack
  • obsidian_dataview_query
  • obsidian_embeddings_search
  • obsidian_find_path
  • obsidian_find_similar
  • obsidian_frontmatter_get
  • obsidian_frontmatter_search
  • obsidian_get_backlinks
  • obsidian_get_communities
  • obsidian_get_note_neighbors
  • obsidian_get_outbound_links
Show 25 more tools
  • obsidian_get_recent_edits
  • obsidian_get_unresolved_wikilinks
  • obsidian_hyde_search
  • obsidian_lint_wiki
  • obsidian_list_bases
  • obsidian_list_canvases
  • obsidian_list_notes
  • obsidian_list_pdfs
  • obsidian_list_tags
  • obsidian_ocr_pdf
  • obsidian_open_in_ui
  • obsidian_open_questions
  • obsidian_paper_audit
  • obsidian_query_base
  • obsidian_read_base
  • obsidian_read_canvas
  • obsidian_read_note
  • obsidian_read_pdf
  • obsidian_search
  • obsidian_search_text
  • obsidian_semantic_search
  • obsidian_stale_notes
  • obsidian_stats
  • obsidian_validate_note_proposal
  • obsidian_vault_shape

Write 9 · Create, change, send or run things.

  • obsidian_append_to_note
  • obsidian_archive_note
  • obsidian_chat_thread_append
  • obsidian_create_note
  • obsidian_full_text_search
  • obsidian_mark_useful
  • obsidian_rename_note
  • obsidian_replace_in_notes
  • obsidian_resolve_wikilink

Delete 1 · Delete, drop, revoke or wipe things.

  • obsidian_frontmatter_set

Network hosts it talks to 21

  • biomejs.dev · found in code
  • claude.ai · found in code
  • code.claude.com · found in code
  • code.visualstudio.com · found in code
  • cursor.com · found in code
  • docs.windsurf.com · found in code
  • enquire.invalid · found in code
  • gist.github.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • huggingface.co · found in code
  • in-toto.io · found in code
  • learn.chatgpt.com · found in code
  • oomkapwn.github.io · found in code
  • raw.githubusercontent.com · found in code
  • scripts.sil.org · found in code
  • sitemaps.org · found in code
  • slsa-framework.github.io · found in code
  • slsa.dev · found in code
  • token.actions.githubusercontent.com · found in code
  • typedoc.org · found in code

Files it touches

  • Your home directory (~)
  • ~/.codeium/windsurf/mcp_config.json
  • C:\\Windows\\System32\\taskkill.exe

Tools (47)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • obsidian_append_to_noteAppend to note

    Append a block of markdown to the end of an existing note. Provide either path or title. WRITE TOOL — only available when the server is started with --enable-write.

  • obsidian_archive_noteArchive a note (move to Archive/ + rewrite backlinks)

    Convenience wrapper around obsidian_rename_note for the common archive workflow. Moves the note's basename into `archive_folder` (default `Archive/`) and rewrites every wikilink/embed pointing at it. All the rename_note guarantees apply: code-fence-aware, dry_run preview, refuses to clobber an existing archive entry without `overwrite: true`. Returns the same shape as `obsidian_rename_note`. WRITE TOOL — only registered when --enable-write is passed.

  • obsidian_chat_thread_appendAppend message to note-tethered chat thread

    Add a user/assistant/system message to a note's `## Chat: <title>` block. Creates the note + heading if absent. Threads are stored as markdown so they're searchable, version-controllable, and survive across sessions / clients. Pair with `obsidian_chat_thread_read` to load past context. WRITE TOOL — only registered with --enable-write.

  • obsidian_chat_thread_readRead parsed chat thread from a note

    Parse a note's `## Chat: <title>` block into structured messages with role/timestamp/content/line-range. `#`/`##` lines inside a message are kept. Read-only.

  • obsidian_context_packPack vault context for an AI question (token-budgeted)

    Given a question, retrieve the top relevant Markdown notes (via hybrid search), gather backlink summaries + optionally recent dailies, deduplicate, pack to a token budget, and return a single ready-to-paste markdown bundle. Ranked PDF hits are never parsed as Markdown: their paths are returned in `skipped_pdf_candidates` for bounded follow-up with `obsidian_read_pdf`. Optional `subqueries[]` adds bounded coverage-aware retrieval: reserve the best available unique candidate per atomic sub-question, then RRF-fill the remaining slots. Saves the agent ~5 separate tool calls while keeping document-…

  • obsidian_create_noteCreate note

    Create a new note inside the vault. Refuses to overwrite unless overwrite=true. Frontmatter is rendered as YAML when supplied. WRITE TOOL — only available when the server is started with --enable-write.

  • obsidian_dataview_queryDataview query (basic)

    Run a Dataview-style query. Grammar: (LIST | TABLE col1, col2) FROM ("folder" | #tag) [WHERE pred (AND|OR pred)*] [SORT field [ASC|DESC]] [LIMIT n]. Operators: =, !=, contains, like (SQL-LIKE wildcard with *, escape with \*). Special fields: file.name, file.path, file.mtime, file.tags. Other identifiers read frontmatter. No expressions, FLATTEN, GROUP BY, or joins — see docs/api.md for the unsupported set.

  • obsidian_embeddings_searchEmbeddings search (ML, paraphrase-multilingual)

    ML-embedding retrieval via @huggingface/transformers + paraphrase-multilingual-MiniLM-L12-v2 q8 (50+ languages, 384-dim, runs on CPU). Higher-quality than `obsidian_semantic_search` for paraphrases / synonyms / cross-language queries, but requires a one-time setup: (1) `enquire-mcp install-model multilingual` downloads the ONNX weights (~118MB) and (2) `enquire-mcp build-embeddings --vault <path>` writes the persistent vector index. Query latency depends on corpus and hardware; enable HNSW when measurements justify approximate nearest-neighbor retrieval. If the index is missing, the tool retur…

  • obsidian_find_pathFind shortest wikilink path between two notes

    Multi-hop graph traversal: BFS from `from` to `to` over the wikilink graph, returning the shortest path (sequence of notes connected by wikilinks) up to `max_depth` hops. Each step in the returned path carries the wikilink text used to traverse to it. With `include_alternatives=true`, returns up to 10 same-length paths so the agent can compare. Embeds (`![[…]]`) are followed by default; pass `follow_embeds=false` to skip them. Read-only.

  • obsidian_find_similarFind similar notes (lexical-hybrid)

    Given a note, return up to N other notes that are 'related' — by tag overlap (Jaccard), title 3-gram overlap, shared outbound links, and co-backlinks. Score is a weighted sum of those four signals; each is also returned individually so the caller can re-rank. No embeddings, no native deps — pure structural retrieval over the existing vault graph. Runs O(N) over the whole vault per call; for vaults >5k notes prefer batching. **v3.10:** each result also carries `age_days` + a `stale` flag (from the note's live mtime) so you can prefer fresher related notes or flag aged ones.

  • obsidian_frontmatter_getRead note frontmatter (full or single key)

    Return parsed YAML frontmatter for a note. With `key`, returns just that field's value. Without `key`, returns the whole frontmatter object. Read-only.

  • obsidian_frontmatter_searchFind notes by frontmatter predicate

    Find every note where frontmatter.<key> matches a predicate. Useful as a precursor to bulk frontmatter_set: 'find all notes with status:draft and set their status to published'. Predicates are exclusive: pass exactly one of `equals` (strict equality), `exists` (key must be present), `contains` (for array values, member match).

  • obsidian_frontmatter_setSet/unset frontmatter keys atomically

    Surgical YAML manipulation: set one or more keys, or remove them by passing `null` as the value. Round-trips through the same js-yaml-backed frontmatter serializer used at write time so YAML formatting / quoting / type-coercion stays consistent. Returns `before` + `after` + list of changed keys for observability. `dry_run: true` shows the diff without writing.

  • obsidian_full_text_searchFull-text search (BM25, FTS5 index)

    BM25-ranked full-text search backed by a SQLite FTS5 inverted index. Returns chunk-level hits with snippet excerpts. Hyphenated tokens (e.g. `claude-telegram`) are auto-quoted. Optional filters: `folder` (vault-relative subtree), `tag` (exact frontmatter or inline tag membership), `since` (ISO date — only chunks from notes modified on/after this). Use `obsidian_search_text` instead if the index isn't built yet — this tool is only registered when the server is started with BOTH `--persistent-index` (so the FTS5 index exists) AND `--diagnostic-search-tools` (single-ranker diagnostic surface; the…

  • obsidian_get_backlinksGet backlinks

    List every note in the vault that links (or embeds) the target note. Returns ranked hits with snippets and link kind (wikilink/embed/mixed).

Show 32 more tools
  • obsidian_get_communitiesDetect wikilink-graph communities (GraphRAG-light)

    v3.4.0 — Computes structural communities over a complete resource-bounded vault wikilink graph via greedy modularity optimization (single-phase Louvain). Returns exact total/eligible/returned community and member counts, membership-path JSON UTF-8 byte receipts, explicit truncation receipts, `modularity` (∈ [-0.5, 1]), `iterations`, `converged`, and bounded `communities[]` with id/size/sorted-members/representative. Membership is encoded once in `communities[].members`; no duplicate path→id map is emitted. Pure structural — no embeddings or LLM calls. The result is NOT cached — call once per s…

  • obsidian_get_note_neighborsGet a note + its 1-hop graph neighborhood

    Return a note's immediate graph neighborhood in one call: outbound wikilinks (resolved), inbound backlinks (with count), and tag-cluster siblings (notes sharing ≥1 tag, excluding outbound/inbound). Replaces the read_note → backlinks → outbound → resolve_wikilink chain with a single round-trip — designed for RAG-style 'give the LLM enough context to reason about THIS note'.

  • obsidian_get_outbound_linksGet outbound links

    List every link this note points to — wikilinks and (optionally) embeds, with each one's resolution status. Symmetric counterpart to obsidian_get_backlinks.

  • obsidian_get_recent_editsGet recent edits

    List notes ordered by most recent modification. Useful for picking up where work was left off.

  • obsidian_get_unresolved_wikilinksGet unresolved wikilinks

    Find every [[wikilink]] (and ![[embed]]) in the vault whose target does not resolve to a file. Useful as a vault-hygiene utility — broken links, typos, notes you intended to create.

  • obsidian_hyde_searchHyDE-augmented embeddings search (Hypothetical Document Embeddings)

    v3.1.0 — HyDE retrieval (Gao et al 2023). Caller agent generates a synthetic answer to its own question, passes it as `hypothetical_answer`; the server embeds the answer (not the question) and retrieves against the answer-shaped vector. Typically beats raw-query embedding by +2-5 NDCG@10 on under-specified queries (e.g. "what did I learn about X" — the question vector is generic; the answer vector is topically anchored). Uses the same `.embed.db` as `obsidian_embeddings_search`. The agent SHOULD generate the hypothetical answer with no vault access (otherwise the loop is circular); 1-3 sentenc…

  • obsidian_lint_wikiLint the wiki (Karpathy LLM-Wiki workflow)

    Comprehensive vault-hygiene check inspired by Karpathy's LLM-Wiki gist (gist.github.com/karpathy/442a6bf555914893e9891c11519de94f). Returns five buckets of findings in one call: orphans (no inbound + no outbound), broken wikilinks, stub pages (under N words), stale pages (frontmatter `last_reviewed` or mtime older than M days), and concept candidates (capitalised phrases mentioned by ≥ K notes that lack their own page). Each finding carries a path + suggestion shaped so the agent can fix via existing tools (validate_note_proposal → create_note / append_to_note / rename_note). Read-only.

  • obsidian_list_basesList Obsidian Bases (.base) files

    v3.2.0 — Lists `.base` files (Obsidian's structured-query primitive — YAML files defining filters/views over the vault) with each base's view count and view names. Read-only. Honors `--exclude-glob` and `--read-paths`. Use this to discover which bases exist before calling `obsidian_read_base` (metadata) or `obsidian_query_base` (execute filters). Sorted by mtime descending.

  • obsidian_list_canvasesList Obsidian Canvas (.canvas) files

    Lists `.canvas` files (Obsidian's whiteboard / mind-map format — JSON nodes + edges) in the vault, with each canvas's node and edge counts. Read-only. Honors `--exclude-glob` and `--read-paths`. Use this to discover which canvases exist before calling `obsidian_read_canvas` to inspect one.

  • obsidian_list_notesList notes

    List notes in the vault. Filter by tag, folder, or modified-since date. Returns title, path, frontmatter, tags, and mtime — newest first.

  • obsidian_list_pdfsList PDF files in the vault

    Lists `.pdf` files in the vault with size + last-modified timestamp. Read-only. Honors `--exclude-glob` and `--read-paths`. Use this to discover which PDFs exist before calling `obsidian_read_pdf` to extract text. Sorted by mtime descending (newest first). PDFs are the #1 non-markdown content kind in real research vaults; this is the discovery entry point.

  • obsidian_list_tagsList tags

    List every unique tag in the vault with usage counts (frontmatter vs inline). Sorted by count desc.

  • obsidian_mark_usefulMark recalled notes useful

    Close the retrieval feedback loop: after using `obsidian_search` results, call this with the note path(s) that ACTUALLY helped answer the query (pass the `path` field of the useful hits). The recorded usefulness gently boosts those notes in future searches for this vault (active only when the server was started with `--feedback-weight`). Set `useful: false` to record a note that looked relevant but was NOT helpful (lowers its boost). The per-vault cache sidecar stores the canonical absolute vault root plus relative path keys, counts, and ISO timestamps — never note content, snippets, or the qu…

  • obsidian_ocr_pdfOCR a scanned/image-only PDF (Tesseract.js)

    Description is built at runtime.

  • obsidian_open_in_uiGenerate an obsidian:// URI for hand-off to the desktop app

    Returns an `obsidian://open?vault=<vault>&file=<path>` URI for hand-off to the running Obsidian desktop app. No filesystem or network side effect — the URI emission lets the agent say 'open this in Obsidian' without enquire-mcp coordinating with the running app. Optional `new_pane=true` opens the note in a split. Read-only.

  • obsidian_open_questionsSurface open questions across the vault

    Walks every note for lines matching deferred-thinking markers — `Open question:` / `Q:` / `TODO?` / `??` (plus optional list-bullet/quote/heading prefixes). Returns each hit with source, the heading it lives under, line number, and age in days, sorted oldest-first so things aging out surface first. Common research-PKM pattern (Karpathy's wiki, Eleanor Konik, academic Zettelkasten). Read-only.

  • obsidian_paper_auditAudit paper notes for missing citations

    For each note tagged `#paper` (configurable), verify frontmatter has at least one citable identifier (arxiv / doi / url / isbn). Also flag notes whose body contains an arxiv ID (e.g. `arxiv:2401.12345`) or DOI but doesn't carry the same identifier in frontmatter — common after quick-capture from a chat. Returns each flagged note with what was found in body and a proposed frontmatter patch the agent can apply via validate_note_proposal + create_note/append_to_note. Read-only.

  • obsidian_query_baseExecute an Obsidian Base — return matching notes

    v3.2.0 (extended in v3.5.0) — Runs a `.base` file's filter against the vault's markdown notes, returning matching paths + the frontmatter values that contributed to the match. Supported DSL: `tag == "x"`, `taggedWith(file.file, "x")`, `linksTo(file.file, "Target")` (v3.5.0 — outbound wikilink check, basename-resolved, case-insensitive), `path startsWith "X"` / `path contains "X"` / `file.path startsWith "X"` (v3.5.0 — `file.` prefix accepted), `file.name == "X"` / `file.name != "X"` (v3.5.0 — basename equality, .md stripped), `<frontmatter_key> == <value>`, `<key> != <value>`, `<key> contains …

  • obsidian_read_baseRead an Obsidian Base — parsed YAML metadata

    v3.2.0 — Parses a `.base` file into structured JSON (filters, formulas, properties, summaries, views). Does NOT execute the query — use `obsidian_query_base` for that. Useful when an agent wants to introspect the structure of a base before deciding which view to run, or to surface the base's saved queries to the user. Read-only.

  • obsidian_read_canvasRead an Obsidian Canvas (parses .canvas JSON)

    Parses one `.canvas` file into typed nodes (text / file / link / group) + edges (with from/to node IDs and optional sides + labels). Each `file` node carries a `file_resolved` field — the vault-relative path that the canvas's file reference resolved to (or null if broken). The response also includes a `summary` of node-kind counts and a `broken_file_refs` array surfacing canvas files that reference non-existent notes. Read-only.

  • obsidian_read_noteRead note

    Read a note by relative path or by title (filename without .md). Default `format: "full"` returns content + frontmatter + wikilinks + embeds + tags. `format: "map"` returns just headings + frontmatter keys + counts (no body) — useful for planning a surgical edit without paying token cost for the body. Title accepts periodic-note aliases ("today"/"daily"/"weekly"/"monthly") that resolve to the standard `YYYY-MM-DD`/`YYYY-Www`/`YYYY-MM` names. Errors include `Did you mean: ...` suggestions on near-misses.

  • obsidian_read_pdfExtract text from a PDF (page-by-page)

    Extracts plain text from one PDF, returning per-page text, the extractor's single bounded `full_text` aggregate (not a second join), and doc-level metadata. Every page reports `status: ok | empty | failed` with bounded failure evidence when failed; `complete` is true only when every requested page is `ok` or `empty`, so `has_text: false` means a genuine blank/image-only selection only when `complete: true`. Built-in hard UTF-8 item/page/aggregate and item/node/page-result budgets are enforced during application-level extraction before retention and joins. Overflow emits terminal `PDF_TEXT_BUDG…

  • obsidian_rename_noteRename note (with backlink rewrite)

    Atomically rename a note AND rewrite every [[wikilink]] / ![[embed]] in the rest of the vault that resolves to it — preserving |alias, #section, ^block, and the user's chosen path-qualification convention (bare basename vs path). Code-fence-aware: wikilinks inside ``` / ~~~ blocks are left verbatim. Use dry_run=true to preview which files would change without touching disk. Returns per-file rewrite counts + total. WRITE TOOL — only available when the server is started with --enable-write.

  • obsidian_replace_in_notesBulk find/replace across notes (code-fence-aware)

    Walks the vault (or a `folder` subset), substitutes every occurrence of `search` with `replace` outside fenced code blocks (` ``` ` / `~~~`), and writes each modified file back. Reuses the same line-walker rename_note uses, so example snippets and code documentation stay verbatim. Pass `dry_run=true` to preview the plan without touching disk — you get per-file occurrence counts + total. `case_sensitive` defaults to true. Refuses identical search/replace and empty search to prevent footguns. WRITE TOOL — only registered when --enable-write is passed.

  • obsidian_resolve_wikilinkResolve wikilink

    Resolve an Obsidian [[wikilink]] (or ![[embed]]) to a vault file. Handles aliases (Note|alias), sections (Note#Heading), block refs (Note^block), and ../-relative paths.

  • obsidian_searchHybrid search (BM25 + TF-IDF + embeddings, RRF-fused)

    **The default search tool for v2.0.** Auto-detects every available retrieval signal — BM25 via FTS5 (if `--persistent-index`), TF-IDF cosine (always), and ML embeddings (if `enquire-mcp build-embeddings` ran) — and fuses them with Reciprocal Rank Fusion (Cormack et al, 2009) for higher recall and better paraphrase / synonym matching than any single ranker. Equal weights, k=60. Gracefully degrades: with only TF-IDF available it produces TF-IDF-style ranking; with BM25+TF-IDF it does keyword-augmented retrieval; with all 3 it provides full hybrid conceptual + lexical retrieval, free / offline / …

  • obsidian_search_textSearch text

    Case-insensitive token search across all notes. Default mode `all` requires every whitespace-separated token to appear in a note (AND-tokenizer); `any` requires at least one (OR); `phrase` does the old contiguous-substring match. Returns a structured response with `query`, `mode`, `scanned_notes`, and ranked `matches` (each with snippet, line, score, matched_terms) — empty matches are explicit, not ambiguous with a broken call.

  • obsidian_semantic_searchSemantic search (TF-IDF cosine)

    Pure-JS weighted lexical retrieval. Tokenizes + TF-IDFs + L2-normalizes each admitted note body, then ranks by cosine similarity over exact normalized token overlap. Free, offline, and model-free: it can emphasize rare shared terms, but it does not infer synonyms, paraphrases, or cross-language meaning; use embeddings for those cases. A folder scopes both discovery and IDF. Corpus/token/byte budgets fail closed instead of returning a silent prefix, and source-generation receipts prevent stale vectors from being paired with live snippets. Returns ranked hits with snippet + matched terms (highes…

  • obsidian_stale_notesStale notes

    List notes not edited in N days (forgetting-aware staleness), oldest first. Use to surface facts that may be outdated before relying on them, or to pick notes to refresh. Cheap mtime-only scan; returns path / title / mtime / age_days.

  • obsidian_statsVault dashboard (one-shot orientation)

    Vault-wide summary: total notes, total bytes, average note length, recently-modified count (last 7 days), orphan notes (no inbound + no outbound), broken wikilink count, total tag count, and top-N tags by frequency. Cheap (one pass over the cached parse). Useful as the first call in a session so the LLM has structural context before issuing targeted reads.

  • obsidian_validate_note_proposalValidate a proposed new note (anti-slop)

    Lint a draft note BEFORE writing. Closes the #1 LLM-write pain: AI generates structurally-broken notes (bad YAML, fake wikilinks, inconsistent tags). This tool parses the proposed YAML, resolves every [[wikilink]] against the live vault (broken/resolved with did-you-mean), pre-classifies every tag (existing vs new), and checks for path/title collisions. Returns errors (blocking) + warnings (non-blocking) + per-link/tag diagnostics. Always available — does NOT require --enable-write. Recommended workflow: validate → fix → obsidian_create_note.

  • obsidian_vault_shapeVault shape

    List the frontmatter keys that exist in this vault, how many notes carry each, the value shapes observed (string / number / boolean / list / map / null), and short example values. Every other frontmatter tool needs the key as an argument, which only helps someone who already knows the vault — call this first to find out what there is to ask about. Enumeration, not ranking: exhaustive within its scan bounds, and it refuses rather than returning a partial inventory. Honors --exclude-glob / --read-paths. Read-only.

Compare and alternatives

    Featured in

    Signals

    Stars
    34
    Forks
    7
    Open issues
    1
    Contributors
    3
    Weekly downloads
    477
    Last commit
    Oct 22, 2026 (6 days ago)
    Last release
    Jul 22, 2026 (3 months ago)
    Last package publish
    Jul 22, 2026 (3 months ago)

    From GitHub (fetched Oct 24, 2026) and the package registry.

    Details

    Registry name
    io.github.oomkapwn/enquire-mcp
    Version
    3.11.6
    Auth
    No auth
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026
    Cite this page

    Enquire MCP. Agent Mart. https://agentmart.dev/connectors/oomkapwn-enquire-mcp (last updated 2026-10-24)