Calendar & Scheduling
Use these tools to read external calendars, manage bookings, and schedule future agent work inside MindRoom.
What This Page Covers
This page documents the built-in tools in the calendar-and-scheduling group.
Use these tools when you need Google Calendar access, Cal.com booking APIs, or Matrix-native scheduled tasks that post back into MindRoom later.
Tools On This Page
- [
google_calendar] - Read Google Calendar data and, when enabled, create, update, or delete events through Google OAuth. - [
cal_com] - Query Cal.com availability and manage bookings through the Cal.com API. - [
scheduler] - Schedule, edit, list, and cancel MindRoom tasks and reminders in the current Matrix conversation.
Common Setup Notes
google_calendar is a per-service Google OAuth integration.
It uses the google_calendar OAuth provider instead of an API key form.
It always runs in the primary MindRoom runtime so worker runtimes do not receive Google OAuth secrets.
Use Google Services OAuth (Admin Setup) or Google Services OAuth (Individual Setup) to connect Google before enabling google_calendar.
cal_com is a standard credential-backed tool with its own config fields and no shared-only restriction.
scheduler is MindRoom's built-in scheduling system, so it does not need dashboard OAuth setup or API keys.
Unlike the two calendar API tools, scheduler depends on the active Matrix ToolRuntimeContext, so it only works from a live room or thread.
MindRoom also includes scheduler in defaults.tools by default on this branch.
[google_calendar]
google_calendar wraps Agno's Google Calendar toolkit with MindRoom-scoped Google OAuth credentials.
What It Does
google_calendar exposes list_events(), fetch_all_events(), find_available_slots(), list_calendars(), create_event(), update_event(), and delete_event().
MindRoom loads the connected Google account from its unified credential store instead of relying on a per-process token.json.
The OAuth provider requests a consistent Google Calendar scope, while MindRoom gates write methods with the allow_update setting.
Write calls are still part of the tool surface, but they are only exposed when allow_update: true is configured.
When no usable MindRoom OAuth credentials exist, the wrapper raises OAuthConnectionRequired instead of falling back to Agno's local token flow.
find_available_slots() derives openings from the user's current calendar events plus working-hours settings inferred from Google Calendar settings and locale.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
calendar_id |
text |
no |
primary |
Google Calendar ID to query or update. |
allow_update |
boolean |
no |
false |
Expose create, update, and delete operations. |
Example
agents:
assistant:
worker_scope: shared
tools:
- google_calendar:
calendar_id: primary
allow_update: true
list_events(limit=5)
find_available_slots(start_date="2026-04-01", end_date="2026-04-03", duration_minutes=30)
create_event(
start_date="2026-04-02T15:00:00",
end_date="2026-04-02T15:30:00",
title="Deployment review",
attendees=["ops@example.com"],
add_google_meet_link=True,
)
Notes
calendar_iddefaults toprimary, andlist_calendars()can return the other calendar IDs available to the connected account.- If the Google Calendar connection is missing the required calendar scope,
google_calendarstays unavailable until the user reconnects and grants it. - Use the Google Services OAuth guides for consent-screen setup, redirect URIs, and environment variables.
[cal_com]
cal_com talks to the Cal.com v2 booking API for availability lookup and booking management.
What It Does
cal_com exposes get_available_slots(), create_booking(), get_upcoming_bookings(), reschedule_booking(), and cancel_booking().
The toolkit uses one configured event_type_id as the default booking type for slot lookup and booking creation.
Responses are converted from UTC into user_timezone before they are returned.
The per-method enable flags let you narrow the exposed call surface when an agent should only inspect availability or only manage existing bookings.
Configuration
| Option | Type | Required | Default | Notes |
|---|---|---|---|---|
api_key |
password |
no |
null |
Cal.com API key. Configure this through the dashboard or credential store rather than inline YAML. |
event_type_id |
number |
no |
null |
Default Cal.com event type ID used for slot lookup and new bookings. |
user_timezone |
text |
no |
null |
IANA timezone used when formatting returned booking times. |
enable_get_available_slots |
boolean |
no |
true |
Enable get_available_slots(). |
enable_create_booking |
boolean |
no |
true |
Enable create_booking(). |
enable_get_upcoming_bookings |
boolean |
no |
true |
Enable get_upcoming_bookings(). |
enable_reschedule_booking |
boolean |
no |
true |
Enable reschedule_booking(). |
enable_cancel_booking |
boolean |
no |
true |
Enable cancel_booking(). |
all |
boolean |
no |
false |
Enable every Cal.com operation at once. |
Example
agents:
scheduler_assistant:
tools:
- cal_com:
event_type_id: 123456
user_timezone: America/Los_Angeles
enable_cancel_booking: false
get_available_slots(start_date="2026-04-01", end_date="2026-04-07")
create_booking(
start_time="2026-04-03T17:00:00+00:00",
name="Alex Example",
email="alex@example.com",
)
get_upcoming_bookings(email="alex@example.com")
Notes
- Although the metadata marks
api_keyandevent_type_idas optional fields, the runtime only works properly when those values are supplied either through stored credentials or theCALCOM_API_KEYandCALCOM_EVENT_TYPE_IDenvironment variables. - If
user_timezoneis omitted, the upstream toolkit falls back toAmerica/New_York. api_keyis a password field, so MindRoom blocks inline YAML overrides for it in normal authored config.- All current requests go to
https://api.cal.com/v2.
[scheduler]
scheduler is MindRoom's built-in task scheduler for future messages, reminders, and recurring agent or team work.
What It Does
scheduler exposes schedule(), edit_schedule(), list_schedules(), and cancel_schedule().
It reuses the same backend as !schedule, !edit_schedule, !list_schedules, and !cancel_schedule.
By default schedule() posts back into the current room or thread scope, while new_thread=True schedules a future room-level root message.
Scheduled tasks are stored in Matrix room state and persist across restarts.
The scheduler validates mentioned agents and teams against the current room or thread before it saves a task.
If no Matrix room context is available, the tool returns an unavailable error instead of creating a task.
Configuration
This tool has no tool-specific inline configuration fields.
Example
schedule("tomorrow at 9am @ops check the deployment")
schedule("every weekday at 8am post the on-call handoff summary", new_thread=True)
list_schedules()
edit_schedule("a1b2c3d4", "tomorrow at 10am @ops check the deployment")
cancel_schedule("a1b2c3d4")
Notes
schedulerneeds no dashboard setup and is included indefaults.toolsby default unless you explicitly disable that inheritance.- Editing preserves the original schedule type, so switching between one-time and recurring schedules requires cancelling the old task and creating a new one.
- Conditional phrases such as
ifandwhenare converted into recurring polling schedules rather than real event subscriptions. - Use Scheduling for the full command syntax, timezone behavior, persistence details, and command-line aliases.