@damper/mcp 0.1.7 → 0.1.8

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 (3) hide show
  1. package/README.md +12 -0
  2. package/dist/index.js +66 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -74,6 +74,7 @@ The AI will see tools from both servers and can distinguish between them:
74
74
  | `list_tasks` | Get roadmap tasks (filter by `status`, `type`) |
75
75
  | `get_task` | Task details + subtasks + linked feedback |
76
76
  | `create_task` | Create task with type (bug, feature, improvement, task) |
77
+ | `update_task` | Update description, plan, priority, effort, labels |
77
78
  | `start_task` | Lock and start task (use `force` to take over) |
78
79
  | `add_note` | Add progress note |
79
80
  | `create_subtask` | Add subtask to a task |
@@ -104,6 +105,17 @@ Tasks include project management fields visible in `list_tasks` and `get_task`:
104
105
  - **Labels**: Custom tags
105
106
  - **Due date**: Target completion date
106
107
 
108
+ ### Updating Tasks
109
+
110
+ Refine task details as you work:
111
+
112
+ ```
113
+ > Set priority to high for this task
114
+ > Update the implementation plan with what I've learned
115
+ > Add labels: backend, api, auth
116
+ > Set effort to medium
117
+ ```
118
+
107
119
  ### Subtasks
108
120
 
109
121
  Tasks can have subtasks for tracking incremental progress. Use `get_task` to see subtasks with their IDs:
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ async function api(method, path, body) {
34
34
  // Server
35
35
  const server = new McpServer({
36
36
  name: 'damper',
37
- version: '0.1.7',
37
+ version: '0.1.8',
38
38
  });
39
39
  // Output schemas
40
40
  const SubtaskProgressSchema = z.object({
@@ -199,6 +199,71 @@ server.registerTool('get_task', {
199
199
  structuredContent: t,
200
200
  };
201
201
  });
202
+ // Tool: Update task
203
+ server.registerTool('update_task', {
204
+ title: 'Update Task',
205
+ description: 'Update task fields like description, implementation plan, priority, effort, or labels. ' +
206
+ 'Useful for refining task details as you learn more about the work.',
207
+ inputSchema: z.object({
208
+ taskId: z.string().describe('Task ID'),
209
+ description: z.string().optional().describe('Task description'),
210
+ implementationPlan: z.string().optional().describe('Implementation plan (markdown)'),
211
+ priority: z.enum(['high', 'medium', 'low']).nullable().optional().describe('Task priority'),
212
+ effort: z.enum(['xs', 's', 'm', 'l', 'xl']).nullable().optional().describe('Estimated effort'),
213
+ labels: z.array(z.string()).optional().describe('Labels/tags'),
214
+ }),
215
+ outputSchema: z.object({
216
+ id: z.string(),
217
+ title: z.string(),
218
+ description: z.string().nullable().optional(),
219
+ implementationPlan: z.string().nullable().optional(),
220
+ priority: z.string().nullable().optional(),
221
+ effort: z.string().nullable().optional(),
222
+ labels: z.array(z.string()).optional(),
223
+ }),
224
+ annotations: {
225
+ readOnlyHint: false,
226
+ destructiveHint: false,
227
+ idempotentHint: true,
228
+ openWorldHint: false,
229
+ },
230
+ }, async ({ taskId, description, implementationPlan, priority, effort, labels }) => {
231
+ const body = {};
232
+ if (description !== undefined)
233
+ body.description = description;
234
+ if (implementationPlan !== undefined)
235
+ body.implementationPlan = implementationPlan;
236
+ if (priority !== undefined)
237
+ body.priority = priority;
238
+ if (effort !== undefined)
239
+ body.effort = effort;
240
+ if (labels !== undefined)
241
+ body.labels = labels;
242
+ const result = await api('PATCH', `/api/agent/tasks/${taskId}`, body);
243
+ const updates = [];
244
+ if (description !== undefined)
245
+ updates.push('description');
246
+ if (implementationPlan !== undefined)
247
+ updates.push('plan');
248
+ if (priority !== undefined)
249
+ updates.push(`priority=${priority || 'none'}`);
250
+ if (effort !== undefined)
251
+ updates.push(`effort=${effort || 'none'}`);
252
+ if (labels !== undefined)
253
+ updates.push(`labels=[${labels.join(', ')}]`);
254
+ return {
255
+ content: [{ type: 'text', text: `📝 Updated ${result.title}: ${updates.join(', ')}` }],
256
+ structuredContent: {
257
+ id: result.id,
258
+ title: result.title,
259
+ description: result.description,
260
+ implementationPlan: result.implementationPlan,
261
+ priority: result.priority,
262
+ effort: result.effort,
263
+ labels: result.labels,
264
+ },
265
+ };
266
+ });
202
267
  // Tool: Create task
203
268
  server.registerTool('create_task', {
204
269
  title: 'Create Task',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damper/mcp",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "MCP server for Damper task management",
5
5
  "author": "Damper <hello@usedamper.com>",
6
6
  "repository": {