Tools in this category
| Tool | Mutating | Description |
|---|---|---|
list_time_entries |
no | List time-tracker entries with optional filters (status, taskDisplayId, projectDisplayId, date range, free-text search). |
aggregate_time_entries |
no | Aggregate total tracked time over a filter set. Returns { totalSeconds, entryCount } and an optional groups breakdown when groupBy is set. Running entries are counted up to "now". Each entry is counted exactly once in the headline totals, even when it links to multiple tasks. With groupBy=task or groupBy=project, an entry that links to N tasks/projects contributes its full duration to EACH bucket, so the group totals can legitimately sum to more than totalSeconds. |
get_time_entry |
no | Fetch a single time entry by ID, including its start/end timestamps, status, linked task, and tags. |
start_time_session |
yes | Start a new RUNNING time session. Any other running session for this user is auto-stopped at the new session's start time. Optionally name it, link it to one or more tasks, or attach tags. A single entry counts once toward totals regardless of how many tasks it links. |
resume_last_time_session |
yes | Start a new RUNNING entry copying name, linked task, and tags from the most recent FINISHED entry. Throws if no prior entry exists. |
update_time_entry |
yes | Update a time entry. Only supplied fields change. Setting status to FINISHED requires endTime; switching to RUNNING does not auto-stop other entries (use start_time_session for that). |
bulk_update_time_entries |
yes | Apply per-id partial updates to many time entries in one call. Covers bulk rename (set name) and bulk retag (set tags). Each item is { id, data } where data accepts the same fields as update_time_entry (minus id). |
delete_time_entry |
yes | Delete a time entry by ID. The original input is preserved in the MCP audit trail. |
bulk_delete_time_entries |
yes | Delete many time entries in one call. Prefer this over looping delete_time_entry; each id is logged separately in the audit trail. |
list_time_entries
Mutating: no
List time-tracker entries with optional filters (status, taskDisplayId, projectDisplayId, date range, free-text search).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
page |
number | no | Page number (default: 1) |
limit |
number | no | Items per page (default: 20, max: 50) |
status |
string (running | finished) |
no | Filter by status |
taskDisplayId |
string | no | Filter by task display ID |
projectDisplayId |
string | no | Filter by task's project display ID |
startDate |
string | no | ISO 8601 lower bound on startTime |
endDate |
string | no | ISO 8601 upper bound on startTime |
search |
string | no | Search in name, task name, project name, and tag names |
sortBy |
string (name | startTime | endTime | status | createdAt | updatedAt) |
no | Field to sort by |
sortOrder |
string (asc | desc) |
no | Sort direction; defaults to asc. |
aggregate_time_entries
Mutating: no
Aggregate total tracked time over a filter set. Returns { totalSeconds, entryCount } and an optional groups breakdown when groupBy is set. Running entries are counted up to "now". Each entry is counted exactly once in the headline totals, even when it links to multiple tasks. With groupBy=task or groupBy=project, an entry that links to N tasks/projects contributes its full duration to EACH bucket, so the group totals can legitimately sum to more than totalSeconds.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status |
string (running | finished) |
no | Filter by status (running or finished). |
taskDisplayId |
string | no | Filter by task display ID. |
projectDisplayId |
string | no | Filter by task's project display ID. |
startDate |
string | no | ISO 8601 lower bound on startTime |
endDate |
string | no | ISO 8601 upper bound on startTime |
search |
string | no | Search in name, task name, project name, tags. |
groupBy |
string (task | project | tag | day) |
no | Optional dimension to group totals by |
get_time_entry
Mutating: no
Fetch a single time entry by ID, including its start/end timestamps, status, linked task, and tags.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Time entry ID |
start_time_session
Mutating: yes
Start a new RUNNING time session. Any other running session for this user is auto-stopped at the new session's start time. Optionally name it, link it to one or more tasks, or attach tags. A single entry counts once toward totals regardless of how many tasks it links.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name |
string | no | Optional session name |
taskDisplayIds |
array | no | Optional task display IDs to associate (e.g. ["T-7", "T-9"]). A time entry can link to multiple tasks; the entry still counts once toward totals. |
tags |
array | no | Tag names to attach |
resume_last_time_session
Mutating: yes
Start a new RUNNING entry copying name, linked task, and tags from the most recent FINISHED entry. Throws if no prior entry exists.
Parameters
No parameters.
update_time_entry
Mutating: yes
Update a time entry. Only supplied fields change. Setting status to FINISHED requires endTime; switching to RUNNING does not auto-stop other entries (use start_time_session for that).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Time entry ID |
name |
string | no | Display name for the session. |
taskDisplayIds |
array | no | Full set of task display IDs to link; replaces existing task links. Pass [] to unlink from all tasks. Use link_time_entry_to_tasks / unlink_time_entry_from_task for incremental changes. |
tags |
array | no | Full tag set; replaces existing tags. |
startTime |
string | no | ISO 8601 |
endTime |
string | no | ISO 8601 |
status |
string (running | finished) |
no | Entry status (running or finished). |
bulk_update_time_entries
Mutating: yes
Apply per-id partial updates to many time entries in one call. Covers bulk rename (set name) and bulk retag (set tags). Each item is { id, data } where data accepts the same fields as update_time_entry (minus id).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
updates |
array | yes | Per-id patches |
Items of updates:
id(string)data(object) — Partial fields — same shape as update_time_entry input (minus id)
delete_time_entry
Mutating: yes
Delete a time entry by ID. The original input is preserved in the MCP audit trail.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Time entry ID |
bulk_delete_time_entries
Mutating: yes
Delete many time entries in one call. Prefer this over looping delete_time_entry; each id is logged separately in the audit trail.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
ids |
array | yes | Time entry IDs to delete |