MCP tools: Time tracking and calendar

Track time, start and stop timers, correct entries, read and create Google Calendar events and find shared free slots across the team.

Prerequisites
  • Time tracking or Calendar module enabled.
  • For calendar tools: a connected Google Calendar (for find_team_free_slots additionally colleagues who share their availability).

list_time_entries

Lists time entries of the organization, latest start first; filter by project and task. Requirements: role Viewer or higher, key scope "read" or higher, module "Time tracking" enabled.

projectId
Optional · string — Only entries of this project.
taskId
Optional · string — Only entries for this task.
limit
Optional · number — Maximum number of results (default 50, max 200).

get_running_timer

Returns your currently running time entry (no end time) in the organization, or null if none is running. Requirements: role Viewer or higher, key scope "read" or higher, module "Time tracking" enabled. This tool takes no parameters.

create_time_entry

Logs a time entry for you. Without endTime a running timer is started; otherwise the duration in seconds is computed from start and end. The tool does not check whether a timer is already running. Requirements: role Member or higher, key scope "write" or higher, module "Time tracking" enabled.

startTime
Required · string — Start as ISO 8601 datetime.
endTime
Optional · string — End (ISO 8601). Omit to start a running timer.
description
Optional · string — Description of the work.
projectId
Optional · string — ID of the assigned project.
taskId
Optional · string — ID of the related task.

stop_timer

Stops your running timer and computes the duration. Your running entry is looked up without restricting it to the organization. If there is none, the error "No running timer found" is returned. Requirements: role Member or higher, key scope "write" or higher, module "Time tracking" enabled.

endTime
Optional · string — End (ISO 8601). Default: now.

update_time_entry

Updates a time entry (description, times, project, task) and recomputes the duration. Entries whose billing status is reserved or billed are locked. Requirements: role Member or higher, key scope "write" or higher, module "Time tracking" enabled.

id
Required · string — ID of the time entry.
startTime
Optional · string — New start (ISO 8601).
endTime
Optional · string — New end (ISO 8601).
description
Optional · string — New description.
projectId
Optional · string — ID of the assigned project.
taskId
Optional · string — ID of the related task.

delete_time_entry

Deletes a time entry. Requires at least the Admin role and a key with the delete scope. Reserved or billed entries cannot be deleted. Requirements: role Admin or higher, key scope "delete" or higher, module "Time tracking" enabled.

id
Required · string — ID of the time entry.

list_calendar_events

Lists upcoming Google Calendar events of the current user (default: the next 14 days). If no Google calendar is connected, the tool answers with connected=false and a message instead of an error. Requirements: role Viewer or higher, key scope "read" or higher, module "Calendar" enabled.

maxResults
Optional · number · Default: 20 — Maximum number of events (default 20, max 50).

create_calendar_event

Creates an event in the current user's Google Calendar, optionally with a Google Meet link. If no calendar is connected, an error is returned. Requirements: role Member or higher, key scope "write" or higher, module "Calendar" enabled.

title
Required · string — Event title.
startDateTime
Required · string — Start as ISO 8601 datetime, e.g. 2026-07-01T10:00:00.
endDateTime
Required · string — End as ISO 8601 datetime, e.g. 2026-07-01T11:00:00.
description
Optional · string — Optional event description.
addMeet
Optional · boolean · Default: false — Adds a Google Meet link to the event.

find_team_free_slots

Finds the earliest upcoming free time slots you share with your teammates – connected Google, Outlook and iCal calendars are considered, and only members who opted in to sharing availability. Returns slots and consideredTeammates. Requires an organization context. Requirements: role Viewer or higher, key scope "read" or higher, module "Calendar" enabled.

durationMin
Optional · number · Default: 30 — Slot length in minutes.
days
Optional · number · Default: 10 — How many calendar days ahead to search (max 45).
maxResults
Optional · number · Default: 5 — Maximum number of slots (max 20).
startHour
Optional · number · Default: 9 — Start of business hours in local time (0–23).
endHour
Optional · number · Default: 18 — End of business hours in local time (0–23).
teammateUserIds
Optional · string[] — Restricts the search to these teammates (Supabase user IDs) instead of everyone who shares availability.

Common pitfalls

  • Send times with an offset

    Send times as ISO 8601 with UTC offset or Z (e.g. 2026-09-26T09:00:00+02:00). Without an offset the interpretation depends on the server setting.

  • Timers are per person

    get_running_timer and stop_timer refer to your timer. stop_timer looks it up without restricting it to the organization.

  • Locked entries

    Reserved or billed time entries can be neither changed nor deleted. A running timer is not checked on creation: create_time_entry starts another one even if one is already running.

  • Calendar not connected

    list_calendar_events reports connected=false, create_calendar_event returns an error. Connect the calendar in the web app first.

Keep reading

Still have a question or a problem?

Visit support

Last reviewed on 2026-09-26