@agentistics/mcp 2.57.0 → 2.58.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.
@@ -756,6 +756,37 @@ var TOOLS = [
756
756
  description: "BETA — the task board is new and still changing; its shapes may move between releases. Delete a task and its comments, subtasks, files and links. The SESSIONS filed under it are kept — deleting a board entry never deletes work.",
757
757
  inputSchema: { type: "object", properties: { ref: { type: "string" } }, required: ["ref"] }
758
758
  },
759
+ {
760
+ name: "agentistics_session_groups",
761
+ description: 'List the user\'s SESSION GROUPS — the named folders in the Sessions sidebar ("Saved to later", "Pelvie", …) — with the sessions in each. A group is how a person keeps a fleet of assistants organised; every session belongs to at most one. Each member carries its `id` (the managed session id you can pass to the other tools), `title`, `state` and `harness` when the session is on this machine right now, or only its `key` when it is gone. Call this BEFORE creating a group, so you file a session under an existing one instead of making a near-duplicate. Only works on a machine, not on a central (a central has no local sessions to organise).',
762
+ inputSchema: { type: "object", properties: {}, required: [] }
763
+ },
764
+ {
765
+ name: "agentistics_session_group_create",
766
+ description: "Create a session group, optionally filing sessions into it in the same call. Use it to keep the assistants you start organised: start a session (for example `agentop session start …`, which prints its id), then create or reuse a group and file it. `sessions` takes session REFERENCES — a managed id (the `agentop-…` id `agentistics_session_groups` and `agentop session ls` print), a conversation id, an exact title, or a unique id prefix; any reference that matches nothing or more than one refuses the WHOLE call (404 / 409) and creates nothing, so a group is never half-filled. Filing moves a session out of any other group and unpins it if it was pinned. Duplicate group names are allowed, but they make later calls ambiguous — check `agentistics_session_groups` first and reuse a group when one fits.",
767
+ inputSchema: {
768
+ type: "object",
769
+ properties: {
770
+ name: { type: "string", description: "The group's name. Must not be blank." },
771
+ sessions: { type: "array", items: { type: "string" }, description: "Session references to file into the new group." }
772
+ },
773
+ required: ["name"]
774
+ }
775
+ },
776
+ {
777
+ name: "agentistics_session_group_edit",
778
+ description: "Change a session group. `action` is one of: `add` — file `session` under `group` (moves it out of any other group, unpins it if pinned); `remove` — take `session` out of whichever group holds it (the session itself is untouched); `rename` — give `group` a new `name`; `delete` — delete `group` (its sessions are NOT deleted, they only leave it). `group` is a group id OR its exact name (case-insensitive); a name shared by two groups answers 409 with the ids, so use the id. `session` is a managed id, a conversation id, an exact title or a unique id prefix. Refusals name what was wrong: 404 for a group or session that matches nothing, 409 for an ambiguous one, 400 for a blank name or a missing argument.",
779
+ inputSchema: {
780
+ type: "object",
781
+ properties: {
782
+ action: { type: "string", enum: ["add", "remove", "rename", "delete"] },
783
+ group: { type: "string", description: "A group id or name. Required for add, rename and delete." },
784
+ session: { type: "string", description: "A session reference. Required for add and remove." },
785
+ name: { type: "string", description: "The new name. Required for rename." }
786
+ },
787
+ required: ["action"]
788
+ }
789
+ },
759
790
  {
760
791
  name: "agentistics_summary",
761
792
  description: "Get an overview of AI coding usage metrics (across all tracked harnesses — Claude Code, Codex, Gemini, Copilot, Antigravity — or scoped to one): total tokens, estimated cost, sessions, streak, most used model, and top project. Good starting point for any metrics question.",
@@ -1105,6 +1136,40 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
1105
1136
  const body = await apiSend("DELETE", `/api/tasks/${encodeURIComponent(ref)}`);
1106
1137
  return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
1107
1138
  }
1139
+ case "agentistics_session_groups": {
1140
+ const body = await apiGet("/api/session-groups");
1141
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
1142
+ }
1143
+ case "agentistics_session_group_create": {
1144
+ const a = args;
1145
+ const body = await apiSend("POST", "/api/session-groups", {
1146
+ name: a?.name,
1147
+ ...Array.isArray(a?.sessions) ? { sessions: a.sessions } : {}
1148
+ });
1149
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
1150
+ }
1151
+ case "agentistics_session_group_edit": {
1152
+ const a = args;
1153
+ const group = encodeURIComponent(String(a?.group ?? ""));
1154
+ let body;
1155
+ switch (a?.action) {
1156
+ case "add":
1157
+ body = await apiSend("POST", `/api/session-groups/${group}/sessions`, { session: a?.session });
1158
+ break;
1159
+ case "remove":
1160
+ body = await apiSend("POST", "/api/session-groups/ungroup", { session: a?.session });
1161
+ break;
1162
+ case "rename":
1163
+ body = await apiSend("POST", `/api/session-groups/${group}`, { name: a?.name });
1164
+ break;
1165
+ case "delete":
1166
+ body = await apiSend("DELETE", `/api/session-groups/${group}`);
1167
+ break;
1168
+ default:
1169
+ throw new Error("agentistics_session_group_edit: `action` must be add, remove, rename or delete");
1170
+ }
1171
+ return { content: [{ type: "text", text: JSON.stringify(body, null, 2) }] };
1172
+ }
1108
1173
  case "agentistics_summary": {
1109
1174
  const harness = args?.harness;
1110
1175
  const unified = !harness || harness === "all";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentistics/mcp",
3
- "version": "2.57.0",
3
+ "version": "2.58.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",