saga-mcp 1.1.0 → 1.3.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/README.md +138 -41
- package/dist/tools/activity.js +52 -0
- package/dist/tools/activity.js.map +1 -1
- package/manifest.json +81 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -12,7 +12,8 @@ A Jira-like project tracker MCP server for AI agents. SQLite-backed, per-project
|
|
|
12
12
|
- **Dashboard**: One tool call gives full project overview (stats, blocked tasks, recent changes)
|
|
13
13
|
- **Notes system**: Decisions, context, meeting notes, blockers — all searchable
|
|
14
14
|
- **Batch operations**: Create multiple subtasks or update multiple tasks in one call
|
|
15
|
-
- **
|
|
15
|
+
- **23 focused tools**: With MCP safety annotations on every tool
|
|
16
|
+
- **Cross-platform**: Works on macOS, Windows, and Linux
|
|
16
17
|
|
|
17
18
|
## Quick Start
|
|
18
19
|
|
|
@@ -59,64 +60,148 @@ npm install -g saga-mcp
|
|
|
59
60
|
DB_PATH=./my-project/.tracker.db saga-mcp
|
|
60
61
|
```
|
|
61
62
|
|
|
63
|
+
## Configuration
|
|
64
|
+
|
|
65
|
+
saga-mcp requires a single environment variable:
|
|
66
|
+
|
|
67
|
+
| Variable | Required | Description |
|
|
68
|
+
|----------|----------|-------------|
|
|
69
|
+
| `DB_PATH` | Yes | Absolute path to the `.tracker.db` SQLite file. The file and schema are auto-created on first use. |
|
|
70
|
+
|
|
71
|
+
No API keys, no accounts, no external services. Everything is stored locally in the SQLite file you specify.
|
|
72
|
+
|
|
62
73
|
## Tools
|
|
63
74
|
|
|
64
75
|
### Getting Started
|
|
65
76
|
|
|
66
|
-
| Tool | Description |
|
|
67
|
-
|
|
68
|
-
| `tracker_init` | Initialize tracker and create first project |
|
|
69
|
-
| `tracker_dashboard` | Full project overview — **call this first when resuming work** |
|
|
77
|
+
| Tool | Description | Annotations |
|
|
78
|
+
|------|-------------|-------------|
|
|
79
|
+
| `tracker_init` | Initialize tracker and create first project | `readOnly: false`, `idempotent: true` |
|
|
80
|
+
| `tracker_dashboard` | Full project overview — **call this first when resuming work** | `readOnly: true` |
|
|
70
81
|
|
|
71
82
|
### Projects
|
|
72
83
|
|
|
73
|
-
| Tool | Description |
|
|
74
|
-
|
|
75
|
-
| `project_create` | Create a new project |
|
|
76
|
-
| `project_list` | List projects with completion stats |
|
|
77
|
-
| `project_update` | Update project (archive to soft-delete) |
|
|
84
|
+
| Tool | Description | Annotations |
|
|
85
|
+
|------|-------------|-------------|
|
|
86
|
+
| `project_create` | Create a new project | `readOnly: false` |
|
|
87
|
+
| `project_list` | List projects with completion stats | `readOnly: true` |
|
|
88
|
+
| `project_update` | Update project (archive to soft-delete) | `readOnly: false`, `idempotent: true` |
|
|
78
89
|
|
|
79
90
|
### Epics
|
|
80
91
|
|
|
81
|
-
| Tool | Description |
|
|
82
|
-
|
|
83
|
-
| `epic_create` | Create an epic within a project |
|
|
84
|
-
| `epic_list` | List epics with task counts |
|
|
85
|
-
| `epic_update` | Update an epic |
|
|
92
|
+
| Tool | Description | Annotations |
|
|
93
|
+
|------|-------------|-------------|
|
|
94
|
+
| `epic_create` | Create an epic within a project | `readOnly: false` |
|
|
95
|
+
| `epic_list` | List epics with task counts | `readOnly: true` |
|
|
96
|
+
| `epic_update` | Update an epic | `readOnly: false`, `idempotent: true` |
|
|
86
97
|
|
|
87
98
|
### Tasks
|
|
88
99
|
|
|
89
|
-
| Tool | Description |
|
|
90
|
-
|
|
91
|
-
| `task_create` | Create a task within an epic |
|
|
92
|
-
| `task_list` | List/filter tasks (by epic, status, priority, assignee, tag) |
|
|
93
|
-
| `task_get` | Get task with subtasks and related notes |
|
|
94
|
-
| `task_update` | Update task (status changes auto-logged) |
|
|
95
|
-
| `task_batch_update` | Update multiple tasks at once |
|
|
100
|
+
| Tool | Description | Annotations |
|
|
101
|
+
|------|-------------|-------------|
|
|
102
|
+
| `task_create` | Create a task within an epic | `readOnly: false` |
|
|
103
|
+
| `task_list` | List/filter tasks (by epic, status, priority, assignee, tag) | `readOnly: true` |
|
|
104
|
+
| `task_get` | Get task with subtasks and related notes | `readOnly: true` |
|
|
105
|
+
| `task_update` | Update task (status changes auto-logged) | `readOnly: false`, `idempotent: true` |
|
|
106
|
+
| `task_batch_update` | Update multiple tasks at once | `readOnly: false`, `idempotent: true` |
|
|
96
107
|
|
|
97
108
|
### Subtasks
|
|
98
109
|
|
|
99
|
-
| Tool | Description |
|
|
100
|
-
|
|
101
|
-
| `subtask_create` | Create subtask(s) — supports batch |
|
|
102
|
-
| `subtask_update` | Update subtask title/status |
|
|
103
|
-
| `subtask_delete` | Delete subtask(s) — supports batch |
|
|
110
|
+
| Tool | Description | Annotations |
|
|
111
|
+
|------|-------------|-------------|
|
|
112
|
+
| `subtask_create` | Create subtask(s) — supports batch | `readOnly: false` |
|
|
113
|
+
| `subtask_update` | Update subtask title/status | `readOnly: false`, `idempotent: true` |
|
|
114
|
+
| `subtask_delete` | Delete subtask(s) — supports batch | `destructive: true`, `idempotent: true` |
|
|
104
115
|
|
|
105
116
|
### Notes
|
|
106
117
|
|
|
107
|
-
| Tool | Description |
|
|
108
|
-
|
|
109
|
-
| `note_save` | Create or update a note (upsert) |
|
|
110
|
-
| `note_list` | List notes with filters |
|
|
111
|
-
| `note_search` | Full-text search across notes |
|
|
112
|
-
| `note_delete` | Delete a note |
|
|
118
|
+
| Tool | Description | Annotations |
|
|
119
|
+
|------|-------------|-------------|
|
|
120
|
+
| `note_save` | Create or update a note (upsert) | `readOnly: false` |
|
|
121
|
+
| `note_list` | List notes with filters | `readOnly: true` |
|
|
122
|
+
| `note_search` | Full-text search across notes | `readOnly: true` |
|
|
123
|
+
| `note_delete` | Delete a note | `destructive: true`, `idempotent: true` |
|
|
113
124
|
|
|
114
125
|
### Intelligence
|
|
115
126
|
|
|
116
|
-
| Tool | Description |
|
|
117
|
-
|
|
118
|
-
| `tracker_search` | Cross-entity search (projects, epics, tasks, notes) |
|
|
119
|
-
| `activity_log` | View change history with filters |
|
|
127
|
+
| Tool | Description | Annotations |
|
|
128
|
+
|------|-------------|-------------|
|
|
129
|
+
| `tracker_search` | Cross-entity search (projects, epics, tasks, notes) | `readOnly: true` |
|
|
130
|
+
| `activity_log` | View change history with filters | `readOnly: true` |
|
|
131
|
+
| `tracker_session_diff` | Show what changed since a given timestamp — call at session start | `readOnly: true` |
|
|
132
|
+
|
|
133
|
+
## Usage Examples
|
|
134
|
+
|
|
135
|
+
### Example 1: Starting a new project
|
|
136
|
+
|
|
137
|
+
**User prompt:** "Set up tracking for my new e-commerce API project"
|
|
138
|
+
|
|
139
|
+
**Tool calls:**
|
|
140
|
+
```
|
|
141
|
+
tracker_init({ project_name: "E-Commerce API", project_description: "REST API for online store" })
|
|
142
|
+
epic_create({ project_id: 1, name: "Authentication", priority: "high" })
|
|
143
|
+
epic_create({ project_id: 1, name: "Product Catalog", priority: "medium" })
|
|
144
|
+
task_create({ epic_id: 1, title: "Implement JWT auth", priority: "high" })
|
|
145
|
+
task_create({ epic_id: 1, title: "Add OAuth2 Google login", priority: "medium" })
|
|
146
|
+
subtask_create({ task_id: 1, titles: ["Set up JWT library", "Create login endpoint", "Create refresh endpoint", "Add middleware"] })
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Expected output:** Project created with ID 1, two epics, two tasks, and four subtasks. Activity log records all creations.
|
|
150
|
+
|
|
151
|
+
### Example 2: Resuming work on an existing project
|
|
152
|
+
|
|
153
|
+
**User prompt:** "What's the current status of my project? What should I work on next?"
|
|
154
|
+
|
|
155
|
+
**Tool calls:**
|
|
156
|
+
```
|
|
157
|
+
tracker_dashboard({})
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Expected output:**
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"project": { "id": 1, "name": "E-Commerce API", "status": "active" },
|
|
164
|
+
"stats": {
|
|
165
|
+
"total_epics": 2,
|
|
166
|
+
"total_tasks": 5,
|
|
167
|
+
"tasks_done": 2,
|
|
168
|
+
"tasks_in_progress": 1,
|
|
169
|
+
"tasks_blocked": 1,
|
|
170
|
+
"tasks_todo": 1,
|
|
171
|
+
"completion_pct": 40.0
|
|
172
|
+
},
|
|
173
|
+
"epics": [
|
|
174
|
+
{ "name": "Authentication", "task_count": 3, "done_count": 2, "completion_pct": 66.7 },
|
|
175
|
+
{ "name": "Product Catalog", "task_count": 2, "done_count": 0, "completion_pct": 0 }
|
|
176
|
+
],
|
|
177
|
+
"blocked_tasks": [
|
|
178
|
+
{ "id": 4, "title": "Add rate limiting", "epic_name": "Authentication" }
|
|
179
|
+
],
|
|
180
|
+
"recent_activity": [...],
|
|
181
|
+
"recent_notes": [...]
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The dashboard immediately shows: 40% done, 1 blocked task in Auth, Product Catalog hasn't started. The LLM can now prioritize unblocking the rate limiting task or starting on the catalog.
|
|
186
|
+
|
|
187
|
+
### Example 3: Recording a decision and marking tasks done
|
|
188
|
+
|
|
189
|
+
**User prompt:** "We decided to use Redis for caching. Mark the caching research tasks as done."
|
|
190
|
+
|
|
191
|
+
**Tool calls:**
|
|
192
|
+
```
|
|
193
|
+
note_save({
|
|
194
|
+
title: "Decision: Use Redis for caching",
|
|
195
|
+
content: "After evaluating Redis vs Memcached vs in-memory, decided on Redis.\n\nReasons:\n- Built-in persistence\n- Pub/sub for cache invalidation\n- Better data structure support\n\nTrade-offs: Extra infrastructure, but managed Redis on AWS is acceptable.",
|
|
196
|
+
note_type: "decision",
|
|
197
|
+
related_entity_type: "epic",
|
|
198
|
+
related_entity_id: 3,
|
|
199
|
+
tags: ["caching", "infrastructure"]
|
|
200
|
+
})
|
|
201
|
+
task_batch_update({ ids: [8, 9], status: "done" })
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Expected output:** Decision note created with ID, linked to the epic. Tasks 8 and 9 marked as done. Activity log records both the note creation and the status changes with "status: todo -> done" entries.
|
|
120
205
|
|
|
121
206
|
## How It Works
|
|
122
207
|
|
|
@@ -163,11 +248,18 @@ Every create, update, and delete is automatically recorded:
|
|
|
163
248
|
}
|
|
164
249
|
```
|
|
165
250
|
|
|
166
|
-
##
|
|
251
|
+
## Privacy Policy
|
|
167
252
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
253
|
+
saga-mcp is a fully local, offline tool. It does **not**:
|
|
254
|
+
|
|
255
|
+
- Collect any user data
|
|
256
|
+
- Send any data to external servers
|
|
257
|
+
- Require internet access after installation
|
|
258
|
+
- Use analytics, telemetry, or tracking of any kind
|
|
259
|
+
|
|
260
|
+
All data is stored exclusively in the local SQLite file specified by `DB_PATH`. You own your data completely. Uninstalling saga-mcp and deleting the `.tracker.db` file removes all traces.
|
|
261
|
+
|
|
262
|
+
For questions about privacy, open an issue at https://github.com/spranab/saga-mcp/issues.
|
|
171
263
|
|
|
172
264
|
## Development
|
|
173
265
|
|
|
@@ -179,6 +271,11 @@ npm run build
|
|
|
179
271
|
DB_PATH=./test.db npm start
|
|
180
272
|
```
|
|
181
273
|
|
|
274
|
+
## Support
|
|
275
|
+
|
|
276
|
+
- **Issues**: https://github.com/spranab/saga-mcp/issues
|
|
277
|
+
- **Repository**: https://github.com/spranab/saga-mcp
|
|
278
|
+
|
|
182
279
|
## License
|
|
183
280
|
|
|
184
281
|
MIT
|
package/dist/tools/activity.js
CHANGED
|
@@ -24,6 +24,21 @@ export const definitions = [
|
|
|
24
24
|
},
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
name: 'tracker_session_diff',
|
|
29
|
+
description: 'Show what changed since a given timestamp. Returns aggregated summary with counts by action and entity type, plus highlights of key changes. Call this at the start of a session to understand what happened since the last one.',
|
|
30
|
+
annotations: { title: 'Session Diff', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: 'object',
|
|
33
|
+
properties: {
|
|
34
|
+
since: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'ISO 8601 datetime — show changes after this time (e.g. "2026-02-21T15:00:00")',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
required: ['since'],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
27
42
|
{
|
|
28
43
|
name: 'task_batch_update',
|
|
29
44
|
description: 'Update multiple tasks at once. Useful for changing status of several tasks (e.g., mark 3 tasks as done) or reassigning tasks.',
|
|
@@ -74,6 +89,42 @@ function handleActivityLog(args) {
|
|
|
74
89
|
params.push(limit);
|
|
75
90
|
return db.prepare(sql).all(...params);
|
|
76
91
|
}
|
|
92
|
+
function handleSessionDiff(args) {
|
|
93
|
+
const db = getDb();
|
|
94
|
+
const since = args.since;
|
|
95
|
+
const rows = db
|
|
96
|
+
.prepare('SELECT * FROM activity_log WHERE created_at >= ? ORDER BY created_at ASC')
|
|
97
|
+
.all(since);
|
|
98
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
99
|
+
// Aggregate by action
|
|
100
|
+
const summary = { created: 0, updated: 0, status_changed: 0, deleted: 0 };
|
|
101
|
+
// Aggregate by entity_type -> action
|
|
102
|
+
const byEntity = {};
|
|
103
|
+
const highlights = [];
|
|
104
|
+
for (const row of rows) {
|
|
105
|
+
const action = row.action;
|
|
106
|
+
const entityType = row.entity_type;
|
|
107
|
+
summary[action] = (summary[action] ?? 0) + 1;
|
|
108
|
+
if (!byEntity[entityType]) {
|
|
109
|
+
byEntity[entityType] = { created: 0, updated: 0, status_changed: 0, deleted: 0 };
|
|
110
|
+
}
|
|
111
|
+
byEntity[entityType][action] = (byEntity[entityType][action] ?? 0) + 1;
|
|
112
|
+
// Pick out highlights: status changes, creates, and deletes
|
|
113
|
+
if (action === 'status_changed' || action === 'created' || action === 'deleted') {
|
|
114
|
+
if (row.summary)
|
|
115
|
+
highlights.push(row.summary);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
since,
|
|
120
|
+
until: now,
|
|
121
|
+
total_changes: rows.length,
|
|
122
|
+
summary,
|
|
123
|
+
by_entity_type: byEntity,
|
|
124
|
+
highlights,
|
|
125
|
+
activity: rows,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
77
128
|
function handleTaskBatchUpdate(args) {
|
|
78
129
|
const db = getDb();
|
|
79
130
|
const ids = args.ids;
|
|
@@ -122,6 +173,7 @@ function handleTaskBatchUpdate(args) {
|
|
|
122
173
|
}
|
|
123
174
|
export const handlers = {
|
|
124
175
|
activity_log: handleActivityLog,
|
|
176
|
+
tracker_session_diff: handleSessionDiff,
|
|
125
177
|
task_batch_update: handleTaskBatchUpdate,
|
|
126
178
|
};
|
|
127
179
|
//# sourceMappingURL=activity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,kJAAkJ;QACpJ,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC9H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;oBACpD,WAAW,EAAE,uBAAuB;iBACrC;gBACD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACxE,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC;oBACzD,WAAW,EAAE,uBAAuB;iBACrC;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;gBAChG,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;aACxC;SACF;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,+HAA+H;QACjI,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QACrI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC1B,WAAW,EAAE,oBAAoB;iBAClC;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;gBACtF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;gBACzE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAChC;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;CACF,CAAC;AAEF,SAAS,iBAAiB,CAAC,IAA6B;IACtD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAiC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAA+B,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;IAC/C,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,EAAE,CAAC;IAE3C,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,UAAU,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,GAAG,GAAG,8BAA8B,QAAQ,mCAAmC,CAAC;IACtF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAA6B;IAC1D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAe,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAiC,CAAC;IAE1D,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;YACtE,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAErD,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAc,EAAE,CAAC;YAE7B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,MAAM,GAAG,EAAE;iBACd,OAAO,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC;iBAC1E,GAAG,CAAC,GAAG,MAAM,CAA4B,CAAC;YAE7C,qBAAqB;YACrB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACvC,WAAW,CACT,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAC1C,MAAM,CAAC,MAAgB,EAAE,MAAM,EAC/B,SAAS,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,CAC/D,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,WAAW,CACT,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EACrC,MAAM,CAAC,QAAkB,EAAE,QAAQ,EACnC,SAAS,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,QAAQ,OAAO,QAAQ,EAAE,CACrE,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgC;IACnD,YAAY,EAAE,iBAAiB;IAC/B,iBAAiB,EAAE,qBAAqB;CACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": "0.3",
|
|
3
|
+
"name": "saga-mcp",
|
|
4
|
+
"display_name": "Saga — Project Tracker for AI Agents",
|
|
5
|
+
"version": "1.3.0",
|
|
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
|
+
"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- SQLite: Self-contained `.tracker.db` file per project — zero setup\n- Activity log: Every mutation is automatically tracked\n- Dashboard: One tool call gives full project overview\n- Notes system: Decisions, context, meeting notes, blockers\n- Batch operations: Create multiple subtasks or update multiple tasks in one call\n- 23 focused tools with safety annotations",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "spranab",
|
|
10
|
+
"url": "https://github.com/spranab"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/spranab/saga-mcp.git"
|
|
15
|
+
},
|
|
16
|
+
"homepage": "https://github.com/spranab/saga-mcp#readme",
|
|
17
|
+
"documentation": "https://github.com/spranab/saga-mcp#readme",
|
|
18
|
+
"support": "https://github.com/spranab/saga-mcp/issues",
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"project-tracker",
|
|
22
|
+
"task-manager",
|
|
23
|
+
"sqlite",
|
|
24
|
+
"jira-alternative",
|
|
25
|
+
"ai-agent",
|
|
26
|
+
"llm-tools",
|
|
27
|
+
"model-context-protocol"
|
|
28
|
+
],
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"privacy_policies": [],
|
|
31
|
+
"server": {
|
|
32
|
+
"type": "node",
|
|
33
|
+
"entry_point": "dist/index.js",
|
|
34
|
+
"mcp_config": {
|
|
35
|
+
"command": "node",
|
|
36
|
+
"args": ["${__dirname}/dist/index.js"],
|
|
37
|
+
"env": {
|
|
38
|
+
"DB_PATH": "${user_config.db_path}"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"tools": [
|
|
43
|
+
{ "name": "tracker_init", "description": "Initialize tracker and create first project" },
|
|
44
|
+
{ "name": "tracker_dashboard", "description": "Full project overview — call this first when resuming work" },
|
|
45
|
+
{ "name": "project_create", "description": "Create a new project" },
|
|
46
|
+
{ "name": "project_list", "description": "List projects with completion stats" },
|
|
47
|
+
{ "name": "project_update", "description": "Update project (archive to soft-delete)" },
|
|
48
|
+
{ "name": "epic_create", "description": "Create an epic within a project" },
|
|
49
|
+
{ "name": "epic_list", "description": "List epics with task counts" },
|
|
50
|
+
{ "name": "epic_update", "description": "Update an epic" },
|
|
51
|
+
{ "name": "task_create", "description": "Create a task within an epic" },
|
|
52
|
+
{ "name": "task_list", "description": "List/filter tasks by epic, status, priority, assignee, tag" },
|
|
53
|
+
{ "name": "task_get", "description": "Get task with subtasks and related notes" },
|
|
54
|
+
{ "name": "task_update", "description": "Update task (status changes auto-logged)" },
|
|
55
|
+
{ "name": "task_batch_update", "description": "Update multiple tasks at once" },
|
|
56
|
+
{ "name": "subtask_create", "description": "Create subtask(s) — supports batch" },
|
|
57
|
+
{ "name": "subtask_update", "description": "Update subtask title/status" },
|
|
58
|
+
{ "name": "subtask_delete", "description": "Delete subtask(s) — supports batch" },
|
|
59
|
+
{ "name": "note_save", "description": "Create or update a note (upsert)" },
|
|
60
|
+
{ "name": "note_list", "description": "List notes with filters" },
|
|
61
|
+
{ "name": "note_search", "description": "Full-text search across notes" },
|
|
62
|
+
{ "name": "note_delete", "description": "Delete a note" },
|
|
63
|
+
{ "name": "tracker_search", "description": "Cross-entity search (projects, epics, tasks, notes)" },
|
|
64
|
+
{ "name": "activity_log", "description": "View change history with filters" },
|
|
65
|
+
{ "name": "tracker_session_diff", "description": "Show what changed since a given timestamp — call at session start" }
|
|
66
|
+
],
|
|
67
|
+
"compatibility": {
|
|
68
|
+
"platforms": ["darwin", "win32", "linux"],
|
|
69
|
+
"runtimes": {
|
|
70
|
+
"node": ">=18.0.0"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"user_config": {
|
|
74
|
+
"db_path": {
|
|
75
|
+
"type": "file",
|
|
76
|
+
"title": "Database Path",
|
|
77
|
+
"description": "Path to the .tracker.db SQLite file. The file and schema are auto-created on first use.",
|
|
78
|
+
"required": true
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "saga-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
|
-
"README.md"
|
|
12
|
+
"README.md",
|
|
13
|
+
"manifest.json"
|
|
13
14
|
],
|
|
14
15
|
"scripts": {
|
|
15
16
|
"build": "tsc",
|