Planned integration to sync issues and pull requests from GitHub repositories.
Syncs issues from Jira projects into a unified task database with support for filtering by status, priority, and tags, plus incremental sync via change detection.
Planned integration to sync issues from Linear workspaces.
Parses TODO.md and TO-DO.md files from specified paths to extract and aggregate tasks into the unified database.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Task Aggregatorlist my open tasks from Jira with high priority"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Task Aggregator
An MCP (Model Context Protocol) server that aggregates tasks from multiple sources into a unified SQLite database.
Features
Multi-source sync: Jira, GitHub (planned), Linear (planned), Markdown files, STM CLI
Unified database: SQLite with full-text search and tagging
MCP tools:
list_tasks,list_todos,sync_taskswith filtering and paginationIncremental sync: Change detection via hash comparison
Supported Sources
Source | Status | Description |
Jira | Ready | Sync issues from Jira projects |
Markdown | Ready | Parse TO-DO.md and TODO.md files |
STM | Ready | Sync from simple-task-master CLI |
GitHub | Planned | Sync issues and PRs |
Linear | Planned | Sync Linear issues |
Installation
From Source
# Clone the repository
git clone https://github.com/89jobrien/mcp-joecc.git
cd mcp-joecc
# Install with uv
uv sync
# Run the MCP server
uv run mcp-task-aggregatorDocker
# Build the image
docker build -t mcp-task-aggregator:latest .
# Run with docker-compose
cp example.env .env
# Edit .env with your credentials
docker compose up -d
# Or run directly
docker run -d \
--name mcp-task-aggregator \
-v mcp-data:/data \
-e DATABASE_PATH=/data/tasks.db \
mcp-task-aggregator:latestConfiguration
Configuration is done via environment variables. Copy example.env to .env and edit:
Variable | Default | Description |
|
| SQLite database path |
|
| Logging level |
| - | Jira instance URL |
| - | Jira account email |
| - | Jira API token |
|
| Default project key |
|
| Enable markdown sync |
|
| Paths to search for TODO files |
|
| Enable STM CLI sync |
|
| Paths to search for STM workspaces |
MCP Tools
list_tasks
List all tasks with optional filtering.
{
"source_system": "jira",
"status": "todo",
"priority": 3,
"tags": ["backend"],
"limit": 50,
"offset": 0
}list_todos
List only local tasks (shortcut for list_tasks with source_system="local").
sync_tasks
Sync tasks from external sources.
{
"source": "jira",
"full_refresh": false
}Development
# Install dev dependencies
uv sync --all-groups
# Run tests
uv run pytest
# Run linting
uvx ruff check .
uvx ruff format --check .
# Run type checking
uvx mypy src/ --strict --ignore-missing-importsProject Structure
src/mcp_task_aggregator/
├── adapters/ # Source adapters (Jira, Markdown, STM)
├── agents/ # Sync orchestration
├── models/ # Pydantic models
├── storage/ # SQLite database and repositories
├── tools/ # MCP tool implementations
├── config.py # Configuration management
└── logging.py # Structured logging setupLicense
MIT