@feeble/blay-mcp-server 0.1.0 → 0.2.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/dist/backend.d.ts +78 -0
- package/dist/backend.js +19 -0
- package/dist/backend.js.map +1 -0
- package/dist/http-backend.d.ts +11 -0
- package/dist/http-backend.js +235 -0
- package/dist/http-backend.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +22 -20
- package/dist/index.js.map +1 -1
- package/dist/register-tools.d.ts +7 -0
- package/dist/register-tools.js +41 -0
- package/dist/register-tools.js.map +1 -0
- package/dist/tools/action-items.d.ts +3 -2
- package/dist/tools/action-items.js +136 -41
- package/dist/tools/action-items.js.map +1 -1
- package/dist/tools/areas.d.ts +2 -1
- package/dist/tools/areas.js +51 -35
- package/dist/tools/areas.js.map +1 -1
- package/dist/tools/briefing.d.ts +3 -2
- package/dist/tools/briefing.js +40 -60
- package/dist/tools/briefing.js.map +1 -1
- package/dist/tools/collaborators.d.ts +2 -1
- package/dist/tools/collaborators.js +44 -32
- package/dist/tools/collaborators.js.map +1 -1
- package/dist/tools/comments.d.ts +2 -1
- package/dist/tools/comments.js +63 -50
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/context.d.ts +2 -1
- package/dist/tools/context.js +14 -10
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/notifications.d.ts +2 -1
- package/dist/tools/notifications.js +33 -25
- package/dist/tools/notifications.js.map +1 -1
- package/dist/tools/org.d.ts +2 -1
- package/dist/tools/org.js +17 -14
- package/dist/tools/org.js.map +1 -1
- package/dist/tools/portal.d.ts +2 -1
- package/dist/tools/portal.js +70 -49
- package/dist/tools/portal.js.map +1 -1
- package/dist/tools/projects.d.ts +2 -1
- package/dist/tools/projects.js +61 -48
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/recurrence.d.ts +2 -1
- package/dist/tools/recurrence.js +42 -28
- package/dist/tools/recurrence.js.map +1 -1
- package/dist/tools/reminders.d.ts +2 -1
- package/dist/tools/reminders.js +57 -43
- package/dist/tools/reminders.js.map +1 -1
- package/dist/tools/resources.d.ts +2 -1
- package/dist/tools/resources.js +129 -97
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/search.d.ts +2 -1
- package/dist/tools/search.js +33 -29
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/subscriptions.d.ts +2 -1
- package/dist/tools/subscriptions.js +42 -39
- package/dist/tools/subscriptions.js.map +1 -1
- package/dist/tools/tasks.d.ts +2 -1
- package/dist/tools/tasks.js +108 -90
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/users.d.ts +2 -1
- package/dist/tools/users.js +20 -16
- package/dist/tools/users.js.map +1 -1
- package/dist/utils/formatting.js +1 -11
- package/dist/utils/formatting.js.map +1 -1
- package/package.json +23 -1
package/dist/tools/portal.js
CHANGED
|
@@ -3,90 +3,111 @@
|
|
|
3
3
|
* revoke_project_access, share_resource, unshare_resource
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import {
|
|
6
|
+
import { BackendError } from "../backend.js";
|
|
7
7
|
import { formatPortalContact } from "../utils/formatting.js";
|
|
8
|
-
export function registerPortalTools(server) {
|
|
8
|
+
export function registerPortalTools(server, backend) {
|
|
9
9
|
server.tool("list_portal_contacts", "List external contacts who can access the client portal.", {
|
|
10
10
|
limit: z.number().optional().describe("Max results (default 100)"),
|
|
11
11
|
}, async ({ limit }) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
try {
|
|
13
|
+
const result = await backend.listPortalContacts({ limit });
|
|
14
|
+
const contacts = result.data ?? [];
|
|
15
|
+
if (contacts.length === 0) {
|
|
16
|
+
return { content: [{ type: "text", text: "No portal contacts found." }] };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{ type: "text", text: `# Portal Contacts (${contacts.length})\n\n${contacts.map(formatPortalContact).join("\n")}` },
|
|
21
|
+
],
|
|
22
|
+
};
|
|
15
23
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
catch (err) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
27
|
+
};
|
|
19
28
|
}
|
|
20
|
-
return {
|
|
21
|
-
content: [
|
|
22
|
-
{ type: "text", text: `# Portal Contacts (${contacts.length})\n\n${contacts.map(formatPortalContact).join("\n")}` },
|
|
23
|
-
],
|
|
24
|
-
};
|
|
25
29
|
});
|
|
26
30
|
server.tool("create_portal_contact", "Create a new external contact for the client portal. Idempotent on email.", {
|
|
27
31
|
email: z.string().describe("Contact email address"),
|
|
28
32
|
name: z.string().optional().describe("Contact name"),
|
|
29
33
|
company: z.string().optional().describe("Contact's company"),
|
|
30
34
|
}, async (params) => {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
try {
|
|
36
|
+
const data = await backend.createPortalContact(params);
|
|
37
|
+
const text = data.alreadyExists
|
|
38
|
+
? `Contact already exists (id: ${data.id}).`
|
|
39
|
+
: `Portal contact created: ${params.email} (id: ${data.id}).`;
|
|
40
|
+
return { content: [{ type: "text", text }] };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return {
|
|
44
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
45
|
+
};
|
|
34
46
|
}
|
|
35
|
-
const data = res.data;
|
|
36
|
-
const text = data.alreadyExists
|
|
37
|
-
? `Contact already exists (id: ${data.id}).`
|
|
38
|
-
: `Portal contact created: ${params.email} (id: ${data.id}).`;
|
|
39
|
-
return { content: [{ type: "text", text }] };
|
|
40
47
|
});
|
|
41
48
|
server.tool("grant_project_access", "Grant a portal contact access to a project via the client portal.", {
|
|
42
49
|
contactId: z.string().describe("The portal contact ID"),
|
|
43
50
|
projectId: z.string().describe("The project ID to grant access to"),
|
|
44
51
|
}, async (params) => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
try {
|
|
53
|
+
const data = await backend.grantProjectAccess(params);
|
|
54
|
+
const text = data.alreadyExists
|
|
55
|
+
? `Access already granted (id: ${data.id}).`
|
|
56
|
+
: `Project access granted (id: ${data.id}).`;
|
|
57
|
+
return { content: [{ type: "text", text }] };
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
62
|
+
};
|
|
48
63
|
}
|
|
49
|
-
const data = res.data;
|
|
50
|
-
const text = data.alreadyExists
|
|
51
|
-
? `Access already granted (id: ${data.id}).`
|
|
52
|
-
: `Project access granted (id: ${data.id}).`;
|
|
53
|
-
return { content: [{ type: "text", text }] };
|
|
54
64
|
});
|
|
55
65
|
server.tool("revoke_project_access", "Revoke a portal contact's access to a project.", {
|
|
56
66
|
grantId: z.string().describe("The access grant ID to revoke"),
|
|
57
67
|
}, async ({ grantId }) => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return {
|
|
68
|
+
try {
|
|
69
|
+
await backend.revokeProjectAccess(grantId);
|
|
70
|
+
return {
|
|
71
|
+
content: [{ type: "text", text: `Project access revoked (id: ${grantId}).` }],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
77
|
+
};
|
|
61
78
|
}
|
|
62
|
-
return {
|
|
63
|
-
content: [{ type: "text", text: `Project access revoked (id: ${grantId}).` }],
|
|
64
|
-
};
|
|
65
79
|
});
|
|
66
80
|
server.tool("share_resource", "Share a resource with portal contacts via a project. The resource becomes visible to contacts with access to the project.", {
|
|
67
81
|
resourceId: z.string().describe("The resource ID to share"),
|
|
68
82
|
projectId: z.string().describe("The project context for sharing"),
|
|
69
83
|
}, async (params) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
84
|
+
try {
|
|
85
|
+
const data = await backend.shareResource(params);
|
|
86
|
+
const text = data.alreadyExists
|
|
87
|
+
? `Resource already shared (id: ${data.id}).`
|
|
88
|
+
: `Resource shared via portal (id: ${data.id}).`;
|
|
89
|
+
return { content: [{ type: "text", text }] };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
94
|
+
};
|
|
73
95
|
}
|
|
74
|
-
const data = res.data;
|
|
75
|
-
const text = data.alreadyExists
|
|
76
|
-
? `Resource already shared (id: ${data.id}).`
|
|
77
|
-
: `Resource shared via portal (id: ${data.id}).`;
|
|
78
|
-
return { content: [{ type: "text", text }] };
|
|
79
96
|
});
|
|
80
97
|
server.tool("unshare_resource", "Remove a resource from portal sharing.", {
|
|
81
98
|
shareId: z.string().describe("The share ID to revoke"),
|
|
82
99
|
}, async ({ shareId }) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return {
|
|
100
|
+
try {
|
|
101
|
+
await backend.unshareResource(shareId);
|
|
102
|
+
return {
|
|
103
|
+
content: [{ type: "text", text: `Resource unshared (id: ${shareId}).` }],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
109
|
+
};
|
|
86
110
|
}
|
|
87
|
-
return {
|
|
88
|
-
content: [{ type: "text", text: `Resource unshared (id: ${shareId}).` }],
|
|
89
|
-
};
|
|
90
111
|
});
|
|
91
112
|
}
|
|
92
113
|
//# sourceMappingURL=portal.js.map
|
package/dist/tools/portal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/tools/portal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/tools/portal.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/projects.d.ts
CHANGED
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* Project Tools — list_projects, get_project, create_project, update_project
|
|
3
3
|
*/
|
|
4
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
-
|
|
5
|
+
import type { BackendAdapter } from "../backend.js";
|
|
6
|
+
export declare function registerProjectTools(server: McpServer, backend: BackendAdapter): void;
|
package/dist/tools/projects.js
CHANGED
|
@@ -2,43 +2,48 @@
|
|
|
2
2
|
* Project Tools — list_projects, get_project, create_project, update_project
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import {
|
|
5
|
+
import { BackendError } from "../backend.js";
|
|
6
6
|
import { formatProject, formatProjectDetail, formatConfirmation } from "../utils/formatting.js";
|
|
7
|
-
export function registerProjectTools(server) {
|
|
7
|
+
export function registerProjectTools(server, backend) {
|
|
8
8
|
server.tool("list_projects", "List all projects you have access to. Use this to find a project ID before creating tasks or to see the full project landscape. Optionally filter by status or area.", {
|
|
9
9
|
status: z.string().optional().describe("Filter by project status (e.g. 'active', 'completed', 'on_hold')"),
|
|
10
10
|
areaId: z.string().optional().describe("Filter by project area ID"),
|
|
11
11
|
}, async ({ status, areaId }) => {
|
|
12
|
-
|
|
13
|
-
status,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
try {
|
|
13
|
+
const result = await backend.listProjects({ status, areaId });
|
|
14
|
+
const projects = result.data ?? [];
|
|
15
|
+
if (projects.length === 0) {
|
|
16
|
+
return { content: [{ type: "text", text: "No projects found." }] };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: `# Projects (${projects.length})\n\n${projects.map(formatProject).join("\n")}`,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
};
|
|
18
26
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
catch (err) {
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
30
|
+
};
|
|
22
31
|
}
|
|
23
|
-
return {
|
|
24
|
-
content: [
|
|
25
|
-
{
|
|
26
|
-
type: "text",
|
|
27
|
-
text: `# Projects (${projects.length})\n\n${projects.map(formatProject).join("\n")}`,
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
32
|
});
|
|
32
33
|
server.tool("get_project", "Get detailed information about a specific project including description, task stats, and collaborators. Use this after finding a project via list_projects or search.", {
|
|
33
34
|
projectId: z.string().describe("The project ID"),
|
|
34
35
|
}, async ({ projectId }) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return {
|
|
36
|
+
try {
|
|
37
|
+
const data = await backend.getProject(projectId);
|
|
38
|
+
return {
|
|
39
|
+
content: [{ type: "text", text: formatProjectDetail(data) }],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return {
|
|
44
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
45
|
+
};
|
|
38
46
|
}
|
|
39
|
-
return {
|
|
40
|
-
content: [{ type: "text", text: formatProjectDetail(res.data) }],
|
|
41
|
-
};
|
|
42
47
|
});
|
|
43
48
|
server.tool("create_project", "Create a new project. Use get_org_overview to find available area IDs if you want to assign the project to an area.", {
|
|
44
49
|
name: z.string().describe("Project name"),
|
|
@@ -48,20 +53,24 @@ export function registerProjectTools(server) {
|
|
|
48
53
|
areaId: z.string().optional().describe("Project area ID"),
|
|
49
54
|
dueDate: z.number().optional().describe("Due date as Unix timestamp in milliseconds"),
|
|
50
55
|
}, async (params) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return {
|
|
56
|
+
try {
|
|
57
|
+
const data = await backend.createProject({
|
|
58
|
+
name: params.name,
|
|
59
|
+
description: params.description,
|
|
60
|
+
status: params.status,
|
|
61
|
+
ownerId: params.ownerId,
|
|
62
|
+
areaId: params.areaId,
|
|
63
|
+
dueDate: params.dueDate,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
content: [{ type: "text", text: formatConfirmation("Project created", data) }],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return {
|
|
71
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
72
|
+
};
|
|
61
73
|
}
|
|
62
|
-
return {
|
|
63
|
-
content: [{ type: "text", text: formatConfirmation("Project created", res.data) }],
|
|
64
|
-
};
|
|
65
74
|
});
|
|
66
75
|
server.tool("update_project", "Update an existing project's fields. Use get_project first to confirm the current state before making changes.", {
|
|
67
76
|
projectId: z.string().describe("The project ID to update"),
|
|
@@ -72,18 +81,22 @@ export function registerProjectTools(server) {
|
|
|
72
81
|
areaId: z.string().optional().describe("New project area ID"),
|
|
73
82
|
dueDate: z.number().optional().describe("New due date as Unix timestamp in milliseconds"),
|
|
74
83
|
}, async ({ projectId, ...updates }) => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
try {
|
|
85
|
+
const body = {};
|
|
86
|
+
for (const [key, value] of Object.entries(updates)) {
|
|
87
|
+
if (value !== undefined)
|
|
88
|
+
body[key] = value;
|
|
89
|
+
}
|
|
90
|
+
const data = await backend.updateProject(projectId, body);
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: "text", text: formatConfirmation("Project updated", data) }],
|
|
93
|
+
};
|
|
79
94
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
catch (err) {
|
|
96
|
+
return {
|
|
97
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
98
|
+
};
|
|
83
99
|
}
|
|
84
|
-
return {
|
|
85
|
-
content: [{ type: "text", text: formatConfirmation("Project updated", res.data) }],
|
|
86
|
-
};
|
|
87
100
|
});
|
|
88
101
|
}
|
|
89
102
|
//# sourceMappingURL=projects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* Recurrence Tools — get_recurrence, set_recurrence, update_recurrence, skip_recurrence
|
|
3
3
|
*/
|
|
4
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
-
|
|
5
|
+
import type { BackendAdapter } from "../backend.js";
|
|
6
|
+
export declare function registerRecurrenceTools(server: McpServer, backend: BackendAdapter): void;
|
package/dist/tools/recurrence.js
CHANGED
|
@@ -2,20 +2,24 @@
|
|
|
2
2
|
* Recurrence Tools — get_recurrence, set_recurrence, update_recurrence, skip_recurrence
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import {
|
|
5
|
+
import { BackendError } from "../backend.js";
|
|
6
6
|
import { formatRecurrence } from "../utils/formatting.js";
|
|
7
|
-
export function registerRecurrenceTools(server) {
|
|
7
|
+
export function registerRecurrenceTools(server, backend) {
|
|
8
8
|
server.tool("get_recurrence", "Get the recurrence configuration for a task or action item.", {
|
|
9
9
|
entityType: z.string().describe("Entity type: 'task' or 'action_item'"),
|
|
10
10
|
entityId: z.string().describe("The entity ID"),
|
|
11
11
|
}, async ({ entityType, entityId }) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return {
|
|
12
|
+
try {
|
|
13
|
+
const data = await backend.getRecurrence({ entityType, entityId });
|
|
14
|
+
return {
|
|
15
|
+
content: [{ type: "text", text: formatRecurrence(data) }],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
|
-
return {
|
|
17
|
-
content: [{ type: "text", text: formatRecurrence(res.data) }],
|
|
18
|
-
};
|
|
19
23
|
});
|
|
20
24
|
server.tool("set_recurrence", "Set up recurrence for a task or action item. Frequency types: 'daily', 'weekly', 'biweekly', 'monthly', 'custom'.", {
|
|
21
25
|
entityType: z.string().describe("Entity type: 'task' or 'action_item'"),
|
|
@@ -27,14 +31,17 @@ export function registerRecurrenceTools(server) {
|
|
|
27
31
|
startDate: z.number().optional().describe("Start date (Unix ms, defaults to now)"),
|
|
28
32
|
endDate: z.number().optional().describe("End date (Unix ms)"),
|
|
29
33
|
}, async (params) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return {
|
|
34
|
+
try {
|
|
35
|
+
const data = await backend.setRecurrence(params);
|
|
36
|
+
return {
|
|
37
|
+
content: [{ type: "text", text: `Recurrence set (id: ${data.id}). Next due: ${data.nextDueDate ? new Date(data.nextDueDate).toISOString() : "none"}.` }],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
43
|
+
};
|
|
33
44
|
}
|
|
34
|
-
const data = res.data;
|
|
35
|
-
return {
|
|
36
|
-
content: [{ type: "text", text: `Recurrence set (id: ${data.id}). Next due: ${data.nextDueDate ? new Date(data.nextDueDate).toISOString() : "none"}.` }],
|
|
37
|
-
};
|
|
38
45
|
});
|
|
39
46
|
server.tool("update_recurrence", "Update an existing recurrence configuration.", {
|
|
40
47
|
configId: z.string().describe("The recurrence config ID"),
|
|
@@ -45,27 +52,34 @@ export function registerRecurrenceTools(server) {
|
|
|
45
52
|
endDate: z.number().optional().describe("New end date (Unix ms)"),
|
|
46
53
|
isActive: z.boolean().optional().describe("Activate or deactivate"),
|
|
47
54
|
}, async ({ configId, ...updates }) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return {
|
|
55
|
+
try {
|
|
56
|
+
await backend.updateRecurrence(configId, updates);
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: `Recurrence updated (id: ${configId}).` }],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
64
|
+
};
|
|
51
65
|
}
|
|
52
|
-
return {
|
|
53
|
-
content: [{ type: "text", text: `Recurrence updated (id: ${configId}).` }],
|
|
54
|
-
};
|
|
55
66
|
});
|
|
56
67
|
server.tool("skip_recurrence", "Skip the current occurrence of a recurring item and advance to the next due date.", {
|
|
57
68
|
entityType: z.string().describe("Entity type: 'task' or 'action_item'"),
|
|
58
69
|
entityId: z.string().describe("The entity ID"),
|
|
59
70
|
reason: z.string().optional().describe("Reason for skipping"),
|
|
60
71
|
}, async (params) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return {
|
|
72
|
+
try {
|
|
73
|
+
const data = await backend.skipRecurrence(params);
|
|
74
|
+
return {
|
|
75
|
+
content: [{ type: "text", text: `Occurrence skipped. Next due: ${data.nextDueDate ? new Date(data.nextDueDate).toISOString() : "none"}.` }],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return {
|
|
80
|
+
content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
|
|
81
|
+
};
|
|
64
82
|
}
|
|
65
|
-
const data = res.data;
|
|
66
|
-
return {
|
|
67
|
-
content: [{ type: "text", text: `Occurrence skipped. Next due: ${data.nextDueDate ? new Date(data.nextDueDate).toISOString() : "none"}.` }],
|
|
68
|
-
};
|
|
69
83
|
});
|
|
70
84
|
}
|
|
71
85
|
//# sourceMappingURL=recurrence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/tools/recurrence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/tools/recurrence.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* Reminder Tools — list_reminders, create_reminder, update_reminder, cancel_reminder, complete_reminder
|
|
3
3
|
*/
|
|
4
4
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
-
|
|
5
|
+
import type { BackendAdapter } from "../backend.js";
|
|
6
|
+
export declare function registerReminderTools(server: McpServer, backend: BackendAdapter): void;
|