Skip to main content
Glama
OfirOhan

YouCanBookMe MCP Server

by OfirOhan

YouCanBookMe MCP Server

CI MCP License: MIT

A Model Context Protocol server for YouCanBookMe. It lets Claude, Cursor, ChatGPT and other AI agents find open times on your booking pages, book, reschedule and cancel bookings, and answer questions like "how many no-shows did we have last month?".

Unofficial. This is a community project and is not affiliated with YouCanBookMe or Capacity. It was built from YouCanBookMe's public API docs.

What you can ask your agent

  • "What's on my Demo booking page for the next 3 days, and who are the bookers?"

  • "Find two morning slots on acme-demo next week in New York time and draft an email offering them to Sam."

  • "Book Dana Levi (dana@acme.com, London) into the first Tuesday slot."

  • "Move booking ref QNBZAQPTAITT to Thursday at 2pm."

  • "How many bookings, cancellations and no-shows did each booking page get in September?"

  • "Find every booking made by someone at acme.com this quarter."

Related MCP server: Cal.com MCP Server for Customers

Tools

Tool

What it does

Writes?

list_booking_pages

All booking pages (profiles) with id, title and subdomain

No

get_booking_page

One page's settings (choose fields with dot notation)

No

list_upcoming_bookings

Upcoming bookings for the next N days, with booker name and email

No

search_bookings

Bookings in a time range by status, page, or text (name, email, ref)

No

get_booking

One booking with times, status and form answers

No

booking_report

Counts by status (finished, cancelled, noShow...) and by page for a period

No

find_available_times

Open slots, grouped by day with local times, returns an intentId

Starts an intent

book_time

Book a slot found above (creates a real booking)

Yes

reschedule_booking

Move a booking to a new start time

Yes

cancel_booking

Cancel as the calendar owner (removes the calendar event)

Destructive

delete_booking

Permanently delete a booking record

Destructive

YouCanBookMe's booking API is built on booking intents (create intent, set selections, read availability, confirm). This server hides that flow behind two tools. find_available_times returns readable slots plus an intentId, and book_time fills in the form and confirms. Availability comes back as unix-millisecond timestamps, so the server converts it to ISO times and local clock times an LLM can reason about. Write tools carry MCP annotations, so clients can ask before running them.

Setup

  1. In YouCanBookMe, open Account > Password & Security (link) and copy your Account ID and API key (starts with ak_). On a Team plan, use the Organization Owner's key.

  2. Build it:

git clone https://github.com/OfirOhan/youcanbookme-mcp.git
cd youcanbookme-mcp && npm install && npm run build

Claude Desktop

Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "youcanbookme": {
      "command": "node",
      "args": ["/absolute/path/to/youcanbookme-mcp/dist/index.js"],
      "env": { "YCBM_ACCOUNT_ID": "your-account-id", "YCBM_API_KEY": "ak_..." }
    }
  }
}

Claude Code / Cursor / other MCP clients

claude mcp add youcanbookme -e YCBM_ACCOUNT_ID=... -e YCBM_API_KEY=ak_... -- node /path/to/youcanbookme-mcp/dist/index.js

For Cursor and other clients, use the same command with the variables in the environment.

Variable

Default

Notes

YCBM_ACCOUNT_ID

(required)

Your account ID (HTTP basic auth username)

YCBM_API_KEY

(required)

Your API key (HTTP basic auth password)

YCBM_BASE_URL

https://api.youcanbook.me

Override for testing

Development

npm install
npm test   # builds, runs unit tests and an end-to-end MCP stdio test against a fake YouCanBookMe API

The tests run on Node 20, 22 and 24 in CI.

Author

Built by Ofir Ohana, an AI agents engineer. Issues and PRs are welcome.

License

MIT

Available Tools

11 tools
booking_reportBooking reportA
Read-only

Counts of bookings in a period by status (finished, cancelled, noShow, upcoming...) and by booking page. Good for 'how many no-shows did we have last month?'.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd of the period, ISO 8601, e.g. 2026-10-12T09:00:00Z
fromYesStart of the period, ISO 8601, e.g. 2026-10-12T09:00:00Z
bookingPageIdsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral detail by disclosing that results are grouped counts by status (finished, cancelled, noShow, upcoming) and by booking page, which tells the agent what the response will contain. It stops short of describing pagination or whether both groupings are always returned.

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

Conciseness5/5

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

Two tight sentences, front-loaded with what is counted and grouped before the example query. No filler and every clause adds information.

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

Completeness4/5

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

