@vibetasks/mcp-server 0.5.5 → 0.6.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 (2) hide show
  1. package/dist/index.js +40 -19
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ function setupTools(taskOps) {
24
24
  // create_task
25
25
  {
26
26
  name: "create_task",
27
- description: "Create a new task in VibeTasks. Use this instead of TodoWrite - tasks persist across sessions and sync everywhere.",
27
+ description: "Create a new task in VibeTasks. Use this instead of TodoWrite - tasks persist across sessions and sync everywhere. If you plan to work on it immediately, set start_vibing=true.",
28
28
  inputSchema: z.object({
29
29
  title: z.string().describe("Task title (required)"),
30
30
  description: z.string().optional().describe("Brief description of what this task involves"),
@@ -36,7 +36,8 @@ function setupTools(taskOps) {
36
36
  })).optional().describe("Inline subtasks - each with title, done status, and optional notes"),
37
37
  due_date: z.string().optional().describe("Due date (ISO 8601 format)"),
38
38
  priority: z.enum(["none", "low", "medium", "high"]).default("none").describe("Task priority"),
39
- tags: z.array(z.string()).optional().describe("Tag names to attach")
39
+ tags: z.array(z.string()).optional().describe("Tag names to attach"),
40
+ start_vibing: z.boolean().default(false).describe(`If true, immediately set task to "vibing" status (you're starting work on it now)`)
40
41
  }),
