Caly: Managing Bookings

Reviews and changes the user's Caly bookings: lists upcoming, past, cancelled or unconfirmed meetings, looks one up by attendee or time, reschedules it to a free slot, or cancels i…

Devino Solutions

@devino

Install

$ openclaw skills install @devino/caly-managing-bookings

Caly: managing bookings

Find the right booking, then read, move or cancel it without surprising anyone.

Connecting and calling the tools

Every tool in this skill comes from the caly MCP server, the Caly connector, and is written here as caly:<tool>.

  • Tools listed by name: call them directly, for example caly:list_bookings.
  • Only caly:search_tools and caly:execute_typescript listed (Code Mode, the default): call caly:search_tools first, then call each tool inside caly:execute_typescript as external_<tool> (for example external_list_bookings); the program must return its result.
  • "Tool not found": switch to the Code Mode route instead of retrying the direct call.
  • No caly tools at all: Caly is not connected yet. Add the server as shown in https://github.com/DevinoSolutions/mcp-servers/tree/main/caly#install; it signs in with OAuth on first use.

A refused call throws an Error whose message starts with its code, for example CONFIRMATION_REQUIRED:.

Tools you will use

  • caly:whoami: the account and its time zone.
  • caly:list_bookings: the user's bookings, filtered by status (upcoming, past, cancelled, unconfirmed, recurring), attendeeEmail, attendeeName, eventTypeId, or a window (afterStart, beforeEnd). Paginated with take and skip; check pagination.hasNextPage.
  • caly:get_booking: one booking by bookingUid, with attendees, hosts, location and any cancellation or rescheduling details.
  • caly:find_available_slots: free start times; pass bookingUidToReschedule when moving a booking so its own slot counts as free.
  • caly:reschedule_booking: moves a booking to a new start (UTC ISO 8601), with an optional reschedulingReason. Caly creates a new booking with a new uid and notifies the attendees.
  • caly:cancel_booking: cancels a booking and notifies its attendees. It cannot be undone and takes two calls (see the workflow).

Workflow

Reviewing bookings

  1. Call caly:whoami for the time zone, then caly:list_bookings with the filters that match the question ("tomorrow" → status: ["upcoming"] plus a window; "with Sam" → attendeeName or attendeeEmail).
  2. Follow pagination.hasNextPage with skip until the window is covered, or tell the user how many more there are.
  3. List each booking with its time in the user's time zone, title, attendees and status. Call caly:get_booking only when the user wants one booking's details.

Rescheduling

  1. Identify exactly one booking and its uid. If several match, list them and ask which one.
  2. Call caly:find_available_slots for its event type and the new day, passing bookingUidToReschedule. Use only a start time from the result.
  3. Confirm with the user: the booking, the old time, the new time (in the user's and the attendee's time zone), and that Caly will notify the attendees. Wait for an explicit yes.
  4. Call caly:reschedule_booking once. Report the new time and the new uid.

Cancelling

  1. Identify exactly one booking and its uid, and ask for a reason if the user has one.
  2. Call caly:cancel_booking with the bookingUid (and cancellationReason). The first call does not cancel: it returns CONFIRMATION_REQUIRED with a confirmToken.
  3. Show the user which booking will be cancelled (title, time, attendees) and that the attendees will be emailed. Wait for an explicit yes.
  4. Call caly:cancel_booking again with the SAME arguments plus the confirmToken. Report that it is cancelled.

Rules

  • Never reschedule or cancel without the user's explicit yes to a summary that names the booking.
  • Never pass a confirmToken the user has not seen the booking for, and never reuse one for a different booking.
  • Set cancelSubsequentBookings only when the user clearly asks to cancel the rest of a recurring series.
  • Always state the time zone next to every time you show.

Top skills in this category

Playwright MCP

@spiceman161

Browser automation via Playwright MCP server. Navigate websites, click elements, fill forms, extract data, take screenshots, and perform full browser automation workflows.

16047k

YouTube

@byungkyu

YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login, or over raw HTTP with a Maton API key where the CLI cannot be installed. Every call is authenticated as the user's connection and reaches only what that connection's authorization allows, which the provider enforces on every request; the endpoints documented here are the ones this skill uses, and any other endpoint of this app needs the user to ask for it by name. Default to read and list calls, and confirm every write or new connection with the user. This file also documents the three constructs that turn a YouTube connection into automation, in the order they are used: the connection (the first step), a hosted function that runs a YouTube action through the Maton SDK, and a trigger that calls that function on a schedule or on an event. Those sections are the platform's own reference text, shared with the api-gateway skill, with YouTube examples; they add no YouTube capability - YouTube is not an event source, a trigger cannot read YouTube data, and the files under `references/<source>/triggers.md` are the platform's event catalogues for the sources Maton offers (time, Calendly, GitHub, Gmail, HubSpot, Linear, Notion, Slack, Stripe).

14529k

Peekaboo

@steipete

Capture and automate macOS UI with the Peekaboo CLI.

8532k

google-slides

@byungkyu

Google Slides API integration with managed OAuth. Create presentations, add slides, insert content, and manage slide formatting. Use this skill when users want to interact with Google Slides. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login, or over raw HTTP with a Maton API key where the CLI cannot be installed. Every call is authenticated as the user's connection and reaches only what that connection's authorization allows, which the provider enforces on every request; the endpoints documented here are the ones this skill uses, and any other endpoint of this app needs the user to ask for it by name. Default to read and list calls, and confirm every write or new connection with the user. This file also documents the three constructs that turn a Google Slides connection into automation, in the order they are used: the connection (the first step), a hosted function that runs a Google Slides action through the Maton SDK, and a trigger that calls that function on a schedule or on an event. Those sections are the platform's own reference text, shared with the api-gateway skill, with Google Slides examples; they add no Google Slides capability - Google Slides is not an event source, a trigger cannot read Google Slides data, and the files under `references/<source>/triggers.md` are the platform's event catalogues for the sources Maton offers (time, Calendly, GitHub, Gmail, HubSpot, Linear, Notion, Slack, Stripe).

3420k

百度网盘

@wscats

百度网盘(Baidu Drive, pan.baidu.com)文件管理 — 上传、下载、转存、分享、搜索、移动、复制、重命名、创建文件夹、删除(高风险,需用户确认)。 同时支持 Agent 记忆备份/恢复(kimiclaw/maxclaw/qclaw/openclaw)。 TRIGGER: 用户消息明确提及"百...

1923k