For a read-only aggregation tool with no output schema, the description conveys the essential return shape (counts by status and booking page) and the period requirement. It could say more about the exact response structure and the role of bookingPageIds, but nothing critical to invoking it correctly 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?

Schema coverage is 67%: from/to are well documented in the schema, but bookingPageIds has no schema description. The phrase 'by booking page' hints that this parameter scopes or groups by page, adding marginal meaning, but it does not explain the array semantics or filtering behavior. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (counts) plus the resource (bookings) and the exact grouping dimensions (status and booking page). An agent can immediately separate this aggregate-report tool from the sibling listing tools like search_bookings or list_upcoming_bookings.

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?

The example question ('how many no-shows did we have last month?') clearly signals the intended usage context for a counting/aggregation query. However, it never names an alternative tool or states when not to use it, so the routing guidance is implied rather than explicit.

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

book_timeBook a timeA

Book a slot found by find_available_times. Fills the booking form and confirms the intent, which creates a real booking and calendar event and sends notifications, so confirm details with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
unitsNoSeats to book (default 1)
intentIdYesintentId returned by find_available_times
lastNameNo
startsAtYesSlot start, exactly as returned by find_available_times, ISO 8601, e.g. 2026-10-12T09:00:00Z
timeZoneYesBooker's IANA time zone
firstNameYes
otherAnswersNoAnswers to other required form questions, by question code, e.g. [{id:'PHONE', value:'+1...'}]

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false, so the write/side-effect profile is partly covered. The description adds genuine value beyond that: it discloses that the call creates a real booking plus a calendar event and sends notifications, which is the kind of irreversible-external-effect detail an agent needs before calling.

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

Conciseness5/5

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

One sentence, front-loaded with the action and its input source, then the side effects, then the safety caveat. No filler and no repetition of the title.

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

Completeness4/5

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

For a non-idempotent mutation tool with no output schema, the description covers the source of inputs, the side effects, and the confirmation requirement, which is close to complete. Minor gap: it does not say what the response contains or how to recover from a failed/duplicate booking, though annotations handle the idempotency signal.

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?

Schema description coverage is 63% and the description adds no field-level meaning beyond noting that intentId comes from find_available_times, which the schema already states. With most parameters self-documented in the schema, this sits at the baseline of 3.

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

Purpose5/5

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

States a specific verb and resource ('Book a slot') and anchors it to the sibling that produces the input ('found by find_available_times'), which cleanly separates it from search/get/cancel/reschedule siblings.

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?

Gives a clear workflow precondition (use only with a slot returned by find_available_times) and an explicit caution to confirm details with the user first. It does not name an alternative for the related operations, but the sourcing dependency is stated plainly.

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

cancel_bookingCancel bookingA
DestructiveIdempotent

Cancel a booking as the calendar owner. The calendar event is removed and cancellation notifications are sent per the page's settings. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookingIdYesBooking ID (UUID), from search_bookings or list_upcoming_bookings

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description still adds real value beyond them: the calendar event is removed, cancellation notifications are sent according to the page's settings, and confirmation is required first — side effects an agent cannot infer from the hints alone.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and actor, followed by the consequences and the confirmation requirement. Every clause earns its place with no padding.

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

Completeness4/5

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

For a one-parameter destructive tool with no output schema, the description covers actor scope, side effects (event removal, notifications), and a confirmation safeguard. It leaves only minor gaps, such as behavior when the booking is already cancelled (implied by idempotentHint=true but not stated).

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?

With a single parameter at 100% schema description coverage, the schema already documents bookingId fully, including its provenance (search_bookings or list_upcoming_bookings). The description adds no parameter-level meaning, so baseline 3 applies.

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?

States a specific verb and resource ('Cancel a booking') plus the acting scope ('as the calendar owner'), so the core action is unambiguous. However, it never distinguishes itself from the sibling 'delete_booking', which an agent must disambiguate before choosing between them.

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

Usage Guidelines3/5

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

The instruction 'Confirm with the user first' gives one actionable usage rule and 'as the calendar owner' implies a permission precondition. But there is no explicit when-to-use-this-vs-alternatives guidance, notably against delete_booking or reschedule_booking.

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

delete_bookingDelete bookingA
DestructiveIdempotent

Permanently delete a booking record from YouCanBookMe. No further notifications are sent, but the calendar event stays on the calendar. Prefer cancel_booking unless the user explicitly wants the record gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookingIdYesBooking ID (UUID), from search_bookings or list_upcoming_bookings

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructive/idempotent/openWorld, but the description adds consequences the annotations cannot: no further notifications are sent and the calendar event is left intact. That is exactly the side-effect detail an agent needs before destroying a record.

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

