Saga

A Jira-like project tracker for AI agents — epics, tasks, dependencies, and dashboards, all in local SQLite with zero setup.

saga-mcp

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.

No more scattered markdown files. saga-mcp gives your AI assistant a structured database to track projects, epics, tasks, subtasks, notes, and decisions across sessions.

Features

  • Full hierarchy: Projects > Epics > Tasks > Subtasks
  • Task dependencies: Express sequencing with auto-block/unblock when deps are met
  • Comments: Threaded discussions on tasks — leave breadcrumbs across sessions
  • Templates: Reusable task sets with {variable} substitution
  • Dashboard: One tool call gives full overview with natural language summary
  • SQLite: Self-contained .tracker.db file per project — zero setup, no external database
  • Activity log: Every mutation is automatically tracked with old/new values
  • Notes system: Decisions, context, meeting notes, blockers — all searchable
  • Batch operations: Create multiple subtasks or update multiple tasks in one call
  • 31 focused tools: With MCP safety annotations on every tool
  • Import/export: Full project backup and migration as JSON (with dependencies and comments)
  • Source references: Link tasks to specific code locations
  • Auto time tracking: Hours computed automatically from activity log
  • Cross-platform: Works on macOS, Windows, and Linux

Quick Start

With Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "saga": {
      "command": "npx",
      "args": ["-y", "saga-mcp"],
      "env": {
        "DB_PATH": "/absolute/path/to/your/project/.tracker.db"
      }
    }
  }
}

With Claude Desktop

Add to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "saga": {
      "command": "npx",
      "args": ["-y", "saga-mcp"],
      "env": {
        "DB_PATH": "/absolute/path/to/your/project/.tracker.db"
      }
    }
  }
}

Manual install

npm install -g saga-mcp
DB_PATH=./my-project/.tracker.db saga-mcp

Configuration

saga-mcp requires a single environment variable:

VariableRequiredDescription
DB_PATHYesAbsolute path to the .tracker.db SQLite file. The file and schema are auto-created on first use.

No API keys, no accounts, no external services. Everything is stored locally in the SQLite file you specify.

Tools

Getting Started

ToolDescriptionAnnotations
tracker_initInitialize tracker and create first projectreadOnly: false, idempotent: true
tracker_dashboardFull project overview with natural language summaryreadOnly: true

Projects

ToolDescriptionAnnotations
project_createCreate a new projectreadOnly: false
project_listList projects with completion statsreadOnly: true
project_updateUpdate project (archive to soft-delete)readOnly: false, idempotent: true

Epics

ToolDescriptionAnnotations
epic_createCreate an epic within a projectreadOnly: false
epic_listList epics with task countsreadOnly: true
epic_updateUpdate an epicreadOnly: false, idempotent: true

Tasks

ToolDescriptionAnnotations
task_createCreate a task with optional dependenciesreadOnly: false
task_listList/filter tasks with dependency inforeadOnly: true
task_getGet task with subtasks, notes, comments, and dependenciesreadOnly: true
task_updateUpdate task (auto-logs, auto-blocks/unblocks)readOnly: false, idempotent: true
task_batch_updateUpdate multiple tasks at oncereadOnly: false, idempotent: true

Subtasks

ToolDescriptionAnnotations
subtask_createCreate subtask(s) — supports batchreadOnly: false
subtask_updateUpdate subtask title/statusreadOnly: false, idempotent: true
subtask_deleteDelete subtask(s) — supports batchdestructive: true, idempotent: true

Comments

ToolDescriptionAnnotations
comment_addAdd a comment to a task (threaded discussion)readOnly: false
comment_listList all comments on a taskreadOnly: true

Templates

ToolDescriptionAnnotations
template_createCreate a reusable task template with {variable} placeholdersreadOnly: false
template_listList available templatesreadOnly: true
template_applyApply template to create tasks with variable substitutionreadOnly: false
template_deleteDelete a templatedestructive: true, idempotent: true

Notes

ToolDescriptionAnnotations
note_saveCreate or update a note (upsert)readOnly: false
note_listList notes with filtersreadOnly: true
note_searchFull-text search across notesreadOnly: true
note_deleteDelete a notedestructive: true, idempotent: true

Intelligence

