Create or Update Calendar Event
ha_config_set_calendar_eventCreate or update Home Assistant calendar events, including recurring series, by specifying a calendar entity, summary, and start and end times.
Instructions
Create a new event in a calendar, or update an existing one.
Creates a one-off event via the calendar.create_event service, or a
recurring series via the WebSocket calendar/event/create command
when rrule is provided (the REST service schema does not accept
recurrence rules). Passing uid switches to update mode, which uses
the WebSocket calendar/event/update command — HA registers no REST
service for updating an event.
When NOT to use:
To retrieve calendar events, use
ha_config_get_calendar_events.To delete an event, use
ha_config_remove_calendar_event.To find the
uidof an event to update, useha_config_get_calendar_events; this tool does not search.
Passing date-only values (YYYY-MM-DD) for both start and
end creates an all-day event; passing full ISO datetimes creates
a timed event. The two forms cannot be mixed — a date-only start
with a datetime end (or vice versa) is rejected.
An update replaces the whole event rather than patching it, so
summary, start and end stay required in update mode, and a
description or location that is not re-supplied is cleared.
An rrule is the exception: Home Assistant accepts a new rule but
has no way to express "no recurrence", so an existing rule survives an
update that omits it. Delete the event and create it again to drop the
recurrence.
Not every calendar integration supports event creation; recurring events additionally require the integration to support recurrence (the built-in Local Calendar does). Update support is narrower still: Local Calendar implements it, while the core Google Calendar and CalDAV integrations do not.
EXAMPLES:
Create: ha_config_set_calendar_event("calendar.family", summary="Doctor appointment", start="2024-01-15T14:00:00", end="2024-01-15T15:00:00")
Recurring (every Monday, 10 occurrences): ha_config_set_calendar_event("calendar.work", summary="Team meeting", start="2024-01-15T10:00:00", end="2024-01-15T11:00:00", rrule="FREQ=WEEKLY;BYDAY=MO;COUNT=10")
Update this and all later occurrences: ha_config_set_calendar_event("calendar.work", summary="Team meeting (new time)", start="2024-02-05T11:00:00", end="2024-02-05T12:00:00", uid="recurring-event-67890", recurrence_id="20240205T100000", recurrence_range="THISANDFUTURE")
If a Claude Desktop user gets a 4-minute timeout with no result on this call, read the target back before repeating it, and tell them to wait a few seconds before clicking the manual-approve button, as clicking it too quickly is known to cause hangs in Claude Desktop. This workaround is specific to Claude Desktop.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Event end date or datetime in ISO format. For all-day events (date-only) the end date is exclusive; a single-day all-day event needs end = start + 1 day. | |
| uid | No | UID of an existing event to update. Omit to create a new event. | |
| rrule | No | RFC 5545 recurrence rule, without 'RRULE:' prefix (e.g., 'FREQ=WEEKLY;BYDAY=MO' or 'FREQ=MONTHLY;BYDAY=3SA'). Creates a recurring event series. | |
| start | Yes | Event start date or datetime in ISO format | |
| summary | Yes | Event title/summary | |
| location | No | Event location | |
| entity_id | Yes | Calendar entity ID (e.g., 'calendar.family') | |
| description | No | Event description | |
| recurrence_id | No | Only meaningful with 'uid': identifies one occurrence of a recurring series to update. | |
| recurrence_range | No | Only meaningful with 'uid': 'THISANDFUTURE' to update this and all following occurrences. Home Assistant compares this value verbatim, so no other spelling (including 'THIS_AND_FUTURE') selects the range. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||