Conciseness5/5

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

Three short sentences, zero filler, with the destructive nature front-loaded and the alternative-tool guidance immediately after. Every sentence earns its place.

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?

For a single-parameter destructive tool with full annotation coverage and no output schema, the description supplies everything missing: permanence, notification behavior, calendar-event persistence, and the safer alternative.

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?

Schema description coverage is 100% and the single bookingId parameter already documents its format (UUID) and its source tools. The description adds no parameter-level meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Permanently delete a booking record') with the product scope (YouCanBookMe) and explicitly distinguishes the operation from cancel_booking, a real sibling in the tool list.

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

Usage Guidelines5/5

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

Gives an explicit routing rule: 'Prefer cancel_booking unless the user explicitly wants the record gone.' This names the alternative tool and the condition that selects this one, leaving nothing to inference.

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

find_available_timesFind available timesA

Find open times on a booking page, grouped by day with readable local times. This starts a booking intent and returns its intentId. Pass that intentId and one slot's exact startsAt to book_time to book it.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoOnly show slots from, ISO 8601, e.g. 2026-10-12T09:00:00Z
untilNoOnly show slots until, ISO 8601, e.g. 2026-10-12T09:00:00Z
durationNoDuration in minutes, if the page lets the booker choose
timeZoneYesBooker's IANA time zone for display and booking, e.g. America/New_York
subdomainYesBooking page subdomain (from list_booking_pages), e.g. 'acme-demo' for acme-demo.youcanbook.me
teamMemberIdNoTeam member ID, or AUTO to let the page assign
appointmentTypeIdsNoAppointment type IDs, if the page uses them

TDQS

A4.4/5.0
Behavior5/5

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

Discloses a genuinely non-obvious side effect beyond the annotations: despite the 'find' name, it starts a booking intent and returns an intentId. This is exactly the kind of hidden state creation an agent needs, and it aligns with (rather than repeats) readOnlyHint=false.

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

Conciseness5/5

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

Two sentences with zero filler; the purpose and return grouping come first, then the handoff to book_time. Every clause earns its place.

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

Completeness4/5

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

With no output schema, the description covers the key return value (intentId) and result grouping, and all parameters are schema-documented. Minor gaps remain: no mention of behavior when no slots are available, intent expiry, or pagination limits.

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?

Schema description coverage is 100%, so the schema already documents all seven parameters, including examples for from/until and the IANA timeZone. The description adds only the downstream intentId/startsAt pairing, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Find open times on a booking page') plus the return shape ('grouped by day with readable local times'). This clearly distinguishes it from sibling reads like get_booking_page and from the downstream book_time action.

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?

Explicitly frames the tool as the first step of a booking flow and routes the agent to book_time with the intentId and an exact startsAt. It gives a clear use context but does not state when NOT to use it or how it relates to reschedule/cancel flows.

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

get_bookingGet bookingA
Read-only

Get one booking with times, status, booking page, and the booker's form answers.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOverride the comma-separated field list
bookingIdYesBooking ID (UUID), from search_bookings or list_upcoming_bookings

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context about the payload contents (times, status, booking page, form answers), but says nothing about permissions, error behavior for a missing/invalid ID, or the fields override's effect.

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

Conciseness5/5

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

A single, front-loaded sentence that names the resource first and then the returned content. Every clause carries information; there is no filler.

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

Completeness4/5

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

For a simple read-only lookup with no output schema, the description's enumeration of returned data adequately compensates for the missing output schema. Only minor gaps remain: no note on behavior when the booking is not found and no guidance on the optional fields override.

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?

Schema description coverage is 100%, so both bookingId and the fields override are documented in the schema itself; baseline 3 applies. The description adds no meaning beyond the schema - it doesn't explain what the 'fields' override does or why one would use it.

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?

States a specific verb ('Get') and resource ('one booking') and enumerates what comes back: times, status, booking page, and the booker's form answers. It is clearly distinguishable from the list-oriented siblings (search_bookings, list_upcoming_bookings), though it never names them explicitly.

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

Usage Guidelines3/5

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

There is no explicit when-to-use/when-not statement in the description. Usage is only implied: fetching a single booking by ID versus the list/search siblings. The schema's bookingId note ('from search_bookings or list_upcoming_bookings') supplies the workflow hint, but that is structured data, not the description.

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

get_booking_pageGet booking pageB
Read-only

