@brxce/mcp-server 1.0.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 (106) hide show
  1. package/README.md +220 -0
  2. package/dist/config/environment.d.ts +8 -0
  3. package/dist/config/environment.d.ts.map +1 -0
  4. package/dist/config/environment.js +16 -0
  5. package/dist/config/environment.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +167 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/worknode-prompts.d.ts +7 -0
  11. package/dist/prompts/worknode-prompts.d.ts.map +1 -0
  12. package/dist/prompts/worknode-prompts.js +369 -0
  13. package/dist/prompts/worknode-prompts.js.map +1 -0
  14. package/dist/prompts/workspace-context-prompt.d.ts +4 -0
  15. package/dist/prompts/workspace-context-prompt.d.ts.map +1 -0
  16. package/dist/prompts/workspace-context-prompt.js +101 -0
  17. package/dist/prompts/workspace-context-prompt.js.map +1 -0
  18. package/dist/resources/user-resource.d.ts +4 -0
  19. package/dist/resources/user-resource.d.ts.map +1 -0
  20. package/dist/resources/user-resource.js +40 -0
  21. package/dist/resources/user-resource.js.map +1 -0
  22. package/dist/resources/workspace-members-resource.d.ts +4 -0
  23. package/dist/resources/workspace-members-resource.d.ts.map +1 -0
  24. package/dist/resources/workspace-members-resource.js +39 -0
  25. package/dist/resources/workspace-members-resource.js.map +1 -0
  26. package/dist/resources/workspace-resource.d.ts +4 -0
  27. package/dist/resources/workspace-resource.d.ts.map +1 -0
  28. package/dist/resources/workspace-resource.js +27 -0
  29. package/dist/resources/workspace-resource.js.map +1 -0
  30. package/dist/services/api-client.d.ts +17 -0
  31. package/dist/services/api-client.d.ts.map +1 -0
  32. package/dist/services/api-client.js +118 -0
  33. package/dist/services/api-client.js.map +1 -0
  34. package/dist/tools/meeting-agenda-tool.d.ts +7 -0
  35. package/dist/tools/meeting-agenda-tool.d.ts.map +1 -0
  36. package/dist/tools/meeting-agenda-tool.js +452 -0
  37. package/dist/tools/meeting-agenda-tool.js.map +1 -0
  38. package/dist/tools/meeting-create-tool.d.ts +8 -0
  39. package/dist/tools/meeting-create-tool.d.ts.map +1 -0
  40. package/dist/tools/meeting-create-tool.js +309 -0
  41. package/dist/tools/meeting-create-tool.js.map +1 -0
  42. package/dist/tools/meeting-decisions-tool.d.ts +7 -0
  43. package/dist/tools/meeting-decisions-tool.d.ts.map +1 -0
  44. package/dist/tools/meeting-decisions-tool.js +431 -0
  45. package/dist/tools/meeting-decisions-tool.js.map +1 -0
  46. package/dist/tools/meeting-list-tool.d.ts +7 -0
  47. package/dist/tools/meeting-list-tool.d.ts.map +1 -0
  48. package/dist/tools/meeting-list-tool.js +305 -0
  49. package/dist/tools/meeting-list-tool.js.map +1 -0
  50. package/dist/tools/meeting-notes-tool.d.ts +7 -0
  51. package/dist/tools/meeting-notes-tool.d.ts.map +1 -0
  52. package/dist/tools/meeting-notes-tool.js +318 -0
  53. package/dist/tools/meeting-notes-tool.js.map +1 -0
  54. package/dist/tools/meeting-update-tool.d.ts +7 -0
  55. package/dist/tools/meeting-update-tool.d.ts.map +1 -0
  56. package/dist/tools/meeting-update-tool.js +310 -0
  57. package/dist/tools/meeting-update-tool.js.map +1 -0
  58. package/dist/tools/tag-category-tool.d.ts +4 -0
  59. package/dist/tools/tag-category-tool.d.ts.map +1 -0
  60. package/dist/tools/tag-category-tool.js +293 -0
  61. package/dist/tools/tag-category-tool.js.map +1 -0
  62. package/dist/tools/tag-search-tool.d.ts +4 -0
  63. package/dist/tools/tag-search-tool.d.ts.map +1 -0
  64. package/dist/tools/tag-search-tool.js +358 -0
  65. package/dist/tools/tag-search-tool.js.map +1 -0
  66. package/dist/tools/tag-tool.d.ts +4 -0
  67. package/dist/tools/tag-tool.d.ts.map +1 -0
  68. package/dist/tools/tag-tool.js +450 -0
  69. package/dist/tools/tag-tool.js.map +1 -0
  70. package/dist/tools/worknode-archive-tool.d.ts +7 -0
  71. package/dist/tools/worknode-archive-tool.d.ts.map +1 -0
  72. package/dist/tools/worknode-archive-tool.js +163 -0
  73. package/dist/tools/worknode-archive-tool.js.map +1 -0
  74. package/dist/tools/worknode-create-tool.d.ts +4 -0
  75. package/dist/tools/worknode-create-tool.d.ts.map +1 -0
  76. package/dist/tools/worknode-create-tool.js +382 -0
  77. package/dist/tools/worknode-create-tool.js.map +1 -0
  78. package/dist/tools/worknode-my-work-tool.d.ts +8 -0
  79. package/dist/tools/worknode-my-work-tool.d.ts.map +1 -0
  80. package/dist/tools/worknode-my-work-tool.js +302 -0
  81. package/dist/tools/worknode-my-work-tool.js.map +1 -0
  82. package/dist/tools/worknode-search-tool.d.ts +4 -0
  83. package/dist/tools/worknode-search-tool.d.ts.map +1 -0
  84. package/dist/tools/worknode-search-tool.js +289 -0
  85. package/dist/tools/worknode-search-tool.js.map +1 -0
  86. package/dist/tools/worknode-subtree-tool.d.ts +4 -0
  87. package/dist/tools/worknode-subtree-tool.d.ts.map +1 -0
  88. package/dist/tools/worknode-subtree-tool.js +175 -0
  89. package/dist/tools/worknode-subtree-tool.js.map +1 -0
  90. package/dist/tools/worknode-tag-tool.d.ts +4 -0
  91. package/dist/tools/worknode-tag-tool.d.ts.map +1 -0
  92. package/dist/tools/worknode-tag-tool.js +353 -0
  93. package/dist/tools/worknode-tag-tool.js.map +1 -0
  94. package/dist/tools/worknode-update-tool.d.ts +4 -0
  95. package/dist/tools/worknode-update-tool.d.ts.map +1 -0
  96. package/dist/tools/worknode-update-tool.js +409 -0
  97. package/dist/tools/worknode-update-tool.js.map +1 -0
  98. package/dist/tools/workspace-inbox-tool.d.ts +8 -0
  99. package/dist/tools/workspace-inbox-tool.d.ts.map +1 -0
  100. package/dist/tools/workspace-inbox-tool.js +210 -0
  101. package/dist/tools/workspace-inbox-tool.js.map +1 -0
  102. package/dist/tools/workspace-tree-tool.d.ts +4 -0
  103. package/dist/tools/workspace-tree-tool.d.ts.map +1 -0
  104. package/dist/tools/workspace-tree-tool.js +419 -0
  105. package/dist/tools/workspace-tree-tool.js.map +1 -0
  106. package/package.json +61 -0
