@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
@@ -1,37 +1,43 @@
1
1
  /**
2
- * Action Item Tools — list_action_items, create_action_item, update_action_item
2
+ * Action Item Tools — list_action_items, create_action_item, update_action_item, link_action_item, unlink_action_item
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 { formatActionItem, formatConfirmation } from "../utils/formatting.js";
7
- export function registerActionItemTools(server) {
8
- server.tool("list_action_items", "List action items (discrete to-dos assigned to people). Use this for follow-ups and commitments — these are separate from tasks. Filter by assignee, status, or overdue.", {
7
+ export function registerActionItemTools(server, backend) {
8
+ server.tool("list_action_items", "List action items (discrete to-dos assigned to people). Use this for follow-ups and commitments — these are separate from tasks. Filter by assignee, status, overdue, or linked task.", {
9
9
  assigneeId: z.string().optional().describe("Filter by assignee user ID"),
10
10
  status: z.string().optional().describe("Filter by status (pending, completed, cancelled)"),
11
11
  overdue: z.boolean().optional().describe("Only return overdue action items"),
12
+ taskId: z.string().optional().describe("Filter by linked task ID — returns only action items linked to this task"),
12
13
  limit: z.number().optional().describe("Max results (default 50)"),
13
14
  }, async (params) => {
14
- const res = await apiGet("/api/v1/action-items", {
15
- assigneeId: params.assigneeId,
16
- status: params.status,
17
- overdue: params.overdue ? "true" : undefined,
18
- limit: params.limit?.toString(),
19
- });
20
- if (!res.ok) {
21
- return { content: [{ type: "text", text: formatError(res) }] };
15
+ try {
16
+ const result = await backend.listActionItems({
17
+ assigneeId: params.assigneeId,
18
+ status: params.status,
19
+ overdue: params.overdue,
20
+ taskId: params.taskId,
21
+ limit: params.limit,
22
+ });
23
+ const items = result.data ?? [];
24
+ if (items.length === 0) {
25
+ return { content: [{ type: "text", text: "No action items found." }] };
26
+ }
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: `# Action Items (${items.length})\n\n${items.map(formatActionItem).join("\n")}`,
32
+ },
33
+ ],
34
+ };
22
35
  }
23
- const items = res.data.data ?? [];
24
- if (items.length === 0) {
25
- return { content: [{ type: "text", text: "No action items found." }] };
36
+ catch (err) {
37
+ return {
38
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
39
+ };
26
40
  }
27
- return {
28
- content: [
29
- {
30
- type: "text",
31
- text: `# Action Items (${items.length})\n\n${items.map(formatActionItem).join("\n")}`,
32
- },
33
- ],
34
- };
35
41
  });
36
42
  server.tool("create_action_item", "Create a new action item assigned to a user. Action items are discrete follow-ups or commitments — use tasks for larger pieces of work.", {
37
43
  title: z.string().describe("Action item title"),
@@ -39,40 +45,129 @@ export function registerActionItemTools(server) {
39
45
  priority: z.string().optional().describe("Priority level"),
40
46
  dueDate: z.number().optional().describe("Due date as Unix timestamp in milliseconds"),
41
47
  projectId: z.string().optional().describe("Associated project ID"),
48
+ taskId: z.string().optional().describe("Task ID to link this action item to"),
42
49
  }, async (params) => {
43
- const res = await apiPost("/api/v1/action-items", {
44
- title: params.title,
45
- targetUserId: params.targetUserId,
46
- priority: params.priority,
47
- dueDate: params.dueDate,
48
- projectId: params.projectId,
49
- });
50
- if (!res.ok) {
51
- return { content: [{ type: "text", text: formatError(res) }] };
50
+ try {
51
+ const data = await backend.createActionItem({
52
+ title: params.title,
53
+ targetUserId: params.targetUserId,
54
+ priority: params.priority,
55
+ dueDate: params.dueDate,
56
+ projectId: params.projectId,
57
+ taskId: params.taskId,
58
+ });
59
+ return {
60
+ content: [{ type: "text", text: formatConfirmation("Action item created", data) }],
61
+ };
62
+ }
63
+ catch (err) {
64
+ return {
65
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
66
+ };
52
67
  }
53
- return {
54
- content: [{ type: "text", text: formatConfirmation("Action item created", res.data) }],
55
- };
56
68
  });
57
- server.tool("update_action_item", "Update an existing action item's fields. Use list_action_items first to find the right ID.", {
69
+ server.tool("update_action_item", "Update an existing action item's fields. You can also move it to a different task by passing taskId — this automatically removes the old task link and creates a new one.", {
58
70
  actionItemId: z.string().describe("The action item ID to update"),
59
71
  title: z.string().optional().describe("New title"),
60
72
  status: z.string().optional().describe("New status (pending, completed, cancelled)"),
61
73
  priority: z.string().optional().describe("New priority"),
62
74
  dueDate: z.number().optional().describe("New due date as Unix timestamp in milliseconds"),
63
- }, async ({ actionItemId, ...updates }) => {
75
+ targetUserId: z.string().optional().describe("Reassign to a different user by their user ID"),
76
+ taskId: z.string().optional().describe("Move this action item to a different task (removes old task link, creates new one)"),
77
+ }, async ({ actionItemId, taskId, ...updates }) => {
78
+ const messages = [];
64
79
  const body = {};
65
80
  for (const [key, value] of Object.entries(updates)) {
66
81
  if (value !== undefined)
67
82
  body[key] = value;
68
83
  }
69
- const res = await apiPatch(`/api/v1/action-items/${actionItemId}`, body);
70
- if (!res.ok) {
71
- return { content: [{ type: "text", text: formatError(res) }] };
84
+ if (Object.keys(body).length > 0) {
85
+ try {
86
+ const data = await backend.updateActionItem(actionItemId, body);
87
+ messages.push(formatConfirmation("Action item updated", data));
88
+ }
89
+ catch (err) {
90
+ return {
91
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
92
+ };
93
+ }
94
+ }
95
+ if (taskId) {
96
+ // Find existing task links
97
+ try {
98
+ const linksResult = await backend.getActionItemLinks(actionItemId);
99
+ if (linksResult.data) {
100
+ for (const link of linksResult.data) {
101
+ if (link.entityType === "task") {
102
+ try {
103
+ await backend.deleteActionItemLink(actionItemId, link.linkId);
104
+ }
105
+ catch {
106
+ // Best effort — continue
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ catch {
113
+ // Best effort — continue to link
114
+ }
115
+ try {
116
+ await backend.linkActionItem(actionItemId, {
117
+ entityType: "task",
118
+ entityId: taskId,
119
+ linkType: "related",
120
+ });
121
+ messages.push(`Moved to task ${taskId}.`);
122
+ }
123
+ catch (err) {
124
+ messages.push(`Failed to link to task ${taskId}: ${err instanceof BackendError ? err.message : "Unexpected error"}`);
125
+ }
126
+ }
127
+ if (messages.length === 0) {
128
+ messages.push("No changes specified.");
72
129
  }
73
130
  return {
74
- content: [{ type: "text", text: formatConfirmation("Action item updated", res.data) }],
131
+ content: [{ type: "text", text: messages.join("\n") }],
75
132
  };
76
133
  });
134
+ server.tool("link_action_item", "Create a link between an action item and another entity (task, project, resource, or idea). Use this to associate an existing action item with related entities after creation.", {
135
+ actionItemId: z.string().describe("The action item ID to link from"),
136
+ entityType: z.string().describe("Target entity type: 'task', 'project', 'resource', or 'idea'"),
137
+ entityId: z.string().describe("Target entity ID"),
138
+ linkType: z.string().optional().describe("Link type (defaults to 'related')"),
139
+ }, async ({ actionItemId, entityType, entityId, linkType }) => {
140
+ try {
141
+ const body = { entityType, entityId };
142
+ if (linkType)
143
+ body.linkType = linkType;
144
+ const data = await backend.linkActionItem(actionItemId, body);
145
+ const text = data.alreadyExists
146
+ ? `Link already exists (id: ${data.id}).`
147
+ : `Action item link created: ${actionItemId} → ${entityType}:${entityId} (id: ${data.id}).`;
148
+ return { content: [{ type: "text", text }] };
149
+ }
150
+ catch (err) {
151
+ return {
152
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
153
+ };
154
+ }
155
+ });
156
+ server.tool("unlink_action_item", "Remove a link from an action item. Use list_action_items or the action item's links to find the link ID first.", {
157
+ actionItemId: z.string().describe("The action item ID that owns the link"),
158
+ linkId: z.string().describe("The link ID to remove"),
159
+ }, async ({ actionItemId, linkId }) => {
160
+ try {
161
+ await backend.deleteActionItemLink(actionItemId, linkId);
162
+ return {
163
+ content: [{ type: "text", text: `Action item link removed (id: ${linkId}).` }],
164
+ };
165
+ }
166
+ catch (err) {
167
+ return {
168
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
169
+ };
170
+ }
171
+ });
77
172
  }
78
173
  //# sourceMappingURL=action-items.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-items.js","sourceRoot":"","sources":["../../src/tools/action-items.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action-items.js","sourceRoot":"","sources":["../../src/tools/action-items.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,OAAuB;IAChF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,uLAAuL,EACvL;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACxE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QAC1F,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0EAA0E,CAAC;QAClH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;gBAC3C,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAClF,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACtF;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,oBAAoB,EACpB,yIAAyI,EACzI;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC/C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACnF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACrF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC9E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC;gBAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC;aAC5F,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,oBAAoB,EACpB,2KAA2K,EAC3K;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACpF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACzF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC7F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;KAC7H,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAChE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,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;iBAC3G,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBACnE,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACrB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;wBACpC,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;4BAC/B,IAAI,CAAC;gCACH,MAAM,OAAO,CAAC,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAgB,CAAC,CAAC;4BAC1E,CAAC;4BAAC,MAAM,CAAC;gCACP,yBAAyB;4BAC3B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;oBACzC,UAAU,EAAE,MAAM;oBAClB,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,iBAAiB,MAAM,GAAG,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,0BAA0B,MAAM,KAAK,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACvH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAChE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,iLAAiL,EACjL;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QAC/F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/D,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;gBAC7B,CAAC,CAAC,4BAA4B,IAAI,CAAC,EAAE,IAAI;gBACzC,CAAC,CAAC,6BAA6B,YAAY,MAAM,UAAU,IAAI,QAAQ,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC;YAE9F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,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,oBAAoB,EACpB,gHAAgH,EAChH;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACrD,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,MAAM,IAAI,EAAE,CAAC;aACxF,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
  * Area Tools — list_areas, create_area, update_area, archive_area
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerAreaTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerAreaTools(server: McpServer, backend: BackendAdapter): void;
@@ -2,25 +2,29 @@
2
2
  * Area Tools — list_areas, create_area, update_area, archive_area
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 { formatArea, formatConfirmation } from "../utils/formatting.js";
7
- export function registerAreaTools(server) {
7
+ export function registerAreaTools(server, backend) {
8
8
  server.tool("list_areas", "List project areas for the organization. Areas group related projects together.", {
9
9
  includeInactive: z.boolean().optional().describe("Include archived/inactive areas"),
10
10
  }, async ({ includeInactive }) => {
11
- const res = await apiGet("/api/v1/areas", { includeInactive: includeInactive ? "true" : undefined });
12
- if (!res.ok) {
13
- return { content: [{ type: "text", text: formatError(res) }] };
11
+ try {
12
+ const result = await backend.listAreas({ includeInactive });
13
+ const areas = result.data ?? [];
14
+ if (areas.length === 0) {
15
+ return { content: [{ type: "text", text: "No areas found." }] };
16
+ }
17
+ return {
18
+ content: [
19
+ { type: "text", text: `# Areas (${areas.length})\n\n${areas.map(formatArea).join("\n")}` },
20
+ ],
21
+ };
14
22
  }
15
- const areas = res.data.data ?? [];
16
- if (areas.length === 0) {
17
- return { content: [{ type: "text", text: "No areas found." }] };
23
+ catch (err) {
24
+ return {
25
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
26
+ };
18
27
  }
19
- return {
20
- content: [
21
- { type: "text", text: `# Areas (${areas.length})\n\n${areas.map(formatArea).join("\n")}` },
22
- ],
23
- };
24
28
  });
25
29
  server.tool("create_area", "Create a new project area. Admin only. Areas are used to group related projects.", {
26
30
  name: z.string().describe("Area name"),
@@ -30,13 +34,17 @@ export function registerAreaTools(server) {
30
34
  parentAreaId: z.string().optional().describe("Parent area ID for hierarchy"),
31
35
  isDefault: z.boolean().optional().describe("Set as default area for new projects"),
32
36
  }, async (params) => {
33
- const res = await apiPost("/api/v1/areas", params);
34
- if (!res.ok) {
35
- return { content: [{ type: "text", text: formatError(res) }] };
37
+ try {
38
+ const data = await backend.createArea(params);
39
+ return {
40
+ content: [{ type: "text", text: formatConfirmation("Area created", data) }],
41
+ };
42
+ }
43
+ catch (err) {
44
+ return {
45
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
46
+ };
36
47
  }
37
- return {
38
- content: [{ type: "text", text: formatConfirmation("Area created", res.data) }],
39
- };
40
48
  });
41
49
  server.tool("update_area", "Update an area's properties. Admin only.", {
42
50
  areaId: z.string().describe("The area ID to update"),
@@ -46,29 +54,37 @@ export function registerAreaTools(server) {
46
54
  ownerId: z.string().optional().describe("New owner user ID"),
47
55
  isDefault: z.boolean().optional().describe("Set as default area"),
48
56
  }, async ({ areaId, ...updates }) => {
49
- const body = {};
50
- for (const [key, value] of Object.entries(updates)) {
51
- if (value !== undefined)
52
- body[key] = value;
57
+ try {
58
+ const body = {};
59
+ for (const [key, value] of Object.entries(updates)) {
60
+ if (value !== undefined)
61
+ body[key] = value;
62
+ }
63
+ await backend.updateArea(areaId, body);
64
+ return {
65
+ content: [{ type: "text", text: `Area updated (id: ${areaId}).` }],
66
+ };
53
67
  }
54
- const res = await apiPatch(`/api/v1/areas/${areaId}`, body);
55
- if (!res.ok) {
56
- return { content: [{ type: "text", text: formatError(res) }] };
68
+ catch (err) {
69
+ return {
70
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
71
+ };
57
72
  }
58
- return {
59
- content: [{ type: "text", text: `Area updated (id: ${areaId}).` }],
60
- };
61
73
  });
62
74
  server.tool("archive_area", "Archive an area. Admin only. Cannot archive areas with active projects.", {
63
75
  areaId: z.string().describe("The area ID to archive"),
64
76
  }, async ({ areaId }) => {
65
- const res = await apiPost(`/api/v1/areas/${areaId}/archive`, {});
66
- if (!res.ok) {
67
- return { content: [{ type: "text", text: formatError(res) }] };
77
+ try {
78
+ await backend.archiveArea(areaId);
79
+ return {
80
+ content: [{ type: "text", text: `Area archived (id: ${areaId}).` }],
81
+ };
82
+ }
83
+ catch (err) {
84
+ return {
85
+ content: [{ type: "text", text: err instanceof BackendError ? err.message : "Unexpected error" }],
86
+ };
68
87
  }
69
- return {
70
- content: [{ type: "text", text: `Area archived (id: ${areaId}).` }],
71
- };
72
88
  });
73
89
  }
74
90
  //# sourceMappingURL=areas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"areas.js","sourceRoot":"","sources":["../../src/tools/areas.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAExE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,iFAAiF,EACjF;QACE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,eAAe,EACf,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAC1D,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,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;aACpG;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,kFAAkF,EAClF;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC5E,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACnF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAA0B,eAAe,EAAE,MAAiC,CAAC,CAAC;QAEvG,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,kBAAkB,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SACzF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0CAA0C,EAC1C;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACtD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC5D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAClE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAA0B,iBAAiB,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAErF,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,qBAAqB,MAAM,IAAI,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,yEAAyE,EACzE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACtD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,OAAO,CAA0B,iBAAiB,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAE1F,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,sBAAsB,MAAM,IAAI,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"areas.js","sourceRoot":"","sources":["../../src/tools/areas.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Briefing Tool — get_my_briefing
3
3
  *
4
- * The key composite tool. Calls multiple endpoints in parallel and
4
+ * The key composite tool. Calls multiple backend methods in parallel and
5
5
  * assembles a complete context dump in one tool call.
6
6
  */
