@agentistics/mcp 2.41.0 → 2.43.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.
@@ -552,14 +552,14 @@ var TOOLS = [
552
552
  },
553
553
  {
554
554
  name: "agentistics_task_status",
555
- description: "BETA — the task board is new and still changing; its shapes may move between releases. Move a task: backlog | todo | in_progress | blocked | in_review | done | abandoned. Only `done` stamps a delivery and closes rounds-to-delivery; `abandoned` records that the work was given up on, which is a real outcome and not a failure to report. **`blocked` REQUIRES a `reason` or a `blockedBy` list** and is refused (422) without one: it is the status that names a problem somebody has to go and solve, and a blocked card that does not say what it is waiting on cannot be unblocked by anyone but you. **`done` REQUIRES the task to have at least one session filed under it** and is refused (422, `done_needs_session`) without one. Pass `actor` (who you are) so the move is recorded against you in the activity log.",
555
+ description: "BETA — the task board is new and still changing; its shapes may move between releases. Move a task to a status. The status VOCABULARY is an editable list now, not a fixed set — call agentistics_task_statuses first if you are unsure what this board currently has; a fresh board starts with exactly `todo`, `in_progress`, `blocked` and `done`. Only `done` stamps a delivery and closes rounds-to-delivery; `abandoned` (when the board has it) records that the work was given up on, which is a real outcome and not a failure to report — but it is NOT created by default, so use agentistics_task_status_edit to add it (or any other status) first if it is missing. **`blocked` REQUIRES a `reason` or a `blockedBy` list** and is refused (422) without one: it is the status that names a problem somebody has to go and solve, and a blocked card that does not say what it is waiting on cannot be unblocked by anyone but you. **`done` REQUIRES the task to have at least one session filed under it** and is refused (422, `done_needs_session`) without one. A `status` naming nothing this board currently has is refused (400, `unknown_status`). Pass `actor` (who you are) so the move is recorded against you in the activity log.",
556
556
  inputSchema: {
557
557
  type: "object",
558
558
  properties: {
559
559
  ref: { type: "string" },
560
560
  status: {
561
561
  type: "string",
562
- enum: ["backlog", "todo", "in_progress", "blocked", "in_review", "done", "abandoned"]
562
+ description: "A status id this board currently has — call agentistics_task_statuses to see the live list. The four every board starts with are todo | in_progress | blocked | done."
563
563
  },
564
564
  actor: { type: "string" },
565
565
  reason: {
@@ -575,6 +575,24 @@ var TOOLS = [
575
575
  required: ["ref", "status"]
576
576
  }
577
577
  },
578
+ {
579
+ name: "agentistics_task_statuses",
580
+ description: "BETA — the task board is new and still changing; its shapes may move between releases. List every status this board currently has (id, label, color, and whether it is protected — todo/in_progress/blocked/done can never be deleted or have their id changed, but their label and color can). Call this before agentistics_task_status if you are not sure a status you want to move a task to actually exists.",
581
+ inputSchema: { type: "object", properties: {} }
582
+ },
583
+ {
584
+ name: "agentistics_task_status_edit",
585
+ description: "BETA — the task board is new and still changing; its shapes may move between releases. Add, rename/recolor, or delete a status. Pass `label` (and optional `color`, a `#rrggbb` hex string) alone to CREATE a new, non-protected status — its id is derived from the label and returned. Pass `id` with `label` and/or `color` to EDIT an existing status's label/color — works on a protected one too, only its id can never change. Pass `id` with `remove: true` to DELETE it: refused (422, `protected`) for todo/in_progress/blocked/done regardless of usage, and refused (422, `in_use`, with `usageCount`) for any other status still referenced by at least one task or subtask.",
586
+ inputSchema: {
587
+ type: "object",
588
+ properties: {
589
+ id: { type: "string", description: "Required to edit or delete; omit to create." },
590
+ label: { type: "string" },
591
+ color: { type: "string", description: "A #rrggbb hex string." },
592
+ remove: { type: "boolean" }
593
+ }
594
+ }
595
+ },
578
596
  {
579
597
  name: "agentistics_task_comment",
580
598
  description: "BETA — the task board is new and still changing; its shapes may move between releases. Leave a comment on a task. Use it to tell the person and the other assistants what you did, what you found, or what you are blocked on. `author` is free text — say who you are (e.g. 'claude:3f5f').",
@@ -957,6 +975,24 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
957
975
  });
958
976
  return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
959
977
  }
978
+ case "agentistics_task_statuses": {
979
+ const body = await apiGet("/api/tasks/statuses");
980
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
981
+ }
982
+ case "agentistics_task_status_edit": {
983
+ const a = args;
984
+ const id = typeof a?.id === "string" && a.id ? a.id : null;
985
+ if (id && a?.remove === true) {
986
+ const body = await apiSend("DELETE", `/api/tasks/statuses/${encodeURIComponent(id)}`);
987
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
988
+ }
989
+ const payload = {
990
+ ...typeof a?.label === "string" ? { label: a.label } : {},
991
+ ...typeof a?.color === "string" ? { color: a.color } : {}
992
+ };
993
+ const body = id ? await apiSend("POST", `/api/tasks/statuses/${encodeURIComponent(id)}`, payload) : await apiSend("POST", "/api/tasks/statuses", payload);
994
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
995
+ }
960
996
  case "agentistics_task_comment": {
961
997
  const a = args;
962
998
  const body = await apiSend("POST", `/api/tasks/${encodeURIComponent(String(a?.ref))}/comments`, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentistics/mcp",
3
- "version": "2.41.0",
3
+ "version": "2.43.0",
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",