@open-sunsama/mcp 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.
- package/README.md +374 -0
- package/build/index.d.ts +13 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +71 -0
- package/build/index.js.map +1 -0
- package/build/lib/api-client.d.ts +177 -0
- package/build/lib/api-client.d.ts.map +1 -0
- package/build/lib/api-client.js +126 -0
- package/build/lib/api-client.js.map +1 -0
- package/build/tools/subtasks.d.ts +11 -0
- package/build/tools/subtasks.d.ts.map +1 -0
- package/build/tools/subtasks.js +194 -0
- package/build/tools/subtasks.js.map +1 -0
- package/build/tools/tasks.d.ts +11 -0
- package/build/tools/tasks.d.ts.map +1 -0
- package/build/tools/tasks.js +426 -0
- package/build/tools/tasks.js.map +1 -0
- package/build/tools/time-blocks.d.ts +13 -0
- package/build/tools/time-blocks.d.ts.map +1 -0
- package/build/tools/time-blocks.js +456 -0
- package/build/tools/time-blocks.js.map +1 -0
- package/build/tools/user.d.ts +11 -0
- package/build/tools/user.d.ts.map +1 -0
- package/build/tools/user.js +147 -0
- package/build/tools/user.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools for Task Management
|
|
3
|
+
* Provides AI agents with tools to create, read, update, and delete tasks
|
|
4
|
+
*/
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
/**
|
|
7
|
+
* Formats a task object for display in tool results
|
|
8
|
+
*/
|
|
9
|
+
function formatTask(task) {
|
|
10
|
+
const lines = [
|
|
11
|
+
`ID: ${task.id}`,
|
|
12
|
+
`Title: ${task.title}`,
|
|
13
|
+
`Priority: ${task.priority}`,
|
|
14
|
+
`Scheduled: ${task.scheduledDate ?? "Backlog"}`,
|
|
15
|
+
`Status: ${task.completedAt ? "Completed" : "Pending"}`,
|
|
16
|
+
];
|
|
17
|
+
if (task.estimatedMins) {
|
|
18
|
+
lines.push(`Estimated: ${task.estimatedMins} minutes`);
|
|
19
|
+
}
|
|
20
|
+
if (task.notes) {
|
|
21
|
+
lines.push(`Notes: ${task.notes}`);
|
|
22
|
+
}
|
|
23
|
+
if (task.completedAt) {
|
|
24
|
+
lines.push(`Completed At: ${task.completedAt}`);
|
|
25
|
+
}
|
|
26
|
+
lines.push(`Created: ${task.createdAt}`);
|
|
27
|
+
lines.push(`Updated: ${task.updatedAt}`);
|
|
28
|
+
return lines.join("\n");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Formats multiple tasks for display
|
|
32
|
+
*/
|
|
33
|
+
function formatTaskList(tasks) {
|
|
34
|
+
if (tasks.length === 0) {
|
|
35
|
+
return "No tasks found.";
|
|
36
|
+
}
|
|
37
|
+
return tasks
|
|
38
|
+
.map((task, index) => {
|
|
39
|
+
const status = task.completedAt ? "[x]" : "[ ]";
|
|
40
|
+
const scheduled = task.scheduledDate ?? "Backlog";
|
|
41
|
+
return `${index + 1}. ${status} [${task.priority}] ${task.title}\n ID: ${task.id} | Scheduled: ${scheduled}`;
|
|
42
|
+
})
|
|
43
|
+
.join("\n\n");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates a success response for MCP tools
|
|
47
|
+
*/
|
|
48
|
+
function successResponse(text) {
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: "text", text }],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates an error response for MCP tools
|
|
55
|
+
*/
|
|
56
|
+
function errorResponse(message) {
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
59
|
+
isError: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Registers all task management tools with the MCP server
|
|
64
|
+
*/
|
|
65
|
+
export function registerTaskTools(server, apiClient) {
|
|
66
|
+
// ============================================================
|
|
67
|
+
// LIST TASKS
|
|
68
|
+
// ============================================================
|
|
69
|
+
server.tool("list_tasks", `List tasks with optional filters. Returns tasks sorted by position by default.
|
|
70
|
+
|
|
71
|
+
Examples:
|
|
72
|
+
- List today's tasks: { "date": "2024-01-15" }
|
|
73
|
+
- List tasks in date range: { "from": "2024-01-15", "to": "2024-01-21" }
|
|
74
|
+
- List incomplete tasks: { "completed": false }
|
|
75
|
+
- List completed tasks: { "completed": true }
|
|
76
|
+
- List backlog tasks: { "backlog": true }
|
|
77
|
+
- Combine filters: { "date": "2024-01-15", "completed": false }
|
|
78
|
+
|
|
79
|
+
Date format: YYYY-MM-DD
|
|
80
|
+
Pagination: Use "page" and "limit" for large result sets.`, {
|
|
81
|
+
date: z
|
|
82
|
+
.string()
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Filter by specific date (YYYY-MM-DD). Cannot be used with 'from'/'to'."),
|
|
85
|
+
from: z
|
|
86
|
+
.string()
|
|
87
|
+
.optional()
|
|
88
|
+
.describe("Start date for range filter (YYYY-MM-DD). Use with 'to'."),
|
|
89
|
+
to: z
|
|
90
|
+
.string()
|
|
91
|
+
.optional()
|
|
92
|
+
.describe("End date for range filter (YYYY-MM-DD). Use with 'from'."),
|
|
93
|
+
completed: z
|
|
94
|
+
.boolean()
|
|
95
|
+
.optional()
|
|
96
|
+
.describe("Filter by completion status. true = completed, false = incomplete, omit = all."),
|
|
97
|
+
backlog: z
|
|
98
|
+
.boolean()
|
|
99
|
+
.optional()
|
|
100
|
+
.describe("If true, only return tasks without a scheduled date (backlog tasks)."),
|
|
101
|
+
sortBy: z
|
|
102
|
+
.enum(["priority", "position", "createdAt"])
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("Sort order. Default is 'position'."),
|
|
105
|
+
page: z
|
|
106
|
+
.number()
|
|
107
|
+
.int()
|
|
108
|
+
.positive()
|
|
109
|
+
.optional()
|
|
110
|
+
.describe("Page number for pagination (starts at 1)."),
|
|
111
|
+
limit: z
|
|
112
|
+
.number()
|
|
113
|
+
.int()
|
|
114
|
+
.positive()
|
|
115
|
+
.max(100)
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("Number of tasks per page (max 100, default 50)."),
|
|
118
|
+
}, async (input) => {
|
|
119
|
+
try {
|
|
120
|
+
const response = await apiClient.listTasks({
|
|
121
|
+
date: input.date,
|
|
122
|
+
from: input.from,
|
|
123
|
+
to: input.to,
|
|
124
|
+
completed: input.completed,
|
|
125
|
+
backlog: input.backlog,
|
|
126
|
+
sortBy: input.sortBy,
|
|
127
|
+
page: input.page,
|
|
128
|
+
limit: input.limit,
|
|
129
|
+
});
|
|
130
|
+
if (!response.success || !response.data) {
|
|
131
|
+
return errorResponse(response.error?.message ?? "Failed to list tasks");
|
|
132
|
+
}
|
|
133
|
+
let result = formatTaskList(response.data);
|
|
134
|
+
if (response.meta) {
|
|
135
|
+
result += `\n\n---\nPage ${response.meta.page} of ${response.meta.totalPages} (${response.meta.total} total tasks)`;
|
|
136
|
+
}
|
|
137
|
+
return successResponse(result);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// ============================================================
|
|
144
|
+
// GET TASK
|
|
145
|
+
// ============================================================
|
|
146
|
+
server.tool("get_task", `Get detailed information about a specific task by its ID.
|
|
147
|
+
|
|
148
|
+
Returns the full task object including title, notes, scheduled date, priority, completion status, and timestamps.
|
|
149
|
+
|
|
150
|
+
Example: { "id": "task_abc123" }`, {
|
|
151
|
+
id: z.string().describe("The unique task ID (e.g., 'task_abc123')."),
|
|
152
|
+
}, async (input) => {
|
|
153
|
+
try {
|
|
154
|
+
const response = await apiClient.getTask(input.id);
|
|
155
|
+
if (!response.success || !response.data) {
|
|
156
|
+
return errorResponse(response.error?.message ?? "Task not found");
|
|
157
|
+
}
|
|
158
|
+
return successResponse(formatTask(response.data));
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// ============================================================
|
|
165
|
+
// CREATE TASK
|
|
166
|
+
// ============================================================
|
|
167
|
+
server.tool("create_task", `Create a new task.
|
|
168
|
+
|
|
169
|
+
Required: title
|
|
170
|
+
Optional: notes, scheduledDate, estimatedMins, priority
|
|
171
|
+
|
|
172
|
+
Priority levels:
|
|
173
|
+
- P0: Critical/Urgent (highest priority)
|
|
174
|
+
- P1: High priority
|
|
175
|
+
- P2: Medium priority (default)
|
|
176
|
+
- P3: Low priority
|
|
177
|
+
|
|
178
|
+
Examples:
|
|
179
|
+
- Simple task: { "title": "Review PR #123" }
|
|
180
|
+
- Scheduled task: { "title": "Team meeting", "scheduledDate": "2024-01-15", "estimatedMins": 60 }
|
|
181
|
+
- High priority: { "title": "Fix production bug", "priority": "P0", "notes": "Server returning 500 errors" }
|
|
182
|
+
- Backlog task: { "title": "Research new framework" } (no scheduledDate = backlog)`, {
|
|
183
|
+
title: z
|
|
184
|
+
.string()
|
|
185
|
+
.min(1)
|
|
186
|
+
.max(500)
|
|
187
|
+
.describe("The task title (required, 1-500 characters)."),
|
|
188
|
+
notes: z
|
|
189
|
+
.string()
|
|
190
|
+
.max(10000)
|
|
191
|
+
.optional()
|
|
192
|
+
.describe("Additional notes or description (max 10,000 characters)."),
|
|
193
|
+
scheduledDate: z
|
|
194
|
+
.string()
|
|
195
|
+
.optional()
|
|
196
|
+
.describe("Date to schedule the task (YYYY-MM-DD). Omit for backlog."),
|
|
197
|
+
estimatedMins: z
|
|
198
|
+
.number()
|
|
199
|
+
.int()
|
|
200
|
+
.positive()
|
|
201
|
+
.optional()
|
|
202
|
+
.describe("Estimated time in minutes."),
|
|
203
|
+
priority: z
|
|
204
|
+
.enum(["P0", "P1", "P2", "P3"])
|
|
205
|
+
.optional()
|
|
206
|
+
.describe("Priority level (P0=highest, P3=lowest). Default: P2."),
|
|
207
|
+
}, async (input) => {
|
|
208
|
+
try {
|
|
209
|
+
const response = await apiClient.createTask({
|
|
210
|
+
title: input.title,
|
|
211
|
+
notes: input.notes,
|
|
212
|
+
scheduledDate: input.scheduledDate,
|
|
213
|
+
estimatedMins: input.estimatedMins,
|
|
214
|
+
priority: input.priority,
|
|
215
|
+
});
|
|
216
|
+
if (!response.success || !response.data) {
|
|
217
|
+
return errorResponse(response.error?.message ?? "Failed to create task");
|
|
218
|
+
}
|
|
219
|
+
return successResponse(`Task created successfully!\n\n${formatTask(response.data)}`);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
// ============================================================
|
|
226
|
+
// UPDATE TASK
|
|
227
|
+
// ============================================================
|
|
228
|
+
server.tool("update_task", `Update an existing task. Only provide fields you want to change.
|
|
229
|
+
|
|
230
|
+
You can update: title, notes, scheduledDate, estimatedMins, priority
|
|
231
|
+
|
|
232
|
+
To clear a field, set it to null (for notes, scheduledDate, estimatedMins).
|
|
233
|
+
To mark complete/incomplete, use the dedicated complete_task/uncomplete_task tools instead.
|
|
234
|
+
|
|
235
|
+
Examples:
|
|
236
|
+
- Update title: { "id": "task_abc123", "title": "New title" }
|
|
237
|
+
- Change priority: { "id": "task_abc123", "priority": "P1" }
|
|
238
|
+
- Move to backlog: { "id": "task_abc123", "scheduledDate": null }
|
|
239
|
+
- Reschedule: { "id": "task_abc123", "scheduledDate": "2024-01-20" }
|
|
240
|
+
- Clear notes: { "id": "task_abc123", "notes": null }`, {
|
|
241
|
+
id: z.string().describe("The unique task ID to update."),
|
|
242
|
+
title: z.string().min(1).max(500).optional().describe("New task title."),
|
|
243
|
+
notes: z
|
|
244
|
+
.string()
|
|
245
|
+
.max(10000)
|
|
246
|
+
.nullable()
|
|
247
|
+
.optional()
|
|
248
|
+
.describe("New notes. Set to null to clear."),
|
|
249
|
+
scheduledDate: z
|
|
250
|
+
.string()
|
|
251
|
+
.nullable()
|
|
252
|
+
.optional()
|
|
253
|
+
.describe("New scheduled date (YYYY-MM-DD). Set to null to move to backlog."),
|
|
254
|
+
estimatedMins: z
|
|
255
|
+
.number()
|
|
256
|
+
.int()
|
|
257
|
+
.positive()
|
|
258
|
+
.nullable()
|
|
259
|
+
.optional()
|
|
260
|
+
.describe("New estimated time in minutes. Set to null to clear."),
|
|
261
|
+
priority: z
|
|
262
|
+
.enum(["P0", "P1", "P2", "P3"])
|
|
263
|
+
.optional()
|
|
264
|
+
.describe("New priority level."),
|
|
265
|
+
}, async (input) => {
|
|
266
|
+
try {
|
|
267
|
+
const { id, ...updates } = input;
|
|
268
|
+
// Filter out undefined values, keeping null values
|
|
269
|
+
const filteredUpdates = {};
|
|
270
|
+
for (const [key, value] of Object.entries(updates)) {
|
|
271
|
+
if (value !== undefined) {
|
|
272
|
+
filteredUpdates[key] = value;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (Object.keys(filteredUpdates).length === 0) {
|
|
276
|
+
return errorResponse("No fields to update. Provide at least one field to change.");
|
|
277
|
+
}
|
|
278
|
+
const response = await apiClient.updateTask(id, filteredUpdates);
|
|
279
|
+
if (!response.success || !response.data) {
|
|
280
|
+
return errorResponse(response.error?.message ?? "Failed to update task");
|
|
281
|
+
}
|
|
282
|
+
return successResponse(`Task updated successfully!\n\n${formatTask(response.data)}`);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
// ============================================================
|
|
289
|
+
// COMPLETE TASK
|
|
290
|
+
// ============================================================
|
|
291
|
+
server.tool("complete_task", `Mark a task as complete.
|
|
292
|
+
|
|
293
|
+
Sets the task's completedAt timestamp to the current time.
|
|
294
|
+
|
|
295
|
+
Example: { "id": "task_abc123" }`, {
|
|
296
|
+
id: z.string().describe("The unique task ID to mark as complete."),
|
|
297
|
+
}, async (input) => {
|
|
298
|
+
try {
|
|
299
|
+
const response = await apiClient.updateTask(input.id, {
|
|
300
|
+
completedAt: new Date().toISOString(),
|
|
301
|
+
});
|
|
302
|
+
if (!response.success || !response.data) {
|
|
303
|
+
return errorResponse(response.error?.message ?? "Failed to complete task");
|
|
304
|
+
}
|
|
305
|
+
return successResponse(`Task marked as complete!\n\n${formatTask(response.data)}`);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
// ============================================================
|
|
312
|
+
// UNCOMPLETE TASK
|
|
313
|
+
// ============================================================
|
|
314
|
+
server.tool("uncomplete_task", `Mark a task as incomplete (reopen a completed task).
|
|
315
|
+
|
|
316
|
+
Clears the task's completedAt timestamp.
|
|
317
|
+
|
|
318
|
+
Example: { "id": "task_abc123" }`, {
|
|
319
|
+
id: z.string().describe("The unique task ID to mark as incomplete."),
|
|
320
|
+
}, async (input) => {
|
|
321
|
+
try {
|
|
322
|
+
const response = await apiClient.updateTask(input.id, {
|
|
323
|
+
completedAt: null,
|
|
324
|
+
});
|
|
325
|
+
if (!response.success || !response.data) {
|
|
326
|
+
return errorResponse(response.error?.message ?? "Failed to uncomplete task");
|
|
327
|
+
}
|
|
328
|
+
return successResponse(`Task marked as incomplete!\n\n${formatTask(response.data)}`);
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
// ============================================================
|
|
335
|
+
// DELETE TASK
|
|
336
|
+
// ============================================================
|
|
337
|
+
server.tool("delete_task", `Permanently delete a task.
|
|
338
|
+
|
|
339
|
+
WARNING: This action cannot be undone. The task and all its subtasks will be permanently removed.
|
|
340
|
+
|
|
341
|
+
Example: { "id": "task_abc123" }`, {
|
|
342
|
+
id: z.string().describe("The unique task ID to delete."),
|
|
343
|
+
}, async (input) => {
|
|
344
|
+
try {
|
|
345
|
+
const response = await apiClient.deleteTask(input.id);
|
|
346
|
+
if (!response.success) {
|
|
347
|
+
return errorResponse(response.error?.message ?? "Failed to delete task");
|
|
348
|
+
}
|
|
349
|
+
return successResponse(`Task deleted successfully.`);
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
// ============================================================
|
|
356
|
+
// SCHEDULE TASK
|
|
357
|
+
// ============================================================
|
|
358
|
+
server.tool("schedule_task", `Move a task to a specific date or to the backlog.
|
|
359
|
+
|
|
360
|
+
This is a convenience tool for rescheduling tasks. Use it to:
|
|
361
|
+
- Schedule a backlog task to a specific date
|
|
362
|
+
- Reschedule a task to a different date
|
|
363
|
+
- Move a scheduled task back to the backlog
|
|
364
|
+
|
|
365
|
+
Examples:
|
|
366
|
+
- Schedule for tomorrow: { "id": "task_abc123", "date": "2024-01-16" }
|
|
367
|
+
- Move to backlog: { "id": "task_abc123", "date": null }`, {
|
|
368
|
+
id: z.string().describe("The unique task ID to schedule."),
|
|
369
|
+
date: z
|
|
370
|
+
.string()
|
|
371
|
+
.nullable()
|
|
372
|
+
.describe("Target date (YYYY-MM-DD) or null to move to backlog."),
|
|
373
|
+
}, async (input) => {
|
|
374
|
+
try {
|
|
375
|
+
const response = await apiClient.updateTask(input.id, {
|
|
376
|
+
scheduledDate: input.date,
|
|
377
|
+
});
|
|
378
|
+
if (!response.success || !response.data) {
|
|
379
|
+
return errorResponse(response.error?.message ?? "Failed to schedule task");
|
|
380
|
+
}
|
|
381
|
+
const destination = input.date
|
|
382
|
+
? `scheduled for ${input.date}`
|
|
383
|
+
: "moved to backlog";
|
|
384
|
+
return successResponse(`Task ${destination}!\n\n${formatTask(response.data)}`);
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
// ============================================================
|
|
391
|
+
// REORDER TASKS
|
|
392
|
+
// ============================================================
|
|
393
|
+
server.tool("reorder_tasks", `Reorder tasks within a specific date or backlog.
|
|
394
|
+
|
|
395
|
+
Provide the complete ordered list of task IDs for the given date. Tasks will be reordered according to their position in the array.
|
|
396
|
+
|
|
397
|
+
Important:
|
|
398
|
+
- You must include ALL task IDs for the given date/backlog
|
|
399
|
+
- The first task ID in the array will be position 0 (top)
|
|
400
|
+
- Tasks not included in the array will have undefined positions
|
|
401
|
+
|
|
402
|
+
Examples:
|
|
403
|
+
- Reorder today's tasks: { "date": "2024-01-15", "taskIds": ["task_3", "task_1", "task_2"] }
|
|
404
|
+
- Reorder backlog: { "date": "backlog", "taskIds": ["task_b", "task_a", "task_c"] }`, {
|
|
405
|
+
date: z
|
|
406
|
+
.string()
|
|
407
|
+
.describe("The date (YYYY-MM-DD) or 'backlog' for backlog tasks."),
|
|
408
|
+
taskIds: z
|
|
409
|
+
.array(z.string())
|
|
410
|
+
.describe("Ordered array of task IDs representing the new order."),
|
|
411
|
+
}, async (input) => {
|
|
412
|
+
try {
|
|
413
|
+
const dateParam = input.date === "backlog" ? "backlog" : input.date;
|
|
414
|
+
const response = await apiClient.reorderTasks(dateParam, input.taskIds);
|
|
415
|
+
if (!response.success || !response.data) {
|
|
416
|
+
return errorResponse(response.error?.message ?? "Failed to reorder tasks");
|
|
417
|
+
}
|
|
418
|
+
const location = input.date === "backlog" ? "backlog" : input.date;
|
|
419
|
+
return successResponse(`Tasks reordered for ${location}!\n\n${formatTaskList(response.data)}`);
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
return errorResponse(error instanceof Error ? error.message : "Unknown error");
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools for Time Block Management
|
|
3
|
+
*
|
|
4
|
+
* Time blocks represent scheduled chunks of focused work time on your calendar.
|
|
5
|
+
* They can optionally be linked to tasks to track what you're working on.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import type { ApiClient } from "../lib/api-client.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register all time block MCP tools
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerTimeBlockTools(server: McpServer, apiClient: ApiClient): void;
|
|
13
|
+
//# sourceMappingURL=time-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-blocks.d.ts","sourceRoot":"","sources":["../../src/tools/time-blocks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AA0FjE;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,GACnB,IAAI,CAsgBN"}
|