saga-mcp 1.13.0 → 1.14.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.
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/web/queries.js +6 -1
- package/dist/web/queries.js.map +1 -1
- package/dist/web/ui.js +32 -1
- package/dist/web/ui.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
5
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
@@ -74,7 +75,27 @@ function listedTools() {
|
|
|
74
75
|
}
|
|
75
76
|
return ALL_TOOLS.filter((t) => CORE_TOOLS.has(t.name));
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
/**
|
|
79
|
+
* The version reported in the MCP handshake.
|
|
80
|
+
*
|
|
81
|
+
* This was hardcoded to '1.0.0' and stayed there through every release, so
|
|
82
|
+
* every client that logs or displays a server version has been reporting a
|
|
83
|
+
* number that was wrong from v1.0.1 onward — and it is the number a user would
|
|
84
|
+
* quote in a bug report. Reading package.json keeps the two from drifting
|
|
85
|
+
* again; test/server.test.js asserts they match.
|
|
86
|
+
*/
|
|
87
|
+
function serverVersion() {
|
|
88
|
+
try {
|
|
89
|
+
const require = createRequire(import.meta.url);
|
|
90
|
+
return require('../package.json').version;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Never let a missing package.json stop the server from starting: an
|
|
94
|
+
// unknown version is a cosmetic problem, a failed handshake is not.
|
|
95
|
+
return '0.0.0';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const server = new Server({ name: 'saga-mcp', version: serverVersion() }, { capabilities: { tools: {} } });
|
|
78
99
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
79
100
|
return { tools: listedTools() };
|
|
80
101
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/web/queries.js
CHANGED
|
@@ -94,7 +94,12 @@ export function listTasks(db, projectId, includeArchived = false) {
|
|
|
94
94
|
.prepare(`SELECT t.*, e.name as epic_name, e.branch as epic_branch,
|
|
95
95
|
(SELECT COUNT(*) FROM subtasks s WHERE s.task_id = t.id) as subtask_count,
|
|
96
96
|
(SELECT COUNT(*) FROM subtasks s WHERE s.task_id = t.id AND s.status = 'done') as subtask_done,
|
|
97
|
-
(SELECT COUNT(*) FROM comments c WHERE c.task_id = t.id AND c.is_deleted = 0) as comment_count
|
|
97
|
+
(SELECT COUNT(*) FROM comments c WHERE c.task_id = t.id AND c.is_deleted = 0) as comment_count,
|
|
98
|
+
-- Names of the unfinished blockers, so a row in the tree can say what it
|
|
99
|
+
-- is waiting on without a second request per task.
|
|
100
|
+
(SELECT group_concat(b.title, ', ') FROM task_dependencies d
|
|
101
|
+
JOIN tasks b ON b.id = d.depends_on_task_id
|
|
102
|
+
WHERE d.task_id = t.id AND b.status != 'done' AND b.is_deleted = 0) as blocked_by
|
|
98
103
|
FROM tasks t JOIN epics e ON e.id = t.epic_id
|
|
99
104
|
WHERE e.project_id = ?${hide}
|
|
100
105
|
ORDER BY e.sort_order, e.created_at, t.sort_order, t.created_at`)
|
package/dist/web/queries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/web/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AAEH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,OAAO,EAAE;SACN,OAAO,CACN;;;;;;;;;;;;;0BAaoB,CACrB;SACA,GAAG,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,SAAiB,EAAE,eAAe,GAAG,KAAK;IAC3F,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACjE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACjE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN,gEAAgE,WAAW;;;;;;;;;;;kEAWf,SAAS;;;;;;0BAMjD,CACrB;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN;;;;;;;;6CAQuC,SAAS;8BACxB,WAAW;;0CAEC,CACrC;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;oGAE8F,WAAW,GAAG,SAAS;+BAC5F,CAC1B;SACA,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;wDAEkD,WAAW,GAAG,SAAS;0GAC2B,CACrG;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN;;uCAEiC,CAClC;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;;wEAGkE,CACnE;SACA,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAqB,EAAE,SAAiB,EAAE,eAAe,GAAG,KAAK;IACzF,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C,CAAC;IAC/E,OAAO,EAAE;SACN,OAAO,CACN
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/web/queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AAEH,MAAM,UAAU,YAAY,CAAC,EAAqB;IAChD,OAAO,EAAE;SACN,OAAO,CACN;;;;;;;;;;;;;0BAaoB,CACrB;SACA,GAAG,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,SAAiB,EAAE,eAAe,GAAG,KAAK;IAC3F,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACjE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACjE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN,gEAAgE,WAAW;;;;;;;;;;;kEAWf,SAAS;;;;;;0BAMjD,CACrB;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN;;;;;;;;6CAQuC,SAAS;8BACxB,WAAW;;0CAEC,CACrC;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;oGAE8F,WAAW,GAAG,SAAS;+BAC5F,CAC1B;SACA,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;wDAEkD,WAAW,GAAG,SAAS;0GAC2B,CACrG;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN;;uCAEiC,CAClC;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;;wEAGkE,CACnE;SACA,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAqB,EAAE,SAAiB,EAAE,eAAe,GAAG,KAAK;IACzF,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C,CAAC;IAC/E,OAAO,EAAE;SACN,OAAO,CACN;;;;;;;;;;+BAUyB,IAAI;uEACoC,CAClE;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,MAAc,EAAE,cAAuB;IACpF,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;sBAEgB,CACjB;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,EAAE,EACF,EAAE,CAAC,OAAO,CAAC,0EAA0E,CAAC;SACnF,GAAG,CAAC,MAAM,CAAmC,CACjD,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN,cAAc;QACZ,CAAC,CAAC,kEAAkE;QACpE,CAAC,CAAC,qFAAqF,CAC1F;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CAAC,yEAAyE,CAAC;SAClF,GAAG,CAAC,MAAM,CAAkB,CAAC;IAEhC,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CACN;gCAC0B,CAC3B;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CACN;uEACiE,CAClE;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN;uEACiE,CAClE;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN;yCACmC,CACpC;SACA,GAAG,CAAC,MAAM,CAAC,CAAC;IAEf,OAAO;QACL,GAAI,IAAe;QACnB,QAAQ;QACR,QAAQ;QACR,qBAAqB,EAAE,YAAY,CAAC,CAAC;QACrC,KAAK;QACL,UAAU,EAAE,SAAS;QACrB,UAAU;QACV,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAqB,EAAE,SAAwB,EAAE,KAAa;IACtF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE;SACN,OAAO,CACN;;;;;;;0CAOoC,CACrC;SACA,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,SAAwB,EAAE,KAAa;IACzF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE;aACN,OAAO,CAAC,sEAAsE,CAAC;aAC/E,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAClD,OAAO,EAAE;SACN,OAAO,CACN,oCAAoC,KAAK,CAAC,GAAG,4CAA4C,CAC1F;SACA,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAqB,EAAE,KAAa,EAAE,KAAa;IACxE,MAAM,OAAO,GAAG,IAAI,KAAK,GAAG,CAAC;IAC7B,OAAO;QACL,QAAQ,EAAE,EAAE;aACT,OAAO,CAAC,oGAAoG,CAAC;aAC7G,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,EAAE;aACN,OAAO,CACN;;kFAE0E,CAC3E;aACA,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,EAAE;aACN,OAAO,CACN;;wGAEgG,CACjG;aACA,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,EAAE;aACN,OAAO,CAAC,yIAAyI,CAAC;aAClJ,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;KAChC,CAAC;AACJ,CAAC"}
|
package/dist/web/ui.js
CHANGED
|
@@ -29,6 +29,8 @@ export const PAGE = `<!doctype html>
|
|
|
29
29
|
--blocked: #d64545;
|
|
30
30
|
--done: #2e9e5b;
|
|
31
31
|
--critical: #d64545;
|
|
32
|
+
--critical-fill: #c62f2f;
|
|
33
|
+
--critical-ink: #ffffff;
|
|
32
34
|
--high: #d97706;
|
|
33
35
|
--medium: #6b727c;
|
|
34
36
|
--low: #9aa2ad;
|
|
@@ -49,6 +51,8 @@ export const PAGE = `<!doctype html>
|
|
|
49
51
|
--blocked: #f07171;
|
|
50
52
|
--done: #4ec27f;
|
|
51
53
|
--critical: #f07171;
|
|
54
|
+
--critical-fill: #f07171;
|
|
55
|
+
--critical-ink: #201a1a;
|
|
52
56
|
--high: #e0a34a;
|
|
53
57
|
--medium: #929aa5;
|
|
54
58
|
--low: #6d7580;
|
|
@@ -141,6 +145,17 @@ h2:first-child { margin-top: 0; }
|
|
|
141
145
|
.st-cancelled, .st-archived { color: var(--muted); }
|
|
142
146
|
.st-on_hold { color: var(--high); }
|
|
143
147
|
.pr-critical { color: var(--critical); }
|
|
148
|
+
/* --critical and --blocked are the same red, which made a blocked status dot
|
|
149
|
+
and a critical priority pill read as the same signal in a dense list (#37).
|
|
150
|
+
They are now separated by FORM, not hue: critical is the only filled pill on
|
|
151
|
+
the page, and a blocked row is marked with a stop sign instead of a dot. Form
|
|
152
|
+
survives greyscale and colour blindness in a way a second red never would. */
|
|
153
|
+
.pill.pr-critical {
|
|
154
|
+
background: var(--critical-fill); border-color: var(--critical-fill);
|
|
155
|
+
color: var(--critical-ink); font-weight: 600;
|
|
156
|
+
}
|
|
157
|
+
.stopsign { font-size: 12px; line-height: 1; flex: none; cursor: help; }
|
|
158
|
+
.pill.blockedpill { color: var(--blocked); border-color: var(--blocked); }
|
|
144
159
|
.pr-high { color: var(--high); }
|
|
145
160
|
.pr-medium { color: var(--medium); }
|
|
146
161
|
.pr-low { color: var(--low); }
|
|
@@ -837,12 +852,26 @@ function tile(n, l) {
|
|
|
837
852
|
return '<div class="tile"><div class="n">' + n + '</div><div class="l">' + l + '</div></div>';
|
|
838
853
|
}
|
|
839
854
|
|
|
855
|
+
/**
|
|
856
|
+
* A blocked task is marked with a stop sign rather than a coloured dot.
|
|
857
|
+
*
|
|
858
|
+
* The dot alone carried the whole signal, in a red that --critical also used,
|
|
859
|
+
* so a blocked low-priority task and a critical unblocked one looked alike at a
|
|
860
|
+
* glance (#37, reported by @rusak47). A glyph cannot be confused with a pill,
|
|
861
|
+
* and the tooltip names the blockers so the tree answers "why" without opening
|
|
862
|
+
* the task.
|
|
863
|
+
*/
|
|
864
|
+
function blockedMark(t) {
|
|
865
|
+
var waiting = t.blocked_by ? 'Blocked by ' + t.blocked_by : 'Blocked';
|
|
866
|
+
return '<span class="stopsign" title="' + esc(waiting) + '">\u26D4</span>';
|
|
867
|
+
}
|
|
868
|
+
|
|
840
869
|
function taskLine(t, extra, opts) {
|
|
841
870
|
var drag = opts && opts.draggable && canEdit();
|
|
842
871
|
return '<div class="tline" data-task="' + t.id + '"' +
|
|
843
872
|
(drag ? ' data-task-row="' + t.id + '" data-epic="' + t.epic_id + '" draggable="true"' : '') + '>' +
|
|
844
873
|
(drag ? '<span class="thandle" title="Drag to reorder">⠿</span>' : '') +
|
|
845
|
-
'<span class="dot st-' + esc(t.status) + '"></span>' +
|
|
874
|
+
(t.status === 'blocked' ? blockedMark(t) : '<span class="dot st-' + esc(t.status) + '"></span>') +
|
|
846
875
|
'<span class="grow ellip">' + esc(t.title) + '</span>' +
|
|
847
876
|
(extra ? '<span class="muted" style="font-size:12px">' + extra + '</span>' : '') +
|
|
848
877
|
(t.epic_name ? '<span class="muted ellip" style="font-size:12px;max-width:180px">' + esc(t.epic_name) + '</span>' : '') +
|
|
@@ -905,6 +934,8 @@ function viewEpics() {
|
|
|
905
934
|
'<span class="muted">' + (open ? '▾' : '▸') + '</span>' +
|
|
906
935
|
'<span class="grow ellip"><strong>' + esc(e.name) + '</strong></span></span>' +
|
|
907
936
|
(e.branch ? '<span class="pill pr-low">⎇ ' + esc(e.branch) + '</span>' : '') +
|
|
937
|
+
(e.blocked_count ? '<span class="pill blockedpill" title="' + e.blocked_count +
|
|
938
|
+
' task(s) in this epic are blocked">\u26D4 ' + e.blocked_count + '</span>' : '') +
|
|
908
939
|
pill('pr', e.priority) + pill('st', e.status) +
|
|
909
940
|
'<span class="muted" style="font-size:12px">' + (e.done_count || 0) + '/' + (e.task_count || 0) + '</span>' +
|
|
910
941
|
(canEdit() ? '<button class="btn" data-edit-epic="' + e.id + '">Edit</button>' +
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GAAW
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,IAAI,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAy2DpB,CAAC"}
|
package/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "saga-mcp",
|
|
4
4
|
"display_name": "Saga — Project Tracker for AI Agents",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.14.0",
|
|
6
6
|
"description": "A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project scoped, with full hierarchy and activity logging — so LLMs never lose track.",
|
|
7
7
|
"long_description": "Saga gives your AI assistant a structured SQLite database to track projects, epics, tasks, subtasks, notes, and decisions across sessions. No more scattered markdown files — one `tracker_dashboard` call gives full project context to resume work.\n\n**Key features:**\n- Full hierarchy: Projects > Epics > Tasks > Subtasks\n- Task dependencies: Express sequencing with auto-block/unblock\n- Comments: Threaded discussions on tasks for decision trails, with reversible soft-delete\n- Templates: Reusable task sets with variable substitution\n- Dashboard: One tool call gives full overview with natural language summary\n- SQLite: Self-contained `.tracker.db` file per project — zero setup\n- Activity log: Every mutation is automatically tracked\n- Notes system: Decisions, context, meeting notes, blockers\n- Batch operations: Create multiple subtasks or update multiple tasks in one call\n- 35 focused tools with safety annotations\n- Web UI: `saga-web` serves a local dashboard for browsing and editing the same database\n- Import/export: Full project backup and migration as JSON",
|
|
8
8
|
"author": {
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saga-mcp",
|
|
3
3
|
"mcpName": "io.github.spranab/saga-mcp",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"description": "A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project scoped, with full hierarchy (Projects > Epics > Tasks > Subtasks), activity logging, and a dashboard
|
|
4
|
+
"version": "1.14.0",
|
|
5
|
+
"description": "A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project scoped, with full hierarchy (Projects > Epics > Tasks > Subtasks), activity logging, and a dashboard — so LLMs never lose track.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"bin": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"author": "spranab",
|
|
57
57
|
"license": "MIT",
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
59
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
60
60
|
"better-sqlite3": "^12.6.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|