41
42
  handler: async (args, taskOps2) => {
42
43
  let tagIds = [];
@@ -64,6 +65,10 @@ function setupTools(taskOps) {
64
65
  if (tagIds.length > 0) {
65
66
  await taskOps2.linkTaskTags(task.id, tagIds);
66
67
  }
68
+ let finalTask = task;
69
+ if (args.start_vibing) {
70
+ finalTask = await taskOps2.updateTask(task.id, { status: "vibing" });
71
+ }
67
72
  return {
68
73
  content: [
69
74
  {
@@ -72,14 +77,16 @@ function setupTools(taskOps) {
72
77
  {
73
78
  success: true,
74
79
  task: {
75
- id: task.id,
76
- title: task.title,
77
- description: task.description,
78
- priority: task.priority,
79
- due_date: task.due_date,
80
+ id: finalTask.id,
81
+ title: finalTask.title,
82
+ description: finalTask.description,
83
+ priority: finalTask.priority,
84
+ due_date: finalTask.due_date,
85
+ status: finalTask.status,
80
86
  subtasks: subtasksJson,
81
- created_at: task.created_at
82
- }
87
+ created_at: finalTask.created_at
88
+ },
89
+ message: args.start_vibing ? "Task created and set to vibing status - you're now working on it!" : "Task created successfully"
83
90
  },
84
91
  null,
85
92
  2
@@ -267,14 +274,15 @@ function setupTools(taskOps) {
267
274
  // create_task_with_subtasks
268
275
  {
269
276
  name: "create_task_with_subtasks",
270
- description: "Create a parent task with multiple subtasks in one call. Use this when using TodoWrite - it automatically mirrors your todo list to TaskFlow for persistent tracking.",
277
+ description: "Create a parent task with multiple subtasks in one call. Use this when using TodoWrite - it automatically mirrors your todo list to TaskFlow for persistent tracking. Set start_vibing=true if you're starting work immediately.",
271
278
  inputSchema: z.object({
272
279
  title: z.string().describe("Parent task title (the overall goal)"),
273
280
  subtasks: z.array(z.string()).describe("Array of subtask titles (one for each todo item)"),
274
281
  notes: z.string().optional().describe("Notes for parent task"),
275
282
  due_date: z.string().optional().describe("Due date for parent task (ISO 8601 format)"),
276
283
  priority: z.enum(["none", "low", "medium", "high"]).default("none").describe("Priority for parent task"),
277
- tags: z.array(z.string()).optional().describe("Tag names to attach to parent task")
284
+ tags: z.array(z.string()).optional().describe("Tag names to attach to parent task"),
285
+ start_vibing: z.boolean().default(false).describe(`If true, immediately set parent task to "vibing" status (you're starting work on it now)`)
278
286
  }),
279
287
  handler: async (args, taskOps2) => {
280
288
  let tagIds = [];
@@ -304,6 +312,10 @@ function setupTools(taskOps) {
304
312
  });
305
313
  subtasks.push(subtask);
306
314
  }
315
+ let finalParentTask = parentTask;
316
+ if (args.start_vibing) {
317
+ finalParentTask = await taskOps2.updateTask(parentTask.id, { status: "vibing" });
318
+ }
307
319
  return {
308
320
  content: [
309
321
  {
@@ -312,15 +324,17 @@ function setupTools(taskOps) {
312
324
  {
313
325
  success: true,
314
326
  parent_task: {
315
- id: parentTask.id,
316
- title: parentTask.title,
317
- priority: parentTask.priority,
327
+ id: finalParentTask.id,
328
+ title: finalParentTask.title,
329
+ priority: finalParentTask.priority,
330
+ status: finalParentTask.status,
318
331
  subtask_count: subtasks.length
319
332
  },
320
333
  subtasks: subtasks.map((s) => ({
321
334
  id: s.id,
322
335
  title: s.title
323
- }))
336
+ })),
337
+ message: args.start_vibing ? "Parent task created and set to vibing status - you're now working on it!" : "Parent task and subtasks created successfully"
324
338
  },
325
339
  null,
326
340
  2
@@ -776,7 +790,7 @@ Generated by TaskFlow MCP Server`;
776
790
  // update_subtask
777
791
  {
778
792
  name: "update_subtask",
779
- description: "Update a subtask within a task. Mark it done, add progress notes, or update the title. Use this to track progress on individual steps.",
793
+ description: "\u26A1 CRITICAL: Mark subtasks done IMMEDIATELY after completing each one. This tool updates a subtask - use it to mark done=true RIGHT AFTER you finish each step (not all at once!). Also for adding progress notes or updating titles.",
780
794
  inputSchema: z.object({
781
795
  task_id: z.string().describe("Parent task ID"),
782
796
  subtask_id: z.string().describe("Subtask ID to update"),
@@ -802,6 +816,12 @@ Generated by TaskFlow MCP Server`;
802
816
  if (args.title !== void 0) subtasks[subtaskIndex].title = args.title;
803
817
  if (args.notes !== void 0) subtasks[subtaskIndex].notes = args.notes;
804
818
  const updated = await taskOps2.updateTask(args.task_id, { subtasks_json: subtasks });
819
+ const doneCount = subtasks.filter((s) => s.done).length;
820
+ const totalCount = subtasks.length;
821
+ const percentage = Math.round(doneCount / totalCount * 100);
822
+ const barLength = 20;
823
+ const filled = Math.round(doneCount / totalCount * barLength);
824
+ const progressBar = "\u2588".repeat(filled) + "\u2591".repeat(barLength - filled);
805
825
  return {
806
826
  content: [
807
827
  {
@@ -810,9 +830,10 @@ Generated by TaskFlow MCP Server`;
810
830
  {
811
831
  success: true,
812
832
  task_id: args.task_id,
813
- subtask: subtasks[subtaskIndex],
814
- all_subtasks: subtasks,
815
- progress: `${subtasks.filter((s) => s.done).length}/${subtasks.length} done`
833
+ subtask_updated: subtasks[subtaskIndex],
834
+ progress: `${doneCount}/${totalCount} subtasks completed (${percentage}%)`,
835
+ progress_bar: `[${progressBar}] ${percentage}%`,
836
+ message: args.done ? `\u2713 Subtask marked done! ${doneCount}/${totalCount} complete.${doneCount === totalCount ? " \u{1F389} All subtasks complete!" : ""}` : `Subtask updated. ${doneCount}/${totalCount} complete.`
816
837
  },
817
838
  null,
818
839
  2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibetasks/mcp-server",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
4
  "description": "VibeTasks MCP Server for Claude Code, Cursor, and AI coding tools. Status-based task management: todo → vibing → done.",
5
5
  "author": "Vyas",
6
6
  "license": "MIT",