@cpenned/mcp 0.8.3 → 0.8.5
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 +24 -6
- package/dist/client.js +40 -6
- package/dist/client.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/api.js +39 -0
- package/dist/tools/api.js.map +1 -0
- package/dist/tools/attachments.js +43 -0
- package/dist/tools/attachments.js.map +1 -0
- package/dist/tools/books.js +18 -17
- package/dist/tools/books.js.map +1 -1
- package/dist/tools/gardens.js +8 -7
- package/dist/tools/gardens.js.map +1 -1
- package/dist/tools/habits.js +26 -18
- package/dist/tools/habits.js.map +1 -1
- package/dist/tools/index.js +2 -34
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/keys.js +23 -7
- package/dist/tools/keys.js.map +1 -1
- package/dist/tools/lists.js +6 -5
- package/dist/tools/lists.js.map +1 -1
- package/dist/tools/people.js +17 -15
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/projects.js +11 -9
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/reading.js +11 -10
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/render.js +6 -0
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/schemas.js +5 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/shares.js +4 -3
- package/dist/tools/shares.js.map +1 -1
- package/dist/tools/strava.js +13 -9
- package/dist/tools/strava.js.map +1 -1
- package/dist/tools/tags.js +8 -7
- package/dist/tools/tags.js.map +1 -1
- package/dist/tools/tasks.js +12 -10
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/ui.js +34 -13
- package/dist/tools/ui.js.map +1 -1
- package/dist/tools/views.js +12 -10
- package/dist/tools/views.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +34 -14
|
@@ -122,7 +122,9 @@ pre-guessing constraints.
|
|
|
122
122
|
`assignee: "me"|"unassigned"|<userId>` filters the home vault by assignee),
|
|
123
123
|
`get_task`, `update_task` (drives status), `delete_task`, batch
|
|
124
124
|
`create_tasks`/`update_tasks`, `add_task_tags`/`remove_task_tags`.
|
|
125
|
-
`create_task`/`
|
|
125
|
+
`create_task`/`create_tasks` accept an initial `status` (default `todo`;
|
|
126
|
+
e.g. `backlog` to park it). `create_task`/`update_task` accept `eventId` to
|
|
127
|
+
link a synced calendar event
|
|
126
128
|
(read-only mirror); `eventId: null` on update unlinks it.
|
|
127
129
|
`create_task`/`create_tasks`/`update_task`/`update_tasks` also accept
|
|
128
130
|
`assigneeUserId` (a user id, `"me"`, or `null` to unassign) - only
|
|
@@ -132,6 +134,10 @@ pre-guessing constraints.
|
|
|
132
134
|
`sharedFrom` marker).
|
|
133
135
|
- **Projects**: `create_project`, `list_projects`, `get_project`,
|
|
134
136
|
`update_project`, `delete_project`, `create_projects`/`update_projects`.
|
|
137
|
+
`create_project(s)` accept an initial `status` (default `todo`).
|
|
138
|
+
Project reads carry `taskCounts {open, done}` (canceled in neither) and
|
|
139
|
+
`nextTaskId` (first open task by manual order; `get_task` it to see what's
|
|
140
|
+
next), so progress needs no extra task listing.
|
|
135
141
|
- **Gardens**: `create_garden`, `list_gardens`, `get_garden`, `update_garden`,
|
|
136
142
|
`delete_garden` (archives).
|
|
137
143
|
- **Tags**: `create_tag`, `list_tags`, `get_tag`, `update_tag`, `delete_tag`
|
|
@@ -142,8 +148,8 @@ pre-guessing constraints.
|
|
|
142
148
|
(null clears a field, e.g. `contactInterval: null`; `archived: false`
|
|
143
149
|
restores), `delete_person` (archives, links kept), `mark_contacted`
|
|
144
150
|
(optional `at` backdates the touch), `add_person_links`/`remove_person_links`
|
|
145
|
-
(`{id, taskIds?, projectIds?, gardenIds?, readingListItemIds?,
|
|
146
|
-
people?}
|
|
151
|
+
(`{id, taskIds?, projectIds?, gardenIds?, readingListItemIds?, habitIds?,
|
|
152
|
+
bookIds?, people?}`: `people` is `[{id, label?}]` for person-to-person connections;
|
|
147
153
|
symmetric, shown on both people, re-link with a new label to change it or
|
|
148
154
|
`label: null` to clear it; unlink takes the same shape, ids only for
|
|
149
155
|
`people`). `create_task(s)` accept `personIds` inline; `list_tasks` filters
|
|
@@ -156,9 +162,10 @@ pre-guessing constraints.
|
|
|
156
162
|
`archived`/`deleted` toggle independently of status), `delete_reading_item`
|
|
157
163
|
(true soft delete, hidden everywhere; restore with `update_reading_item
|
|
158
164
|
{deleted: false}`), `add_reading_tags`/`remove_reading_tags`.
|
|
159
|
-
- **Habits**: `create_habit`, `list_habits
|
|
165
|
+
- **Habits**: `create_habit`, `list_habits` (pages; pass `cursor`), `get_habit`, `update_habit`,
|
|
160
166
|
`archive_habit`/`unarchive_habit`, `complete_habit` (`quantity?`, `durationMinutes?`,
|
|
161
|
-
`force?` skips time window), `remove_habit_completion` (by `completionId` or `day
|
|
167
|
+
`force?` skips time window), `remove_habit_completion` (by `completionId` or `day`;
|
|
168
|
+
a `day` lookup reaches back through the newest 200 check-ins),
|
|
162
169
|
`reorder_habits`, `add_habit_tags`/`remove_habit_tags`.
|
|
163
170
|
Schedules: `{kind: daily}`, `{kind: weekly, times, byWeekday?}`, `{kind: monthly, times}`,
|
|
164
171
|
`{kind: every_n_days, interval}`. Optional `graceDays` (daily streak tolerance),
|
|
@@ -194,14 +201,21 @@ pre-guessing constraints.
|
|
|
194
201
|
`bookIds`.
|
|
195
202
|
- **Saved lists** (named, reusable task-list filters): `list_saved_lists`,
|
|
196
203
|
`create_saved_list`, `update_saved_list`, `delete_saved_list`.
|
|
197
|
-
- **
|
|
204
|
+
- **Attachments** (read-only; upload is web/app-only): `list_task_attachments
|
|
205
|
+
{taskId}`, `get_attachment {id}` (metadata), `get_attachment_url {id,
|
|
206
|
+
variant?}` (short-lived signed URL; `variant` is `served` (default),
|
|
207
|
+
`original`, or `thumbnail`). Needs `tasks:read`.
|
|
208
|
+
- **Views & reviews**: `get_view` (today/upcoming/overdue, timezone-aware;
|
|
209
|
+
without `tz` it uses the timezone of the machine running the MCP server),
|
|
198
210
|
`get_reviews` (due queue), `review_garden` (deep review),
|
|
199
211
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
200
212
|
- **AI**: `find_tasks` (hybrid keyword + semantic search), `ai_triage`
|
|
201
213
|
(brain dump → garden-assigned tasks, recurring habits, reading-list
|
|
202
214
|
saves/edits/cancels, and books - see Workflows).
|
|
203
|
-
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board
|
|
204
|
-
`ui://` HTML resources.
|
|
215
|
+
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board`,
|
|
216
|
+
`ui_habits` return `ui://` HTML resources. `ui_view` and `ui_habits` take a
|
|
217
|
+
`cursor`; when a page is cut short the result adds a text note with the
|
|
218
|
+
cursor for the next page.
|
|
205
219
|
- **Settings**: `get_settings`, `update_settings` (the default review period
|
|
206
220
|
applied to new tasks/projects; `defaultReviewInterval: null` disables it;
|
|
207
221
|
`defaultTimezone`, an IANA string, is also settable - it's what date-only
|
|
@@ -217,7 +231,9 @@ pre-guessing constraints.
|
|
|
217
231
|
`update_profile {displayName}` (1-60 chars; avatar upload is web-only).
|
|
218
232
|
- **Keys**: `create_key` (optional `includeGrants` to let the new key see
|
|
219
233
|
gardens shared with its owner - only settable if the calling key itself
|
|
220
|
-
has it), `list_keys`, `rotate_key`, `revoke_key`.
|
|
234
|
+
has it), `list_keys`, `rotate_key`, `revoke_key`. `rotate_key` and
|
|
235
|
+
`revoke_key` refuse the key this MCP server itself authenticates with (it
|
|
236
|
+
would lock the server out); rotate or revoke that one from the CLI or web app.
|
|
221
237
|
|
|
222
238
|
## Workflows
|
|
223
239
|
|
|
@@ -232,8 +248,9 @@ pre-guessing constraints.
|
|
|
232
248
|
archives it, reversibly, independent of status) — it matches existing
|
|
233
249
|
items by exact title, so an unmatched or ambiguous reference comes back as a
|
|
234
250
|
reading-list clarification rather than a silent no-op or a task.
|
|
235
|
-
- **Plan today** → `get_view today`.
|
|
236
|
-
day boundary is
|
|
251
|
+
- **Plan today** → `get_view today`. It defaults to this machine's timezone;
|
|
252
|
+
pass the user's IANA `tz` if they are somewhere else so the day boundary is
|
|
253
|
+
correct.
|
|
237
254
|
- **Add a task** → need a garden: `list_gardens` first, then `create_task` with
|
|
238
255
|
`gardenId`. Set `deadline` for "today"/hard dates — that's what lands it in
|
|
239
256
|
the Today view. `create_task`/`create_tasks` accept `tagIds`, `recurrence`,
|
|
@@ -241,7 +258,9 @@ pre-guessing constraints.
|
|
|
241
258
|
habit) **inline** — set them at creation, never create-then-patch.
|
|
242
259
|
`deferDate`/`deadline` are calendar days `"YYYY-MM-DD"` (no timezone); inputs
|
|
243
260
|
also accept relative tokens (`"today"`, `"tomorrow"`, `"+3d"`), so no
|
|
244
|
-
client-side date math.
|
|
261
|
+
client-side date math. The local (stdio) server sends the machine's
|
|
262
|
+
timezone, so relative tokens resolve in the user's zone; the hosted server
|
|
263
|
+
falls back to the vault timezone. Returned values are always `"YYYY-MM-DD"`.
|
|
245
264
|
- **Recurring task** → set `recurrence` at creation:
|
|
246
265
|
`{mode, frequency, interval, byWeekday?}`. `mode`: `on_schedule` (next = prior
|
|
247
266
|
due + interval; self-heals missed days) or `on_completion` (next = completed +
|
|
@@ -295,8 +314,9 @@ pre-guessing constraints.
|
|
|
295
314
|
`people:read|write`, settings tools `settings:read|write`, reading list tools
|
|
296
315
|
`reading:read|write`, Strava tools `strava:read|write`, book tools
|
|
297
316
|
`books:read|write`, calendar tools `calendar:read|write`), review tools
|
|
298
|
-
`reviews:*`, `find_tasks
|
|
299
|
-
`ai:invoke
|
|
317
|
+
`reviews:*`, `find_tasks` needs `ai:invoke` + `tasks:read`, `ai_triage` needs
|
|
318
|
+
`ai:invoke` + `tasks:write`, `reading:write`, `habits:write`, and
|
|
319
|
+
`books:write` (it can create any of those), the `*_key` tools need `keys:manage`. A missing scope returns a
|
|
300
320
|
403 tool error. Keys minted before a feature shipped won't carry its scope
|
|
301
321
|
unless they hold `*`. There is no upload tool here (cover uploads are a
|
|
302
322
|
web-only flow, `POST /v1/uploads` before setting `coverStorageId`), but a
|