@agentistics/mcp 2.20.1 → 2.21.1

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.
@@ -576,7 +576,7 @@ var TOOLS = [
576
576
  },
577
577
  {
578
578
  name: "agentistics_task_subtask",
579
- description: "BETA — the task board is new and still changing; its shapes may move between releases. Add a subtask, or change one. Pass `title` to add; pass `id` with `done`, `status`, `assignee`, `dueDate` or `startDate` to edit one. A subtask carries the same columns its parent does, but no cost of its own: cost is measured per SESSION and rolls up to the task. To put a session ON a subtask use agentistics_task_session with `subtaskId` — a subtask holds ANY NUMBER of sessions, so the link lives on the session, not in a field here.",
579
+ description: "BETA — the task board is new and still changing; its shapes may move between releases. Add a subtask, or change one. Pass `title` to add; pass `id` with `done`, `status`, `assignee`, `dueDate`, `startDate` or `blockedBy` to edit one. A subtask carries the same columns its parent does, but no cost of its own: cost is measured per SESSION and rolls up to the task — the PARENT task is only the group the subtasks are delivered under. A subtask CAN be blocked by another subtask of the SAME parent (pass `blockedBy` as the full list of sibling subtask ids that must be `done` first; a sibling outside this task, or the subtask itself, is dropped rather than accepted) — this is separate from agentistics_task_blocked_by, which blocks a whole TASK on other tasks. To put a session ON a subtask use agentistics_task_session with `subtaskId` — a subtask holds ANY NUMBER of sessions, so the link lives on the session, not in a field here.",
580
580
  inputSchema: {
581
581
  type: "object",
582
582
  properties: {
@@ -590,7 +590,12 @@ var TOOLS = [
590
590
  },
591
591
  assignee: { type: "string" },
592
592
  dueDate: { type: "string" },
593
- startDate: { type: "string" }
593
+ startDate: { type: "string" },
594
+ blockedBy: {
595
+ type: "array",
596
+ items: { type: "string" },
597
+ description: "Full replacement list of SIBLING subtask ids (same parent task) that must be done before this one. Requires `id` — a subtask being created has no siblings to name yet."
598
+ }
594
599
  },
595
600
  required: ["ref"]
596
601
  }
@@ -943,7 +948,8 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
943
948
  const a = args;
944
949
  const cols = ["status", "assignee", "dueDate", "startDate", "title"];
945
950
  const named = cols.filter((c) => typeof a?.[c] === "string");
946
- const payload = a?.id !== undefined ? named.length > 0 ? { id: a.id, ...Object.fromEntries(named.map((c) => [c, a[c]])) } : { id: a.id, done: a?.done === true } : { title: a?.title };
951
+ const blockedBy = Array.isArray(a?.blockedBy) ? { blockedBy: a.blockedBy } : {};
952
+ const payload = a?.id !== undefined ? named.length > 0 || Array.isArray(a?.blockedBy) ? { id: a.id, ...Object.fromEntries(named.map((c) => [c, a[c]])), ...blockedBy } : { id: a.id, done: a?.done === true } : { title: a?.title };
947
953
  const body = await apiSend("POST", `/api/tasks/${encodeURIComponent(String(a?.ref))}/subtasks`, payload);
948
954
  return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
949
955
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentistics/mcp",
3
- "version": "2.20.1",
3
+ "version": "2.21.1",
4
4
  "description": "Agentistics MCP server — Claude Code analytics for Claude Desktop and Claude Code",
5
5
  "type": "module",
6
6
  "main": "./dist/agentistics-mcp.js",