@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.
Files changed (66) hide show
  1. package/dist/backend.d.ts +78 -0
  2. package/dist/backend.js +19 -0
  3. package/dist/backend.js.map +1 -0
  4. package/dist/http-backend.d.ts +11 -0
  5. package/dist/http-backend.js +235 -0
  6. package/dist/http-backend.js.map +1 -0
  7. package/dist/index.d.ts +3 -1
  8. package/dist/index.js +22 -20
  9. package/dist/index.js.map +1 -1
  10. package/dist/register-tools.d.ts +7 -0
  11. package/dist/register-tools.js +41 -0
  12. package/dist/register-tools.js.map +1 -0
  13. package/dist/tools/action-items.d.ts +3 -2
  14. package/dist/tools/action-items.js +136 -41
  15. package/dist/tools/action-items.js.map +1 -1
  16. package/dist/tools/areas.d.ts +2 -1
  17. package/dist/tools/areas.js +51 -35
  18. package/dist/tools/areas.js.map +1 -1
  19. package/dist/tools/briefing.d.ts +3 -2
  20. package/dist/tools/briefing.js +40 -60
  21. package/dist/tools/briefing.js.map +1 -1
  22. package/dist/tools/collaborators.d.ts +2 -1
  23. package/dist/tools/collaborators.js +44 -32
  24. package/dist/tools/collaborators.js.map +1 -1
  25. package/dist/tools/comments.d.ts +2 -1
  26. package/dist/tools/comments.js +63 -50
  27. package/dist/tools/comments.js.map +1 -1
  28. package/dist/tools/context.d.ts +2 -1
  29. package/dist/tools/context.js +14 -10
  30. package/dist/tools/context.js.map +1 -1
  31. package/dist/tools/notifications.d.ts +2 -1
  32. package/dist/tools/notifications.js +33 -25
  33. package/dist/tools/notifications.js.map +1 -1
  34. package/dist/tools/org.d.ts +2 -1
  35. package/dist/tools/org.js +17 -14
  36. package/dist/tools/org.js.map +1 -1
  37. package/dist/tools/portal.d.ts +2 -1
  38. package/dist/tools/portal.js +70 -49
  39. package/dist/tools/portal.js.map +1 -1
  40. package/dist/tools/projects.d.ts +2 -1
  41. package/dist/tools/projects.js +61 -48
  42. package/dist/tools/projects.js.map +1 -1
  43. package/dist/tools/recurrence.d.ts +2 -1
  44. package/dist/tools/recurrence.js +42 -28
  45. package/dist/tools/recurrence.js.map +1 -1
  46. package/dist/tools/reminders.d.ts +2 -1
  47. package/dist/tools/reminders.js +57 -43
  48. package/dist/tools/reminders.js.map +1 -1
  49. package/dist/tools/resources.d.ts +2 -1
  50. package/dist/tools/resources.js +129 -97
  51. package/dist/tools/resources.js.map +1 -1
  52. package/dist/tools/search.d.ts +2 -1
  53. package/dist/tools/search.js +33 -29
  54. package/dist/tools/search.js.map +1 -1
  55. package/dist/tools/subscriptions.d.ts +2 -1
  56. package/dist/tools/subscriptions.js +42 -39
  57. package/dist/tools/subscriptions.js.map +1 -1
  58. package/dist/tools/tasks.d.ts +2 -1
  59. package/dist/tools/tasks.js +108 -90
  60. package/dist/tools/tasks.js.map +1 -1
  61. package/dist/tools/users.d.ts +2 -1
  62. package/dist/tools/users.js +20 -16
  63. package/dist/tools/users.js.map +1 -1
  64. package/dist/utils/formatting.js +1 -11
  65. package/dist/utils/formatting.js.map +1 -1
  66. package/package.json +23 -1
@@ -2,25 +2,30 @@
2
2
  * Collaborator Tools — list_collaborators, add_collaborator, update_collaborator_role
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiGet, apiPost, apiPatch, formatError } from "../client.js";
5
+ import { BackendError } from "../backend.js";
6
6
  import { formatCollaborator } from "../utils/formatting.js";
