Skip to main content
Glama
89jobrien
by 89jobrien
README.md
# 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