Skip to content

draft_wiki_page

Plan a new wiki page WITHOUT writing anything: the step between find_existing_page and commit_wiki_page. Give a topic (and optionally a page type from the wiki folder’s SCHEMA.md and sources, the notes or URLs the page draws on). Returns (1) the dedupe verdict from find_existing_page: if a page already exists you get it back with a suggestion to link to it or extend it instead of creating a duplicate, and no changeset; (2) the wiki folder’s SCHEMA.md (page types, the frontmatter each requires, the allowed property vocabulary; a malformed file is a warning, never an error); (3) a link map: existing notes the new page should link TO (your sources, related pages) and notes that should link FROM it (notes that mention the topic without linking it, related wiki pages), and notes that already link it; (4) a CHANGESET SKELETON: the new page’s path and frontmatter with the required fields empty, and a link patch (with the note’s current prev_hash) for each note that should link to the new page. With source (a note in the vault’s raw folder) the draft ingests it: that note is cited in the skeleton’s sources and reported (size, the wiki pages that already cite it), raw notes are never offered as duplicates or patch targets, and a source under 1500 characters with no page in the wiki that covers, relates to or cites it comes back with no changeset (ingest.refused), because a page for it would only restate it; a source you may not read answers like a missing one. You write the page body (and any text for a patch); the server never writes prose. Pass the filled changeset to commit_wiki_page. Read-only: it never writes, respects the read ACL and Obsidian’s Excluded files (an excluded note is never offered for patching), and with judge (default from the wikiJudge config) the dedupe check may send the topic and the opening text of up to 3 readable notes to the gateway judge model, exactly as find_existing_page does.

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 QID also works). length 1–500
type string — Page type, one of the types in the wiki folder’s SCHEMA.md. Sets the required frontmatter, the subfolder and the type property of the skeleton. length 1–100
sources string[] — What the page draws on: note paths or [[wikilinks]] (they become link_to entries) or URLs. Copied into the skeleton’s sources property. items ≤ 50
source string — Ingest: the path of ONE markdown note in this vault’s raw folder (vaults[].wiki.rawFolder, default raw beside the wiki folder) that the page is distilled from. It is cited in the skeleton’s sources, reported with its size and the pages that already cite it, and a source under 1500 characters is refused a page of its own when nothing in the wiki covers, relates to or cites it. Raw notes are inputs: never dedupe candidates or patch targets. Read it with read_note and write the prose yourself. length 1–1024
limit integer 8 Most entries in each link-map list, and most candidates shown. range 1–25
min_similarity number — Lowest best-chunk cosine reported as a related note (default 0.708, calibrated for BAAI/bge-m3). range 0–1
judge boolean — Let the wikiJudge LLM resolve an ambiguous dedupe verdict, as in find_existing_page. Default: the wikiJudge.enabled config.
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 —
wiki object yes —
wiki.folder string | null yes —
wiki.schema object yes —
dedupe object yes —
dedupe.verdict enum yes One of: "exists", "ambiguous", "new"
dedupe.total integer yes range ≥ -9007199254740991
dedupe.candidates object[] yes —
dedupe.next object yes —
dedupe.semantic object yes —
dedupe.judge object —
dedupe.judged_by object —
ingest object —
ingest.raw_folder string with parent —
ingest.source object with parent —
ingest.cited_by string[] with parent —
ingest.refused object | null with parent —
suggestion string yes —
existing object | null yes —
existing.path string yes —
existing.content_hash string yes —
requirements object yes —
requirements.type string | null yes —
requirements.required string[] yes —

11 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, end_session, enqueue_capture, episode_stats, explain_answer, find_existing_page, 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.