---
title: Public Types
description: Comprehensive TypeScript type and interface definitions exported by `@protocoltooling/fullcalendar` for the FullCalendar WebMCP integration.
---

Public TypeScript types exported by `@protocoltooling/fullcalendar`.

```ts
import type {
  CalendarEvent,
  CreateCalendarEventInput,
  UpdateCalendarEventInput,
  CalendarEventQuery,
  CalendarEventRepository,
  FullCalendarHandle,
  FullCalendarWebMCPOptions,
  JsonObject,
  JsonPrimitive,
  JsonValue,
} from "@protocoltooling/fullcalendar";
```

---

## `CalendarEvent`

Core event model returned by your repository and by list/get tools.

```ts
export interface CalendarEvent {
  id: string;
  title: string;
  start: string;
  end: string | null;
  allDay: boolean;
  /** Optional host-selected, JSON-safe, agent-visible projection. */
  metadata?: JsonObject;
}
```

Add `metadata` when agents need context beyond the core fields. You choose exactly what is exposed. Metadata is **read-only** through WebMCP writes. Protocol Tooling never exposes FullCalendar `extendedProps` automatically.

| Prop | Type | Default | Description |
| - | - | - | - |
| `id` | `string` | - | Stable id assigned by your application. |
| `title` | `string` | - | Event title. |
| `start` | `string` | - | Start as ISO 8601 with an explicit timezone offset. |
| `end` | `string \| null` | - | End as ISO 8601 with offset, or null when there is no end. |
| `allDay` | `boolean` | - | Whether the event is all-day. |
| `metadata?` | `JsonObject` | - | Optional JSON-safe fields for agents. Omit to expose only core fields. |

---

## `JsonObject` / `JsonValue` / `JsonPrimitive`

JSON-safe types for agent-visible metadata.

```ts
export type JsonPrimitive = string | number | boolean | null;
export type JsonValue =
  | JsonPrimitive
  | JsonValue[]
  | { [key: string]: JsonValue };
export type JsonObject = { [key: string]: JsonValue };
```

---

## `CreateCalendarEventInput`

Input payload passed to `CalendarEventRepository.create`.

```ts
export interface CreateCalendarEventInput {
  title: string;
  start: string;
  end?: string | null;
  allDay?: boolean;
}
```

| Prop | Type | Default | Description |
| - | - | - | - |
| `title` | `string` | - | Human-readable title for the new event. |
| `start` | `string` | - | Start date-time in ISO 8601 format with offset. |
| `end?` | `string \| null` | - | Optional exclusive end date-time in ISO 8601 format. |
| `allDay?` | `boolean` | - | Optional flag indicating if the event spans the entire day. |

---

## `UpdateCalendarEventInput`

Input payload passed to `CalendarEventRepository.update`.

```ts
export interface UpdateCalendarEventInput {
  title?: string;
  start?: string;
  end?: string | null;
  allDay?: boolean;
}
```

| Prop | Type | Default | Description |
| - | - | - | - |
| `title?` | `string` | - | Updated title. |
| `start?` | `string` | - | Updated start date-time. |
| `end?` | `string \| null` | - | Updated end date-time. |
| `allDay?` | `boolean` | - | Updated all-day flag. |

---

## `CalendarEventQuery`

Filter criteria passed to `CalendarEventRepository.list`.

```ts
export interface CalendarEventQuery {
  start?: string;
  end?: string;
  text?: string;
}
```

| Prop | Type | Default | Description |
| - | - | - | - |
| `start?` | `string` | - | Inclusive ISO 8601 lower bound for filtering events. |
| `end?` | `string` | - | Exclusive ISO 8601 upper bound for filtering events. |
| `text?` | `string` | - | Optional case-insensitive substring to filter by event title. |

---

## `FullCalendarHandle`

Minimal structural surface required by FullCalendar WebMCP from a FullCalendar React instance. Compatible with FullCalendar React v6 class instances and v7 `CalendarRef` handles.

```ts
export interface FullCalendarHandle {
  getApi(): {
    getOption(name: string): unknown;
    view: {
      type: string;
      activeStart: Date;
      activeEnd: Date;
    };
  };
}
```

---

## `FullCalendarWebMCPOptions`

Configuration options passed to [`useFullCalendarWebMCP`](/integrations/fullcalendar/reference/use-fullcalendar-webmcp).

```ts
import type { RefObject } from "react";

export interface FullCalendarWebMCPOptions {
  calendarRef: RefObject<FullCalendarHandle | null>;
  events: CalendarEventRepository;
  onEventsChanged: () => unknown | Promise<unknown>;
  capabilities?: FullCalendarWebMCPCapabilities;
  onRegistrationError?: (error: unknown) => void;
}
```

```ts
export interface FullCalendarWebMCPCapabilities {
  read?: boolean;
  create?: boolean;
  update?: boolean;
  delete?: boolean;
}
```

For more details on implementing these interfaces, see [`CalendarEventRepository`](/integrations/fullcalendar/reference/calendar-event-repository), the [Repository Contract](/integrations/fullcalendar/concepts/repository), and [Security](/integrations/fullcalendar/concepts/security).
