obsidian_daily_note
Read, create, update, or append daily notes in Obsidian vaults using configurable date-based folder and file patterns.
Instructions
Read, create, upsert, or append to a daily note using configurable date folder/pattern.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Optional configured vault name. Defaults to the server default vault. | |
| date | No | ||
| folder | No | ||
| pattern | No | ||
| action | No | read | |
| content | No | ||
| frontmatter | No | YAML frontmatter object. |
Implementation Reference
- src/tools.ts:961-981 (handler)The handler function for the obsidian_daily_note tool. It reads/creates/upserts/appends a daily note using configurable date, folder, and pattern. Uses the dailyPath helper to construct the file path.
tool( "obsidian_daily_note", "Read, create, upsert, or append to a daily note using configurable date folder/pattern.", { vault: vaultArg, date: z.string().optional(), folder: z.string().optional(), pattern: z.string().optional(), action: z.enum(["read", "create", "upsert", "append"]).optional().default("read"), content: z.string().optional().default(""), frontmatter: frontmatterArg, }, async (args) => { const date = args.date ?? new Date().toISOString().slice(0, 10); const notePath = dailyPath(date, args.folder ?? config.dailyFolder, args.pattern ?? config.dailyPattern); if (args.action === "read") return { path: notePath, content: (await vaults.readText(notePath, args.vault)).text }; if (args.action === "append") return vaults.appendText(notePath, args.content, args.vault, { create: true }); const text = args.frontmatter ? stringifyFrontmatter(args.frontmatter, args.content) : args.content; return vaults.writeText(notePath, text, args.vault, { overwrite: args.action === "upsert" }); }, ); - src/tools.ts:964-972 (schema)Schema definition for obsidian_daily_note: accepts optional date, folder, pattern, action (read/create/upsert/append), content, and frontmatter.
{ vault: vaultArg, date: z.string().optional(), folder: z.string().optional(), pattern: z.string().optional(), action: z.enum(["read", "create", "upsert", "append"]).optional().default("read"), content: z.string().optional().default(""), frontmatter: frontmatterArg, }, - src/tools.ts:961-981 (registration)Registration of the obsidian_daily_note tool via the local `tool()` helper function inside registerObsidianTools.
tool( "obsidian_daily_note", "Read, create, upsert, or append to a daily note using configurable date folder/pattern.", { vault: vaultArg, date: z.string().optional(), folder: z.string().optional(), pattern: z.string().optional(), action: z.enum(["read", "create", "upsert", "append"]).optional().default("read"), content: z.string().optional().default(""), frontmatter: frontmatterArg, }, async (args) => { const date = args.date ?? new Date().toISOString().slice(0, 10); const notePath = dailyPath(date, args.folder ?? config.dailyFolder, args.pattern ?? config.dailyPattern); if (args.action === "read") return { path: notePath, content: (await vaults.readText(notePath, args.vault)).text }; if (args.action === "append") return vaults.appendText(notePath, args.content, args.vault, { create: true }); const text = args.frontmatter ? stringifyFrontmatter(args.frontmatter, args.content) : args.content; return vaults.writeText(notePath, text, args.vault, { overwrite: args.action === "upsert" }); }, ); - src/tools.ts:1414-1422 (helper)The dailyPath helper function that constructs the daily note file path from a date (YYYY-MM-DD), folder, and pattern string (supporting YYYY, MM, DD, {{date}} placeholders).
function dailyPath(date: string, folder: string, pattern: string): string { const [year, month, day] = date.split("-"); const file = pattern .replace(/YYYY/g, year ?? "") .replace(/MM/g, month ?? "") .replace(/DD/g, day ?? "") .replace(/\{\{date\}\}/g, date); return `${folder.replace(/\/+$/, "")}/${file}`; } - src/config.ts:106-107 (helper)Default configuration for dailyFolder and dailyPattern used by obsidian_daily_note when not overridden in tool arguments.
dailyFolder: env.OBSIDIAN_DAILY_FOLDER?.trim() || "00-Inbox", dailyPattern: env.OBSIDIAN_DAILY_PATTERN?.trim() || "YYYY-MM-DD.md",