YouCanBook.me MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Manage YouCanBook.me bookings, booking pages, appointment types, team members and locations.
18 tools: 9 can delete or cancel things, 1 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels9Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http youcanbookme https://youcanbookme.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "youcanbookme_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "youcanbookme_request" says "request": a word for a change.
The description mentions "credentials".
What this check looks forMatched text
description: "...accountId is taken from your configured credentials). Returns a JSON array."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
18 tools
Deletes or cancels 9Claude Code: deny
cancel_bookingMUTATES YouCanBookMe data: cancels a booking.No findings
Why it is in this group
- The name "cancel_booking" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: cancels a booking. Convenience wrapper for PATCH /v1/bookings/{bookingId} with { cancelled: true } — safer and reversible (re-activate via update_booking cancelled=false) versus deleting. Returns the updated booking.
Annotations the server declares
- title: Cancel a booking
- destructiveHint: true
create_appointment_typeMUTATES YouCanBookMe data: adds an appointment type to a profile.No findings
Why it is in this group
- The name "create_appointment_type" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: adds an appointment type to a profile. YCBM API: POST /v1/profiles/{profileId}/appointmenttypes/items (JSON). Required: name; use the `fields` passthrough for description, slotLength, price, etc. The path profileId is never sent in the body.
Annotations the server declares
- title: Create an appointment type
- destructiveHint: true
create_bookingMUTATES YouCanBookMe data: creates a booking (appointment) on a profile.No findings
Why it is in this group
- The name "create_booking" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: creates a booking (appointment) on a profile. YCBM API: POST /v1/bookings (JSON). Required: profileId, startsAt, endsAt (ISO 8601 times). Optional: title, timeZone, locale, units. Complex fields like `answers` (form-field answers) and `linkFields` should be passed via the `fields` passthrough. Returns the created booking.
Annotations the server declares
- title: Create a booking
- destructiveHint: true
create_locationMUTATES YouCanBookMe data: adds a location to a profile.No findings
Why it is in this group
- The name "create_location" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: adds a location to a profile. YCBM API: POST /v1/profiles/{profileId}/locations (JSON). Required: kind (location type) and strategy (how it is assigned). Use the `fields` passthrough for value, notes, and other documented fields. The path profileId is never sent in the body.
Annotations the server declares
- title: Add a location
- destructiveHint: true
create_team_memberMUTATES YouCanBookMe data: adds a team member to a profile.No findings
Why it is in this group
- The name "create_team_member" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: adds a team member to a profile. YCBM API: POST /v1/profiles/{profileId}/teammembers/items (JSON). Required: name; calendarId links the member to a calendar (find it via list_available_accounts). Use the `fields` passthrough for email, description, pic, etc. The path profileId is never sent in the body.
Annotations the server declares
- title: Add a team member
- destructiveHint: true
update_appointment_typeMUTATES YouCanBookMe data: updates an appointment type on a profile.No findings
Why it is in this group
- The name "update_appointment_type" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: updates an appointment type on a profile. YCBM API: PATCH /v1/profiles/{profileId}/appointmenttypes/items/{appointmentTypeId} (JSON, partial update). Pass changed fields (name, description, slotLength, price, ...) via the `fields` passthrough. Path ids are never sent in the body.
Annotations the server declares
- title: Update an appointment type
- destructiveHint: true
update_bookingMUTATES YouCanBookMe data: updates an existing booking (reschedule, rename, mark cancelled/no-show).No findings
Why it is in this group
- The name "update_booking" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: updates an existing booking (reschedule, rename, mark cancelled/no-show). YCBM API: PATCH /v1/bookings/{bookingId} (JSON, partial update). Set any of title/startsAt/endsAt/cancelled/noShow/timeZone/locale/units; use the `fields` passthrough for answers/linkFields or other documented fields. The path id is never sent in the body.
Annotations the server declares
- title: Update a booking
- destructiveHint: true
update_profileMUTATES YouCanBookMe data: updates a profile's (booking page) configuration.No findings
Why it is in this group
- The name "update_profile" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: updates a profile's (booking page) configuration. YCBM API: PATCH /v1/profiles/{profileId} (JSON, partial update). Pass the fields to change via the `fields` passthrough (e.g. { title, subdomain, ... }) — profile fields are numerous and use YCBM's own names. The path id is never sent in the body.
Annotations the server declares
- title: Update a profile (booking page)
- destructiveHint: true
update_team_memberMUTATES YouCanBookMe data: updates a team member on a profile.No findings
Why it is in this group
- The name "update_team_member" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES YouCanBookMe data: updates a team member on a profile. YCBM API: PATCH /v1/profiles/{profileId}/teammembers/items/{teamMemberId} (JSON, partial update). Pass changed fields (name, email, description, calendarId, ...) via the `fields` passthrough. Path ids are never sent in the body.
Annotations the server declares
- title: Update a team member
- destructiveHint: true
Changes things 1Claude Code: ask
youcanbookme_requestPower-user escape hatch: GET any YCBM API path not wrapped by a dedicated tool.1 finding
Why it is in this group
- The name "youcanbookme_request" says "request": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "youcanbookme_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "youcanbookme_request" says "request": a word for a change.
Description, as the server wrote it Power-user escape hatch: GET any YCBM API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Pass the FULL API path after the origin, starting with a slash, INCLUDING any query string, e.g. "/v1/bookings?maxResults=5" or "/v1/profiles". Returns the parsed JSON.
Annotations the server declares
- title: Raw read request
- readOnlyHint: true
Only reads 8Claude Code: allow
get_bookingFetch a single booking (appointment) by id.No findings
Why it is in this group
- The name "get_booking" says "get": a word for reading.
Description, as the server wrote it Fetch a single booking (appointment) by id. YCBM API: GET /v1/bookings/{bookingId}. Use `fields` to select which fields to return. Returns the booking object.
Annotations the server declares
- title: Get a booking
- readOnlyHint: true
get_profileFetch a single profile (booking page) by id.No findings
Why it is in this group
- The name "get_profile" says "get": a word for reading.
Description, as the server wrote it Fetch a single profile (booking page) by id. YCBM API: GET /v1/profiles/{profileId}. Use `fields` to select fields, including nested sub-resources (appointmentTypes, teamMembers, locations). Returns the profile object.
Annotations the server declares
- title: Get a profile (booking page)
- readOnlyHint: true
list_appointment_typesList the appointment types configured on a profile (booking page).No findings
Why it is in this group
- The name "list_appointment_types" says "list": a word for reading.
Description, as the server wrote it List the appointment types configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with an appointmentTypes field selection. Returns the profile's appointmentTypes block (each with id, name, description, slotLength, price).
Annotations the server declares
- title: List a profile's appointment types
- readOnlyHint: true
list_available_accountsList the accounts/calendars available to your account — used to find the calendarId for a team member.1 finding
Why it is in this group
- The name "list_available_accounts" says "list": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...accountId is taken from your configured credentials). Returns a JSON array."
Description, as the server wrote it List the accounts/calendars available to your account — used to find the calendarId for a team member. YCBM API: GET /v1/{accountId}/availableAccounts (accountId is taken from your configured credentials). Returns a JSON array.
Annotations the server declares
- title: List available accounts (calendars)
- readOnlyHint: true
list_bookingsList bookings (appointments) on the YouCanBookMe account.No findings
Why it is in this group
- The name "list_bookings" says "list": a word for reading.
Description, as the server wrote it List bookings (appointments) on the YouCanBookMe account. YCBM API: GET /v1/bookings. Filter by profileId (booking page), an after/before time window, cancelled status, and a free-text searchText; select fields with `fields`. Paginated via page (0-based) + maxResults. Returns a JSON array of bookings.
Annotations the server declares
- title: List bookings
- readOnlyHint: true
list_locationsList the locations configured on a profile (booking page).No findings
Why it is in this group
- The name "list_locations" says "list": a word for reading.
Description, as the server wrote it List the locations configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with a locations field selection. Returns the profile's locations block (each with id, kind, value, notes, strategy).
Annotations the server declares
- title: List a profile's locations
- readOnlyHint: true
list_profilesList all profiles (booking pages) on the account.No findings
Why it is in this group
- The name "list_profiles" says "list": a word for reading.
Description, as the server wrote it List all profiles (booking pages) on the account. YCBM API: GET /v1/profiles. A profile is a bookable page with its own subdomain, appointment types, team members, and locations. Use `fields` to select fields (e.g. "id,title,subdomain"). Paginated via page (0-based) + maxResults. Returns a JSON array of profiles.
Annotations the server declares
- title: List profiles (booking pages)
- readOnlyHint: true
list_team_membersList the team members configured on a profile (booking page).No findings
Why it is in this group
- The name "list_team_members" says "list": a word for reading.
Description, as the server wrote it List the team members configured on a profile (booking page). YCBM API: GET /v1/profiles/{profileId} with a teamMembers field selection. Returns the profile's teamMembers block (each member has id, name, email, description, pic, calendarId).
Annotations the server declares
- title: List a profile's team members
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http youcanbookme https://youcanbookme.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__youcanbookme__list_bookings",
"mcp__youcanbookme__get_booking",
"mcp__youcanbookme__list_profiles",
"mcp__youcanbookme__get_profile",
"mcp__youcanbookme__list_team_members",
"mcp__youcanbookme__list_appointment_types",
"mcp__youcanbookme__list_locations",
"mcp__youcanbookme__list_available_accounts"
],
"ask": [
"mcp__youcanbookme__youcanbookme_request"
],
"deny": [
"mcp__youcanbookme__create_booking",
"mcp__youcanbookme__update_booking",
"mcp__youcanbookme__cancel_booking",
"mcp__youcanbookme__update_profile",
"mcp__youcanbookme__create_appointment_type",
"mcp__youcanbookme__update_appointment_type",
"mcp__youcanbookme__create_team_member",
"mcp__youcanbookme__update_team_member",
"mcp__youcanbookme__create_location"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as youcanbookme. Review it before you use it.