@damper/mcp 0.3.15 → 0.3.17

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 +18 -19
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -240,10 +240,12 @@ server.registerTool('get_task', {
240
240
  // Tool: Update task
241
241
  server.registerTool('update_task', {
242
242
  title: 'Update Task',
243
- description: 'Update task fields like description, implementation plan, priority, effort, quarter, labels, or visibility. ' +
244
- 'Useful for refining task details as you learn more about the work.',
243
+ description: 'Update task fields like title, description, implementation plan, priority, effort, quarter, labels, or visibility. ' +
244
+ 'Useful for refining task details as you learn more about the work. ' +
245
+ 'Use title to set a concise task name after planning (especially for CLI-created tasks with placeholder titles).',
245
246
  inputSchema: z.object({
246
247
  taskId: z.string().describe('Task ID'),
248
+ title: z.string().optional().describe('Concise task title (e.g., "Fix SSO redirect login flow")'),
247
249
  description: z.string().optional().describe('Task description'),
248
250
  implementationPlan: z.string().optional().describe('Implementation plan (markdown)'),
249
251
  priority: z.enum(['high', 'medium', 'low']).nullable().optional().describe('Task priority'),
@@ -269,8 +271,10 @@ server.registerTool('update_task', {
269
271
  idempotentHint: true,
270
272
  openWorldHint: false,
271
273
  },
272
- }, async ({ taskId, description, implementationPlan, priority, effort, quarter, labels, isPublic }) => {
274
+ }, async ({ taskId, title, description, implementationPlan, priority, effort, quarter, labels, isPublic }) => {
273
275
  const body = {};
276
+ if (title !== undefined)
277
+ body.title = title;
274
278
  if (description !== undefined)
275
279
  body.description = description;
276
280
  if (implementationPlan !== undefined)
@@ -287,6 +291,8 @@ server.registerTool('update_task', {
287
291
  body.isPublic = isPublic;
288
292
  const result = await api('PATCH', `/api/agent/tasks/${taskId}`, body);
289
293
  const updates = [];
294
+ if (title !== undefined)
295
+ updates.push(`title="${title}"`);
290
296
  if (description !== undefined)
291
297
  updates.push('description');
292
298
  if (implementationPlan !== undefined)
@@ -372,10 +378,8 @@ server.registerTool('start_task', {
372
378
  'Project context contains architecture and patterns you MUST follow.\n\n' +
373
379
  '**Workflow after starting:**\n' +
374
380
  '1. Read relevant context sections (architecture, conventions, etc.)\n' +
375
- '2. add_note: "Session started: <your goal>"\n' +
376
- '3. Do work, log commits with add_commit, decisions with add_note\n' +
377
- '4. add_note: "Session end: <summary, next steps>"\n' +
378
- '5. complete_task (done) or abandon_task (stopping)',
381
+ '2. Do work, log commits with add_commit\n' +
382
+ '3. complete_task (done) or abandon_task (stopping)',
379
383
  inputSchema: z.object({
380
384
  taskId: z.string(),
381
385
  force: z.boolean().optional().describe('Take over lock from another agent'),
@@ -430,13 +434,11 @@ server.registerTool('start_task', {
430
434
  // Tool: Add note
431
435
  server.registerTool('add_note', {
432
436
  title: 'Add Note',
433
- description: 'Add progress note to task. Notes help future agents continue your work.\n\n' +
437
+ description: 'Add a note to a task. Use ONLY for non-obvious approach decisions and blockers.\n\n' +
434
438
  '**When to use:**\n' +
435
- '- Session start: "Session started: implementing X"\n' +
436
439
  '- Decisions: "Decision: Using X because Y"\n' +
437
- '- Session end: "Session end: Done X, remaining Y, blockers Z"\n\n' +
438
- '**For commits:** Use `add_commit` instead for structured commit tracking.\n\n' +
439
- '**Important:** Always log session end before complete_task or abandon_task.',
440
+ '- Blockers: "Blocked: X needs Y before we can proceed"\n\n' +
441
+ '**Do NOT use for:** Session start/end ceremony, commit logging (use `add_commit`), or restating what code changes do.',
440
442
  inputSchema: z.object({
441
443
  taskId: z.string(),
442
444
  note: z.string(),
@@ -569,16 +571,15 @@ const DocumentationSchema = z.object({
569
571
  // Tool: Complete task
570
572
  server.registerTool('complete_task', {
571
573
  title: 'Complete Task',
572
- description: 'Mark task done with summary. Optionally log final commits at completion.\n\n' +
574
+ description: 'Mark task done with a brief one-line summary. Optionally log final commits at completion.\n\n' +
573
575
  '**Before calling:**\n' +
574
576
  '1. Push all commits\n' +
575
- '2. add_note: "Session end: <what was done>"\n' +
576
- '3. Check if project context docs need updating\n\n' +
577
+ '2. Check if project context docs need updating\n\n' +
577
578
  '**Commits:** Pass commits array to log them at completion (convenience for final commits).\n\n' +
578
579
  'Returns documentation update suggestions.',
579
580
  inputSchema: z.object({
580
581
  taskId: z.string(),
581
- summary: z.string().describe('What was implemented'),
582
+ summary: z.string().describe('Brief one-line summary of what was done'),
582
583
  commits: z.array(z.object({
583
584
  hash: z.string().describe('Commit hash (short or full)'),
584
585
  message: z.string().describe('Commit message'),
@@ -607,8 +608,7 @@ server.registerTool('abandon_task', {
607
608
  title: 'Abandon Task',
608
609
  description: 'Release lock and return task to planned status. Use when stopping work.\n\n' +
609
610
  '**Before calling:**\n' +
610
- '1. Push any WIP commits\n' +
611
- '2. add_note: "Session end: <progress, blockers, next steps>"\n\n' +
611
+ '1. Push any WIP commits\n\n' +
612
612
  '**Summary parameter:** What was done, what remains, blockers. Helps the next agent.',
613
613
  inputSchema: z.object({
614
614
  taskId: z.string(),
@@ -686,7 +686,6 @@ This project uses Damper MCP for task tracking. **You MUST follow this workflow.
686
686
  - \`publish_changelog\` - Publish with optional email notifications and Twitter posting
687
687
 
688
688
  ### At Session End (MANDATORY)
689
- - ALWAYS call \`add_note\` with session summary before stopping
690
689
  - ALWAYS call \`complete_task\` (if done) or \`abandon_task\` (if stopping early)
691
690
  - NEVER leave a started task without completing or abandoning it
692
691
  - If you learned something about the codebase, consider updating project context
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damper/mcp",
3
- "version": "0.3.15",
3
+ "version": "0.3.17",
4
4
  "description": "MCP server for Damper task management",
5
5
  "author": "Damper <hello@usedamper.com>",
6
6
  "repository": {