ToolDescriptionAnnotations
tracker_searchCross-entity search (projects, epics, tasks, notes)readOnly: true
activity_logView change history with filtersreadOnly: true
tracker_session_diffShow what changed since a given timestamp — call at session startreadOnly: true

Import / Export

ToolDescriptionAnnotations
tracker_exportExport full project as nested JSON (includes dependencies and comments)readOnly: true
tracker_importImport project from JSON (matching export format)readOnly: false

Usage Examples

Example 1: Starting a project with dependencies

User prompt: "Set up tracking for my new e-commerce API project"

Tool calls:

tracker_init({ project_name: "E-Commerce API", project_description: "REST API for online store" })
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", priority: "high", depends_on: [1] })
task_create({ epic_id: 1, title: "Add OAuth2 Google login", priority: "medium", depends_on: [2] })

Result: Task 2 and 3 are auto-blocked because their dependencies aren't done yet. When task 1 is marked done, task 2 auto-unblocks.

Example 2: Resuming work with dashboard summary

Tool calls:

tracker_dashboard({})

Response includes a natural language summary:

"E-Commerce API: 5 tasks across 2 epics. 40% complete. Active: Authentication (2/3 done). Next up: Product Catalog (2 tasks). 1 blocked task(s)."

Plus the full structured data (stats, epics, blocked tasks, overdue tasks, activity, notes).

Example 3: Using templates for repeated workflows

Create a template:

template_create({
  name: "feature_workflow",
  description: "Standard feature implementation",
  tasks: [
    { "title": "Design {feature} API", "priority": "critical", "estimated_hours": 2 },
    { "title": "Implement {feature}", "priority": "high", "estimated_hours": 8 },
    { "title": "Write tests for {feature}", "priority": "high", "estimated_hours": 4 },
    { "title": "Document {feature}", "priority": "medium", "estimated_hours": 1 }
  ]
})

Apply it:

template_apply({ template_id: 1, epic_id: 2, variables: { "feature": "user auth" } })

Creates 4 tasks: "Design user auth API", "Implement user auth", "Write tests for user auth", "Document user auth".

Example 4: Task comments as decision trail

comment_add({ task_id: 5, content: "Investigated root cause: CORS headers missing on preflight" })
comment_add({ task_id: 5, content: "Fixed by adding OPTIONS handler. Tested with curl." })
task_update({ id: 5, status: "done" })

Comments persist across sessions — next time an agent calls task_get(5), it sees the full discussion thread.

How It Works

saga-mcp stores everything in a single SQLite file (.tracker.db) per project. The database is auto-created on first use with all tables and indexes — no migration step needed.

Hierarchy

Project
  └── Epic (feature/workstream)
        └── Task (unit of work)
              ├── Subtask (checklist item)
              ├── Comment (discussion thread)
              └── Dependencies (blocked by other tasks)

Task Dependencies

Tasks can depend on other tasks. When you set depends_on: [2, 3] on a task:

  • The task is auto-blocked if any dependency isn't done
  • When a dependency is marked done, downstream tasks are re-evaluated
  • If all dependencies are met, the blocked task auto-unblocks to todo

Note Types

Notes replace scattered markdown files. Each note has a type:

TypeUse case
generalFree-form notes
decisionArchitecture/design decisions
contextConversation context for future sessions
meetingMeeting notes
technicalTechnical details, specs
blockerBlockers and issues
progressProgress updates
releaseRelease notes

Activity Log

Every create, update, and delete is automatically recorded:

{
  "summary": "Task 'Fix CORS issue' status: blocked -> done",
  "action": "status_changed",
  "entity_type": "task",
  "entity_id": 15,
  "field_name": "status",
  "old_value": "blocked",
  "new_value": "done",
  "created_at": "2026-02-21T18:30:00"
}

Privacy Policy

saga-mcp is a fully local, offline tool. It does not:

  • Collect any user data
  • Send any data to external servers
  • Require internet access after installation
  • Use analytics, telemetry, or tracking of any kind

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.

For questions about privacy, open an issue at https://github.com/spranab/saga-mcp/issues.

Development

git clone https://github.com/spranab/saga-mcp.git
cd saga-mcp
npm install
npm run build
DB_PATH=./test.db npm start

Support

License

MIT

Related Servers