@cpenned/mcp 0.8.4 → 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 +22 -5
- 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 +9 -7
- 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 +31 -14
package/dist/tools/shares.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shares.js","sourceRoot":"","sources":["../../src/tools/shares.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,gCAAgC;AAGhC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"shares.js","sourceRoot":"","sources":["../../src/tools/shares.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,gCAAgC;AAGhC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAwB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,IAAyB;IAChF,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAA,cAAc,IAAI,CAAC,OAAO,QAAQ,EAAE;QAC3D,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAuB;IAC3E,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,qXAAqX;QACvX,WAAW,EAAE,EAAE;KAChB,EACD,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACxC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,yJAAyJ;QAC3J,WAAW,EAAE,qBAAqB,CAAC,KAAK;KACzC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
package/dist/tools/strava.js
CHANGED
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
// meant for the web UI's map, not an agent's context; get_strava_activity
|
|
8
8
|
// exposes hasStreams so an agent can point the user at the web UI to view it.
|
|
9
9
|
import { z } from "zod";
|
|
10
|
+
import { apiPath } from "../client.js";
|
|
10
11
|
import { runTool } from "../result.js";
|
|
12
|
+
import { idField } from "./schemas.js";
|
|
11
13
|
const listStravaActivitiesSchema = z.object({
|
|
12
14
|
ids: z.array(z.string()).optional(),
|
|
13
15
|
tagIds: z.array(z.string()).optional(),
|
|
@@ -32,12 +34,12 @@ export function listStravaActivities(client, args) {
|
|
|
32
34
|
includeArchived: args.includeArchived,
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
|
-
const getStravaActivitySchema = z.object({ id:
|
|
37
|
+
const getStravaActivitySchema = z.object({ id: idField });
|
|
36
38
|
export function getStravaActivity(client, args) {
|
|
37
|
-
return client.get(`/v1/strava/activities/${args.id}`);
|
|
39
|
+
return client.get(apiPath `/v1/strava/activities/${args.id}`);
|
|
38
40
|
}
|
|
39
41
|
const updateStravaActivitySchema = z.object({
|
|
40
|
-
id:
|
|
42
|
+
id: idField,
|
|
41
43
|
title: z
|
|
42
44
|
.string()
|
|
43
45
|
.nullable()
|
|
@@ -55,21 +57,23 @@ const updateStravaActivitySchema = z.object({
|
|
|
55
57
|
});
|
|
56
58
|
export function updateStravaActivity(client, args) {
|
|
57
59
|
const { id, ...patch } = args;
|
|
58
|
-
return client.patch(`/v1/strava/activities/${id}`, patch);
|
|
60
|
+
return client.patch(apiPath `/v1/strava/activities/${id}`, patch);
|
|
59
61
|
}
|
|
60
|
-
const deleteStravaActivitySchema = z.object({ id:
|
|
62
|
+
const deleteStravaActivitySchema = z.object({ id: idField });
|
|
61
63
|
export function deleteStravaActivity(client, args) {
|
|
62
|
-
return client.del(`/v1/strava/activities/${args.id}`);
|
|
64
|
+
return client.del(apiPath `/v1/strava/activities/${args.id}`);
|
|
63
65
|
}
|
|
64
66
|
const stravaActivityTagsSchema = z.object({
|
|
65
|
-
id:
|
|
67
|
+
id: idField,
|
|
66
68
|
tagIds: z.array(z.string()),
|
|
67
69
|
});
|
|
68
70
|
export function addStravaActivityTags(client, args) {
|
|
69
|
-
return client.post(`/v1/strava/activities/${args.id}/tags`, {
|
|
71
|
+
return client.post(apiPath `/v1/strava/activities/${args.id}/tags`, {
|
|
72
|
+
tagIds: args.tagIds,
|
|
73
|
+
});
|
|
70
74
|
}
|
|
71
75
|
export function removeStravaActivityTags(client, args) {
|
|
72
|
-
return client.request("DELETE", `/v1/strava/activities/${args.id}/tags`, {
|
|
76
|
+
return client.request("DELETE", apiPath `/v1/strava/activities/${args.id}/tags`, {
|
|
73
77
|
body: { tagIds: args.tagIds },
|
|
74
78
|
});
|
|
75
79
|
}
|
package/dist/tools/strava.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strava.js","sourceRoot":"","sources":["../../src/tools/strava.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,gEAAgE;AAChE,2EAA2E;AAC3E,yBAAyB;AACzB,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"strava.js","sourceRoot":"","sources":["../../src/tools/strava.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tags.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Tag tools: flat, vault-scoped labels. The API exposes create / list / get /
|
|
2
2
|
// update / delete (delete detaches the tag from every task first).
|
|
3
3
|
import { z } from "zod";
|
|
4
|
+
import { apiPath } from "../client.js";
|
|
4
5
|
import { runTool } from "../result.js";
|
|
5
|
-
import { idempotencyKey } from "./schemas.js";
|
|
6
|
+
import { idempotencyKey, idField } from "./schemas.js";
|
|
6
7
|
const createTagSchema = z.object({
|
|
7
8
|
name: z.string(),
|
|
8
9
|
color: z.string().optional(),
|
|
@@ -24,22 +25,22 @@ export function listTags(client, args) {
|
|
|
24
25
|
limit: args.limit,
|
|
25
26
|
});
|
|
26
27
|
}
|
|
27
|
-
const getTagSchema = z.object({ id:
|
|
28
|
+
const getTagSchema = z.object({ id: idField });
|
|
28
29
|
export function getTag(client, args) {
|
|
29
|
-
return client.get(`/v1/tags/${args.id}`);
|
|
30
|
+
return client.get(apiPath `/v1/tags/${args.id}`);
|
|
30
31
|
}
|
|
31
32
|
const updateTagSchema = z.object({
|
|
32
|
-
id:
|
|
33
|
+
id: idField,
|
|
33
34
|
name: z.string().optional(),
|
|
34
35
|
color: z.string().optional(),
|
|
35
36
|
});
|
|
36
37
|
export function updateTag(client, args) {
|
|
37
38
|
const { id, ...patch } = args;
|
|
38
|
-
return client.patch(`/v1/tags/${id}`, patch);
|
|
39
|
+
return client.patch(apiPath `/v1/tags/${id}`, patch);
|
|
39
40
|
}
|
|
40
|
-
const deleteTagSchema = z.object({ id:
|
|
41
|
+
const deleteTagSchema = z.object({ id: idField });
|
|
41
42
|
export function deleteTag(client, args) {
|
|
42
|
-
return client.del(`/v1/tags/${args.id}`);
|
|
43
|
+
return client.del(apiPath `/v1/tags/${args.id}`);
|
|
43
44
|
}
|
|
44
45
|
export function registerTagTools(server, client) {
|
|
45
46
|
server.registerTool("create_tag", {
|
package/dist/tools/tags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mEAAmE;AAGnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tasks.js
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
// thin call to /v1; the API enforces ownership, the status machine, and all
|
|
3
3
|
// other guards.
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { apiPath } from "../client.js";
|
|
5
6
|
import { runTool } from "../result.js";
|
|
6
|
-
import { checklistItemSchema, dateField, idempotencyKey, priorityEnum, recurrenceSchema, reviewIntervalSchema, statusEnum, } from "./schemas.js";
|
|
7
|
+
import { checklistItemSchema, dateField, idempotencyKey, idField, priorityEnum, recurrenceSchema, reviewIntervalSchema, statusEnum, } from "./schemas.js";
|
|
7
8
|
const csv = (a) => a?.length ? a.join(",") : undefined;
|
|
8
9
|
const taskFields = {
|
|
9
10
|
gardenId: z.string().describe("Garden the task belongs to (required on create)"),
|
|
10
11
|
projectId: z.string().optional().describe("Project within the same garden"),
|
|
11
12
|
title: z.string(),
|
|
13
|
+
status: statusEnum.optional().describe("Initial status; defaults to todo"),
|
|
12
14
|
notes: z.string().optional().describe("Markdown"),
|
|
13
15
|
deferDate: dateField.optional(),
|
|
14
16
|
deadline: dateField.optional(),
|
|
@@ -94,12 +96,12 @@ export function listTasks(client, args) {
|
|
|
94
96
|
cursor: args.cursor,
|
|
95
97
|
});
|
|
96
98
|
}
|
|
97
|
-
const getTaskSchema = z.object({ id:
|
|
99
|
+
const getTaskSchema = z.object({ id: idField });
|
|
98
100
|
export function getTask(client, args) {
|
|
99
|
-
return client.get(`/v1/tasks/${args.id}`);
|
|
101
|
+
return client.get(apiPath `/v1/tasks/${args.id}`);
|
|
100
102
|
}
|
|
101
103
|
const updateTaskSchema = z.object({
|
|
102
|
-
id:
|
|
104
|
+
id: idField,
|
|
103
105
|
status: statusEnum
|
|
104
106
|
.optional()
|
|
105
107
|
.describe("Drives the status machine; completing a recurring task spawns the next"),
|
|
@@ -138,11 +140,11 @@ const updateTaskSchema = z.object({
|
|
|
138
140
|
});
|
|
139
141
|
export function updateTask(client, args) {
|
|
140
142
|
const { id, ...patch } = args;
|
|
141
|
-
return client.patch(`/v1/tasks/${id}`, patch);
|
|
143
|
+
return client.patch(apiPath `/v1/tasks/${id}`, patch);
|
|
142
144
|
}
|
|
143
|
-
const deleteTaskSchema = z.object({ id:
|
|
145
|
+
const deleteTaskSchema = z.object({ id: idField });
|
|
144
146
|
export function deleteTask(client, args) {
|
|
145
|
-
return client.del(`/v1/tasks/${args.id}`);
|
|
147
|
+
return client.del(apiPath `/v1/tasks/${args.id}`);
|
|
146
148
|
}
|
|
147
149
|
const createTasksSchema = z.object({
|
|
148
150
|
tasks: z.array(z.object(taskFields)).describe("Tasks to create"),
|
|
@@ -164,12 +166,12 @@ const updateTasksSchema = z.object({
|
|
|
164
166
|
export function updateTasks(client, args) {
|
|
165
167
|
return client.patch("/v1/tasks/batch", { items: args.tasks, partial: args.partial });
|
|
166
168
|
}
|
|
167
|
-
const taskTagsSchema = z.object({ id:
|
|
169
|
+
const taskTagsSchema = z.object({ id: idField, tagIds: z.array(z.string()) });
|
|
168
170
|
export function addTaskTags(client, args) {
|
|
169
|
-
return client.post(`/v1/tasks/${args.id}/tags`, { tagIds: args.tagIds });
|
|
171
|
+
return client.post(apiPath `/v1/tasks/${args.id}/tags`, { tagIds: args.tagIds });
|
|
170
172
|
}
|
|
171
173
|
export function removeTaskTags(client, args) {
|
|
172
|
-
return client.request("DELETE", `/v1/tasks/${args.id}/tags`, {
|
|
174
|
+
return client.request("DELETE", apiPath `/v1/tasks/${args.id}/tags`, {
|
|
173
175
|
body: { tagIds: args.tagIds },
|
|
174
176
|
});
|
|
175
177
|
}
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,gBAAgB;AAGhB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/ui.js
CHANGED
|
@@ -4,16 +4,31 @@
|
|
|
4
4
|
// defer, reschedule from the UI) are a later sub-stage.
|
|
5
5
|
import { createUIResource } from "@mcp-ui/server";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
+
import { apiPath } from "../client.js";
|
|
7
8
|
import { errorResult } from "../result.js";
|
|
8
|
-
import { htmlDoc, section } from "./render.js";
|
|
9
|
-
|
|
9
|
+
import { htmlDoc, moreNote, section } from "./render.js";
|
|
10
|
+
import { idField } from "./schemas.js";
|
|
11
|
+
// The HTML is for the UI; the text note tells the model a page was cut short
|
|
12
|
+
// and which cursor continues it, since it may not read the rendered markup.
|
|
13
|
+
async function uiResult(uri, html, nextCursor) {
|
|
10
14
|
const resource = await createUIResource({
|
|
11
15
|
uri,
|
|
12
16
|
content: { type: "rawHtml", htmlString: html },
|
|
13
17
|
encoding: "text",
|
|
14
18
|
});
|
|
15
|
-
|
|
19
|
+
if (!nextCursor)
|
|
20
|
+
return { content: [resource] };
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
resource,
|
|
24
|
+
{
|
|
25
|
+
type: "text",
|
|
26
|
+
text: `More items not shown. Call again with cursor "${nextCursor}" for the next page.`,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
};
|
|
16
30
|
}
|
|
31
|
+
const cursorOf = (page) => page.hasMore === false ? null : (page.nextCursor ?? null);
|
|
17
32
|
const VIEW_TITLES = {
|
|
18
33
|
today: "Today",
|
|
19
34
|
upcoming: "Upcoming",
|
|
@@ -23,16 +38,19 @@ const viewUiSchema = z.object({
|
|
|
23
38
|
view: z.enum(["today", "upcoming", "overdue"]),
|
|
24
39
|
tz: z.string().optional(),
|
|
25
40
|
limit: z.number().int().positive().optional(),
|
|
41
|
+
cursor: z.string().optional().describe("Cursor from a previous page"),
|
|
26
42
|
});
|
|
27
43
|
export async function viewUi(client, args) {
|
|
28
44
|
try {
|
|
29
|
-
const data = await client.get(`/v1/views/${args.view}`, {
|
|
45
|
+
const data = await client.get(apiPath `/v1/views/${args.view}`, {
|
|
30
46
|
tz: args.tz,
|
|
31
47
|
limit: args.limit,
|
|
48
|
+
cursor: args.cursor,
|
|
32
49
|
});
|
|
33
50
|
const title = VIEW_TITLES[args.view];
|
|
34
|
-
const
|
|
35
|
-
|
|
51
|
+
const next = cursorOf(data);
|
|
52
|
+
const html = htmlDoc(title, section(title, data.items ?? []) + moreNote(next));
|
|
53
|
+
return uiResult(`ui://open-brain/view/${args.view}`, html, next);
|
|
36
54
|
}
|
|
37
55
|
catch (error) {
|
|
38
56
|
return errorResult(error);
|
|
@@ -51,12 +69,12 @@ export async function reviewQueueUi(client, args) {
|
|
|
51
69
|
return errorResult(error);
|
|
52
70
|
}
|
|
53
71
|
}
|
|
54
|
-
const gardenBoardUiSchema = z.object({ gardenId:
|
|
72
|
+
const gardenBoardUiSchema = z.object({ gardenId: idField });
|
|
55
73
|
export async function gardenBoardUi(client, args) {
|
|
56
74
|
try {
|
|
57
|
-
const garden = await client.get(`/v1/gardens/${args.gardenId}`);
|
|
75
|
+
const garden = await client.get(apiPath `/v1/gardens/${args.gardenId}`);
|
|
58
76
|
// The garden review endpoint returns all non-canceled items under the garden.
|
|
59
|
-
const board = await client.get(`/v1/gardens/${args.gardenId}/review`);
|
|
77
|
+
const board = await client.get(apiPath `/v1/gardens/${args.gardenId}/review`);
|
|
60
78
|
const html = htmlDoc(`Garden: ${garden.name ?? args.gardenId}`, section("Projects", board.projects ?? []) + section("Tasks", board.tasks ?? []));
|
|
61
79
|
return uiResult(`ui://open-brain/garden/${args.gardenId}`, html);
|
|
62
80
|
}
|
|
@@ -69,6 +87,7 @@ const habitsUiSchema = z.object({
|
|
|
69
87
|
status: z.array(z.enum(["active", "paused"])).optional(),
|
|
70
88
|
query: z.string().optional(),
|
|
71
89
|
limit: z.number().int().positive().optional(),
|
|
90
|
+
cursor: z.string().optional().describe("Cursor from a previous page"),
|
|
72
91
|
includeArchived: z.boolean().optional(),
|
|
73
92
|
});
|
|
74
93
|
export async function habitsUi(client, args) {
|
|
@@ -78,10 +97,12 @@ export async function habitsUi(client, args) {
|
|
|
78
97
|
status: args.status?.length ? args.status.join(",") : undefined,
|
|
79
98
|
q: args.query,
|
|
80
99
|
limit: args.limit,
|
|
100
|
+
cursor: args.cursor,
|
|
81
101
|
includeArchived: args.includeArchived,
|
|
82
102
|
});
|
|
83
|
-
const
|
|
84
|
-
|
|
103
|
+
const next = cursorOf(data);
|
|
104
|
+
const html = htmlDoc("Habits", section("Habits", data.items ?? []) + moreNote(next));
|
|
105
|
+
return uiResult("ui://open-brain/habits", html, next);
|
|
85
106
|
}
|
|
86
107
|
catch (error) {
|
|
87
108
|
return errorResult(error);
|
|
@@ -90,7 +111,7 @@ export async function habitsUi(client, args) {
|
|
|
90
111
|
export function registerUiTools(server, client) {
|
|
91
112
|
server.registerTool("ui_view", {
|
|
92
113
|
title: "View (UI)",
|
|
93
|
-
description: "Render a computed view (today/upcoming/overdue) as an HTML UI.",
|
|
114
|
+
description: "Render a computed view (today/upcoming/overdue) as an HTML UI. When the page is cut short the result says so and gives the cursor for the next page.",
|
|
94
115
|
inputSchema: viewUiSchema.shape,
|
|
95
116
|
}, (args) => viewUi(client, args));
|
|
96
117
|
server.registerTool("ui_review_queue", {
|
|
@@ -105,7 +126,7 @@ export function registerUiTools(server, client) {
|
|
|
105
126
|
}, (args) => gardenBoardUi(client, args));
|
|
106
127
|
server.registerTool("ui_habits", {
|
|
107
128
|
title: "Habits (UI)",
|
|
108
|
-
description: "Render habits with status, due/progress, and streak metadata as an HTML UI.",
|
|
129
|
+
description: "Render habits with status, due/progress, and streak metadata as an HTML UI. Pages like ui_view (pass cursor for the next page).",
|
|
109
130
|
inputSchema: habitsUiSchema.shape,
|
|
110
131
|
}, (args) => habitsUi(client, args));
|
|
111
132
|
}
|
package/dist/tools/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/tools/ui.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,iFAAiF;AACjF,wDAAwD;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/tools/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/views.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
// Opinionated read tools: computed views and the review system. Views are
|
|
2
|
-
// timezone-aware (tz overrides the
|
|
2
|
+
// timezone-aware (tz overrides the host timezone the server sends); review tools cover the due
|
|
3
3
|
// queue, garden deep-review, forcing a garden into review, and marking items
|
|
4
4
|
// reviewed (which restarts their clock).
|
|
5
5
|
import { z } from "zod";
|
|
6
|
+
import { apiPath } from "../client.js";
|
|
6
7
|
import { runTool } from "../result.js";
|
|
8
|
+
import { idField } from "./schemas.js";
|
|
7
9
|
const getViewSchema = z.object({
|
|
8
10
|
view: z.enum(["today", "upcoming", "overdue"]),
|
|
9
11
|
tz: z
|
|
10
12
|
.string()
|
|
11
13
|
.optional()
|
|
12
|
-
.describe("IANA timezone (e.g. America/New_York); defaults to the
|
|
14
|
+
.describe("IANA timezone (e.g. America/New_York); defaults to the timezone of the machine running this MCP server"),
|
|
13
15
|
limit: z.number().int().positive().optional(),
|
|
14
16
|
cursor: z.string().optional(),
|
|
15
17
|
});
|
|
16
18
|
export function getView(client, args) {
|
|
17
|
-
return client.get(`/v1/views/${args.view}`, {
|
|
19
|
+
return client.get(apiPath `/v1/views/${args.view}`, {
|
|
18
20
|
tz: args.tz,
|
|
19
21
|
limit: args.limit,
|
|
20
22
|
cursor: args.cursor,
|
|
@@ -27,20 +29,20 @@ const getReviewsSchema = z.object({
|
|
|
27
29
|
export function getReviews(client, args) {
|
|
28
30
|
return client.get("/v1/reviews", { gardenId: args.gardenId, limit: args.limit });
|
|
29
31
|
}
|
|
30
|
-
const gardenIdSchema = z.object({ gardenId:
|
|
32
|
+
const gardenIdSchema = z.object({ gardenId: idField });
|
|
31
33
|
export function reviewGarden(client, args) {
|
|
32
|
-
return client.get(`/v1/gardens/${args.gardenId}/review`);
|
|
34
|
+
return client.get(apiPath `/v1/gardens/${args.gardenId}/review`);
|
|
33
35
|
}
|
|
34
36
|
export function requestGardenReview(client, args) {
|
|
35
|
-
return client.post(`/v1/gardens/${args.gardenId}/request-review`);
|
|
37
|
+
return client.post(apiPath `/v1/gardens/${args.gardenId}/request-review`);
|
|
36
38
|
}
|
|
37
|
-
const markTaskReviewedSchema = z.object({ taskId:
|
|
39
|
+
const markTaskReviewedSchema = z.object({ taskId: idField });
|
|
38
40
|
export function markTaskReviewed(client, args) {
|
|
39
|
-
return client.post(`/v1/tasks/${args.taskId}/reviewed`);
|
|
41
|
+
return client.post(apiPath `/v1/tasks/${args.taskId}/reviewed`);
|
|
40
42
|
}
|
|
41
|
-
const markProjectReviewedSchema = z.object({ projectId:
|
|
43
|
+
const markProjectReviewedSchema = z.object({ projectId: idField });
|
|
42
44
|
export function markProjectReviewed(client, args) {
|
|
43
|
-
return client.post(`/v1/projects/${args.projectId}/reviewed`);
|
|
45
|
+
return client.post(apiPath `/v1/projects/${args.projectId}/reviewed`);
|
|
44
46
|
}
|
|
45
47
|
export function registerViewTools(server, client) {
|
|
46
48
|
server.registerTool("get_view", {
|
package/dist/tools/views.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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,7 @@ 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`).
|
|
135
138
|
Project reads carry `taskCounts {open, done}` (canceled in neither) and
|
|
136
139
|
`nextTaskId` (first open task by manual order; `get_task` it to see what's
|
|
137
140
|
next), so progress needs no extra task listing.
|
|
@@ -145,8 +148,8 @@ pre-guessing constraints.
|
|
|
145
148
|
(null clears a field, e.g. `contactInterval: null`; `archived: false`
|
|
146
149
|
restores), `delete_person` (archives, links kept), `mark_contacted`
|
|
147
150
|
(optional `at` backdates the touch), `add_person_links`/`remove_person_links`
|
|
148
|
-
(`{id, taskIds?, projectIds?, gardenIds?, readingListItemIds?,
|
|
149
|
-
people?}
|
|
151
|
+
(`{id, taskIds?, projectIds?, gardenIds?, readingListItemIds?, habitIds?,
|
|
152
|
+
bookIds?, people?}`: `people` is `[{id, label?}]` for person-to-person connections;
|
|
150
153
|
symmetric, shown on both people, re-link with a new label to change it or
|
|
151
154
|
`label: null` to clear it; unlink takes the same shape, ids only for
|
|
152
155
|
`people`). `create_task(s)` accept `personIds` inline; `list_tasks` filters
|
|
@@ -159,9 +162,10 @@ pre-guessing constraints.
|
|
|
159
162
|
`archived`/`deleted` toggle independently of status), `delete_reading_item`
|
|
160
163
|
(true soft delete, hidden everywhere; restore with `update_reading_item
|
|
161
164
|
{deleted: false}`), `add_reading_tags`/`remove_reading_tags`.
|
|
162
|
-
- **Habits**: `create_habit`, `list_habits
|
|
165
|
+
- **Habits**: `create_habit`, `list_habits` (pages; pass `cursor`), `get_habit`, `update_habit`,
|
|
163
166
|
`archive_habit`/`unarchive_habit`, `complete_habit` (`quantity?`, `durationMinutes?`,
|
|
164
|
-
`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),
|
|
165
169
|
`reorder_habits`, `add_habit_tags`/`remove_habit_tags`.
|
|
166
170
|
Schedules: `{kind: daily}`, `{kind: weekly, times, byWeekday?}`, `{kind: monthly, times}`,
|
|
167
171
|
`{kind: every_n_days, interval}`. Optional `graceDays` (daily streak tolerance),
|
|
@@ -197,14 +201,21 @@ pre-guessing constraints.
|
|
|
197
201
|
`bookIds`.
|
|
198
202
|
- **Saved lists** (named, reusable task-list filters): `list_saved_lists`,
|
|
199
203
|
`create_saved_list`, `update_saved_list`, `delete_saved_list`.
|
|
200
|
-
- **
|
|
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),
|
|
201
210
|
`get_reviews` (due queue), `review_garden` (deep review),
|
|
202
211
|
`request_garden_review`, `mark_task_reviewed`, `mark_project_reviewed`.
|
|
203
212
|
- **AI**: `find_tasks` (hybrid keyword + semantic search), `ai_triage`
|
|
204
213
|
(brain dump → garden-assigned tasks, recurring habits, reading-list
|
|
205
214
|
saves/edits/cancels, and books - see Workflows).
|
|
206
|
-
- **UI (read-only)**: `ui_view`, `ui_review_queue`, `ui_garden_board
|
|
207
|
-
`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.
|
|
208
219
|
- **Settings**: `get_settings`, `update_settings` (the default review period
|
|
209
220
|
applied to new tasks/projects; `defaultReviewInterval: null` disables it;
|
|
210
221
|
`defaultTimezone`, an IANA string, is also settable - it's what date-only
|
|
@@ -220,7 +231,9 @@ pre-guessing constraints.
|
|
|
220
231
|
`update_profile {displayName}` (1-60 chars; avatar upload is web-only).
|
|
221
232
|
- **Keys**: `create_key` (optional `includeGrants` to let the new key see
|
|
222
233
|
gardens shared with its owner - only settable if the calling key itself
|
|
223
|
-
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.
|
|
224
237
|
|
|
225
238
|
## Workflows
|
|
226
239
|
|
|
@@ -235,8 +248,9 @@ pre-guessing constraints.
|
|
|
235
248
|
archives it, reversibly, independent of status) — it matches existing
|
|
236
249
|
items by exact title, so an unmatched or ambiguous reference comes back as a
|
|
237
250
|
reading-list clarification rather than a silent no-op or a task.
|
|
238
|
-
- **Plan today** → `get_view today`.
|
|
239
|
-
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.
|
|
240
254
|
- **Add a task** → need a garden: `list_gardens` first, then `create_task` with
|
|
241
255
|
`gardenId`. Set `deadline` for "today"/hard dates — that's what lands it in
|
|
242
256
|
the Today view. `create_task`/`create_tasks` accept `tagIds`, `recurrence`,
|
|
@@ -244,7 +258,9 @@ pre-guessing constraints.
|
|
|
244
258
|
habit) **inline** — set them at creation, never create-then-patch.
|
|
245
259
|
`deferDate`/`deadline` are calendar days `"YYYY-MM-DD"` (no timezone); inputs
|
|
246
260
|
also accept relative tokens (`"today"`, `"tomorrow"`, `"+3d"`), so no
|
|
247
|
-
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"`.
|
|
248
264
|
- **Recurring task** → set `recurrence` at creation:
|
|
249
265
|
`{mode, frequency, interval, byWeekday?}`. `mode`: `on_schedule` (next = prior
|
|
250
266
|
due + interval; self-heals missed days) or `on_completion` (next = completed +
|
|
@@ -298,8 +314,9 @@ pre-guessing constraints.
|
|
|
298
314
|
`people:read|write`, settings tools `settings:read|write`, reading list tools
|
|
299
315
|
`reading:read|write`, Strava tools `strava:read|write`, book tools
|
|
300
316
|
`books:read|write`, calendar tools `calendar:read|write`), review tools
|
|
301
|
-
`reviews:*`, `find_tasks
|
|
302
|
-
`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
|
|
303
320
|
403 tool error. Keys minted before a feature shipped won't carry its scope
|
|
304
321
|
unless they hold `*`. There is no upload tool here (cover uploads are a
|
|
305
322
|
web-only flow, `POST /v1/uploads` before setting `coverStorageId`), but a
|