ATracker MCP Server
Click on "Deploy 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., "@ATracker MCP Serverwhat am I working on?"
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.
ATracker MCP Server
MCP server + standalone CLI for syncing ATracker time tracking data to a local SQLite database. Works with Claude Desktop, Claude Code, or any MCP client.
What it does
Calls the ATracker cloud API (reverse-engineered web sync endpoint)
Stores tasks, entries, tags, and task-tag relationships in a local SQLite DB
Supports incremental sync (only fetches changes since last sync) and full sync
Exposes 7 MCP tools for querying/exporting the data
Also works as a standalone CLI script (
atracker_sync.py)
Related MCP server: Mi Fitness MCP
Files
├── src/atracker_mcp/
│ ├── __init__.py # Package init, version
│ └── server.py # MCP server (7 tools: sync, timeline, summary, etc.)
├── atracker_sync.py # Standalone sync CLI (no MCP dependency needed)
├── ecosystem.config.js # PM2 config (optional, for auto-restart)
├── .env.example # Template for credentials
├── .gitignore # Excludes .env, *.db, venv, exports
├── pyproject.toml # Python package config (hatchling)
├── requirements.txt # Minimal deps: mcp, requests, python-dotenv
└── data/ # Created at runtime
├── atracker.db # SQLite database (gitignored)
└── .sync_state.json # Last sync timestamp (gitignored)Setup
1. Install dependencies
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt2. Get credentials
Open https://atracker.pro/Web/ and log in
Open browser DevTools (F12) → Network tab → filter "Fetch/XHR"
Do any action in the app (or refresh the page)
Click the
UpdateFromIOSrequestFrom Headers: copy the
ARRAffinitycookie valueFrom Payload: copy the
uuidvalue
3. Configure
cp .env.example .envEdit .env:
ATRACKER_COOKIE=your_arraffinity_cookie_value
ATRACKER_UUID=your-uuid-from-payloadRunning
Standalone CLI (simplest)
# First sync — pulls all historical data
python3 atracker_sync.py --full
# Subsequent syncs — only new changes
python3 atracker_sync.py
# Export to CSV
python3 atracker_sync.py --export timeline.csv
# Export last 7 days to JSON
python3 atracker_sync.py --export week.json --days 7
# Export today only
python3 atracker_sync.py --export today.csv --todayCron (production setup)
Add to crontab for automatic sync every 15 minutes:
crontab -e*/15 * * * * cd /path/to/ATracker-MCP && source venv/bin/activate && python3 atracker_sync.py >> /var/log/atracker-sync.log 2>&1PM2 (alternative)
pm2 start ecosystem.config.jsThis runs the sync script and restarts it every 5 minutes (via restart_delay).
MCP Server (for Claude Desktop / Claude Code)
Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"atracker": {
"command": "python3",
"args": ["-m", "atracker_mcp.server"],
"cwd": "/path/to/ATracker-MCP",
"env": {
"PYTHONPATH": "/path/to/ATracker-MCP/src"
}
}
}
}MCP Tools
Tool | Description |
| Sync from ATracker cloud. |
| Get the currently running/active task |
| Query entries. Filters: |
| Time totals grouped by task. Filters: |
| List all tasks with entry counts |
| Export to CSV/JSON. Filters: |
| DB stats: task/entry counts, date range, last sync time |
Database Schema
SQLite with 4 tables:
tasks (task_id TEXT PK, name TEXT, category TEXT, color TEXT, icon TEXT, tag_id TEXT)
entries (entry_id TEXT PK, task_id TEXT FK, start_time REAL, end_time REAL, notes TEXT)
tags (tag_id TEXT PK, name TEXT, color TEXT)
task_tags (task_id TEXT, tag_id TEXT, PK(task_id, tag_id))start_time/end_timeare Unix timestamps (seconds)Running tasks have
end_time = 0orend_time < start_timeIndexes on
entries(start_time)andentries(task_id)
Querying Tags
Tags are linked to tasks via the task_tags junction table. Here's how to query them:
Get all tasks with their tags
SELECT
t.task_id,
t.name AS task_name,
GROUP_CONCAT(g.name) AS tags
FROM tasks t
LEFT JOIN task_tags tt ON t.task_id = tt.task_id
LEFT JOIN tags g ON tt.tag_id = g.tag_id
GROUP BY t.task_id, t.name;Get timeline entries with tags
SELECT
e.entry_id,
t.name AS task_name,
datetime(e.start_time, 'unixepoch') AS started,
datetime(e.end_time, 'unixepoch') AS ended,
GROUP_CONCAT(g.name) AS tags
FROM entries e
JOIN tasks t ON e.task_id = t.task_id
LEFT JOIN task_tags tt ON t.task_id = tt.task_id
LEFT JOIN tags g ON tt.tag_id = g.tag_id
GROUP BY e.entry_id
ORDER BY e.start_time DESC
LIMIT 20;Filter entries by tag
SELECT
t.name AS task_name,
SUM(e.end_time - e.start_time) / 3600.0 AS hours
FROM entries e
JOIN tasks t ON e.task_id = t.task_id
JOIN task_tags tt ON t.task_id = tt.task_id
JOIN tags g ON tt.tag_id = g.tag_id
WHERE g.name = 'Work'
AND e.start_time >= strftime('%s', 'now', '-7 days')
GROUP BY t.name
ORDER BY hours DESC;List all tags with task counts
SELECT
g.name AS tag,
g.color,
COUNT(DISTINCT tt.task_id) AS task_count
FROM tags g
LEFT JOIN task_tags tt ON g.tag_id = tt.tag_id
GROUP BY g.tag_id
ORDER BY task_count DESC;API Details
The sync uses ATracker's web sync endpoint (PUT /api/services/app/ATUpdateFromIOS/UpdateFromIOS). Key points:
Auth via
ARRAffinitycookie (same value in bothARRAffinityandARRAffinitySameSite)Header
Abp.TenantId: 1is requiredlastSyncTimeStampInAppcontrols incremental sync (0 = full sync, Unix timestamp = changes since)Response contains
result.updateTask,result.updateTaskEntry,result.updateTag,result.updateTaskTagarraysCookie typically valid ~1 week; re-login at web app to refresh
Privacy
Credentials in
.env(gitignored)All data stored locally in SQLite
Only communicates with
atracker.proofficial API
This server cannot be deployed
Maintenance
Related MCP Connectors
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
- TimequipOAuthcom.timequip
Manage Timequip projects, tasks, comments, members, and dashboards through MCP.
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides an MCP server for querying and managing Monarch Money personal finance data through a local SQLite mirror with read-only SQL access. It enables users to sync transaction history from the Monarch API and analyze accounts, categories, and tags.1MIT
- AlicenseCqualityCmaintenanceMCP server for Mi Fitness cloud data. Provides a local SQLite-backed server to sync and query daily activity, heart rate, and body measurements.125MIT
- AlicenseBqualityAmaintenanceDownloads all your Garmin health and fitness data into a local SQLite database and exposes 45 MCP tools for AI analysis, enabling assistants to query sleep, training load, HRV, and more.48149AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP server for SolidTime — the open-source time tracking app. Enables start/stop timers, manage time entries, projects, clients, tags, and tasks directly from MCP-compatible clients.1MIT