@cpenned/mcp 0.3.0 → 0.4.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 +5 -2
- package/dist/tools/render.js +5 -3
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/schemas.js +3 -3
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/settings.js +9 -3
- package/dist/tools/settings.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +8 -4
package/README.md
CHANGED
|
@@ -64,7 +64,8 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
64
64
|
- **Resources** (CRUD, single + batch + multi-get): `create_task`, `list_tasks`,
|
|
65
65
|
`get_task`, `update_task`, `delete_task`, `create_tasks`, `update_tasks`,
|
|
66
66
|
`add_task_tags`, `remove_task_tags`; the `*_project`, `*_garden`, `*_tag`
|
|
67
|
-
equivalents.
|
|
67
|
+
equivalents. Task/project `deferDate`/`deadline` are calendar days
|
|
68
|
+
(`YYYY-MM-DD`); inputs also accept relative tokens like `today`/`+3d`.
|
|
68
69
|
- **People** (personal CRM): `create_person`, `list_people` (`query` searches
|
|
69
70
|
name, aliases, company, notes, and more), `get_person`,
|
|
70
71
|
`update_person` (null clears fields; `archived: false` restores),
|
|
@@ -78,7 +79,9 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
78
79
|
- **Settings**: `get_settings`, `update_settings` — the default review period
|
|
79
80
|
applied to new tasks/projects (2 weeks out of the box;
|
|
80
81
|
`defaultReviewInterval: null` disables it, and `reviewInterval: null` on
|
|
81
|
-
`create_task`/`create_project` opts a single item out).
|
|
82
|
+
`create_task`/`create_project` opts a single item out). `defaultTimezone`
|
|
83
|
+
(IANA string) is also settable - the vault timezone date-only deferDates/
|
|
84
|
+
deadlines resolve against.
|
|
82
85
|
- **AI**: `find_tasks` (hybrid search), `ai_triage` (brain-dump triage).
|
|
83
86
|
- **UI (read-only MCPUI)**: `ui_view`, `ui_review_queue`, `ui_garden_board`
|
|
84
87
|
return `ui://` HTML resources.
|
package/dist/tools/render.js
CHANGED
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
export function escapeHtml(value) {
|
|
6
6
|
return String(value ?? "").replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]);
|
|
7
7
|
}
|
|
8
|
-
function isoDay(
|
|
9
|
-
if (typeof
|
|
8
|
+
function isoDay(value) {
|
|
9
|
+
if (typeof value === "string")
|
|
10
|
+
return value;
|
|
11
|
+
if (typeof value !== "number")
|
|
10
12
|
return "";
|
|
11
|
-
const d = new Date(
|
|
13
|
+
const d = new Date(value);
|
|
12
14
|
return Number.isNaN(d.getTime()) ? "" : d.toISOString().slice(0, 10);
|
|
13
15
|
}
|
|
14
16
|
function rows(items) {
|
package/dist/tools/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAChC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACvE,CAAC,CACQ,CACd,CAAC;AACJ,CAAC;AAeD,SAAS,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAChC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACvE,CAAC,CACQ,CACd,CAAC;AACJ,CAAC;AAeD,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,2DAA2D,CAAC;IACtF,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,OAAO;YACD,KAAK;gCACe,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC;YACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC7B,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;UACxF,CAAC;IACP,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAa;IACpD,OAAO;UACC,UAAU,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAC,MAAM;;;eAGlD,IAAI,CAAC,KAAK,CAAC;;aAEb,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,OAAO;;;;SAIA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;MAmBpB,UAAU,CAAC,KAAK,CAAC;EACrB,IAAI;;QAEE,CAAC;AACT,CAAC"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// Shared Zod fragments mirroring the /v1 field shapes. These give the model
|
|
2
2
|
// typed, described inputs; the API + guard layer remain the real validator, so
|
|
3
|
-
// these stay permissive (e.g. dates accept epoch ms OR
|
|
4
|
-
// rejected value surfaces as an API error mapped to an MCP tool error.
|
|
3
|
+
// these stay permissive (e.g. dates accept epoch ms OR day/relative strings)
|
|
4
|
+
// and a rejected value surfaces as an API error mapped to an MCP tool error.
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
export const statusEnum = z.enum(["backlog", "todo", "in_progress", "done", "canceled"]);
|
|
7
7
|
export const priorityEnum = z.enum(["none", "low", "medium", "high"]);
|
|
8
8
|
export const dateField = z
|
|
9
9
|
.union([z.number(), z.string()])
|
|
10
|
-
.describe("
|
|
10
|
+
.describe('Calendar day "YYYY-MM-DD", or a relative token like "today"/"+3d"');
|
|
11
11
|
export const recurrenceSchema = z.object({
|
|
12
12
|
mode: z.enum(["on_completion", "on_schedule"]),
|
|
13
13
|
frequency: z.enum(["day", "week", "month", "year"]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/B,QAAQ,CAAC,mEAAmE,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACrC,QAAQ,EAAE;SACV,QAAQ,CAAC,6BAA6B,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CAAC,iEAAiE,CAAC,CAAC"}
|
package/dist/tools/settings.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Vault settings: the default review period applied to new tasks/projects
|
|
1
|
+
// Vault settings: the default review period applied to new tasks/projects,
|
|
2
|
+
// and the vault timezone date-only dates resolve against.
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
import { runTool } from "../result.js";
|
|
4
5
|
import { reviewIntervalSchema } from "./schemas.js";
|
|
@@ -8,7 +9,12 @@ export function getSettings(client) {
|
|
|
8
9
|
const updateSettingsSchema = z.object({
|
|
9
10
|
defaultReviewInterval: reviewIntervalSchema
|
|
10
11
|
.nullable()
|
|
11
|
-
.
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Review cadence applied to new tasks/projects that don't set their own; null disables the default; omit to leave unchanged"),
|
|
14
|
+
defaultTimezone: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('IANA timezone (e.g. "America/Denver") that date-only deferDates/deadlines resolve against when a client sends no timezone (Linear sync, bare API calls)'),
|
|
12
18
|
});
|
|
13
19
|
export function updateSettings(client, args) {
|
|
14
20
|
return client.patch("/v1/settings", args);
|
|
@@ -21,7 +27,7 @@ export function registerSettingsTools(server, client) {
|
|
|
21
27
|
}, () => runTool(() => getSettings(client)));
|
|
22
28
|
server.registerTool("update_settings", {
|
|
23
29
|
title: "Update settings",
|
|
24
|
-
description: "Change the default review period
|
|
30
|
+
description: "Change vault settings: the default review period for new tasks/projects (null = no default) and/or the vault timezone date-only dates resolve against.",
|
|
25
31
|
inputSchema: updateSettingsSchema.shape,
|
|
26
32
|
}, (args) => runTool(() => updateSettings(client, args)));
|
|
27
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/tools/settings.ts"],"names":[],"mappings":"AAAA,2EAA2E;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/tools/settings.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0DAA0D;AAG1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,UAAU,WAAW,CAAC,MAAuB;IACjD,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,qBAAqB,EAAE,oBAAoB;SACxC,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,2HAA2H,CAC5H;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yJAAyJ,CAC1J;CACJ,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,MAAuB,EAAE,IAAwB;IAC9E,OAAO,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAuB;IAC9E,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK;KAChC,EACD,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CACzC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,wJAAwJ;QAC1J,WAAW,EAAE,oBAAoB,CAAC,KAAK;KACxC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -81,7 +81,9 @@ pre-guessing constraints.
|
|
|
81
81
|
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board` return
|
|
82
82
|
`ui://` HTML resources.
|
|
83
83
|
- **Settings**: `get_settings`, `update_settings` (the default review period
|
|
84
|
-
applied to new tasks/projects; `defaultReviewInterval: null` disables it
|
|
84
|
+
applied to new tasks/projects; `defaultReviewInterval: null` disables it;
|
|
85
|
+
`defaultTimezone`, an IANA string, is also settable - it's what date-only
|
|
86
|
+
deadlines/deferDates from integrations like Linear resolve against).
|
|
85
87
|
- **Keys**: `create_key`, `list_keys`, `rotate_key`, `revoke_key`.
|
|
86
88
|
|
|
87
89
|
## Workflows
|
|
@@ -96,8 +98,9 @@ pre-guessing constraints.
|
|
|
96
98
|
the Today view. `create_task`/`create_tasks` accept `tagIds`, `recurrence`,
|
|
97
99
|
`deferDate`, and `deadline` **inline** — set them at creation, never
|
|
98
100
|
create-then-patch.
|
|
99
|
-
`deferDate`/`deadline`
|
|
100
|
-
`"
|
|
101
|
+
`deferDate`/`deadline` are calendar days `"YYYY-MM-DD"` (no timezone); inputs
|
|
102
|
+
also accept relative tokens (`"today"`, `"tomorrow"`, `"+3d"`), so no
|
|
103
|
+
client-side date math. Returned values are always `"YYYY-MM-DD"`.
|
|
101
104
|
- **Recurring task** → set `recurrence` at creation:
|
|
102
105
|
`{mode, frequency, interval, byWeekday?}`. `mode`: `on_schedule` (next = prior
|
|
103
106
|
due + interval; self-heals missed days) or `on_completion` (next = completed +
|
|
@@ -128,7 +131,8 @@ pre-guessing constraints.
|
|
|
128
131
|
connection is symmetric — `get_person` on either shows the other under
|
|
129
132
|
`people`. Unlink with `remove_person_links`; self-links are rejected.
|
|
130
133
|
- **Find something** → `find_tasks` (handles fuzzy/semantic queries; narrow to a
|
|
131
|
-
due window with `deadlineBefore` / `deadlineAfter`,
|
|
134
|
+
due window with `deadlineBefore` / `deadlineAfter`, inclusive day bounds,
|
|
135
|
+
e.g. `"2026-07-10"` or `"+1w"`).
|
|
132
136
|
|
|
133
137
|
## Gotchas
|
|
134
138
|
|