# 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_tasks` with filtering and pagination
- **Incremental 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
```bash
# 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-aggregator
```
### Docker
```bash
# 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:latest
```
## Configuration
Configuration is done via environment variables. Copy `example.env` to `.env` and edit:
| Variable | Default | Description |
|----------|---------|-------------|
| `DATABASE_PATH` | `~/.mcp-task-aggregator/tasks.db` | SQLite database path |
| `LOG_LEVEL` | `INFO` | Logging level |
| `JIRA_URL` | - | Jira instance URL |
| `JIRA_EMAIL` | - | Jira account email |
| `JIRA_API_TOKEN` | - | Jira API token |
| `JIRA_PROJECT_KEY` | `AGENTOPS` | Default project key |
| `MARKDOWN_ENABLED` | `true` | Enable markdown sync |
| `MARKDOWN_SEARCH_PATHS` | `.` | Paths to search for TODO files |
| `STM_ENABLED` | `true` | Enable STM CLI sync |
| `STM_SEARCH_PATHS` | `.` | Paths to search for STM workspaces |
## MCP Tools
### list_tasks
List all tasks with optional filtering.
```json
{
"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.
```json
{
"source": "jira",
"full_refresh": false
}
```
## Development
```bash
# 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-imports
```
## Project Structure
```text
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 setup
```
## License
MIT