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.
saga-mcp provides 43 tools with consistent verb_noun naming (tracker_*, project_*, epic_*, task_*, etc.) and visible JSON Schema definitions. All tools have descriptions and input schemas. However, output schemas are undocumented (no description of return fields), parameter descriptions vary in quality (some are minimal, e.g., 'Task ID' vs. detailed context), and error handling lacks recovery guidance. The schema definitions in the code are properly structured with types and descriptions per parameter, but the lack of documented output structure and missing enum constraints on many enumerated fields (status, priority) are notable gaps. Tool composition is sound, each tool has a single responsibility and names clearly distinguish operations. This is solid mid-tier quality: above the median for community servers but short of production-grade.
Get activity log for an entity
Add a comment to a task
Delete a comment (soft delete, can be restored)
List comments on a task
Restore a deleted comment
Archive an epic
Create a new epic in a project
Get a specific epic by ID
Output schemas undocumented. No tool describes what fields are returned, their types, or whether results are paginated. LLMs cannot infer downstream field names or plan multi-step chains.
Status and priority parameters lack enum constraints. Tools accept string values (e.g., 'planned', 'in_progress', 'review', 'done', 'cancelled' for status) but descriptions do not enumerate valid options. LLMs will hallucinate invalid values.
Error handling provides no recovery guidance. Errors from the friendlyError() function (e.g., constraint violations, missing database) are user-readable but do not suggest next steps (e.g., 'Call tracker_init first' for database errors).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
List all epics in a project
Update an epic
Delete a note
Get a specific note by ID
List notes in a project
Save or update a note in a project
Create a new project
Get a specific project by ID
List all projects
Update a project
Search tasks by title, description, or tags
Create one or more subtasks for a task
Delete a subtask (soft delete, can be restored)
Reorder subtasks within a task
Update a subtask
Update multiple tasks at once
Create a new task in an epic
Delete a task (soft delete, can be restored)
Get a specific task by ID
List tasks with optional filtering
Lock or unlock a task description from editing
Reorder tasks within an epic
Restore a deleted task
Update a task
Apply a template to create multiple tasks in an epic
Create a task template
Delete a template
Get a specific template by ID
List all templates
Update a template
Get the project dashboard with summary statistics and recent activity
Export the entire project data as JSON
Import project data from JSON
Initialize the tracker database and create the first project
Get the next recommended action or task to work on
Destructive operations lack confirmation or dry-run capability. task_delete, note_delete, comment_delete, template_delete, and subtask_delete perform hard deletes (though soft in the database) without a confirmation step or preview mechanism.
Many list/pagination tools lack documented limits. task_list, comment_list, activity_log accept 'limit' and 'offset' but do not specify max limit or default behavior. LLMs may request unbounded results.
Minimal parameter descriptions. Many tools have parameters with one-word descriptions (e.g., 'Task ID', 'Epic ID', 'Project ID'). Descriptions lack context on valid ranges, formats, or dependencies.