Claude Desktop Extension
BusyCal supports a Claude Desktop extension (built on MCP) that lets Claude manage your calendars, search events and tasks, check your availability, find free time, and create or update calendar items, all through natural conversation.
The extension connects to BusyCal through a local connection on your Mac. It does not need any extra permissions beyond what BusyCal already has. BusyCal needs to be running to handle requests. The extension launches it automatically if it is not already open.
The extension shares the same automation engine as BusyCal's AppleScript support, so both get the same capabilities, including timezone-aware scheduling and availability queries.
This feature requires BusyCal version 2026.1.3 or later and the BusyCal extension installed in Claude Desktop. See the installation steps below to set up both.
What You Can Do
With BusyCal connected to Claude, you can:
- List calendars and accounts: see which calendars you have, whether they support events or tasks, and which account they belong to.
- Search events and tasks: find items by keyword, date range, calendar, or any combination. Task results include priority and BusyCal starred status, along with notes, URLs, and tags when present.
- Get a single item: retrieve the full details of a specific event or task by its ID.
- Read what you have selected: pull the events or tasks you currently have selected in the BusyCal window so Claude can act on them without re-searching.
- Check availability: see your free and busy time for any date range, filtered by calendar or working hours.
- Find free time: ask for the next open slot of a specific length within your working hours.
- Create events and tasks: add items to any calendar, with support for all-day events, notes, named IANA timezone identifiers for cross-timezone scheduling, reminders, travel time on events, task priority, and starred tasks.
- Duplicate events and tasks: copy an existing item, optionally onto a different calendar.
- Open items in BusyCal: ask Claude to show you a specific event or task and BusyCal will reveal it in the window with the Info Panel open.
- Update, move, complete, and delete: change existing items, reschedule events, adjust notes, URLs, tags, reminders, travel time on events, task priority, and starred status, mark tasks as done, or remove items.
Changes Claude makes are saved into BusyCal normally and sync through the same calendar accounts you already use.
Requirements
- BusyCal installed on your Mac.
- Claude Desktop (macOS) with extension support.
Installing the Extension
The BusyCal extension will soon be available in the Claude Desktop extension directory, subject to Anthropic's approval. In the meantime, you can install it manually using the steps below.
Step 1: Download the extension
Download busycal.mcpb v1.1.0 to your Mac.
Step 2: Enable sideloading in Claude Desktop
Open Claude Desktop and go to Settings > Extensions > Advanced settings, then click Install Extension…. Select the busycal.mcpb file you downloaded.
Step 3: Confirm the installation
You may see a message saying "Installing will grant access to everything on your computer." This is a standard warning that Claude Desktop shows for all sideloaded extensions. It does not mean BusyCal gains any new access to your system.
BusyCal is a sandboxed macOS app. The extension can only read and write your BusyCal calendar data. It cannot access your files, other apps, or anything outside of BusyCal.
Click Install to continue.
Step 4: Start using it
Open a new chat in Claude Desktop and try:
"List my BusyCal calendars."
If Claude shows your calendars, the extension is working and you are ready to go.
Available Tools
The extension gives Claude access to the tools listed below. Claude picks the right one based on what you ask. You do not need to remember tool names.
Read-only: browse and search your calendar data:
| Tool | What it does |
|---|---|
list_accounts | List your calendar accounts. |
list_calendars | List calendars, optionally filtered by account. Can exclude subscription, holiday, or birthday calendars. |
get_item | Get a single event or task by its ID. Returns the full item record including notes. |
selected_items | Get the events, tasks, or other items currently selected in the BusyCal window. Returns the same fields as query_items. |
query_items | Search across events, tasks, journals, graphics, and stickies. |
query_events | Search events by keyword, date range, or calendar. |
query_tasks | Search tasks by keyword, date range, or calendar. |
query_availability | Show free and busy time slots for a date range. |
find_next_available | Find the next free slot of a given minimum length. |
list_calendar_sets | List your saved Calendar Sets, with the calendars each one contains. |
On the Mac, a Calendar Set is a Smart Filter saved with its Remember calendar set (visible calendars) option turned on. Smart Filters saved without this option are not offered as Calendar Sets to Siri, Shortcuts, the Focus filter, AppleScript, or the Claude Desktop extension. See Smart Filters.
Navigate: reveal items in BusyCal:
| Tool | What it does |
|---|---|
open_item | Open a specific event or task in the BusyCal window. |
Create: add new items:
| Tool | What it does |
|---|---|
create_event | Create a new event, with optional location, reminders, travel time, and IANA time zone identifiers for cross-timezone scheduling. |
create_task | Create a new task, with optional due date, reminders, priority, BusyCal starred status, and an IANA time zone identifier. |
create_task_calendar | Create a new task calendar on the account that owns your default task calendar. |
create_natural_language_item | Create an event, task, or journal from BusyCal Quick Entry text, with an explicit item type. |
Duplicate: copy existing items:
| Tool | What it does |
|---|---|
duplicate_item | Duplicate an event or task, optionally onto a different calendar. For recurring items, defaults to duplicating only the selected occurrence. |
Update: change existing items:
| Tool | What it does |
|---|---|
move_event | Reschedule an event to a new date or time, with optional IANA time zone identifier. |
reschedule_event | Change an event's start, end, or all-day state in one call. Defaults to the whole series. |
move_item | Move an event or task to a different calendar. For recurring events, defaults to the selected occurrence only. |
update_event | Change an event's title, location, notes, URL, location URL, tags, My Tags, reminders, or travel time. |
update_task | Change a task's title, notes, URL, location URL, tags, My Tags, reminders, priority, or BusyCal starred status. |
defer_task | Change a task's due date, with optional IANA time zone identifier. |
complete_task | Mark a task as done. |
uncomplete_task | Reopen a completed task. |
Delete: remove items:
| Tool | What it does |
|---|---|
delete_event | Delete an event. |
delete_task | Delete a task. |
Examples
Here are some ways to use BusyCal with Claude. Try these in a Claude Desktop chat.
Create a task from a conversation
While chatting with Claude about work, you remember something you need to do:
You: I need to renew the team's software licenses before the end of the month. Add that as a task in BusyCal due March 28.
Claude creates a task with the title and due date on your default task calendar.
Set task priority and starred status
Priority and starred status are separate, so you can change either one without changing the other:
You: Create a high-priority task called "Submit renewal forms" due Friday and star it.
You: Remove the priority from that task, but leave it starred.
Claude uses high for the first request and none for the second. Task results always include both priority and isStarred, so Claude can confirm the saved state.
Find free time and schedule a meeting
You want to schedule a 45-minute design review but you are not sure when you are free:
You: Check my Work calendar for the next 3 days and find a free 45-minute slot during working hours. Then create a "Design Review" event in that slot.
Claude will:
- Look up your
Workcalendar. - Check your availability for the next 3 days, using your BusyCal working hours.
- Find the first 45-minute opening.
- Create the event in that slot on your
Workcalendar.
Book a flight across timezones
BusyCal can store different IANA timezones on the start and end of the same event, which is useful for travel:
You: Create an event on my Travel calendar called "Flight to New York". Departs San Francisco at 9 AM Pacific on April 10 and arrives at 5 PM Eastern the same day.
Claude creates the event with named timezone identifiers (America/Los_Angeles for departure, America/New_York for arrival). In BusyCal, the start shows in Pacific time and the arrival in Eastern time, using proper named timezones rather than raw UTC offsets.
Add a location when creating an event
BusyCal can store either a simple location string or a richer structured location when Claude has enough detail:
You: Create a "Picnic with Sarah" event for Saturday at noon at Hyde Park, London.
Claude can create the event with plain location text, or with a structured location object when it has an address or coordinates available.
When Claude has richer venue data, the create_event tool can pass a location object like:
{
"title": "Hyde Park",
"address": "Hyde Park, London W2 2UH, UK",
"latitude": 51.5087,
"longitude": -0.1636
}
Set a custom reminder
By default, BusyCal adds your usual reminders when Claude creates an event. If you want something different, just say so:
You: Create a "Design Review" event tomorrow at 2 PM and remind me 15 minutes before.
You can also change reminders on events you have already created:
You: Update that event to remind me 30 minutes before instead.
Open an item in BusyCal
If Claude mentions an event or task and you want to see it in BusyCal, just ask:
You: Show me that Design Review event in BusyCal.
Claude uses open_item to reveal the event in the BusyCal window with the Info Panel open, so you can review or edit it directly.
Act on what you have selected
If you already have an event or task selected in BusyCal, Claude can pick it up directly without you needing to describe it again:
You: Move what I have selected to next Tuesday at 10 AM.
You: Add a 15-minute reminder to the task I have selected and add a note saying "bring Q1 numbers".
Claude reads the current BusyCal selection with selected_items, then routes the change through the appropriate update, move, or defer tool.
Plan your day
Start your morning by asking Claude for an overview:
You: What does my day look like? Show me today's events and tasks.
Claude gives you a summary. Then follow up naturally:
You: Move the 2 PM "Team Sync" to 3 PM.
You: Mark "Send invoice" as complete.
You: Add a task to "Prepare slide deck for Friday demo" due Thursday at noon.
Claude remembers context from earlier in the conversation, so you do not need to repeat calendar names or item details.
Duplicate an event to another calendar
You have a recurring standup on your Work calendar and want a copy on your Personal calendar:
You: Duplicate next Monday's "Team Standup" to my Personal calendar.
Claude uses duplicate_item to copy just that occurrence onto the target calendar.
Plan a trip
Let Claude suggest activities and add them to your calendar:
You: I'm visiting Canberra from April 14 to 19. Create an all-day event on my Travel calendar for the trip. Then check what days I'm free on that calendar and suggest the most popular things to do there, and add each one as a task on a day I'm available.
Claude creates the trip event, checks your availability on those dates, picks the top attractions in Canberra, and spreads them across your free days as tasks. You end up with a ready-made itinerary on your Travel calendar without having to look anything up yourself.
Create a task calendar
You want a separate list for a new project:
You: Create a BusyCal task list called "Home Projects", then add a task to it to book the electrician for next Tuesday.
Claude uses create_task_calendar for the list, then create_task on it. The list is created on the account that owns your default task calendar. Local accounts, and accounts that cannot create calendars, are refused, and Claude reports that instead of creating anything.
Move an item to another calendar
Something landed on the wrong calendar:
You: Move my "Dentist" appointment on Thursday to my Personal calendar.
Claude uses move_item with the destination calendar. For a repeating event it moves only that occurrence unless you ask for the whole series, and an occurrence you already edited separately moves in place whatever scope you ask for. Tasks always move as a single item.
Reschedule an event
Changing an event's length or turning it into an all-day event takes one request:
You: Change my "Design Review" on Thursday to run from 10 AM to 11:30 AM.
You: Make my "Conference" event all-day through April 19.
Claude uses reschedule_event. Changing only the start also moves the end to keep the same duration, so give an end time when you want a particular length, and turning an event into an all-day event applies BusyCal's normal conversion rules, including availability and default reminders. While the event stays timed it keeps its stored time zones unless you name new ones. Unlike move_item, this tool applies to the whole series by default, so say "just this one" when you mean a single occurrence, and an occurrence you already edited separately is rescheduled in place whatever scope you ask for.
Work with a Calendar Set
Calendar Sets let you talk about a group of calendars by name:
You: What is in my Work calendar set? Show me next week's events on just those calendars.
Claude uses list_calendar_sets to read the set, then queries only the calendars it contains.
Date and Time
Claude handles dates and times based on how you phrase your request. BusyCal applies these rules:
- Date only: saying just a date like
April 14without a time creates an all-day event or task. For multi-day events, the end date is the last day of the event, soApril 14 to April 19runs through April 19. - Plain times like
tomorrow at 2 PMorMarch 20 at 10 AMare treated as local times in your current BusyCal timezone. - Named timezones: when you mention a timezone like
9 AM Pacificor5 PM Eastern, Claude uses the correct IANA timezone identifier (e.g.,America/Los_Angeles,America/New_York). BusyCal stores the named timezone on the event, so it displays as "Pacific Time" or "Eastern Time" rather than a raw UTC offset. - Cross-timezone events are fully supported. For example, a flight departing at
9 AM Pacificand arriving at5 PM Easternstores each named timezone separately on the start and end of the event.
For the full date format reference, see Date Filtering in the AppleScript documentation.
Reminders
When Claude creates an event or task, BusyCal applies your normal default reminder settings, the same ones you have configured in BusyCal's preferences. You do not need to say anything about reminders for this to happen.
If you want a specific reminder instead, just ask:
"Create a meeting tomorrow at 2 PM and remind me 15 minutes before."
"Remind me 1 day before and 1 hour before."
You can also change reminders on existing items:
"Update that event to remind me 30 minutes before instead."
"Remove the reminders from my Team Sync event."
If a calendar account does not support reminders natively, BusyCal automatically falls back to a local reminder on your Mac so you still get notified.
Travel Time
An event can carry a travel time, the number of minutes you need to get there before it starts. Claude reads and writes it as travelTime, a whole number of minutes. Every event record includes travelTime, and the value is 0 when the event has no travel time. Tasks do not have this field.
You can set travel time when Claude creates an event, or add it to an event you already have:
"Create a Client Meeting event tomorrow at 2 PM with 30 minutes of travel time."
"Add 45 minutes of travel time to my 10 AM dentist appointment."
"Remove the travel time from that event."
On an update, leaving travel time out of the request keeps the current value, and setting it to 0 removes it. For a recurring event, travel time follows the same scope rules as the other fields you can update.
Travel time does not move the event's start time and does not change its reminders. It applies to timed events only, so all-day events cannot have it, and events on Apple Calendar accounts cannot store it. In both cases Claude reports the error and nothing is changed.
Claude sets the number of minutes only. The starting location and the Time to Leave alert are set in BusyCal itself. See Locations, Maps & Travel Time for how BusyCal calculates travel time.
Travel time through the extension requires BusyCal 2026.3.2 or later and extension version 1.1.0 or later.
Task Priority and Starred Status
Tasks expose two independent fields:
priorityis one ofnone,low,medium, orhigh.isStarredistrueorfalseand matches BusyCal's starred task state.
When creating a task, omit priority to use the default priority configured in BusyCal. Send none when you explicitly want no priority. Omit isStarred to use the normal unstarred default.
When updating a task, omit either field to leave it unchanged. Send priority: none to clear the priority, and send isStarred: false to unstar the task.
For a repeating task, changing priority or starred status requires scope: one, which edits the one stored recurring task. Set the scope explicitly, because omitting it defaults to all and is rejected for these changes.
Troubleshooting
Install BusyCal in /Applications or in your own ~/Applications folder. The Setapp location, /Applications/Setapp, is also supported. The MCP
connection cannot find BusyCal anywhere else on disk.
Claude says BusyCal is not available Make sure BusyCal is installed. The extension launches BusyCal automatically if it is not running, but it needs to be installed first.
Claude cannot find a calendar or item Ask Claude to list your calendars first, then refer to the calendar by name. Claude will match it to the correct calendar internally.
Availability does not match your work schedule
Check that your working hours are set correctly in BusyCal > Settings > General (Day starts at, Day ends at, and working days). The extension uses these settings when checking availability.
The extension does not appear in Claude Desktop
Try double-clicking the busycal.mcpb file again. Make sure you are running a version of Claude Desktop that supports extensions.
Claude creates items on the wrong calendar Tell Claude which calendar to use by name, for example "on my Work calendar". If you do not specify, BusyCal uses its default calendar.
Claude reports "automation socket isn't available" This error means the extension cannot connect to BusyCal's local automation service. First, confirm you are running BusyCal 2026.1.3 or later (check BusyCal > About BusyCal). If you are already on the correct version and still see this error, re-download and reinstall both BusyCal and the extension:
- Direct purchase: download and re-install the latest version from here.
- Setapp: quit BusyCal, then delete and re-download BusyCal from the Setapp store.
- Mac App Store: delete the app and re-download it from the App Store. Deleting the app will not delete your data as long as you don't use a 3rd party Cleaner tool.
After reinstalling BusyCal, re-install the extension in Claude Desktop (see Step 2 above), quit and reopen Claude Desktop, then try again in a new chat.
