keepsake-mcp 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -188,9 +188,9 @@ Material kept *alongside* a note without entering its text — an idea, a refere
188
188
  ### Days (intention or question of the day)
189
189
  | Tool | Description |
190
190
  |------|-------------|
191
- | `list_days` | List days with their intention or question of the day, by date range |
192
- | `get_day` | Get a day and its intention or question (field `note`) |
193
- | `update_day` | Set a day's intention or question — one short line, not a journal (upsert) |
191
+ | `list_days` | List days with their intention or question of the day (the one in force, which stays until changed), by date range |
192
+ | `get_day` | Get a day, its intention in force (`intention`, carried over until changed) and what was written that day (`note`) |
193
+ | `update_day` | Set a day's intention or question — one short line, not a journal (upsert); it stays in place on the following days until changed |
194
194
 
195
195
  ### Day blocks (Day-view timeline)
196
196
  | Tool | Description |
package/build/tools.js CHANGED
@@ -657,7 +657,7 @@ export function registerAllTools(server, fetchApi) {
657
657
  // DAYS (Daily Summaries)
658
658
  // ===========================================================================
659
659
  server.registerTool("list_days", {
660
- description: "List days with their intention or question of the day (field `note`). Filter by date range.",
660
+ description: "List stored days with their intention or question of the day. An intention stays in place until changed: `intention` is the one in force that day (the last one written on that day or before, `intention_date` = when it was written); `note` is what was written on that exact day (null = nothing written). Filter by date range.",
661
661
  inputSchema: {
662
662
  from: z.string().optional().describe("Start date (YYYY-MM-DD)"),
663
663
  to: z.string().optional().describe("End date (YYYY-MM-DD)"),
@@ -669,7 +669,7 @@ export function registerAllTools(server, fetchApi) {
669
669
  return toContent(await fetchApi(`/days${qs({ from, to, limit, offset })}`));
670
670
  });
671
671
  server.registerTool("get_day", {
672
- description: "Get a specific day by date: its intention or question of the day (field `note`, one short line) AND the notes linked to that day (field `notes`, via link_note_date / `dates`). Always 200 — `exists: false` means no intention is stored yet, the linked notes are returned regardless.",
672
+ description: "Get a specific day by date: its intention or question of the day AND the notes linked to that day (field `notes`, via link_note_date / `dates`). An intention stays in place until changed: `intention` is the one in force that day, as the user sees it (the last one written on that day or before; `intention_date` = the day it was written), while `note` is what was written on that exact day (null = nothing written there, '' = intention stopped from that day). Always 200 — `exists: false` means no row is stored for that date; `intention` and the linked notes are returned regardless.",
673
673
  inputSchema: {
674
674
  date: z.string().describe("Date (YYYY-MM-DD)"),
675
675
  },
@@ -678,10 +678,10 @@ export function registerAllTools(server, fetchApi) {
678
678
  return toContent(await fetchApi(`/days/${date}`));
679
679
  });
680
680
  server.registerTool("update_day", {
681
- description: "Create or update a day's intention or question of the day (upsert on the date). The `note` field is the intention or question of the day — one short line at the top of the Today view (a mantra, an intention, a single priority, or a question to keep in mind). Not a journal: never write a summary of the day here.\n\nNOT for attaching a note to a day: this field is a single line and you would overwrite the user's intention. To put a note on a day, use create_note with `dates` or link_note_date.",
681
+ description: "Create or update a day's intention or question of the day (upsert on the date). The `note` field is the intention or question of the day — one short line at the top of the Today view (a mantra, an intention, a single priority, or a question to keep in mind). Not a journal: never write a summary of the day here.\n\nAn intention stays in place until changed: writing it on a day replaces the intention from that day onward (following days show it too, until the next day with its own intention — set one on a future date for a one-off, e.g. before a meeting). `null` removes what was written on that day (the day goes back to the intention in force before it); an empty string stops any intention from that day onward. Check `intention` with get_day before writing: you may be replacing a long-running intention the user cares about.\n\nNOT for attaching a note to a day: this field is a single line and you would overwrite the user's intention. To put a note on a day, use create_note with `dates` or link_note_date.",
682
682
  inputSchema: {
683
683
  date: z.string().describe("Date (YYYY-MM-DD)"),
684
- note: z.string().describe("The intention or question of the day: one short line (mantra, intention, single priority, or a question to keep in mind). Not a journal summary."),
684
+ note: z.string().nullable().describe("The intention or question of the day: one short line (mantra, intention, single priority, or a question to keep in mind). Not a journal summary. null = remove what was written on this day (back to the previous intention); empty string = stop any intention from this day onward."),
685
685
  },
686
686
  annotations: { title: "Update day", destructiveHint: false, idempotentHint: true, openWorldHint: false },
687
687
  }, async (params) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepsake-mcp",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "MCP server for Keepsake personal CRM \u2014 connect your AI agent to your contacts, tasks, notes, and more",
5
5
  "type": "module",
6
6
  "bin": {