---
title: Agent Tool Workflows
description: How agents compose FullCalendar WebMCP calendar tools.
---

Runtime tool descriptions and input schemas are the canonical contract. This page summarizes workflows.

For security and capabilities, see [Security](/integrations/fullcalendar/concepts/security). For inputs and returns, see [WebMCP tools](/integrations/fullcalendar/concepts/webmcp).

## Tools

| Tool | Use for |
|---|---|
| `calendar_get_context` | Resolve relative dates and timezone context |
| `calendar_list_events` | Search and discover events |
| `calendar_get_event` | Fetch one event by id |
| `calendar_create_event` | Create an event |
| `calendar_update_event` | Modify an event |
| `calendar_delete_event` | Delete an event |

Tools return structured calendar state. The consuming agent converts results into user-facing language.

## Relative dates

When the user says *tomorrow*, *Wednesday*, *next week*, and similar:

1. `calendar_get_context` → read `now`, timezones, visible range
2. Convert to ISO 8601 with offsets
3. Call list/create/update as needed

Skip step 1 when every datetime is already explicit with an offset.

## Stable ids

Mutations and `calendar_get_event` require a stable id from `calendar_list_events`, prior tool results, or the host — not from a title.

## Workflows

**"What's on my calendar tomorrow?"**

```text
calendar_get_context → calendar_list_events
```

**"Schedule lunch tomorrow at noon"**

```text
calendar_get_context → calendar_create_event
```

**"Move my dentist appointment to 4"**

```text
calendar_get_context → calendar_list_events → calendar_update_event
```

**"Delete event evt_123"**

```text
calendar_delete_event
```

When the user refers to an event by description, list first and disambiguate before update or delete.

## Query boundaries

For `calendar_list_events`: `start` is inclusive, `end` is exclusive. For a single day, set `end` to the start of the following day. `text` is a case-insensitive title substring.

On events, `end` is the exclusive event end.

## Tool results

| Tool | Returns |
|---|---|
| `calendar_create_event` | `{ event }` — persisted record from your repository |
| `calendar_update_event` | `{ event }` — post-update state |
| `calendar_delete_event` | `{ deleted: true, event }` — snapshot read before removal |
| `calendar_get_event` | `{ event: CalendarEvent \| null }` |
| `calendar_list_events` | `{ events: CalendarEvent[] }` — empty array when none match |

Repository failures surface as tool errors. `onEventsChanged` runs only after successful mutations.

Hosts may disable tools via `capabilities` — see [Security](/integrations/fullcalendar/concepts/security#capabilities).