@@ -0,0 +1,305 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Register Meeting List and Detail Tools
4
+ */
5
+ export function registerMeetingListTools(server, apiClient) {
6
+ /**
7
+ * List meetings tool
8
+ */
9
+ server.registerTool('brxce_list_meetings', {
10
+ description: `List meetings in a workspace with optional filters.
11
+
12
+ ⚠️ **CRITICAL: Workspace Verification Required**
13
+ Before calling this tool, you MUST:
14
+ 1. Read the \`user://me\` resource to get available workspaces
15
+ 2. Identify the correct workspaceId from the resource data
16
+ 3. If user doesn't specify workspace, use their default workspace
17
+ 4. NEVER assume or guess workspaceId values
18
+
19
+ **Example Workflow:**
20
+ \`\`\`
21
+ User: "지난 회의들 보여줘"
22
+ LLM:
23
+ 1. Reads user://me resource
24
+ 2. Finds default workspace: 138
25
+ 3. Calls brxce_list_meetings with workspaceId: 138
26
+ \`\`\`
27
+
28
+ **When to use this tool:**
29
+ - "지난 회의들 보여줘" → List recent meetings
30
+ - "이번 주 예정된 미팅 목록" → Filter by date range
31
+ - "완료된 회의들 보여줘" → Filter by status=completed
32
+ - "예정된 회의 뭐가 있어?" → Filter by status=scheduled
33
+
34
+ **Filters:**
35
+ - workspaceId (required): Workspace to search in
36
+ - status: scheduled, in_progress, completed, cancelled
37
+ - from: Start date (ISO 8601)
38
+ - to: End date (ISO 8601)
39
+ - limit: Max results (default: 20, max: 50)
40
+
41
+ **Output:**
42
+ Returns summary list with:
43
+ - Meeting ID, title, scheduled time, duration
44
+ - Status, participant count, item count
45
+ - Quick indicators: hasReview, hasAgenda
46
+
47
+ **Usage Flow:**
48
+ 1. Call this tool to get meeting list
49
+ 2. User picks a meeting from the list
50
+ 3. Call brxce_get_meeting with the ID for full details
51
+
52
+ **Best Practices:**
53
+ - Use date filters for "this week", "last month" queries
54
+ - Use status filter for "upcoming" or "past" meetings
55
+ - Keep limit reasonable (10-20) for better UX
56
+ - Present results in a readable table format
57
+
58
+ ⏰ **TIMEZONE HANDLING:**
59
+ ALL date/time fields in the response are in UTC (ISO 8601 format):
60
+ - scheduledAt, completedAt, createdAt, updatedAt
61
+
62
+ When presenting results to the user, you MUST convert UTC timestamps to the user's local timezone:
63
+ 1. Check the current date/time from the <env> tag in the system prompt
64
+ 2. Identify the user's timezone (e.g., Asia/Seoul = UTC+9)
65
+ 3. Convert ALL displayed timestamps from UTC to local time
66
+ 4. Format dates in a user-friendly way (e.g., "오후 5:16" not "08:16 UTC")
67
+
68
+ Example conversion (Korea Time, UTC+9):
69
+ - API returns: "scheduledAt": "2025-10-20T08:00:00.000Z" (UTC)
70
+ - Display to user: "예정: 2025-10-20 오후 5:00" (KST)`,
71
+ inputSchema: {
72
+ workspaceId: z.number().describe('Workspace ID (required)'),
73
+ status: z
74
+ .enum(['scheduled', 'in_progress', 'completed', 'cancelled'])
75
+ .optional()
76
+ .describe('Filter by meeting status'),
77
+ from: z
78
+ .string()
79
+ .optional()
80
+ .describe('Start date (ISO 8601, e.g., "2025-01-01T00:00:00Z")'),
81
+ to: z
82
+ .string()
83
+ .optional()
84
+ .describe('End date (ISO 8601, e.g., "2025-01-31T23:59:59Z")'),
85
+ limit: z
86
+ .number()
87
+ .optional()
88
+ .describe('Max results to return (default: 20, max: 50)'),
89
+ },
90
+ }, async (args) => {
91
+ const { workspaceId, status, from, to, limit = 20 } = args;
92
+ try {
93
+ const params = new URLSearchParams({
94
+ workspaceId: workspaceId.toString(),
95
+ });
96
+ if (status)
97
+ params.append('status', status);
98
+ if (from)
99
+ params.append('from', from);
100
+ if (to)
101
+ params.append('to', to);
102
+ if (limit)
103
+ params.append('limit', Math.min(limit, 50).toString());
104
+ const response = await apiClient.get(`/mcp/meetings?${params.toString()}`);
105
+ if (!response.success) {
106
+ return {
107
+ content: [
108
+ {
109
+ type: 'text',
110
+ text: JSON.stringify({
111
+ error: 'Failed to list meetings',
112
+ message: response.message || 'Unknown error',
113
+ }),
114
+ },
115
+ ],
116
+ isError: true,
117
+ };
118
+ }
119
+ const { meetings, total } = response.data;
120
+ // Format for LLM
121
+ return {
122
+ content: [
123
+ {
124
+ type: 'text',
125
+ text: JSON.stringify({
126
+ summary: {
127
+ total,
128
+ returned: meetings.length,
129
+ hasMore: total > meetings.length,
130
+ },
131
+ meetings: meetings.map(m => ({
132
+ id: m.id,
133
+ title: m.title,
134
+ scheduledAt: new Date(m.scheduledAt).toLocaleString(),
135
+ duration: m.duration ? `${m.duration} min` : 'N/A',
136
+ status: m.status,
137
+ participants: m.participantCount,
138
+ items: m.itemCount,
139
+ hasReview: m.hasReview,
140
+ hasAgenda: m.hasAgenda,
141
+ })),
142
+ hint: 'Use brxce_get_meeting with a meeting ID to see full details',
143
+ }, null, 2),
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ catch (error) {
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: JSON.stringify({
154
+ error: 'Failed to list meetings',
155
+ message: error.message,
156
+ details: error.response?.data || error,
157
+ }),
158
+ },
159
+ ],
160
+ isError: true,
161
+ };
162
+ }
163
+ });
164
+ /**
165
+ * Get meeting detail tool
166
+ */
167
+ server.registerTool('brxce_get_meeting', {
168
+ description: `Get detailed information about a specific meeting.
169
+
170
+ **When to use this tool:**
171
+ - "미팅 ID 24 자세히 보여줘" → Get full meeting details
172
+ - After brxce_list_meetings, user selects a meeting → Get details
173
+ - "지난 주간 회의에서 뭘 논의했어?" → Get meeting + review content
174
+
175
+ **Returns:**
176
+ Complete meeting information including:
177
+ - Basic info: title, description, schedule, status
178
+ - Review section: period and completed WorkNodes
179
+ - Agenda items: titles, descriptions, notes, related WorkNodes
180
+ - Participants: names, roles, attendance status
181
+ - Meeting notes: content, authors, timestamps
182
+ - Decisions: made during the meeting
183
+
184
+ **Data Organization:**
185
+ - review[]: Review items with period and workNodeIds
186
+ - agenda[]: Agenda items with descriptions and notes
187
+ - participants[]: Who attended/was invited
188
+ - notes[]: Meeting notes by participants
189
+ - decisions[]: Decisions made during meeting
190
+
191
+ **Best Practices:**
192
+ - Present review and agenda prominently
193
+ - Highlight incomplete agenda items
194
+ - Show participant attendance status
195
+ - Format notes chronologically
196
+ - Link decisions to action items
197
+
198
+ **Next Steps After Getting Details:**
199
+ - Show related WorkNodes using workNodeIds
200
+ - Suggest follow-up actions based on decisions
201
+ - Offer to create new WorkNodes from agenda items`,
202
+ inputSchema: {
203
+ meetingId: z.number().describe('Meeting ID to retrieve'),
204
+ },
205
+ }, async (args) => {
206
+ const { meetingId } = args;
207
+ try {
208
+ const response = await apiClient.get(`/mcp/meetings/${meetingId}`);
209
+ if (!response.success) {
210
+ return {
211
+ content: [
212
+ {
213
+ type: 'text',
214
+ text: JSON.stringify({
215
+ error: 'Failed to get meeting',
216
+ message: response.message || 'Unknown error',
217
+ }),
218
+ },
219
+ ],
220
+ isError: true,
221
+ };
222
+ }
223
+ const meeting = response.data;
224
+ // Format for LLM with clear sections
225
+ return {
226
+ content: [
227
+ {
228
+ type: 'text',
229
+ text: JSON.stringify({
230
+ meeting: {
231
+ id: meeting.id,
232
+ title: meeting.title,
233
+ description: meeting.description,
234
+ scheduledAt: new Date(meeting.scheduledAt).toLocaleString(),
235
+ duration: meeting.duration ? `${meeting.duration} min` : 'N/A',
236
+ status: meeting.status,
237
+ workspaceId: meeting.workspaceId,
238
+ },
239
+ review: meeting.review.map(r => ({
240
+ title: r.title,
241
+ period: r.period
242
+ ? `${new Date(r.period.from).toLocaleDateString()} - ${new Date(r.period.to).toLocaleDateString()}`
243
+ : 'N/A',
244
+ completedWorkNodesCount: r.workNodeIds.length,
245
+ workNodeIds: r.workNodeIds,
246
+ })),
247
+ agenda: meeting.agenda.map((a, i) => ({
248
+ order: i + 1,
249
+ title: a.title,
250
+ description: a.description,
251
+ notes: a.notes,
252
+ status: a.status,
253
+ duration: a.duration ? `${a.duration} min` : null,
254
+ relatedWorkNodesCount: a.relatedWorkNodes.length,
255
+ })),
256
+ participants: meeting.participants.map(p => ({
257
+ name: p.name || p.email,
258
+ role: p.role,
259
+ attendance: p.attendanceStatus,
260
+ checkedIn: p.checkedInAt
261
+ ? new Date(p.checkedInAt).toLocaleString()
262
+ : 'Not checked in',
263
+ })),
264
+ notes: meeting.notes.map(n => ({
265
+ author: n.author,
266
+ content: n.content,
267
+ visibility: n.visibility,
268
+ createdAt: new Date(n.createdAt).toLocaleString(),
269
+ })),
270
+ decisions: meeting.decisions.map(d => ({
271
+ title: d.title,
272
+ description: d.description,
273
+ type: d.type,
274
+ status: d.status,
275
+ createdAt: new Date(d.createdAt).toLocaleDateString(),
276
+ })),
277
+ stats: {
278
+ totalParticipants: meeting.participants.length,
279
+ totalAgendaItems: meeting.agenda.length,
280
+ totalNotes: meeting.notes.length,
281
+ totalDecisions: meeting.decisions.length,
282
+ },
283
+ }, null, 2),
284
+ },
285
+ ],
286
+ };
287
+ }
288
+ catch (error) {
289
+ return {
290
+ content: [
291
+ {
292
+ type: 'text',
293
+ text: JSON.stringify({
294
+ error: 'Failed to get meeting',
295
+ message: error.message,
296
+ details: error.response?.data || error,
297
+ }),
298
+ },
299
+ ],
300
+ isError: true,
301
+ };
302
+ }
303
+ });
304
+ }
305
+ //# sourceMappingURL=meeting-list-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-list-tool.js","sourceRoot":"","sources":["../../src/tools/meeting-list-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ApiClient } from '../services/api-client.js';
3
+ /**
4
+ * Register Meeting Notes Tools for LLM-invoked operations
5
+ */
6
+ export declare function registerMeetingNotesTools(server: McpServer, apiClient: ApiClient): void;
7
+ //# sourceMappingURL=meeting-notes-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-notes-tool.d.ts","sourceRoot":"","sources":["../../src/tools/meeting-notes-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAK3D;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAqWhF"}
@@ -0,0 +1,318 @@
1
+ import { z } from 'zod';
2
+ const MeetingNoteVisibilitySchema = z.enum(['public', 'private']);
3
+ /**
4
+ * Register Meeting Notes Tools for LLM-invoked operations
5
+ */
6
+ export function registerMeetingNotesTools(server, apiClient) {
7
+ /**
8
+ * brxce_add_meeting_note - Add a note to a meeting
9
+ */
10
+ server.registerTool('brxce_add_meeting_note', {
11
+ description: `Add a note to a meeting.
12
+
13
+ **When to use this tool:**
14
+ - User asks to add a note to a meeting
15
+ - User mentions taking meeting notes
16
+ - During or after a meeting to capture discussion points
17
+
18
+ **Input:**
19
+ - meetingId (required): ID of the meeting
20
+ - content (required): The note content
21
+ - visibility (optional): 'public' (visible to all) or 'private' (visible only to author). Default: 'public'
22
+
23
+ **Access Control:**
24
+ - Only workspace members can add notes
25
+ - Private notes are only visible to the author
26
+ - Public notes are visible to all meeting participants
27
+
28
+ **Example:**
29
+ User: "Add a note to meeting #24: Discussed API design patterns"
30
+ LLM calls: brxce_add_meeting_note(meetingId: 24, content: "Discussed API design patterns", visibility: "public")`,
31
+ inputSchema: {
32
+ meetingId: z.number().describe('Meeting ID'),
33
+ content: z.string().min(1).describe('Note content'),
34
+ visibility: MeetingNoteVisibilitySchema.optional().describe('Note visibility (public or private, default: public)')
35
+ }
36
+ }, async (args) => {
37
+ const { meetingId, content, visibility = 'public' } = args;
38
+ try {
39
+ const response = await apiClient.post(`/mcp/meetings/${meetingId}/notes`, { content, visibility });
40
+ if (!response.success) {
41
+ return {
42
+ content: [
43
+ {
44
+ type: 'text',
45
+ text: `Failed to add meeting note: ${response.message || 'Unknown error'}`,
46
+ },
47
+ ],
48
+ isError: true,
49
+ };
50
+ }
51
+ const note = response.data;
52
+ let resultText = '## Meeting Note Added\\n\\n';
53
+ resultText += `✅ **Note successfully added to Meeting #${meetingId}**\\n\\n`;
54
+ resultText += `**Note ID:** ${note.id}\\n`;
55
+ resultText += `**Visibility:** ${note.visibility === 'private' ? '🔒 Private (only you can see)' : '👁️ Public (all participants can see)'}\\n`;
56
+ resultText += `**Content:**\\n${note.content}\\n\\n`;
57
+ resultText += `**Created:** ${new Date(note.createdAt).toLocaleString()}\\n`;
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: resultText,
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: `Error adding meeting note: ${error.message || 'Unknown error'}`,
73
+ },
74
+ ],
75
+ isError: true,
76
+ };
77
+ }
78
+ });
79
+ /**
80
+ * brxce_list_meeting_notes - List all notes for a meeting
81
+ */
82
+ server.registerTool('brxce_list_meeting_notes', {
83
+ description: `List all notes for a meeting.
84
+
85
+ **When to use this tool:**
86
+ - User asks to see meeting notes
87
+ - User wants to review what was discussed
88
+ - Need to check notes before adding new ones
89
+
90
+ **Output:**
91
+ - Returns all public notes and user's private notes
92
+ - Notes are ordered chronologically
93
+ - Each note includes author information
94
+
95
+ **Example:**
96
+ User: "Show me the notes from meeting #24"
97
+ LLM calls: brxce_list_meeting_notes(meetingId: 24)`,
98
+ inputSchema: {
99
+ meetingId: z.number().describe('Meeting ID')
100
+ }
101
+ }, async (args) => {
102
+ const { meetingId } = args;
103
+ try {
104
+ const response = await apiClient.get(`/mcp/meetings/${meetingId}/notes`);
105
+ if (!response.success) {
106
+ return {
107
+ content: [
108
+ {
109
+ type: 'text',
110
+ text: `Failed to list meeting notes: ${response.message || 'Unknown error'}`,
111
+ },
112
+ ],
113
+ isError: true,
114
+ };
115
+ }
116
+ const { notes } = response.data;
117
+ if (!notes || notes.length === 0) {
118
+ return {
119
+ content: [
120
+ {
121
+ type: 'text',
122
+ text: `## Meeting #${meetingId} Notes\\n\\nNo notes found for this meeting.`,
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ let resultText = `## Meeting #${meetingId} Notes\\n\\n`;
128
+ resultText += `**Total Notes:** ${notes.length}\\n\\n`;
129
+ notes.forEach((note, index) => {
130
+ resultText += `### Note #${note.id}${note.visibility === 'private' ? ' 🔒 Private' : ''}\\n`;
131
+ resultText += `**Author:** ${note.author.name || note.author.email || 'Unknown'}\\n`;
132
+ resultText += `**Created:** ${new Date(note.createdAt).toLocaleString()}\\n`;
133
+ resultText += `**Content:**\\n${note.content}\\n`;
134
+ if (index < notes.length - 1) {
135
+ resultText += '\\n---\\n\\n';
136
+ }
137
+ });
138
+ return {
139
+ content: [
140
+ {
141
+ type: 'text',
142
+ text: resultText,
143
+ },
144
+ ],
145
+ };
146
+ }
147
+ catch (error) {
148
+ return {
149
+ content: [
150
+ {
151
+ type: 'text',
152
+ text: `Error listing meeting notes: ${error.message || 'Unknown error'}`,
153
+ },
154
+ ],
155
+ isError: true,
156
+ };
157
+ }
158
+ });
159
+ /**
160
+ * brxce_update_meeting_note - Update a meeting note
161
+ */
162
+ server.registerTool('brxce_update_meeting_note', {
163
+ description: `Update a meeting note.
164
+
165
+ **When to use this tool:**
166
+ - User wants to edit their note
167
+ - User wants to change visibility (public ↔ private)
168
+ - Correcting or expanding on a previous note
169
+
170
+ **Access Control:**
171
+ - Only the note author can update their notes
172
+ - Cannot update other people's notes
173
+
174
+ **Input:**
175
+ - meetingId (required): ID of the meeting
176
+ - noteId (required): ID of the note to update
177
+ - content (optional): New note content
178
+ - visibility (optional): New visibility setting
179
+
180
+ **Example:**
181
+ User: "Update note #123 in meeting #24 to be private"
182
+ LLM calls: brxce_update_meeting_note(meetingId: 24, noteId: 123, visibility: "private")`,
183
+ inputSchema: {
184
+ meetingId: z.number().describe('Meeting ID'),
185
+ noteId: z.number().describe('Note ID to update'),
186
+ content: z.string().min(1).optional().describe('Updated note content'),
187
+ visibility: MeetingNoteVisibilitySchema.optional().describe('Updated visibility')
188
+ }
189
+ }, async (args) => {
190
+ const { meetingId, noteId, content, visibility } = args;
191
+ if (!content && !visibility) {
192
+ return {
193
+ content: [
194
+ {
195
+ type: 'text',
196
+ text: 'Error: You must provide either content or visibility to update',
197
+ },
198
+ ],
199
+ isError: true,
200
+ };
201
+ }
202
+ try {
203
+ const updateData = {};
204
+ if (content)
205
+ updateData.content = content;
206
+ if (visibility)
207
+ updateData.visibility = visibility;
208
+ const response = await apiClient.put(`/mcp/meetings/${meetingId}/notes/${noteId}`, updateData);
209
+ if (!response.success) {
210
+ return {
211
+ content: [
212
+ {
213
+ type: 'text',
214
+ text: `Failed to update meeting note: ${response.message || 'Unknown error'}`,
215
+ },
216
+ ],
217
+ isError: true,
218
+ };
219
+ }
220
+ const note = response.data;
221
+ let resultText = '## Meeting Note Updated\\n\\n';
222
+ resultText += `✅ **Note #${note.id} successfully updated**\\n\\n`;
223
+ if (content) {
224
+ resultText += `**New Content:**\\n${note.content}\\n\\n`;
225
+ }
226
+ if (visibility) {
227
+ resultText += `**New Visibility:** ${note.visibility === 'private' ? '🔒 Private' : '👁️ Public'}\\n\\n`;
228
+ }
229
+ resultText += `**Last Updated:** ${new Date(note.updatedAt).toLocaleString()}\\n`;
230
+ return {
231
+ content: [
232
+ {
233
+ type: 'text',
234
+ text: resultText,
235
+ },
236
+ ],
237
+ };
238
+ }
239
+ catch (error) {
240
+ return {
241
+ content: [
242
+ {
243
+ type: 'text',
244
+ text: `Error updating meeting note: ${error.message || 'Unknown error'}`,
245
+ },
246
+ ],
247
+ isError: true,
248
+ };
249
+ }
250
+ });
251
+ /**
252
+ * brxce_delete_meeting_note - Delete a meeting note
253
+ */
254
+ server.registerTool('brxce_delete_meeting_note', {
255
+ description: `Delete a meeting note.
256
+
257
+ **When to use this tool:**
258
+ - User wants to remove a note they created
259
+ - Note contains incorrect or outdated information
260
+ - User accidentally created a duplicate note
261
+
262
+ **Access Control:**
263
+ - Only the note author can delete their notes
264
+ - Cannot delete other people's notes
265
+ - Deletion is permanent and cannot be undone
266
+
267
+ **Input:**
268
+ - meetingId (required): ID of the meeting
269
+ - noteId (required): ID of the note to delete
270
+
271
+ **Example:**
272
+ User: "Delete note #123 from meeting #24"
273
+ LLM calls: brxce_delete_meeting_note(meetingId: 24, noteId: 123)`,
274
+ inputSchema: {
275
+ meetingId: z.number().describe('Meeting ID'),
276
+ noteId: z.number().describe('Note ID to delete')
277
+ }
278
+ }, async (args) => {
279
+ const { meetingId, noteId } = args;
280
+ try {
281
+ const response = await apiClient.delete(`/mcp/meetings/${meetingId}/notes/${noteId}`);
282
+ if (!response.success) {
283
+ return {
284
+ content: [
285
+ {
286
+ type: 'text',
287
+ text: `Failed to delete meeting note: ${response.message || 'Unknown error'}`,
288
+ },
289
+ ],
290
+ isError: true,
291
+ };
292
+ }
293
+ let resultText = '## Meeting Note Deleted\\n\\n';
294
+ resultText += `✅ **Note #${noteId} successfully deleted from Meeting #${meetingId}**\\n\\n`;
295
+ resultText += '⚠️ This action cannot be undone.\\n';
296
+ return {
297
+ content: [
298
+ {
299
+ type: 'text',
300
+ text: resultText,
301
+ },
302
+ ],
303
+ };
304
+ }
305
+ catch (error) {
306
+ return {
307
+ content: [
308
+ {
309
+ type: 'text',
310
+ text: `Error deleting meeting note: ${error.message || 'Unknown error'}`,
311
+ },
312
+ ],
313
+ isError: true,
314
+ };
315
+ }
316
+ });
317
+ }
318
+ //# sourceMappingURL=meeting-notes-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-notes-tool.js","sourceRoot":"","sources":["../../src/tools/meeting-notes-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ApiClient } from '../services/api-client.js';
3
+ /**
4
+ * Register Meeting Update Tool with preview-first workflow
5
+ */
6
+ export declare function registerMeetingUpdateTool(server: McpServer, apiClient: ApiClient): void;
7
+ //# sourceMappingURL=meeting-update-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-update-tool.d.ts","sourceRoot":"","sources":["../../src/tools/meeting-update-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAyD3D;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA0ThF"}