7
7
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
- export declare function registerBriefingTools(server: McpServer): void;
8
+ import type { BackendAdapter } from "../backend.js";
9
+ export declare function registerBriefingTools(server: McpServer, backend: BackendAdapter): void;
@@ -1,75 +1,55 @@
1
1
  /**
2
2
  * Briefing Tool — get_my_briefing
3
3
  *
4
- * The key composite tool. Calls multiple endpoints in parallel and
4
+ * The key composite tool. Calls multiple backend methods in parallel and
5
5
  * assembles a complete context dump in one tool call.
6
6
  */
7
- import { apiGet, formatError } from "../client.js";
7
+ import { BackendError } from "../backend.js";
8
8
  import { formatTask, formatActionItem, formatNotification, formatUser, formatRelativeDate, } from "../utils/formatting.js";
9
- export function registerBriefingTools(server) {
9
+ /** Safely call a backend method, returning null on failure. */
10
+ async function safe(fn) {
11
+ try {
12
+ return await fn();
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ export function registerBriefingTools(server, backend) {
10
19
  server.tool("get_my_briefing", "Get a complete briefing of your current work in Blay. Returns your identity, urgent/overdue items, in-progress tasks (with stale flags), backlog, recently completed work, blocked items, pending action items, unread notifications, and team summary. This is the best tool to start with when you need context about the user's work.", {}, async () => {
11
- // First get user identity
12
- const meRes = await apiGet("/api/v1/me");
13
- if (!meRes.ok) {
20
+ // First get user identity — hard dependency
21
+ let me;
22
+ try {
23
+ me = await backend.getMe();
24
+ }
25
+ catch (err) {
14
26
  return {
15
27
  content: [
16
28
  {
17
29
  type: "text",
18
- text: `Error fetching user identity: ${formatError(meRes)}`,
30
+ text: `Error fetching user identity: ${err instanceof BackendError ? err.message : "Unexpected error"}`,
19
31
  },
20
32
  ],
21
33
  };
22
34
  }
23
- const me = meRes.data;
24
35
  const userId = me.userId;
25
- // Fetch all data in parallel
26
- const [orgRes, inProgressRes, backlogRes, overdueRes, blockedRes, staleRes, completedRes, actionItemsRes, notificationsRes] = await Promise.all([
27
- apiGet("/api/v1/org"),
28
- apiGet("/api/v1/tasks", {
29
- assigneeId: userId,
30
- status: "in_progress",
31
- limit: "20",
32
- }),
33
- apiGet("/api/v1/tasks", {
34
- assigneeId: userId,
35
- status: "not_started",
36
- limit: "20",
37
- }),
38
- apiGet("/api/v1/tasks", {
39
- assigneeId: userId,
40
- overdue: "true",
41
- limit: "20",
42
- }),
43
- apiGet("/api/v1/tasks", {
44
- assigneeId: userId,
45
- blocked: "true",
46
- limit: "20",
47
- }),
48
- apiGet("/api/v1/tasks", {
49
- assigneeId: userId,
50
- stale: "true",
51
- limit: "20",
52
- }),
53
- apiGet("/api/v1/tasks", {
54
- assigneeId: userId,
55
- status: "completed",
56
- limit: "5",
57
- }),
58
- apiGet("/api/v1/action-items", {
59
- assigneeId: userId,
60
- status: "pending",
61
- limit: "20",
62
- }),
63
- apiGet("/api/v1/notifications", {
64
- unreadOnly: "true",
65
- limit: "20",
66
- }),
36
+ // Fetch all data in parallel — each can fail independently
37
+ const [orgResult, inProgressResult, backlogResult, overdueResult, blockedResult, staleResult, completedResult, actionItemsResult, notificationsResult] = await Promise.all([
38
+ safe(() => backend.getOrg()),
39
+ safe(() => backend.listTasks({ assigneeId: userId, status: "in_progress", limit: 20 })),
40
+ safe(() => backend.listTasks({ assigneeId: userId, status: "not_started", limit: 20 })),
41
+ safe(() => backend.listTasks({ assigneeId: userId, overdue: true, limit: 20 })),
42
+ safe(() => backend.listTasks({ assigneeId: userId, blocked: true, limit: 20 })),
43
+ safe(() => backend.listTasks({ assigneeId: userId, stale: true, limit: 20 })),
44
+ safe(() => backend.listTasks({ assigneeId: userId, status: "completed", limit: 5 })),
45
+ safe(() => backend.listActionItems({ assigneeId: userId, status: "pending", limit: 20 })),
46
+ safe(() => backend.listNotifications({ unreadOnly: true, limit: 20 })),
67
47
  ]);
68
48
  const sections = [];
69
49
  // Identity
70
50
  sections.push(`## You\n**${me.name}** (${me.email}) — ${me.role ?? "member"} at **${me.orgName ?? "your org"}**\nYour user ID: ${me.userId}`);
71
51
  // Overdue / Urgent
72
- const overdue = overdueRes.ok ? overdueRes.data.data : [];
52
+ const overdue = overdueResult?.data ?? [];
73
53
  if (overdue.length > 0) {
74
54
  sections.push(`## Overdue Tasks (${overdue.length})\n${overdue.map(formatTask).join("\n")}`);
75
55
  }
@@ -77,13 +57,13 @@ export function registerBriefingTools(server) {
77
57
  sections.push("## Overdue Tasks\nNone — you're all caught up!");
78
58
  }
79
59
  // Blocked
80
- const blocked = blockedRes.ok ? blockedRes.data.data : [];
60
+ const blocked = blockedResult?.data ?? [];
81
61
  if (blocked.length > 0) {
82
62
  sections.push(`## Blocked Tasks (${blocked.length})\n${blocked.map(formatTask).join("\n")}`);
83
63
  }
84
64
  // In Progress — flag stale items inline
85
- const inProgress = inProgressRes.ok ? inProgressRes.data.data : [];
86
- const staleIds = new Set((staleRes.ok ? staleRes.data.data : []).map((t) => t.id));
65
+ const inProgress = inProgressResult?.data ?? [];
66
+ const staleIds = new Set((staleResult?.data ?? []).map((t) => t.id));
87
67
  if (inProgress.length > 0) {
88
68
  const formatted = inProgress.map((t) => {
89
69
  const line = formatTask(t);
@@ -105,12 +85,12 @@ export function registerBriefingTools(server) {
105
85
  sections.push("## In Progress\nNo tasks currently in progress.");
106
86
  }
107
87
  // Backlog
108
- const backlog = backlogRes.ok ? backlogRes.data.data : [];
88
+ const backlog = backlogResult?.data ?? [];
109
89
  if (backlog.length > 0) {
110
90
  sections.push(`## Backlog (${backlog.length})\n${backlog.map(formatTask).join("\n")}`);
111
91
  }
112
92
  // Recently Completed
113
- const completed = completedRes.ok ? completedRes.data.data : [];
93
+ const completed = completedResult?.data ?? [];
114
94
  if (completed.length > 0) {
115
95
  const formatted = completed.map((t) => {
116
96
  const line = formatTask(t);
@@ -120,18 +100,18 @@ export function registerBriefingTools(server) {
120
100
  sections.push(`## Recently Completed (${completed.length})\n${formatted.join("\n")}`);
121
101
  }
122
102
  // Action Items
123
- const actionItems = actionItemsRes.ok ? actionItemsRes.data.data : [];
103
+ const actionItems = actionItemsResult?.data ?? [];
124
104
  if (actionItems.length > 0) {
125
105
  sections.push(`## Pending Action Items (${actionItems.length})\n${actionItems.map(formatActionItem).join("\n")}`);
126
106
  }
127
107
  // Notifications
128
- const notifications = notificationsRes.ok ? notificationsRes.data.data : [];
108
+ const notifications = notificationsResult?.data ?? [];
129
109
  if (notifications.length > 0) {
130
110
  sections.push(`## Unread Notifications (${notifications.length})\n${notifications.map(formatNotification).join("\n")}`);
131
111
  }
132
112
  // Team summary
133
- if (orgRes.ok) {
134
- const org = orgRes.data;
113
+ if (orgResult) {
114
+ const org = orgResult;
135
115
  const members = org.members ?? [];
136
116
  if (members.length > 0) {
137
117
  sections.push(`## Team (${members.length} members)\n${members.map(formatUser).join("\n")}`);
@@ -1 +1 @@
1
- {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/tools/briefing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/tools/briefing.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * Collaborator Tools — list_collaborators, add_collaborator, update_collaborator_role
3
3
  */
4
4
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
- export declare function registerCollaboratorTools(server: McpServer): void;
5
+ import type { BackendAdapter } from "../backend.js";
6
+ export declare function registerCollaboratorTools(server: McpServer, backend: BackendAdapter): void;