Find focus time
find_focus_timeFind available time blocks for deep work within a specified window, accounting for working hours, existing events, buffers, and lunch. Returns the longest blocks first, filtering by a minimum duration.
Instructions
Find the uninterrupted blocks in a window that could be used for deep work.
Searches inside the user's working hours (get_preferences), removes lunch,
everything already booked on their calendars, and the buffer they like
around meetings, then reports what is left -- longest block first, because
that is the one worth protecting. Blocks shorter than
min_focus_block_minutes are not reported at all.
Read-only: use block_focus_time to actually defend the time.
Args: time_min: Start of the window to search, ISO 8601. Without a UTC offset it is read in the calendar's own timezone. time_max: End of the window to search, ISO 8601. hours_needed: How many focus hours the user is trying to find. Used to report whether the window can supply them; pass 0 to just look. calendar_ids: Calendars whose events count as busy. Omit for every calendar the account has selected. account: Account name from 'calendar-mcp accounts'; omit for the default.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| time_max | Yes | ||
| time_min | Yes | ||
| calendar_ids | No | ||
| hours_needed | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of blocks returned. | |
| blocks | No | Usable blocks, longest first, then earliest. | |
| message | No | One-line human-readable summary. | |
| time_max | Yes | End of the searched window, ISO 8601. | |
| time_min | Yes | Start of the searched window, ISO 8601. | |
| timezone | Yes | Timezone the blocks are expressed in. | |
| satisfiable | No | True when total_free_hours covers hours_needed. | |
| calendar_ids | No | Calendars whose busy time was subtracted. | |
| hours_needed | No | Focus hours the caller asked for. | |
| buffer_minutes | No | Gap left around each meeting, from preferences.buffer_minutes. | |
| total_free_hours | No | Total focus hours available in the window. | |
| min_block_minutes | No | Shortest stretch counted, from preferences.min_focus_block_minutes. |