Skip to main content
Glama

Get availability

get_availability
Read-only

Returns the user's busy times in a given range, across all calendars shared with this access.

How the answer is produced: every shared calendar is read directly at the provider and the results are merged. There is no detour through a copy. as_of per calendar says when it was read — reads are reused for up to 60 seconds, so an event created moments ago may briefly be missing.

What busy contains: every event in the range, including all-day events and ones marked "tentative". Cancelled events are not included.

blocks_time per entry says whether it actually occupies the time. It is false for entries that do not make the user unavailable — holidays, birthdays, and (importantly) ALL all-day events from Apple/iCloud, which that provider always marks as free with no setting for the user to change. Such an entry is still a real appointment: an all-day "Baustelle Darmstadt" is a working day, not free time.

Use it accordingly: for "am I free / find me a slot", count only blocks_time: true. For "what do I have on", list everything and let the user judge. Never present a blocks_time: false entry as nonexistent.

Completeness: the answer covers exactly the calendars the user shared — not necessarily all calendars they own. If one of them could not be read, it appears with read: false in sources and additionally in warnings. These limitations belong in your answer to the user.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the range, ISO 8601
fromYesStart of the range, ISO 8601 (e.g. 2026-07-21T00:00:00Z)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
busyYes
rangeYes
sourcesYes
warningsYes
range_clampedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / busy / items / properties / blocks_time
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / busy / items / required
      Previous value: -[
      -  "start",
      -  "end",
      -  "is_all_day",
      -  "calendar_id",
      -  "calendar_name"
      -]New value: +[
      +  "start",
      +  "end",
      +  "is_all_day",
      +  "blocks_time",
      +  "calendar_id",
      +  "calendar_name"
      +]
  2. Changed6 schema fields changed
    • addedOutput schema / properties / busy / items / properties / attendees
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "email": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "optional": {
      +        "type": "boolean"
      +      },
      +      "organizer": {
      +        "type": "boolean"
      +      },
      +      "self": {
      +        "type": "boolean"
      +      },
      +      "status": {
      +        "enum": [
      +          "accepted",
      +          "declined",
      +          "tentative",
      +          "needs_action"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / busy / items / properties / event_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / busy / items / properties / has_other_attendees
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / busy / items / properties / is_organizer
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / busy / items / properties / is_recurring
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / busy / items / properties / more_attendees
      Added value: +{
      +  "type": "number"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / sources / items / properties / retryable
      Added value: +{
      +  "type": "boolean"
      +}
  4. First observed

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, it discloses freshness limits ('reads are reused for up to 60 seconds, so an event created moments ago may briefly be missing'), the merge/no-copy read path, what is included and excluded (all-day and tentative in, cancelled out), the Apple/iCloud blocks_time quirk, and failure modes ('read: false in sources... additionally in warnings'). This is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core answer is front-loaded in the first sentence, and the following paragraphs are labeled by concern ('How the answer is produced', 'What busy contains', 'Completeness'), so scanning is easy. It is longer than a two-parameter read tool strictly needs, but nearly every sentence carries non-obvious semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still supplies the interpretation layer an agent needs (as_of, busy, blocks_time, read:false in sources, warnings) and explicitly tells the agent to surface those limitations to the user. Nothing needed to call or correctly relay results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both required parameters (from, to) are fully documented in the schema at 100% coverage, so the baseline is 3. The description adds nothing about parameter syntax or formatting beyond what the schema already states; its detail is about output interpretation, not inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource with explicit scope: 'Returns the user's busy times in a given range, across all calendars shared with this access.' This is clearly distinct from search_events or list_calendars in substance, but no sibling tool is named to make the routing explicit, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use branching tied to user intent: 'for "am I free / find me a slot", count only blocks_time: true' versus 'for "what do I have on", list everything'. It also sets an exclusion-style rule ('Never present a blocks_time: false entry as nonexistent'). It does not, however, contrast this tool against alternatives like search_events or list_calendars.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources