@damper/mcp 0.10.4 → 0.10.6

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 +28 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -106,6 +106,7 @@ const FeedbackSummarySchema = z.object({
106
106
  id: z.string(),
107
107
  title: z.string(),
108
108
  type: z.string(),
109
+ status: z.string(),
109
110
  voterCount: z.number(),
110
111
  isPublic: z.boolean(),
111
112
  linkedTaskId: z.string().nullish(),
@@ -486,10 +487,12 @@ server.registerTool('add_note', {
486
487
  '**When to use:**\n' +
487
488
  '- Decisions: "Decision: Using X because Y"\n' +
488
489
  '- Blockers: "Blocked: X needs Y before we can proceed"\n\n' +
489
- '**Do NOT use for:** Session start/end ceremony, commit logging (use `add_commit`), or restating what code changes do.',
490
+ '**Do NOT use for:** Session start/end ceremony, commit logging (use `add_commit`), or restating what code changes do.\n\n' +
491
+ '**Formatting:** Notes are rendered as markdown. Use **bold** for key terms, `code` for technical names, and bullet lists for multiple points. ' +
492
+ 'Start with a short bold label like **Decision:** or **Blocked:**.',
490
493
  inputSchema: z.object({
491
494
  taskId: z.string(),
492
- note: z.string(),
495
+ note: z.string().describe('Markdown-formatted note. Use **bold** labels, `code` for technical terms, and bullet lists for structure.'),
493
496
  }),
494
497
  outputSchema: z.object({
495
498
  taskId: z.string(),
@@ -850,7 +853,7 @@ This project uses Damper MCP for task tracking. **You MUST follow this workflow.
850
853
  ### While Working
851
854
  - **Do NOT commit or complete tasks without explicit user confirmation** - Always ask the user before running \`git commit\` or calling \`complete_task\`
852
855
  - \`add_commit\` after each commit with hash and message
853
- - \`add_note\` for decisions: "Decision: chose X because Y"
856
+ - \`add_note\` for decisions (use markdown: **bold** labels, \`code\`, bullet lists)
854
857
  - \`update_subtask\` to mark subtask progress
855
858
  - **Follow patterns from project context** - Don't reinvent; use existing conventions
856
859
  - When you need architecture context mid-task, use \`get_section_block_content\` to load specific blocks rather than full sections
@@ -1354,10 +1357,15 @@ server.registerTool('list_feedback', {
1354
1357
  const lines = data.feedback.map((f) => {
1355
1358
  const link = f.linkedTaskId ? ` → ${f.linkedTaskId}` : '';
1356
1359
  const hidden = !f.isPublic ? ' [hidden]' : '';
1357
- return `• ${f.id}: ${f.title} [${f.type}] (${f.voterCount} votes)${hidden}${link}`;
1360
+ return `• ${f.id}: ${f.title} [${f.type}] (${f.status}) (${f.voterCount} votes)${hidden}${link}`;
1358
1361
  });
1362
+ const newCount = data.feedback.filter((f) => f.status === 'new').length;
1363
+ const nudge = newCount > 0
1364
+ ? `\n\n💡 ${newCount} feedback item${newCount > 1 ? 's are' : ' is'} still "new". ` +
1365
+ 'Use `update_feedback` to triage (e.g., set to "under_review" or "planned").'
1366
+ : '';
1359
1367
  return {
1360
- content: [{ type: 'text', text: `Feedback:\n${lines.join('\n')}` }],
1368
+ content: [{ type: 'text', text: `Feedback:\n${lines.join('\n')}${nudge}` }],
1361
1369
  structuredContent: { feedback: data.feedback },
1362
1370
  };
1363
1371
  });
@@ -1384,6 +1392,9 @@ server.registerTool('get_feedback', {
1384
1392
  f.linkedTaskId ? `Linked: ${f.linkedTaskId}` : '',
1385
1393
  `\n${f.description}`,
1386
1394
  ].filter(Boolean);
1395
+ if (f.aiSummary) {
1396
+ parts.push(`\n## AI Summary\n${f.aiSummary}`);
1397
+ }
1387
1398
  if (f.metadata && typeof f.metadata === 'object' && Object.keys(f.metadata).length > 0) {
1388
1399
  const meta = f.metadata;
1389
1400
  parts.push(`\n## Debug Info`);
@@ -1423,6 +1434,10 @@ server.registerTool('get_feedback', {
1423
1434
  if (f.comments.length > 3)
1424
1435
  parts.push(`... and ${f.comments.length - 3} more`);
1425
1436
  }
1437
+ if (f.status === 'new') {
1438
+ parts.push('\n---\n💡 This feedback is still "new". Use `update_feedback` to triage it ' +
1439
+ '(e.g., "under_review", "planned", or "in_progress").');
1440
+ }
1426
1441
  return {
1427
1442
  content: [{ type: 'text', text: parts.join('\n') }],
1428
1443
  structuredContent: f,
@@ -1834,7 +1849,14 @@ server.registerTool('link_feedback_to_task', {
1834
1849
  };
1835
1850
  }
1836
1851
  return {
1837
- content: [{ type: 'text', text: `🔗 Linked ${linkedCount} feedback to task: ${result.feedbackTitles.join(', ')}` }],
1852
+ content: [
1853
+ {
1854
+ type: 'text',
1855
+ text: `🔗 Linked ${linkedCount} feedback to task: ${result.feedbackTitles.join(', ')}\n\n` +
1856
+ '💡 Consider updating the linked feedback status with `update_feedback` ' +
1857
+ '(e.g., to "planned" or "in_progress").',
1858
+ },
1859
+ ],
1838
1860
  structuredContent: result,
1839
1861
  };
1840
1862
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damper/mcp",
3
- "version": "0.10.4",
3
+ "version": "0.10.6",
4
4
  "description": "MCP server for Damper task management",
5
5
  "author": "Damper <hello@usedamper.com>",
6
6
  "repository": {