Get one booking page's settings. Use fields to ask for specific nested settings (dot notation).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoComma-separated fields, e.g. id,title,subdomain,timeZone
profileIdYesBooking page (profile) ID, from list_booking_pages

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered without the description. The description adds only the single-page scoping ('one booking page's settings') and says nothing about auth, error behavior for unknown IDs, or response shape. Minimum-viable given annotations carry the safety signal.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core purpose front-loaded and the parameter hint following. Nothing wastes the agent's attention.

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

Completeness4/5

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

For a simple two-parameter read tool with full schema coverage and no output schema, the description covers what the tool returns conceptually ('settings') and how to shape the request. It stops short of describing error/not-found behavior or id-source alternatives, but nothing essential for invocation 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?

Schema description coverage is 100%, so both parameters (fields, profileId) are already documented, making 3 the baseline. The description adds the dot-notation hint for nested settings beyond the schema's flat comma-separated example, but that hint is thin and arguably inconsistent with the schema example (id,title,subdomain,timeZone) and the absence of nested objects.

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?

States a specific verb and resource ('Get one booking page's settings'), and the word 'one' signals a single-record fetch, distinguishing it in spirit from list_booking_pages. However it never names or contrasts the sibling retrieval tools (get_booking, list_booking_pages) explicitly, so differentiation is inferred rather than stated.

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

Usage Guidelines2/5

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

The only guidance offered is about the `fields` parameter ('use fields to ask for specific nested settings'), not about when to choose this tool over list_booking_pages or get_booking. No prerequisites, no when-not-to-use, no alternative routing is provided.

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

list_booking_pagesList booking pagesA
Read-only

List the account's booking pages (the API calls them profiles). Returns each page's id, title and subdomain. The subdomain is what find_available_times needs.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoComma-separated fields to return (default: id,title,subdomain,description)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the concrete return shape (id, title, subdomain) but says nothing about pagination, result limits, or ordering for what could be a multi-page account, which is the main behavioral gap.

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

Conciseness5/5

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

Three short sentences, all earning their place: identity of the resource, the vocabulary caveat, the return contents, and the downstream use. The most useful routing hint (subdomain for find_available_times) is placed last as a natural call-to-action.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return values and does so explicitly, and it flags the profiles/booking-pages naming alias that would otherwise confuse an agent. It is only slightly incomplete regarding pagination behavior and the overridable 'fields' parameter.

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?

Schema description coverage is 100% and the single optional 'fields' parameter is fully documented there, so the baseline of 3 applies. The description does not mention the fields parameter at all, and its field list ('id, title and subdomain') is narrower than the schema's stated default set including description, adding no real semantic value.

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

Purpose5/5

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

States a specific verb and resource ('List the account's booking pages') and disambiguates the API's own vocabulary by noting the API calls them profiles. It also enumerates the returned fields, so it is clearly distinguishable from the singular sibling get_booking_page.

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 supplies a concrete downstream reason to call it: 'The subdomain is what find_available_times needs,' which effectively routes the agent from this tool into the scheduling flow. It does not explicitly state when to prefer get_booking_page or search_bookings over this list call, so it stops short of full when/when-not guidance.

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

list_upcoming_bookingsList upcoming bookingsA
Read-only

List upcoming (not cancelled) bookings for the next N days, soonest first, with booker name and email.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow many days ahead (default 7)
bookingPageIdsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real context beyond them: cancelled bookings are excluded, results are ordered soonest-first, and each row carries the booker name and email. It still says nothing about pagination or result-size limits on a potentially open-ended window.

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

Conciseness5/5

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

A single sentence with no filler, front-loading the operation and layering scope, ordering, and returned fields in a natural reading order.

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

Completeness4/5

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 names the key returned fields (booker name and email), and annotations cover the read-only profile. The gap is the undocumented bookingPageIds parameter and the absence of any note on result volume for larger day windows.

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?

Schema coverage is 50%: 'days' is fully documented by the schema (default 7, range 1-90) and echoed by the description's 'next N days', but bookingPageIds has no description anywhere. The description also fails to clarify whether supplying bookingPageIds narrows the list to those pages or is a scope requirement, so it does not compensate for the coverage gap. Baseline 3 applies.

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 description gives a specific verb and resource (list upcoming bookings) plus meaningful scope: not cancelled, next N days, soonest first. That functionally separates it from search_bookings and get_booking, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the 'upcoming, not cancelled, next N days' framing, which tells the agent this is a time-window roll-up rather than a query tool. There is no explicit when-to-use/when-not guidance and no routing to search_bookings or booking_report for other needs.

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

reschedule_bookingReschedule bookingA
Idempotent

Move a booking to a new start time. Use find_available_times first to pick a free slot. The booker is notified, so confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookingIdYesBooking ID (UUID), from search_bookings or list_upcoming_bookings
newStartsAtYesNew start time, ISO 8601, e.g. 2026-10-12T09:00:00Z

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds value the annotations cannot: the side effect that the booker is notified, plus a confirmation requirement. It does not describe what happens to the vacated slot or failure behavior, keeping it below 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.

Conciseness5/5

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

Three short sentences, each earning its place: operation, prerequisite tool, and side-effect caution. The core action is front-loaded.

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

Completeness4/5

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

For a two-parameter mutation with no output schema and full annotation coverage, the description supplies the key missing pieces: the prerequisite lookup and the notification side effect. It stops short of covering edge cases such as timezone handling or what happens if the new slot is taken.

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?

Schema description coverage is 100% with only two parameters, both documented in the schema (bookingId source, ISO 8601 format for newStartsAt). The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose5/5

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'), which cleanly separates it from siblings like book_time, cancel_booking, and delete_booking. An agent can identify the operation without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the prerequisite alternative ('Use find_available_times first to pick a free slot') and adds a human-in-the-loop condition ('confirm with the user first' because the booker is notified). This is when-to-use plus a named sibling, not inference.

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

search_bookingsSearch bookingsA
Read-only

Search bookings in a time range, optionally by status, booking page, or text (booker name/email in the form, title, or booking ref). Returns counts by status and page plus a compact list with booker name and email. Set raw=true for YCBM's full objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd of the range, ISO 8601, e.g. 2026-10-12T09:00:00Z
rawNo
fromYesStart of the range (bookings starting at or after this), ISO 8601, e.g. 2026-10-12T09:00:00Z
pageSizeNo10-500 (default 50)
searchInNoWhere to look for searchText (default: form, title, ref)
statusesNoOnly these statuses
directionNo
searchTextNoText to search for (3+ chars), e.g. an email or surname
fromBookingIdNoContinue after this booking ID (pagination)
bookingPageIdsNoOnly these booking page IDs

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it discloses the return shape (counts by status and page plus a compact list with booker name and email) and the effect of raw=true, which is valuable given 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.

Conciseness5/5

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

Two tight sentences, no filler. The scope (time range) and filters come first, followed by return shape and the raw toggle, so the highest-value information is front-loaded.

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

Completeness4/5

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

For a 10-parameter read tool with no output schema, the description covers the essential call semantics and return shape. Pagination controls (direction, fromBookingId, pageSize) are left to the schema, which is acceptable since they are documented there, but the description could note continuation behavior.

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

Parameters4/5

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

Schema coverage is 80%, so most parameters are documented. The description goes beyond by explaining what searchText actually matches against (booker name/email, title, booking ref) and what raw=true does, which compensates for the undocumented raw flag in the schema.

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?

States a specific verb (search) plus resource (bookings) and enumerates the filter dimensions: time range, status, booking page, and text. An agent can distinguish it from get_booking or list_upcoming_bookings by the presence of multi-filter search, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

The description implies usage through 'optionally by status, booking page, or text' and the required time range, but it never states when to prefer this over list_upcoming_bookings or get_booking, nor any exclusions or prerequisites. Usage is inferable rather than prescribed.

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.

  1. 11 tool updatesv0.1.0
    • First observedbook_time
    • First observedbooking_report
    • First observedcancel_booking
    • First observeddelete_booking
    • First observedfind_available_times
    • First observedget_booking
    • First observedget_booking_page
    • First observedlist_booking_pages
    • First observedlist_upcoming_bookings
    • First observedreschedule_booking
    • First observedsearch_bookings

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target clearly distinct operations (get_booking vs get_booking_page, cancel_booking vs delete_booking, find_available_times vs book_time). The main overlap is between search_bookings, list_upcoming_bookings, and booking_report, all of which return booking information, but their descriptions clarify different use cases well enough.

Naming Consistency4/5

The set is mostly consistent snake_case with a verb_noun pattern (get_booking, cancel_booking, list_booking_pages, find_available_times). Minor deviations like booking_report (noun_noun) and book_time (verb_noun but less explicit) are readable but slightly break the pattern.

Tool Count5/5

Eleven tools is well-scoped for a booking management server. Each tool covers a distinct part of the booking workflow—discovery, availability, booking, modification, cancellation, deletion, and reporting—without obvious redundancy.

Completeness4/5

The server covers the full booking lifecycle for existing pages: list/get pages, search/get bookings, check availability, book, reschedule, cancel, delete, and report. It lacks booking page creation/update settings and possibly booking note/comment operations, but core agent workflows are well supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers