Skip to content

Latest commit

 

History

History
65 lines (53 loc) · 2.16 KB

File metadata and controls

65 lines (53 loc) · 2.16 KB

Timing MCP — AI Agent Instructions

This MCP server provides read-only access to the Timing SQLite database on macOS. Use it to query time tracking data: app usage, window titles, durations, and project assignments.

Available tools

  • list_timing_tables() — lists all tables in the database
  • get_timing_schema(table_name) — returns column definitions for a table
  • query_timing_db(sql_query, limit) — executes a read-only SQL query; limit defaults to 200 rows, increase as needed for large date ranges

Key tables

Table Description
AppActivity Core records: app, window title, start/end timestamps, project
Application App metadata: bundle ID, display name
Title Window title strings referenced by AppActivity
Project Timing projects for categorising entries
TaskActivity Task-level time tracking

SQL conventions

Timestamps

All startDate and endDate fields in AppActivity are Unix timestamps (REAL). Always convert using:

datetime(startDate, 'unixepoch', 'localtime')

Deleted records

Always exclude soft-deleted entries:

WHERE aa.isDeleted = 0

Title column

The Title table uses stringValue for the window title string — not title.

Example queries

-- Time spent per app today
SELECT app.title AS app,
       ROUND(SUM(aa.endDate - aa.startDate) / 60.0, 1) AS minutes
FROM AppActivity aa
JOIN Application app ON aa.applicationID = app.id
WHERE aa.isDeleted = 0
  AND datetime(aa.startDate, 'unixepoch', 'localtime') >= date('now')
GROUP BY app.title
ORDER BY minutes DESC;
-- Activity log for a specific hour
SELECT datetime(aa.startDate, 'unixepoch', 'localtime') AS start,
       datetime(aa.endDate,   'unixepoch', 'localtime') AS end,
       app.title AS app,
       t.stringValue AS window
FROM AppActivity aa
JOIN Application app ON aa.applicationID = app.id
LEFT JOIN Title t ON aa.titleID = t.id
WHERE aa.isDeleted = 0
  AND datetime(aa.startDate, 'unixepoch', 'localtime') >= '2026-01-01 09:00:00'
  AND datetime(aa.startDate, 'unixepoch', 'localtime') <  '2026-01-01 10:00:00'
ORDER BY aa.startDate;