7
- export function registerCollaboratorTools(server) {
7
+ export function registerCollaboratorTools(server, backend) {
8
8
  server.tool("list_collaborators", "List collaborators for a project, including their roles and contact info.", {
9
9
  projectId: z.string().describe("The project ID"),
10
10
  }, async ({ projectId }) => {
11
- const res = await apiGet(`/api/v1/projects/${projectId}/collaborators`);
12
- if (!res.ok) {
13
- return { content: [{ type: "text", text: formatError(res) }] };
11
+ try {
12
+ const result = await backend.listCollaborators(projectId);
13
+ const collabs = result.data?.collaborators ?? result.data ?? [];
14
+ if (collabs.length === 0) {
15
+ return { content: [{ type: "text", text: "No collaborators found for this project." }] };
16
+ }
17
+ return {
18
+ content: [
19
+ { type: "text", text: `# Collaborators (${collabs.length})\n\n${collabs.map(formatCollaborator).join("\n")}` },
20
+ ],
21
+ };
14
22
  }
15
- const collabs = res.data.data ?? [];
16
- if (collabs.length === 0) {
17
- return { content: [{ type: "text", text: "No collaborators found for this project." }] };
23
+ catch (err) {
24
+ const msg = err instanceof BackendError ? err.message : (err?.message ?? String(err));
25
+ return {
26
+ content: [{ type: "text", text: msg }],
27
+ };
18
28
  }
19
- return {
20
- content: [
21
- { type: "text", text: `# Collaborators (${collabs.length})\n\n${collabs.map(formatCollaborator).join("\n")}` },
22
- ],
23
- };
24
29
  });
25
30
  server.tool("add_collaborator", "Add a user as a collaborator on a project. Use list_users to find user IDs.", {
26
31
  projectId: z.string().describe("The project ID"),
@@ -29,33 +34,40 @@ export function registerCollaboratorTools(server) {
29
34
  specialties: z.array(z.string()).optional().describe("Area specialties"),
30
35
  responsibilities: z.string().optional().describe("Role responsibilities description"),
31
36
  }, async ({ projectId, targetUserId, role, specialties, responsibilities }) => {
32
- const res = await apiPost(`/api/v1/projects/${projectId}/collaborators`, {
33
- targetUserId,
34
- role,
35
- specialties,
36
- responsibilities,
37
- });
38
- if (!res.ok) {
39
- return { content: [{ type: "text", text: formatError(res) }] };
37
+ try {
38
+ const data = await backend.addCollaborator(projectId, {
39
+ targetUserId,
40
+ role,
41
+ specialties,
42
+ responsibilities,
43
+ });
44
+ const text = data.alreadyExists
45
+ ? `User is already a collaborator (id: ${data.id}).`
46
+ : `Collaborator added to project (id: ${data.id}).`;
47
+ return { content: [{ type: "text", text }] };
48
+ }
49
+ catch (err) {
50
+ return {
51
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
52
+ };
40
53
  }
41
- const data = res.data;
42
- const text = data.alreadyExists
43
- ? `User is already a collaborator (id: ${data.id}).`
44
- : `Collaborator added to project (id: ${data.id}).`;
45
- return { content: [{ type: "text", text }] };
46
54
  });
47
55
  server.tool("update_collaborator_role", "Update a collaborator's role on a project.", {
48
56
  projectId: z.string().describe("The project ID"),
49
57
  targetUserId: z.string().describe("The user ID to update"),
50
58
  role: z.string().describe("New role: 'owner', 'member', or 'viewer'"),
51
59
  }, async ({ projectId, targetUserId, role }) => {
52
- const res = await apiPatch(`/api/v1/projects/${projectId}/collaborators/${targetUserId}`, { role });
53
- if (!res.ok) {
54
- return { content: [{ type: "text", text: formatError(res) }] };
60
+ try {
61
+ await backend.updateCollaboratorRole(projectId, targetUserId, { role });
62
+ return {
63
+ content: [{ type: "text", text: `Collaborator role updated to ${role}.` }],
64
+ };
65
+ }
66
+ catch (err) {
67
+ return {
68
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
69
+ };
55
70
  }
56
- return {
57
- content: [{ type: "text", text: `Collaborator role updated to ${role}.` }],
58
- };
59
71
  });
60
72
  }
61
73
  //# sourceMappingURL=collaborators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collaborators.js","sourceRoot":"","sources":["../../src/tools/collaborators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collaborators.js","sourceRoot":"","sources":["../../src/tools/collaborators.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * Comment Tools — list_comments, post_comment, edit_comment, react_to_comment
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerCommentTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerCommentTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,32 +2,32 @@
2
2
  * Comment Tools — list_comments, post_comment, edit_comment, react_to_comment
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiGet, apiPost, apiPatch, formatError } from "../client.js";
5
+ import { BackendError } from "../backend.js";
6
6
  import { formatRelativeDate } from "../utils/formatting.js";
7
- export function registerCommentTools(server) {
7
+ export function registerCommentTools(server, backend) {
8
8
  server.tool("list_comments", "List comments on a task, project, resource, or action item. Use get_entity_context instead if you also need the entity's metadata and other details in one call.", {
9
9
  entityType: z.string().describe("Entity type: 'task', 'project', 'resource', or 'actionItem'"),
10
10
  entityId: z.string().describe("The entity ID"),
11
11
  limit: z.number().optional().describe("Max comments to return (default 50)"),
12
12
  }, async ({ entityType, entityId, limit }) => {
13
- const res = await apiGet("/api/v1/comments", {
14
- entityType,
15
- entityId,
16
- limit: limit?.toString(),
17
- });
18
- if (!res.ok) {
19
- return { content: [{ type: "text", text: formatError(res) }] };
13
+ try {
14
+ const result = await backend.listComments({ entityType, entityId, limit });
15
+ const comments = result.data ?? [];
16
+ if (comments.length === 0) {
17
+ return { content: [{ type: "text", text: "No comments found." }] };
18
+ }
19
+ const formatted = comments
20
+ .map((c) => `**${c.authorName ?? "Unknown"}** (${formatRelativeDate(c.createdAt)}) (id: ${c._id ?? c.id}):\n${c.content}`)
21
+ .join("\n\n---\n\n");
22
+ return {
23
+ content: [{ type: "text", text: `# Comments (${comments.length})\n\n${formatted}` }],
24
+ };
20
25
  }
21
- const comments = res.data.data ?? [];
22
- if (comments.length === 0) {
23
- return { content: [{ type: "text", text: "No comments found." }] };
26
+ catch (err) {
27
+ return {
28
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
29
+ };
24
30
  }
25
- const formatted = comments
26
- .map((c) => `**${c.authorName ?? "Unknown"}** (${formatRelativeDate(c.createdAt)}):\n${c.content}`)
27
- .join("\n\n---\n\n");
28
- return {
29
- content: [{ type: "text", text: `# Comments (${comments.length})\n\n${formatted}` }],
30
- };
31
31
  });
32
32
  server.tool("post_comment", "Post a comment on a task, project, resource, or action item. Specify exactly one entity ID. Supports @mentions and private notes.", {
33
33
  content: z.string().describe("Comment text"),
@@ -38,51 +38,64 @@ export function registerCommentTools(server) {
38
38
  isNote: z.boolean().optional().describe("If true, this is a private note"),
39
39
  mentions: z.array(z.string()).optional().describe("User IDs to mention"),
40
40
  }, async (params) => {
41
- const body = { content: params.content };
42
- if (params.taskId)
43
- body.taskId = params.taskId;
44
- if (params.projectId)
45
- body.projectId = params.projectId;
46
- if (params.resourceId)
47
- body.resourceId = params.resourceId;
48
- if (params.actionItemId)
49
- body.actionItemId = params.actionItemId;
50
- if (params.isNote !== undefined)
51
- body.isNote = params.isNote;
52
- if (params.mentions)
53
- body.mentions = params.mentions;
54
- const res = await apiPost("/api/v1/comments", body);
55
- if (!res.ok) {
56
- return { content: [{ type: "text", text: formatError(res) }] };
41
+ try {
42
+ const body = { content: params.content };
43
+ if (params.taskId)
44
+ body.taskId = params.taskId;
45
+ if (params.projectId)
46
+ body.projectId = params.projectId;
47
+ if (params.resourceId)
48
+ body.resourceId = params.resourceId;
49
+ if (params.actionItemId)
50
+ body.actionItemId = params.actionItemId;
51
+ if (params.isNote !== undefined)
52
+ body.isNote = params.isNote;
53
+ if (params.mentions)
54
+ body.mentions = params.mentions;
55
+ const result = await backend.createComment(body);
56
+ const commentId = result?.commentId ?? result?.id;
57
+ return {
58
+ content: [{ type: "text", text: commentId ? `Comment posted (id: ${commentId}).` : "Comment posted successfully." }],
59
+ };
60
+ }
61
+ catch (err) {
62
+ return {
63
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
64
+ };
57
65
  }
58
- return {
59
- content: [{ type: "text", text: "Comment posted successfully." }],
60
- };
61
66
  });
62
67
  server.tool("edit_comment", "Edit a comment's content. Only the original author can edit. System event comments cannot be edited.", {
63
68
  commentId: z.string().describe("The comment ID to edit"),
64
69
  content: z.string().describe("New comment content"),
65
70
  }, async ({ commentId, content }) => {
66
- const res = await apiPatch(`/api/v1/comments/${commentId}`, { content });
67
- if (!res.ok) {
68
- return { content: [{ type: "text", text: formatError(res) }] };
71
+ try {
72
+ await backend.editComment(commentId, { content });
73
+ return {
74
+ content: [{ type: "text", text: `Comment edited (id: ${commentId}).` }],
75
+ };
76
+ }
77
+ catch (err) {
78
+ return {
79
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
80
+ };
69
81
  }
70
- return {
71
- content: [{ type: "text", text: `Comment edited (id: ${commentId}).` }],
72
- };
73
82
  });
74
83
  server.tool("react_to_comment", "Toggle a reaction on a comment. If the reaction already exists it will be removed. Allowed emojis: heart, thumbsup, thumbsdown, laugh, exclamation, question.", {
75
84
  commentId: z.string().describe("The comment ID to react to"),
76
85
  emoji: z.string().describe("Emoji name: 'heart', 'thumbsup', 'thumbsdown', 'laugh', 'exclamation', or 'question'"),
77
86
  }, async ({ commentId, emoji }) => {
78
- const res = await apiPost(`/api/v1/comments/${commentId}/reactions`, { emoji });
79
- if (!res.ok) {
80
- return { content: [{ type: "text", text: formatError(res) }] };
87
+ try {
88
+ const data = await backend.toggleCommentReaction(commentId, { emoji });
89
+ const action = data.action;
90
+ return {
91
+ content: [{ type: "text", text: `Reaction ${action} (${emoji} on comment ${commentId}).` }],
92
+ };
93
+ }
94
+ catch (err) {
95
+ return {
96
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
97
+ };
81
98
  }
82
- const action = res.data.action;
83
- return {
84
- content: [{ type: "text", text: `Reaction ${action} (${emoji} on comment ${commentId}).` }],
85
- };
86
99
  });
87
100
  }
88
101
  //# sourceMappingURL=comments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * Context Tool — get_entity_context
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerContextTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerContextTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,24 +2,28 @@
2
2
  * Context Tool — get_entity_context
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiGet, formatError } from "../client.js";
5
+ import { BackendError } from "../backend.js";
6
6
  import { formatContextEntity } from "../utils/formatting.js";
7
- export function registerContextTools(server) {
8
- server.tool("get_entity_context", "Get deep assembled context for a task or project in one call. Prefer this over get_task + list_comments + separate calls when you need comprehensive context. Returns the entity, its project, recent comments, subtasks, resources, and collaborators depending on depth level.", {
7
+ export function registerContextTools(server, backend) {
8
+ server.tool("get_entity_context", "Get deep assembled context for a task or project in one call. Prefer this over get_task + list_comments + separate calls when you need comprehensive context. Returns the entity, its project, recent comments, resources, and collaborators depending on depth level.", {
9
9
  entityType: z.enum(["task", "project"]).describe("Entity type"),
10
10
  entityId: z.string().describe("Entity ID"),
11
11
  depth: z
12
12
  .enum(["shallow", "standard", "deep"])
13
13
  .optional()
14
- .describe("Context depth: 'shallow' (metadata only), 'standard' (entity + project + recent comments, default), 'deep' (everything including subtasks, resources, links, collaborators)"),
14
+ .describe("Context depth: 'shallow' (metadata only), 'standard' (entity + project + recent comments, default), 'deep' (everything including resources, links, collaborators)"),
15
15
  }, async ({ entityType, entityId, depth }) => {
16
- const res = await apiGet(`/api/v1/context/${entityType}/${entityId}`, { depth });
17
- if (!res.ok) {
18
- return { content: [{ type: "text", text: formatError(res) }] };
16
+ try {
17
+ const data = await backend.getEntityContext(entityType, entityId, { depth });
18
+ return {
19
+ content: [{ type: "text", text: formatContextEntity(data) }],
20
+ };
21
+ }
22
+ catch (err) {
23
+ return {
24
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
25
+ };
19
26
  }
20
- return {
21
- content: [{ type: "text", text: formatContextEntity(res.data) }],
22
- };
23
27
  });
24
28
  }
25
29
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,kRAAkR,EAClR;QACE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aACrC,QAAQ,EAAE;aACV,QAAQ,CACP,6KAA6K,CAC9K;KACJ,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,mBAAmB,UAAU,IAAI,QAAQ,EAAE,EAC3C,EAAE,KAAK,EAAE,CACV,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,OAAuB;IAC7E,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,wQAAwQ,EACxQ;QACE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1C,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aACrC,QAAQ,EAAE;aACV,QAAQ,CACP,mKAAmK,CACpK;KACJ,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7E,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;aACtE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,4 +2,5 @@
2
2
  * Notification Tools — list_notifications, mark_notification_read
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerNotificationTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerNotificationTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,43 +2,51 @@
2
2
  * Notification Tools — list_notifications, mark_notification_read
3
3
  */
4
4
  import { z } from "zod";
5
- import { apiGet, apiPost, formatError } from "../client.js";
5
+ import { BackendError } from "../backend.js";
6
6
  import { formatNotification } from "../utils/formatting.js";
7
- export function registerNotificationTools(server) {
7
+ export function registerNotificationTools(server, backend) {
8
8
  server.tool("list_notifications", "List your notifications. Unread notifications are also included in get_my_briefing — use this tool when you need to see all notifications or manage read state.", {
9
9
  unreadOnly: z.boolean().optional().describe("If true, only return unread notifications"),
10
10
  limit: z.number().optional().describe("Max notifications to return"),
11
11
  }, async (params) => {
12
- const res = await apiGet("/api/v1/notifications", {
13
- unreadOnly: params.unreadOnly ? "true" : undefined,
14
- limit: params.limit?.toString(),
15
- });
16
- if (!res.ok) {
17
- return { content: [{ type: "text", text: formatError(res) }] };
12
+ try {
13
+ const result = await backend.listNotifications({
14
+ unreadOnly: params.unreadOnly,
15
+ limit: params.limit,
16
+ });
17
+ const notifications = result.data ?? [];
18
+ if (notifications.length === 0) {
19
+ return { content: [{ type: "text", text: "No notifications." }] };
20
+ }
21
+ return {
22
+ content: [
23
+ {
24
+ type: "text",
25
+ text: `# Notifications (${notifications.length})\n\n${notifications.map(formatNotification).join("\n")}`,
26
+ },
27
+ ],
28
+ };
18
29
  }
19
- const notifications = res.data.data ?? [];
20
- if (notifications.length === 0) {
21
- return { content: [{ type: "text", text: "No notifications." }] };
30
+ catch (err) {
31
+ return {
32
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
33
+ };
22
34
  }
23
- return {
24
- content: [
25
- {
26
- type: "text",
27
- text: `# Notifications (${notifications.length})\n\n${notifications.map(formatNotification).join("\n")}`,
28
- },
29
- ],
30
- };
31
35
  });
32
36
  server.tool("mark_notification_read", "Mark a notification as read. Use list_notifications to find notification IDs.", {
33
37
  notificationId: z.string().describe("The notification ID to mark as read"),
34
38
  }, async ({ notificationId }) => {
35
- const res = await apiPost(`/api/v1/notifications/${notificationId}/read`);
36
- if (!res.ok) {
37
- return { content: [{ type: "text", text: formatError(res) }] };
39
+ try {
40
+ await backend.markNotificationRead(notificationId);
41
+ return {
42
+ content: [{ type: "text", text: "Notification marked as read." }],
43
+ };
44
+ }
45
+ catch (err) {
46
+ return {
47
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
48
+ };
38
49
  }
39
- return {
40
- content: [{ type: "text", text: "Notification marked as read." }],
41
- };
42
50
  });
43
51
  }
44
52
  //# sourceMappingURL=notifications.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iKAAiK,EACjK;QACE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACxF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACrE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAsC,uBAAuB,EAAE;YACrF,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAClD,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oBAAoB,aAAa,CAAC,MAAM,QAAQ,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACzG;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+EAA+E,EAC/E;QACE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC3E,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,yBAAyB,cAAc,OAAO,CAC/C,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,OAAuB;IAClF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iKAAiK,EACjK;QACE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACxF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACrE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;gBAC7C,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACxC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;YAC7E,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,oBAAoB,aAAa,CAAC,MAAM,QAAQ,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACzG;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+EAA+E,EAC/E;QACE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC3E,EACD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;aAC3E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,4 +2,5 @@
2
2
  * Organization Tool — get_org_overview
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerOrgTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerOrgTools(server: McpServer, backend: BackendAdapter): void;
package/dist/tools/org.js CHANGED
@@ -1,24 +1,27 @@
1
1
  /**
2
2
  * Organization Tool — get_org_overview
3
3
  */
4
- import { apiGet, formatError } from "../client.js";
4
+ import { BackendError } from "../backend.js";
5
5
  import { formatUser } from "../utils/formatting.js";
6
- export function registerOrgTools(server) {
6
+ export function registerOrgTools(server, backend) {
7
7
  server.tool("get_org_overview", "Get organization overview including name, members, and project areas. Use this to find area IDs for creating projects, or to understand the team structure.", {}, async () => {
8
- const res = await apiGet("/api/v1/org");
9
- if (!res.ok) {
10
- return { content: [{ type: "text", text: formatError(res) }] };
8
+ try {
9
+ const org = await backend.getOrg();
10
+ const sections = [];
11
+ sections.push(`# Organization: ${org.name}`);
12
+ if (org.members?.length > 0) {
13
+ sections.push(`## Members (${org.members.length})\n${org.members.map(formatUser).join("\n")}`);
14
+ }
15
+ if (org.areas?.length > 0) {
16
+ sections.push(`## Project Areas\n${org.areas.map((a) => `- ${a.name} (id: ${a.id})`).join("\n")}`);
17
+ }
18
+ return { content: [{ type: "text", text: sections.join("\n\n") }] };
11
19
  }
12
- const org = res.data;
13
- const sections = [];
14
- sections.push(`# Organization: ${org.name}`);
15
- if (org.members?.length > 0) {
16
- sections.push(`## Members (${org.members.length})\n${org.members.map(formatUser).join("\n")}`);
20
+ catch (err) {
21
+ return {
22
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
23
+ };
17
24
  }
18
- if (org.areas?.length > 0) {
19
- sections.push(`## Project Areas\n${org.areas.map((a) => `- ${a.name} (id: ${a.id})`).join("\n")}`);
20
- }
21
- return { content: [{ type: "text", text: sections.join("\n\n") }] };
22
25
  });
23
26
  }
24
27
  //# sourceMappingURL=org.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/tools/org.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6JAA6J,EAC7J,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAA0B,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,IAIf,CAAC;QAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7C,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,OAAO,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CACX,qBAAqB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/tools/org.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAuB;IACzE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6JAA6J,EAC7J,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAI/B,CAAC;YAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAE7C,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,OAAO,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;YAED,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CACX,qBAAqB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -3,4 +3,5 @@
3
3
  * revoke_project_access, share_resource, unshare_resource
4
4
  */
5
5
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
- export declare function registerPortalTools(server: McpServer): void;
6
+ import type { BackendAdapter } from "../backend.js";
7
+ export declare function registerPortalTools(server: McpServer, backend: BackendAdapter): void;