accept_meeting_invite
ChatGPTConfirms attendance to a meeting that the user is invited to.
add_subtasks_to_task
ChatGPTAdds multiple new subtasks to an existing task. Do not use for merging existing tasks in as subtasks — use merge_task_as_subtask for that.
add_task_to_channel
ChatGPTAdds a task to a channel.
align_task_with_commitment
ChatGPTAligns a task with an commitment.
align_task_with_objective
ChatGPTAligns a task with an objective.
append_task_notes
ChatGPTAppends Markdown content to the end of an existing task's notes. Existing notes are preserved; the new content is added below them with a horizontal rule separator. Use edit_task_notes to replace the notes body entirely.
change_backlog_folder
ChatGPTMoves one or more tasks to a backlog folder. If folderId is null, removes tasks from their current folder.
convert_subtask_to_task
ChatGPTPulls one subtask out of its parent and turns it into a task of its own, standing where the parent stands. This is the only correct way to promote a subtask — never create a new task and then delete the subtask by hand, which loses the subtask's tracked time and leaves a duplicate behind if the second call fails.
create_calendar_event
ChatGPTCreates a new calendar event.
create_channel
ChatGPTCreates a new channel for the user.
create_task
ChatGPTCreates a single task with a title, optional notes (markdown), and estimated time. Scheduled to a day by default; pass backlog instead to stage it in the backlog. This is also the tool for a task that links to an item in another tool — pass integrationUrl, which works for a backlog task too.
create_weekly_objective
ChatGPTCreates a new weekly objective.
decline_meeting_invite
ChatGPTDecline attendance to a meeting that the user is invited to.
delete_calendar_event
ChatGPTRemoves a calendar event and deletes all associated tasks. If the event is a meeting then any access role can remove the event. Otherwise only owners or writers can remove the event. Note: If the event is a meeting and the user is an owner or write this will remove the event for ALL attendees.
delete_channel
ChatGPTDeletes one of the user's channels. Takes a channel ID, not a channel name — use the search_channels tool to resolve a name the user mentions into an ID first. Tasks, objectives, and calendar events in the channel are not deleted, but they lose their channel assignment and cannot be reassigned by undoing this. Deleting a category also uncategorizes the channels inside it. This cannot be undone, so confirm with the user before calling it.
delete_incomplete_recurring_tasks
ChatGPTPERMANENTLY deletes incomplete instances of a recurring task and TERMINATES the series, preventing any future instances from ever being created. This is irreversible. When afterDate is provided, only instances after that date are deleted and the series is terminated at that date. When omitted, all incomplete instances are deleted. WARNING: If the user wants to temporarily skip a period (e.g. vacation) and resume the series afterwards, do NOT use this tool — use edit_task_recurrence_rule with deleteOldInstancesAfter and firstOccurrenceOnOrAfter instead.
delete_task
ChatGPTDeletes an existing task.
edit_subtask_title
ChatGPTUpdates the title of an existing subtask.
edit_task_due_date
ChatGPTSets or clears the due date of a task. This is the hard deadline, not the day the task is planned/scheduled for (use move_task_to_day for that).
edit_task_notes
ChatGPTReplaces the notes body of an existing task with new Markdown content. The full notes field is overwritten — use append_task_notes to add to existing notes without replacing them.
edit_task_recurrence_rule
ChatGPTUpdates the recurrence rule of an existing task. This is the preferred tool for temporarily pausing or skipping a recurring task for a specific period (e.g. vacation, leave). By combining deleteOldInstancesAfter (to clear instances during the skip period) and firstOccurrenceOnOrAfter (to restart the series afterwards), you can maintain the recurrence while accommodating temporary breaks — unlike delete_incomplete_recurring_tasks which permanently terminates the series. When firstOccurrenceOnOrAfter is provided, this forks the recurring series: a new series begins from that date and the old series ends the day before.
edit_task_time_estimate
ChatGPTUpdates the time estimate of an existing task.
edit_task_title
ChatGPTUpdates the title of an existing task.
get_archived_tasks
ChatGPTFetches the users archived tasks
get_backlog_tasks
ChatGPTFetches the users backlog tasks
get_daily_highlights
ChatGPTGets a list of daily highlights (end of day journal entries of your work day) for the user. Returns published daily wraps in Markdown format. If startDate and endDate are omitted, returns only the most recent one.
get_help_article
ChatGPTFetches the full text of a single Sunsama help center article. First call "list_help_articles" to find the relevant article, then pass its id here. Returns the article title, url, and plain-text body so you can answer the user's question from the docs.
get_task_by_id
ChatGPTFetches a single task by its Sunsama task ID. Returns full task details including integration information.
get_task_time_estimate
ChatGPTGets the time estimate for a task in minutes.
import_task_from_calendar_event
ChatGPTImports a calendar event as a task.
list_help_articles
ChatGPTLists Sunsama's help center articles as a catalog: each entry has an id, title, description, category, and url. Use this whenever the user asks how a Sunsama feature works, what Sunsama can or cannot do, or whenever you are unsure about product behavior or a limitation. Pick the most relevant article from the list, then call "get_help_article" with its id to read it and answer from the docs instead of guessing. You can also share the article url with the user.
list_resources
ChatGPTLists all available resources and resource templates exposed by this MCP server. Use this tool to discover what data sources are available when the client doesn't support the MCP resources protocol natively. Returns an array of resources, where each resource has: - name: The resource identifier - uri: The static URI (for fixed resources) OR uri_template (for parameterized resources) - description: What the resource provides - mimeType: The content type returned
mark_subtask_as_completed
ChatGPTMarks a subtask of an existing task as completed.
mark_subtask_as_incomplete
ChatGPTMarks a subtask of an existing task as incomplete.
mark_task_as_completed
ChatGPTMarks a task as completed. Can also be used to move a task to a previous day which auto-completes the task.
mark_task_as_incomplete
ChatGPTMarks a task as incomplete.
merge_task_as_subtask
ChatGPTMerges an existing task into another task as a subtask. The merged task is folded into the parent task and removed from the task list (it can be unmerged from the parent later). Use add_subtasks_to_task to create brand-new subtasks instead, and convert_subtask_to_task to go the other way and pull a subtask out into a task of its own.
move_calendar_event
ChatGPTUpdates a calendar event's date, time, and/or duration.
move_task_from_backlog
ChatGPTMoves a task out of the backlog and onto a specific date.
move_task_to_backlog
ChatGPTMoves a task to the backlog. IF THE USER ASKS YOU TO MOVE A TASK TO A SPECIFIC DAY THEN YOU SHOULD USE THE move_task_to_day TOOL NOT THIS ONE.
move_task_to_day
ChatGPTMoves or defers a task to a specific date.
read_resource
ChatGPTReads a specific resource by URI. Use this tool to fetch data from resources when the client doesn't support the MCP resources protocol natively. For static resources, pass the exact URI from list_resources. For templated resources, fill in the placeholders with actual values. Example: If list_resources shows uri_template "sunsama://tasks/{calendarDay}", you would call this with uri "sunsama://tasks/2025-01-15" to get tasks for that day.
rename_channel
ChatGPTRenames one of the user's channels. Takes a channel ID, not a channel name — use the search_channels tool to resolve a name the user mentions into an ID first. Renaming only changes the channel's label; the tasks, objectives, and calendar events assigned to it stay assigned.
reorder_tasks
ChatGPTReorders tasks for the calendar day according to the provided order of taskIds.
reposition_task_in_backlog
ChatGPTRepositions a task within the backlog by moving it to a specific time bucket (horizon) and position (append/prepend).
restore_task
ChatGPTChanges a task from deleted to not deleted.
search_channels
ChatGPTSearches the user's channels by meaning, not just by exact name. Returns the closest matching channels ordered by relevance, so "client work" can match a channel named "Acme Corp". Use this to resolve a channel a user mentions into a channel ID before assigning tasks to it.
search_tasks
ChatGPTSearches for tasks. Returns tasks that match the search term or are similar to the search term. Omit searchTerm and pass completedOnOrAfter/completedOnOrBefore to list everything the user finished in a date range — this is how you summarize their completed work over a period, and it answers the whole range in one call. Narrow to a channel with channelId.
set_backlog_priority
ChatGPTSets the backlog priority of a task. Backlog priority persists and is used for tasks in the backlog. Valid values: "urgent", "high", "medium", "low", "none". Set to null to clear.
set_calendar_event_task_projections
ChatGPTSets whether tasks are allowed to be automatically projected (scheduled) at the same time as a calendar event — in other words, whether the event blocks that time for task work. When set to true, the event stops consuming the day's capacity and tasks fill its slot; when set to false, the event blocks the slot. Use this when the user says a blocking event is actually available for work ("my Deep Work Hold can be used for tasks", "ignore my focus blocks today", "that placeholder isn't real") or, in reverse, that a slot must stay protected. This is a Sunsama-only, per-user setting: it does NOT change the event's busy/free status on the external calendar, so nobody else sees a difference. It also only affects automatic projections — the user can still manually timebox tasks during a blocking event.
set_daily_priority
ChatGPTSets the daily priority of a task. Daily priority is tied to a specific day and decays after that day. Valid values: "urgent", "important", "normal", "low". Set to null to clear. The date is automatically determined from the task.
set_shutdown_time
ChatGPTSets the shutdown time for a specific day.
start_task_timer
ChatGPTStarts the timer for a task or subtask. If a subtaskId is provided, starts the timer for that specific subtask.
stop_task_timer
ChatGPTStops the timer for a task or subtask. If a subtaskId is provided, stops the timer for that specific subtask.
timebox_a_task_to_calendar
ChatGPTTimeboxes a task to the calendar. This will create a timebox event for the task. This may also be referred to as "scheduling" a task or "adding a task to the calendar".
toggle_auto_import_events
ChatGPTEnables or disables automatic importing of calendar events to the daily task list.
unarchive_task
ChatGPTUnarchives a task and moves it to a specific date or the backlog if no date is provided.
update_calendar_preferences
ChatGPTUpdates preferences for a specific calendar including whether it is the default for tasks, default for events, and whether it is included in auto-importing of events.
update_import_event_filters
ChatGPTUpdates the exclusion filters that determine which calendar events are excluded from automatic import. Events matching any of these filters will NOT be automatically imported.
update_incomplete_recurring_tasks
ChatGPTUpdates all incomplete instances of a recurring task to match the current task. This is useful when you want to apply changes made to one instance of a recurring task to all future incomplete instances.