Caly
Server Details
Scheduling: event types, open slots, and booking, rescheduling or cancelling meetings in Caly.
- Status
- Healthy
- Uptime
- 99.8% over 19 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 12 tools
Each direct tool targets a distinct resource/action (bookings, event types, schedules, availability) with singular/plural pairs that read clearly. The only mild overlap is the meta pair search_tools/execute_typescript, which exposes the same tools through a second path, potentially causing confusion about when to call directly versus inside a sandbox.
The set follows a consistent verb_noun snake_case pattern (create_booking, get_booking, list_bookings, find_available_slots, reschedule_booking, cancel_booking, search_tools, execute_typescript). The lone deviation is whoami, which breaks the verb_noun convention but is a widely understood idiom.
Twelve tools is well within the sweet spot and every tool earns its place: booking CRUD, availability lookup, event-type and schedule reads, plus a clear sandbox/meta layer. Nothing feels padded or redundant at the count level.
Core booking lifecycle is fully covered: find availability, create, get, list, reschedule, and cancel with confirmation. Gaps are minor and arguably out of scope, such as no update_booking for attendee/notes changes and read-only event types and schedules (no create/update).
Available Tools
12 toolscancel_bookingCancel bookingADestructiveInspect
Cancel a booking and notify its attendees. Cannot be undone. Two steps: the first call returns CONFIRMATION_REQUIRED with a confirmToken; show the user which booking will be cancelled, then call again with the SAME arguments plus confirmToken.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingUid | Yes | Booking UID (a string like '2NtaeaVcKfpmSZ4CthFdfk'), as returned by list_bookings or create_booking. | |
| confirmToken | No | Leave empty on the first call. Then pass the token from the CONFIRMATION_REQUIRED answer. | |
| cancellationReason | No | Why the booking is cancelled; shown to attendees. | |
| cancelSubsequentBookings | No | Recurring bookings only: also cancel every later occurrence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond annotations: the action is irreversible ('Cannot be undone'), has an attendee-notification side effect, and requires a two-step confirmation handshake with a token. These are exactly the traits an agent needs and they go beyond destructiveHint/idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and irreversibility, then the critical two-step protocol. Every clause carries information; nothing is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the CONFIRMATION_REQUIRED response and confirmToken round trip, and covers the destructive, irreversible nature of the call. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema, including confirmToken's first-call/second-call usage. The description reinforces the confirmToken flow but adds no semantics the schema lacks, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel a booking') plus the side effect ('notify its attendees'). It is naturally distinct from siblings like reschedule_booking and get_booking, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit operational guidance for the two-step flow: first call returns CONFIRMATION_REQUIRED, show the user the affected booking, then re-call with the same arguments plus confirmToken. It does not contrast with alternatives such as reschedule_booking, but the confirmation protocol is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_bookingCreate bookingAInspect
Book a meeting on one of the caller's event types for an attendee. Sends the usual confirmation emails and calendar invites. Get a free start time from find_available_slots first; required booking questions come from get_event_type's bookingFields.
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | Start time in ISO 8601, in UTC (e.g. '2026-10-01T09:00:00Z'). Pick it from find_available_slots so it is actually free. | |
| guests | No | Extra guest emails to invite. | |
| attendee | Yes | The person being booked. | |
| metadata | No | Free-form string key/values stored on the booking (at most 50 keys). | |
| eventTypeId | Yes | Numeric event type ID, as returned by list_event_types. | |
| lengthInMinutes | No | Meeting length, only for event types that offer several lengths. Defaults to the event type's length. | |
| bookingFieldsResponses | No | Answers to the event type's custom booking questions, keyed by booking field slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/non-idempotent/open-world profile, so the description's job is to add context. It does: the booking triggers confirmation emails and calendar invites, which is a real externally-visible side effect an agent should anticipate. It does not discuss duplicate-booking behavior or failure modes, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then side effects, then prerequisites. No filler and nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter nested-object mutation with no output schema, the description covers the action, side effects, and the two prerequisite lookups, which is enough to invoke correctly. It omits what a successful response contains (booking ID/confirmation) and any guidance on the optional lengthInMinutes/metadata tradeoffs, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents start, attendee sub-fields, guests, metadata, and lengthInMinutes in detail, including the find_available_slots hint. The description's only addition is where bookingFieldsResponses answers come from, which is marginal at this coverage level. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Book a meeting') plus the scope constraint ('on one of the caller's event types for an attendee'), which separates it from sibling list_/get_/cancel_/reschedule_ tools. An agent can tell immediately that this is the creation path for a booking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite chain: obtain a free start from find_available_slots, and pull required booking questions from get_event_type's bookingFields. It does not state exclusions (e.g. not for rescheduling or for other organizers' event types), so it stops short of a 5, but the when-to-use guidance is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_typescriptExecute TypeScriptBDestructiveInspect
Run a short TypeScript program that calls Caly tools (found via search_tools) in an isolated sandbox. See the server instructions for the full contract.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | A TypeScript program body run in an isolated sandbox. Call the external_* functions search_tools declared; the program must `return` its result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the agent knows this is an unsafe, side-effecting, open-world execution. The description adds the isolated-sandbox context and the requirement that the program `return` its result, but it doesn't explain what 'short' means, concurrency limits, or what gets destroyed. It adds some value beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and then pointing to server instructions. It's efficient, though the pointer to server instructions is a bit of a punt rather than self-contained guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with full schema coverage and no output schema, the description covers the essentials: what it does and that the program must return its result. However, it defers the 'full contract' to server instructions and never mentions key behavioral facts (what tools are exposed as functions, whether external_* is always the prefix, error semantics), leaving meaningful gaps for an agent invoking it blind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single `code` parameter is fully documented in the schema (including the `return` requirement and external_* function contract). The description adds no parameter-level detail beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: runs TypeScript code in an isolated sandbox that calls Caly tools found via search_tools. This distinguishes it from the sibling search_tools, which only finds tools. It doesn't fully explain the program model (e.g., what 'short' means or what functions are exposed), but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies you call it after finding tools with search_tools and that it's for short programs, but there's no explicit when-to-use vs. alternatives, no limits, and no exclusions. The deferral to 'server instructions for the full contract' leaves the agent without local guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_available_slotsFind available slotsARead-onlyIdempotentInspect
Find the free start times for an event type between two dates. Returns slots grouped by date, each with start and end. Pass a slot's start (as UTC ISO 8601) to create_booking or reschedule_booking.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Range end, UTC ISO 8601. A bare date ('2026-10-07') means the end of that day. | |
| start | Yes | Range start, UTC ISO 8601. A bare date ('2026-10-01') means the start of that day; a datetime ('2026-10-01T09:00:00Z') is used as-is. | |
| duration | No | Slot length in minutes, only for event types that offer several lengths. | |
| timeZone | No | IANA time zone the slot times are returned in (e.g. 'Europe/Rome'). Defaults to UTC. | |
| eventTypeId | Yes | Numeric event type ID, as returned by list_event_types. | |
| bookingUidToReschedule | No | When looking for a new time for an existing booking, its UID, so its current slot counts as free. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the return structure (slots grouped by date, each with start/end) and the requirement that starts be handled as UTC ISO 8601. It does not mention result limits or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, return shape, and downstream handoff. Zero filler and the most decision-relevant information (what it finds) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by sketching the return format, and the 100%-covered input schema handles parameters. Minor gaps remain around pagination/limits and what happens when no slots exist, but nothing essential for calling the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including eventTypeId, duration, timeZone and bookingUidToReschedule is already documented in the schema; baseline 3 applies. The description adds only the cross-tool note about passing a slot's start in UTC ISO 8601, without elaborating on the reschedule or duration parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('find the free start times for an event type between two dates') plus the returned shape (slots grouped by date with start and end). No sibling tool overlaps this capability, so an agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description situates the tool in the booking workflow by telling the agent to pass a returned slot start into create_booking or reschedule_booking, which implicitly defines when to use it. It gives no explicit when-not conditions or alternatives, but none are needed here since no sibling duplicates availability lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookingGet bookingBRead-onlyIdempotentInspect
Get one booking by UID: status, start and end, attendees, hosts, location or meeting URL, and any cancellation or rescheduling details.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingUid | Yes | Booking UID (a string like '2NtaeaVcKfpmSZ4CthFdfk'), as returned by list_bookings or create_booking. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description's added value is the field inventory (status, times, attendees, hosts, location, cancellation/rescheduling), but it says nothing about authorisation scope or error behavior for an unknown UID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that leads with the verb and resource before listing returned fields. Every clause earns its place, though the field enumeration could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by listing what the returned booking contains. For a simple one-parameter read tool with full annotation coverage, nothing critical is missing beyond usage routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single bookingUid parameter is fully described there, including its format and origin. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one booking) scoped by UID, and enumerates the fields returned. It implicitly contrasts with list_bookings but never names a sibling to differentiate itself explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_bookings, search or find_available_slots. The UID-scoped retrieval is only implied by the description and the required parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_typeGet event typeARead-onlyIdempotentInspect
Get one event type in full: lengths, locations, booking questions (bookingFields), buffers, minimum notice, schedule and booking URL. Use it to learn which bookingFieldsResponses create_booking needs.
| Name | Required | Description | Default |
|---|---|---|---|
| eventTypeId | Yes | Numeric event type ID, as returned by list_event_types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds the less-obvious behavior that the response is complete ('in full') and enumerates the data it surfaces. It does not discuss errors, permissions, or missing-ID behavior, but with annotations carrying the safety burden this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and returned fields, then the usage cue. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by enumerating the returned fields and the booking URL, so the agent knows what comes back. It omits failure/empty-result behavior, which keeps it short of 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema coverage is 100%, with the schema stating it is the numeric ID returned by list_event_types. The description adds no syntax, format, or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one event type) and scopes it as a single-record fetch versus the list sibling, then enumerates the fields returned (lengths, locations, bookingFields, buffers, minimum notice, schedule, booking URL). An agent can distinguish it from list_event_types without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties usage to a concrete downstream need: 'Use it to learn which bookingFieldsResponses create_booking needs,' naming the sibling it feeds. No when-not guidance (e.g., when list_event_types suffices) is given, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bookingsList bookingsARead-onlyIdempotentInspect
List the caller's bookings, optionally filtered by status (upcoming, past, cancelled, unconfirmed, recurring), attendee, event type or a time window. Paginated with take/skip; check pagination.hasNextPage.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | How many bookings to skip (for the next page). | |
| take | No | Page size, 1 to 100. Default 25. | |
| status | No | Only bookings in these statuses, e.g. ['upcoming']. Omit for all. | |
| beforeEnd | No | Only bookings ending before this UTC ISO 8601 datetime. | |
| sortStart | No | Sort by start time. | |
| afterStart | No | Only bookings starting after this UTC ISO 8601 datetime. | |
| eventTypeId | No | Only bookings of this event type. | |
| attendeeName | No | Only bookings with this attendee name. | |
| attendeeEmail | No | Only bookings with this attendee email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that by disclosing pagination mechanics (take/skip) and naming the output field to inspect (pagination.hasNextPage) โ important since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste; the core action and scope come first, filters second, and pagination last. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required listing tool with no output schema, the description covers the main filter groups and correctly points at the pagination field. Only minor omission is the sortStart parameter and confirmation that results are the caller's own records by default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including the status enum and date bounds is already documented. The description's enumeration of filter categories and status values largely restates the schema rather than adding syntax or format detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('bookings') with an explicit scope ('the caller's bookings'), plus the filter dimensions available. An agent can distinguish this from get_booking (singular) and list_event_types without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the listing/filtering context clear and notes the pagination follow-up, but offers no explicit when-not guidance or alternatives such as get_booking for a single record. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_event_typesList event typesARead-onlyIdempotentInspect
List the caller's own event types (the bookable meeting kinds, e.g. '30 min intro'), hidden ones included, with ID, slug, title and length. Use an ID from here with find_available_slots and create_booking.
| Name | Required | Description | Default |
|---|---|---|---|
| sortCreatedAt | No | Order by creation date. Omit for the API's default order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: hidden event types are included in the result, and the returned fields (ID, slug, title, length) are named even though no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The identity/scope of the tool comes first and the downstream call-to-action second, so the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields, and it covers scope (own types, hidden included) and next steps. An agent has everything needed to call this correctly and use its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single sortCreatedAt parameter is fully documented in the schema, including the enum values and the omit-for-default behavior. The description adds nothing about ordering, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list event types) and defines the domain term inline ('the bookable meeting kinds, e.g. 30 min intro'), which removes ambiguity. It also scopes the result set precisely ('the caller's own ... hidden ones included') and enumerates the returned fields, so an agent can distinguish it from get_event_type and list_schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent forward: 'Use an ID from here with find_available_slots and create_booking,' which tells the agent this is the entry point for the booking workflow. It does not, however, say when to prefer get_event_type over this tool or note any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesList schedulesARead-onlyIdempotentInspect
List the caller's availability schedules: working hours per weekday, date overrides, time zone, and which one is the default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the prose. The only added behavioral detail is the scoping word "caller's", implying it returns only the authenticated user's schedules rather than others' โ useful but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single colon-led sentence that leads with the action and resource, then lists the returned fields. Every clause carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the return shape (working hours per weekday, date overrides, time zone, default flag), which is exactly the compensation needed. It stops short of saying whether multiple schedules can be returned or how they are ordered, but coverage is strong for a zero-arg read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a 0-param schema. The description instead spends its words on payload contents, which is a reasonable use of the space.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("List") plus a precise resource ("the caller's availability schedules") and even enumerates what a schedule contains. The resource is clearly disjoint from siblings like list_event_types, list_bookings, and find_available_slots, so an agent can pick it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what is returned but never says when to call it instead of a neighbor such as find_available_slots or list_event_types. There is no exclusion, prerequisite, or alternative-selection rule, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_bookingReschedule bookingADestructiveInspect
Move a booking to a new start time. Caly creates the new booking (with a new UID, returned here) and notifies attendees. Find a free time with find_available_slots, passing bookingUidToReschedule.
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | Start time in ISO 8601, in UTC (e.g. '2026-10-01T09:00:00Z'). Pick it from find_available_slots so it is actually free. | |
| bookingUid | Yes | Booking UID (a string like '2NtaeaVcKfpmSZ4CthFdfk'), as returned by list_bookings or create_booking. | |
| rescheduledBy | No | Email of whoever is rescheduling. Only needed for bookings that require confirmation; the event type owner's email auto-confirms. | |
| reschedulingReason | No | Why the booking moves; shown to attendees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior beyond the annotations: the operation produces a new booking with a new UID (returned here) and notifies attendees. This is meaningful for a destructiveHint=true tool, since it tells the agent the identity of the record changes. It still never states what happens to the original booking (cancelled? soft-deleted?), which is the most consequential unknown for a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the side effects, then the routing hint. Every sentence carries distinct information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly covers the return value (new UID) and attendee notification, and the schema covers parameters. The one gap is the disposition of the original booking, which matters given destructiveHint=true; otherwise this is complete for a 4-parameter mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the ISO 8601 format and confirmation behavior of rescheduledBy. The description adds no parameter detail and even introduces a near-miss name ('bookingUidToReschedule') that belongs to find_available_slots, not this tool. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Move a booking to a new start time') and immediately distinguishes itself from create_booking by disclosing that Caly creates a NEW booking with a new UID rather than editing in place. An agent can differentiate it from siblings like create_booking, cancel_booking, and get_booking without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent through the prerequisite workflow: 'Find a free time with find_available_slots, passing bookingUidToReschedule.' That is real when-to-use guidance. It stops short of stating when NOT to use it (e.g. use cancel_booking + create_booking for a different event type), so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toolsSearch toolsARead-onlyIdempotentInspect
Find the Caly tools this connection can call, returned as TypeScript declarations to use from execute_typescript. See the server instructions for the full contract.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive substring matched against each tool's name, title and description. Omit to return every tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuinely useful context beyond them: the result is code-shaped (TypeScript declarations) and scoped to 'this connection,' which tells the agent the search is permission-bounded. It loses a point for deferring the actual contract to unstated 'server instructions.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core purpose front-loaded and the sibling relationship in the first sentence. The trailing pointer to server instructions is functional but slightly hand-wavy rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-parameter, read-only discovery tool this is nearly sufficient: it conveys scope and output shape, and no output schema is needed. The remaining gap is that result size/limits and the referenced 'full contract' are left external, which could matter if the agent never sees server instructions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'query' parameter is fully documented in the schema (case-insensitive substring over name/title/description, omit to return all). The description adds no parameter meaning on top of that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and resource ('the Caly tools this connection can call'), and specifies the return format (TypeScript declarations). It also names the sibling tool execute_typescript as the consumer of the results, so an agent can distinguish discovery from execution without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'returned as TypeScript declarations to use from execute_typescript' implies the workflow (discover here, run there) but never states when to call this versus execute_typescript directly, nor any prerequisite. Usage is inferable rather than explicit, and there are no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-onlyIdempotentInspect
Return the Caly account this connection acts as: user ID, username, email, name, time zone, week start and default schedule. Call it first to learn the user's time zone before reading or booking times.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond that by disclosing the returned field set and by framing the tool as a prerequisite bootstrap step for time-related operations. It stops short of noting whether results are cached or what happens to unknown accounts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The return payload leads and the ordering instruction follows, so an agent gets the essential facts in the first clause without reading further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by listing the specific fields returned, and it explains the operational role of the call. For a zero-parameter identity tool this covers everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the 0-parameter baseline of 4 applies. The schema is empty and consistent with the description, which promises no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (return) and resource (the Caly account this connection acts as), then enumerates exactly which fields come back: user ID, username, email, name, time zone, week start, default schedule. This clearly separates it from calendar-data siblings like list_bookings or get_event_type, which return bookings rather than identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit call-ordering rule with the reason attached: 'Call it first to learn the user's time zone before reading or booking times.' That is actionable when-to-use guidance tied to a concrete dependency, which none of the sibling tools state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- Added
cancel_booking - Added
create_booking - Added
find_available_slots - Added
get_booking - Added
get_event_type - Added
list_bookings - Added
list_event_types - Added
list_schedules - Added
reschedule_booking - Added
whoami
2 tool updates
- First observed
execute_typescript - First observed
search_tools
Publisher details
- Operator
- Devino Solutions
- Operator website
- https://devino.ca
- Vendor relationship
- First-party
- Documentation
- https://trycaly.com/docs/
- Trust center
- Not available
- Restrictions
- Not available
Related MCP Connectors
Schedule meetings, manage event types, and check availability through Lunacal's scheduling platform.
- AstrocalOAuthdev.astrocal
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
I do everything related to calendar scheduling
AI-native scheduling and booking: check availability, book meetings, share links.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with Calendly to manage event types, scheduled events, and invitees. It provides tools for checking user availability and canceling appointments directly through the Calendly API.7MIT
- AlicenseNot gradedqualityDmaintenanceExposes Cal.com scheduling tools to AI agents via MCP, enabling listing event types, checking availability, and managing bookings (create, cancel, reschedule).232 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to schedule meetings via Astrocal's scheduling API, including checking availability, booking, canceling, rescheduling, and managing waitlists through natural conversation.15 npm1MIT
- AlicenseAqualityCmaintenanceEnables AI agents to discover bookable time slots, book and cancel meetings, list events, and enable or disable scheduling links. Also supports managing webhooks and exposes write/destructive operations with MCP annotations so clients can confirm before acting.1257 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.