Skip to content

find_existing_page

Check whether a page on a topic ALREADY EXISTS before creating one (dedupe / page-exists check): run this before write_note when you are about to add a new wiki page, concept note or entity page, so you link to the existing page instead of writing a duplicate. Give a topic string (and optionally a folder to look in); get a verdict exists | ambiguous | new plus the candidate notes with the evidence for each: exact path or file name, an aliases frontmatter entry, a wikidata: property holding the same QID (pass ‘Q42’ or a wikidata URL), a title or H1, the text other notes (including property links) already link it under, and semantically near notes. Read-only and advisory: it never writes and never blocks. Respects the read ACL, and Obsidian’s Excluded files: an excluded note still counts when its name or alias matches (it is a link target) but is never a similarity match. Ambiguous candidates that rest on similarity or link text alone can be resolved by an LLM judge (judge, default from config): exactly one same-topic ruling makes the verdict exists, all candidates ruled different makes it new, anything else (or any failure) stays ambiguous; a name, alias or wikidata match is never overridden or sent to it. response_format=concise returns {path, strength, evidence kinds} per candidate, without evidence details or scores.

Domain knowledge
Scopes read:notes
Access read
Tags read-only, domain:knowledge, knowledge, search, external-network
Profile full only
Annotation Value
Read-only yes
Destructive no
Idempotent no
Accepts an idempotency key no

Idempotent is the advisory MCP idempotentHint. Destructive is also yes for a tool that asks for confirmation only on some calls.

No human confirmation is required to call this tool.

Parameter Type Required Default Description
vault string — Vault id. May be omitted when only one vault is available. length 1–64; pattern ^[a-z0-9_-]+$
topic string yes — The page topic or title you are about to write, a [[wikilink]], or a wikidata QID (Q42). length 1–500
folder string — Only report candidates inside this folder. Omit to check the whole vault, which is what avoids a duplicate elsewhere. length 1–1024
limit integer 8 range 1–25
min_similarity number — Lowest best-chunk cosine reported as a similar note (default 0.708, calibrated for BAAI/bge-m3; recall at that floor is low, lower it to see weaker candidates). range 0–1
judge boolean — Let an LLM judge resolve AMBIGUOUS candidates that rest on soft evidence (similarity, link text): same topic -> exists, all different -> new, anything else stays ambiguous. Never overrides a name, alias or wikidata match and never blocks. Sends the topic and the opening text of at most 3 top candidates to the judge model (the gateway’s, or TypeSafe Jev), only for notes you may read outside egress.excludePaths and Obsidian’s Excluded files. Default: the wikiJudge.enabled config (off); true needs a configured judge.
response_format enum — concise returns only the high-signal fields; detailed (the shipped default) returns the full payload. Errors and safety warnings are never trimmed. When omitted, the server’s tools.defaults.responseFormat applies. One of: "concise", "detailed"
verbosity enum — Legacy alias for response_format: terse = concise, full = detailed. One of: "full", "terse"
Field Type Always present Description
warnings object[] —
warnings[].path string with parent —
warnings[].reason enum with parent One of: "frontmatter_yaml"
warnings[].message string with parent —
warnings_omitted integer range ≥ -9007199254740991
vault string yes —
topic string yes —
verdict enum yes One of: "exists", "ambiguous", "new"
total integer yes range ≥ -9007199254740991
candidates object[] yes —
candidates[].path string yes —
candidates[].strength enum yes One of: "strong", "soft"
candidates[].evidence object | string[] yes —
candidates[].excluded boolean —
next object yes —
next.action enum yes One of: "link_to_existing", "review_candidates", "create_new"
next.tool string yes —
next.paths string[] yes —
next.note string yes —
semantic object yes —
semantic.checked boolean yes —
semantic.min number yes —
semantic.reason string —
judge object —
judge.ran boolean with parent —
judge.reason string —
judge.model string —
judge.calls integer with parent range ≥ -9007199254740991
judge.cached integer with parent range ≥ -9007199254740991
judge.results object[] with parent —

6 more field(s) not shown; describe_capability returns the full output schema.

Other tools in the knowledge domain: add_observation, audit_provenance, close_goal, commit_capture, commit_wiki_page, create_entity, delete_entity, diagnose_retrieval, draft_wiki_page, end_session, enqueue_capture, episode_stats, explain_answer, gap_report, get_entity, get_session_traces, knowledge_challenge, link_entities, lint_wiki, list_capture_queue, list_contradictions, list_goals, note_quality_report, plur_get, plur_recall, plur_recall_hybrid, plur_similarity_search, query_entity_graph, record_retrieval_feedback, reflect, rename_entity, session_bootstrap, set_goal, start_session, unlink_entities, update_observation, vault_context, vault_graph_search, work_episode_chain, work_episodes, work_forget, work_result, work_search.

Back to the tool catalog.