WRITE

log_time

Logs a stretch of time on a work item for the person the token acts as, as minutes or a typed duration, with the day, the kind of work, whether it bills, a note and what is left on the item; the log announces itself.

Write down the time you actually spent on an item, once, when you finish a stretch of work. Give work_item_id and either minutes (1 to 1440) or duration as people type it (1h 30m, 1:30, 1.5h, 90m); add logged_on (Y-m-d, today by default), activity (development by default, or review, testing, analysis, meeting, support, deployment, other), billable (true by default), a note on what was done, and remaining_minutes when you can say what is left on the item, which updates the item's estimate and writes a version of it. The answer is the log with its duration in words. If you would rather be measured than estimate afterwards, start_timer when you begin and stop_timer when you finish. The log belongs to the person the token acts as; a client guest's token is refused.

Requires ability

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Fires one event

Delivered to every endpoint subscribed to it once the change is made.

Arguments

work_item_id*string

UUID of the work item the time went into.

minutesintegeroptional

How long, in whole minutes, 1 to 1440; or send duration.

durationstringoptional

How long as people type it: 1h 30m, 1:30, 1.5h or 90m.

logged_onstringoptional

The day the time was worked, Y-m-d; today by default.

activitystringoptional

What it was spent on; development by default.

developmentreviewtestinganalysismeetingsupportdeploymentother
billablebooleanoptional

Whether the time bills; true by default.

notestringoptional

A word on what was done, up to 500 characters.

remaining_minutesintegeroptional

What is left on the item after this, in minutes; leave it out to keep the estimate.

What it returns

{  "data": {    "id": "0f1e2d3c-4b5a-4968-8776-655443322110",    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "work_item_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",    "reference": "CRM-142",    "work_item_title": "Tier upgrade email",    "user_id": "3f8a1c2e-7b4d-4e5f-9a6b-1c2d3e4f5a6b",    "user_name": "Dev Lead",    "logged_on": "2026-11-02",    "minutes": 90,    "duration": "1h 30m",    "activity": "review",    "billable": true,    "source": "manual",    "note": "Reviewed the tier job and its tests",    "started_at": null,    "approved_by": null,    "approved_at": null,    "locked": false,    "locked_at": null,    "created_at": "2026-11-02T10:30:00+00:00",    "updated_at": "2026-11-02T10:30:00+00:00"  }}

How it fails

VALIDATION_FAILED

neither minutes nor duration sent, the minutes outside one to 1440, a duration that does not read, a day ahead of tomorrow, or an unknown activity.

RESOURCE_NOT_FOUND

unknown work_item_id, or an item outside the token's scope.

FORBIDDEN

the holder's role on the project does not carry time-log:create, or the token is a client guest's.

TOKEN_MISSING_ABILITY

token lacks time-log:create.

How is this guide?

Last updated on