@cpenned/mcp 0.4.1 → 0.5.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 +4 -2
- package/dist/tools/reading.js +21 -6
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/schemas.js +1 -1
- package/dist/tools/schemas.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +30 -14
package/README.md
CHANGED
|
@@ -78,8 +78,10 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
78
78
|
- **Reading list**: `create_reading_item` (only `url` is required; title/
|
|
79
79
|
description are fetched from the page in the background), `list_reading_items`,
|
|
80
80
|
`get_reading_item`, `update_reading_item` (drives status
|
|
81
|
-
`unread|reading|read
|
|
82
|
-
|
|
81
|
+
`unread|reading|read`; stamps/clears `readAt`; `archived`/`deleted` toggle
|
|
82
|
+
independently of status), `delete_reading_item` (true soft delete, hidden
|
|
83
|
+
everywhere; restore with `{deleted: false}`), `add_reading_tags`/
|
|
84
|
+
`remove_reading_tags`.
|
|
83
85
|
- **Views & reviews**: `get_view`, `get_reviews`, `review_garden`,
|
|
84
86
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
85
87
|
- **Settings**: `get_settings`, `update_settings` — the default review period
|
package/dist/tools/reading.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// Reading list tools: save a URL to read later. title/description are
|
|
2
2
|
// user-supplied or best-effort fetched from the page shortly after creation
|
|
3
3
|
// (async - a get_reading_item right after create may still show the raw url
|
|
4
|
-
// as title until the fetch lands). status is a manual
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// as title until the fetch lands). status (unread/reading/read) is a manual
|
|
5
|
+
// read-tracking flag, not a workflow machine. archived/deleted are
|
|
6
|
+
// independent of status - a "read" item can also be archived (find-later) or
|
|
7
|
+
// deleted (hidden everywhere). Person links live on the person side
|
|
8
|
+
// (add_person_links/remove_person_links), not here.
|
|
7
9
|
import { z } from "zod";
|
|
8
10
|
import { runTool } from "../result.js";
|
|
9
11
|
import { idempotencyKey, readingStatusEnum } from "./schemas.js";
|
|
@@ -32,6 +34,10 @@ const listReadingItemsSchema = z.object({
|
|
|
32
34
|
.optional()
|
|
33
35
|
.describe("Case-insensitive substring search over title/description/tags"),
|
|
34
36
|
limit: z.number().int().positive().optional(),
|
|
37
|
+
includeArchived: z
|
|
38
|
+
.boolean()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Include archived items. Defaults to false"),
|
|
35
41
|
});
|
|
36
42
|
export function listReadingItems(client, args) {
|
|
37
43
|
return client.get("/v1/reading", {
|
|
@@ -41,6 +47,7 @@ export function listReadingItems(client, args) {
|
|
|
41
47
|
person: args.personIds?.length ? args.personIds.join(",") : undefined,
|
|
42
48
|
q: args.query,
|
|
43
49
|
limit: args.limit,
|
|
50
|
+
includeArchived: args.includeArchived,
|
|
44
51
|
});
|
|
45
52
|
}
|
|
46
53
|
const getReadingItemSchema = z.object({ id: z.string() });
|
|
@@ -55,6 +62,14 @@ const updateReadingItemSchema = z.object({
|
|
|
55
62
|
status: readingStatusEnum
|
|
56
63
|
.optional()
|
|
57
64
|
.describe('Moving to "read" stamps readAt (once); moving to "unread"/"reading" clears it.'),
|
|
65
|
+
archived: z
|
|
66
|
+
.boolean()
|
|
67
|
+
.optional()
|
|
68
|
+
.describe("Find-later flag, independent of status; true hides it from the default list (unless includeArchived), false restores it."),
|
|
69
|
+
deleted: z
|
|
70
|
+
.boolean()
|
|
71
|
+
.optional()
|
|
72
|
+
.describe("true deletes (same as delete_reading_item, hidden everywhere); false restores."),
|
|
58
73
|
});
|
|
59
74
|
export function updateReadingItem(client, args) {
|
|
60
75
|
const { id, ...patch } = args;
|
|
@@ -81,7 +96,7 @@ export function registerReadingTools(server, client) {
|
|
|
81
96
|
}, (args) => runTool(() => createReadingItem(client, args)));
|
|
82
97
|
server.registerTool("list_reading_items", {
|
|
83
98
|
title: "List reading list items",
|
|
84
|
-
description: "List saved URLs, multi-get by ids, or filter by status/tags/people/query.",
|
|
99
|
+
description: "List saved URLs, multi-get by ids, or filter by status/tags/people/query. Archived items are excluded unless includeArchived is set.",
|
|
85
100
|
inputSchema: listReadingItemsSchema.shape,
|
|
86
101
|
}, (args) => runTool(() => listReadingItems(client, args)));
|
|
87
102
|
server.registerTool("get_reading_item", {
|
|
@@ -91,12 +106,12 @@ export function registerReadingTools(server, client) {
|
|
|
91
106
|
}, (args) => runTool(() => getReadingItem(client, args)));
|
|
92
107
|
server.registerTool("update_reading_item", {
|
|
93
108
|
title: "Update reading list item",
|
|
94
|
-
description: "Update any subset of a reading list item's fields
|
|
109
|
+
description: "Update any subset of a reading list item's fields: status (unread/reading/read), archived (find-later flag), or deleted.",
|
|
95
110
|
inputSchema: updateReadingItemSchema.shape,
|
|
96
111
|
}, (args) => runTool(() => updateReadingItem(client, args)));
|
|
97
112
|
server.registerTool("delete_reading_item", {
|
|
98
113
|
title: "Delete reading list item",
|
|
99
|
-
description:
|
|
114
|
+
description: "Soft-delete a reading list item (hidden everywhere). Restore with update_reading_item {deleted: false}.",
|
|
100
115
|
inputSchema: deleteReadingItemSchema.shape,
|
|
101
116
|
}, (args) => runTool(() => deleteReadingItem(client, args)));
|
|
102
117
|
server.registerTool("add_reading_tags", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,4EAA4E;AAC5E,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
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
|
-
export const readingStatusEnum = z.enum(["unread", "reading", "read"
|
|
8
|
+
export const readingStatusEnum = z.enum(["unread", "reading", "read"]);
|
|
9
9
|
export const dateField = z
|
|
10
10
|
.union([z.number(), z.string()])
|
|
11
11
|
.describe('Calendar day "YYYY-MM-DD", or a relative token like "today"/"+3d"');
|
|
@@ -1 +1 @@
|
|
|
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;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,
|
|
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;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,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/package.json
CHANGED
|
@@ -49,13 +49,16 @@ pre-guessing constraints.
|
|
|
49
49
|
restarts the clock. Names + `aliases` are how mentions resolve — when the user
|
|
50
50
|
mentions someone ("call Megan"), `list_people`, match name/aliases, and link.
|
|
51
51
|
- **Reading list item** = a saved URL to read later: `status`
|
|
52
|
-
(`unread|reading|read
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
(`unread|reading|read`) plus `readAt` (stamped when moved to `read`,
|
|
53
|
+
cleared on any move away from it). `archived` (find-later flag) and
|
|
54
|
+
`deleted` (true soft delete) are independent booleans, not status values —
|
|
55
|
+
an item can be `status: "read"` AND `archived: true` at once. `title`/
|
|
56
|
+
`description` are user-supplied or fetched from the page in the background
|
|
57
|
+
shortly after creation — best-effort, so a `get_reading_item` right after
|
|
58
|
+
`create_reading_item` may still show the raw URL as the title. Tags via
|
|
59
|
+
`add_reading_tags`/`remove_reading_tags`; person links live on the person
|
|
60
|
+
side (`add_person_links`/`remove_person_links` with `readingListItemIds`),
|
|
61
|
+
not here.
|
|
59
62
|
|
|
60
63
|
## Tool catalog
|
|
61
64
|
|
|
@@ -82,17 +85,20 @@ pre-guessing constraints.
|
|
|
82
85
|
filters by `person` ids.
|
|
83
86
|
- **Reading list**: `create_reading_item` (`{url, title?, description?,
|
|
84
87
|
status?, tagIds?, personIds?}` — only `url` is required), `list_reading_items`
|
|
85
|
-
(filter by `status[]`/`tagIds`/`personIds`/`query`, or multi-get via `ids
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
`
|
|
88
|
+
(filter by `status[]`/`tagIds`/`personIds`/`query`, or multi-get via `ids`;
|
|
89
|
+
archived items are excluded unless `includeArchived` is set), `get_reading_item`,
|
|
90
|
+
`update_reading_item` (drives status; `description: null` clears it;
|
|
91
|
+
`archived`/`deleted` toggle independently of status), `delete_reading_item`
|
|
92
|
+
(true soft delete, hidden everywhere; restore with `update_reading_item
|
|
93
|
+
{deleted: false}`), `add_reading_tags`/`remove_reading_tags`.
|
|
89
94
|
- **Saved lists** (named, reusable task-list filters): `list_saved_lists`,
|
|
90
95
|
`create_saved_list`, `update_saved_list`, `delete_saved_list`.
|
|
91
96
|
- **Views & reviews**: `get_view` (today/upcoming/overdue, timezone-aware),
|
|
92
97
|
`get_reviews` (due queue), `review_garden` (deep review),
|
|
93
98
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
94
99
|
- **AI**: `find_tasks` (hybrid keyword + semantic search), `ai_triage`
|
|
95
|
-
(brain dump → garden-assigned tasks
|
|
100
|
+
(brain dump → garden-assigned tasks, plus reading-list saves/edits/cancels -
|
|
101
|
+
see Workflows).
|
|
96
102
|
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board` return
|
|
97
103
|
`ui://` HTML resources.
|
|
98
104
|
- **Settings**: `get_settings`, `update_settings` (the default review period
|
|
@@ -104,8 +110,15 @@ pre-guessing constraints.
|
|
|
104
110
|
## Workflows
|
|
105
111
|
|
|
106
112
|
- **Capture a brain dump** → `ai_triage` with the raw text. It returns
|
|
107
|
-
`{ created, clarifications, errors
|
|
108
|
-
|
|
113
|
+
`{ created, clarifications, errors, readingItems: { created, updated, clarifications, errors } }`.
|
|
114
|
+
If either `clarifications` array is non-empty, ask the user those questions
|
|
115
|
+
and re-run with the answers folded in — do not guess. `ai_triage` also
|
|
116
|
+
recognizes URLs to save ("save this for later: https://...") and references
|
|
117
|
+
to existing saved items ("I finished reading X" → marks it read; "remove Y
|
|
118
|
+
from my reading list" → archives it, reversibly, independent of status) —
|
|
119
|
+
it matches existing items by exact title, so an unmatched or ambiguous
|
|
120
|
+
reference comes back as a reading-list clarification rather than a silent
|
|
121
|
+
no-op or a task.
|
|
109
122
|
- **Plan today** → `get_view today`. Pass the user's IANA `tz` if known so the
|
|
110
123
|
day boundary is correct.
|
|
111
124
|
- **Add a task** → need a garden: `list_gardens` first, then `create_task` with
|
|
@@ -168,6 +181,9 @@ pre-guessing constraints.
|
|
|
168
181
|
asynchronous — a failed fetch (unreachable page, timeout, non-HTML response)
|
|
169
182
|
silently leaves the item with its URL as the title; this is expected, not a
|
|
170
183
|
bug, and the item is otherwise fully usable.
|
|
184
|
+
- `ai_triage`'s reading-list edits match an existing saved item by its EXACT
|
|
185
|
+
title (from the list the model is given), so a vague reference comes back as
|
|
186
|
+
a `readingItems.clarifications` entry rather than editing the wrong item.
|
|
171
187
|
- `delete_person` archives (links kept); restore with `update_person
|
|
172
188
|
{archived: false}`. Birthdays/anniversaries are `"YYYY-MM-DD"` or `"MM-DD"`
|
|
173
189
|
strings, not timestamps. `mark_contacted` also works with a `reviews:write`
|