Saga MCP server
Jira-like project tracker for AI agents with SQLite, full task hierarchy, and dashboard
37 stars494 downloads/wk
Reviews
Write oneNobody has reviewed Saga yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Saga tools (41, 17 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
activity_logView the activity log showing what changed and when. Useful for understanding recent progress or reviewing what happened since the last session.
comment_addAdd a comment to a task. Comments create a chronological discussion thread — useful for leaving breadcrumbs across sessions.
comment_deletewrite actionRemove a comment (soft delete). The row is kept for the audit trail but hidden from comment_list and task_get. Use this to retract a comment that turned out to be wrong or stale. Reversible with comment_restore.
comment_listList comments on a task in chronological order. Comments removed with comment_delete are hidden by default; pass include_deleted to see them with their removal reason.
comment_restoreRestore a comment previously removed with comment_delete.
epic_archiveArchive or unarchive an epic. Archived epics and their tasks drop out of listings, the dashboard and search unless include_archived is set. For putting finished work out of sight without cancelling it; nothing is deleted.
epic_createwrite actionCreate an epic within a project. Epics group related tasks into a feature or workstream.
epic_listList epics for a project with task counts and completion stats. Filter by status, priority or branch. Archived epics are hidden unless include_archived is set.
epic_updatewrite actionUpdate an epic. Pass only the fields you want to change. Set status to "cancelled" to soft-delete. Pass branch="current" to pin to the active branch, or empty string to clear.
note_deletewrite actionDelete a note by ID.
note_listList notes with optional filters. Returns notes sorted by most recent first.
note_savewrite actionCreate or update a note: decisions, context, progress, meetings, blockers, technical detail, releases. With id, updates; without, creates.
note_searchSearch across note titles and content by keyword.
project_createwrite actionCreate a new project. Projects are the top-level container for all work.
project_listList all projects with epic/task counts and completion percentages. Optionally filter by status.
project_updatewrite actionUpdate a project. Pass only the fields you want to change. Set status to "archived" to soft-delete.
subtask_createwrite actionCreate subtasks (checklist items) for a task. Pass titles as an array — one string per subtask — and each becomes its own record. New subtasks are appended after any that exist.
subtask_deletewrite actionDelete one or more subtasks. Accepts a single ID or array of IDs.
subtask_reorderReorder a task subtask list. Pass IDs in the order you want; any omitted keep their relative order at the end.
subtask_updatewrite actionUpdate a subtask title, status or position. depends_on sets what it waits on, blocks the inverse; both replace the set, [] clears. Starting or finishing one with unmet prerequisites needs force.
task_batch_updatewrite actionUpdate multiple tasks at once. Useful for changing status of several tasks (e.g., mark 3 tasks as done) or reassigning tasks.
task_createwrite actionCreate a task within an epic. Tasks are the primary unit of work.
task_deletewrite actionRemove a task (soft delete). Only 'todo' tasks — anything further along has history worth keeping. The row is kept and hidden from listings; task_restore brings it back.
task_getGet a single task with full details including all subtasks, related notes, comments, and dependencies.
task_listList tasks; without epic_id, across all epics. Includes subtask and dependency counts.
task_lock_descriptionLock or unlock a task's description. While locked, task_update refuses to change it — a guard against rewriting the spec when you meant to add a comment. Every other field still changes freely.
task_reorderSet the order of an epic's tasks. Omitted IDs keep their relative order at the end. task_list then follows this arrangement by default.
task_restoreRestore a task removed with task_delete.
task_updatewrite actionUpdate a task; pass only fields to change. Completing it while subtasks are unfinished is refused unless force is set.
template_applyApply a template to create tasks in an epic. Replaces {variable} placeholders with provided values.
template_createwrite actionCreate a reusable set of tasks that can be instantiated into any epic. {variable} placeholders are filled in on apply.
template_deletewrite actionDelete a task template.
template_listList task templates. Pass include_tasks to see what each one actually creates.
template_updatewrite actionEdit a template in place. Only the fields you pass change; tasks replace the whole list.
tracker_dashboardFull project overview in one call: project, epics with task counts, stats, blocked and overdue tasks, recent activity and notes. Best first call when starting work. branch="current" scopes to the active git branch.
tracker_exportExport a full project as nested JSON. Includes all epics, tasks, subtasks, comments, dependencies, and related notes. Useful for backup, migration, or sharing.
tracker_importImport a project from JSON (matching tracker_export format). Creates all entities with new IDs and remaps references. Uses a transaction for atomicity.
tracker_initInitialize the tracker for a project. If the database is empty, creates a project with the given name. If a project already exists, returns its info.
tracker_nextWhat to work on next: one recommended task with the reason, its next unfinished subtask, alternatives, and — when nothing is actionable — what to unblock. Call it when resuming work; cheaper than tracker_dashboard.
tracker_searchSearch projects, epics, tasks and notes by keyword. Returns categorized previews — use task_get or note_list for full text.
tracker_session_diffWhat changed since a timestamp: counts by action and entity, plus the notable changes. Call it at the start of a session to catch up.
Public scan report
scanner v0.1.9 · 2026-09-25 · same rubric, same numbers if you re-run it
- Code scan63 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 0 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
What the publisher says
From the Saga repository's README, as published. We do not edit it. Read it on GitHub
saga-mcp
Your coding agent loses the plan between sessions. You come back tomorrow and it has no idea which of the five things you agreed on are done, which one is blocked on which, or why you rejected the second approach — because the plan lived in the context window, or in a TODO.md nobody updates.
saga-mcp gives the agent a real tracker instead: a SQLite file in your project holding projects, epics, tasks, subtasks, dependencies, comments, notes and decisions, exposed as 41 MCP tools. The agent writes to it as it works and reads it back when it returns. No accounts, no external service, no network calls — the database is a file you own.
Install
Add saga-mcp to your MCP client. The same block works for Claude Code (.mcp.json in your project), Claude Desktop (claudedesktopconfig.json), and any other MCP client:
{
"mcpServers": {
"saga": {
"command": "npx",
"args": ["-y", "saga-mcp"],
"env": { "DB_PATH": "/absolute/path/to/your/project/.tracker.db" }
}
}
}Restart the client. DB_PATH is the only required setting; the file and its schema are created on first use. Prefer a global install? npm install -g saga-mcp, then use saga-mcp as the command instead of npx.
Tested on Node 20, 22 and 24, on Linux, macOS and Windows.
Settings
No API keys, no accounts, no external services.
Your first session
You: "Set up tracking for the e-commerce API and plan out auth."
tracker_init({ project_name: "E-Commerce API" })
epic_create({ project_id: 1, name: "Authentication", priority: "high" })
task_create({ epic_id: 1, title: "Design auth schema", priority: "critical" })
task_create({ epic_id: 1, title: "Implement JWT auth", depends_on: [1] })
task_create({ epic_id: 1, title: "Add OAuth2 Google login", depends_on: [2] })Tasks 2 and 3 come back blocked — their dependencies aren't done. Finish task 1 and task 2 unblocks itself.
Next session, you: "Where were we?"
tracker_next({})
-> Work on #1 'Design auth schema' — critical priority, in the active epic
'Authentication'. 2 other task(s) are blocked.One recommendation with the reason. For the whole picture instead, tracker_dashboard({}) returns stats, epics, blocked and overdue tasks, recent activity and notes, with a summary on top.
And when you would rather look than ask, saga-web puts the same database in a browser:
What you get
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
Runs npx -y saga-mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add saga-mcp -- npx -y saga-mcp
Saga: common questions
- Is Saga MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the Saga safety report
- How do I install Saga?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does Saga need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is Saga maintained?
- The last commit was 2 days ago (2026-09-25). The latest release is v1.17.1.
- What can I use instead of Saga?
- Servers from other publishers that do the same job: Lific MCP server, gadak MCP server and DBHub MCP server. Compare all Saga alternatives.
Alternatives to Saga
Same job from other publishers: the closest match first, then the best rated.
- LificLocal-first, lightweight issue tracker. Single binary, SQLite-backed, MCP-native.not reviewedGrowingA
gadakAsk a local SQLite mirror of your Jira and Confluence: SQL, full-text search, issue detail.not reviewedGrowingA- DBHubToken-efficient database MCP server for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLitenot reviewedWidely usedA
- NeonOfficial Neon MCP server for managing Neon projects and Lakebase Postgres databases.not reviewedEstablishedA
- RememLocal-first automatic memory for Claude Code and Codex: capture, distill, recall from SQLite.not reviewedEstablishedB