Skip to content

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.

Deletes · 9Changes · 1

18 tools: 9 can delete or cancel things, 1 change things and 8 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • The server marks "youcanbookme_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "youcanbookme_request" says "request": a word for a change.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...accountId is taken from your configured credentials). Returns a JSON array."

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true}; The name "youcanbookme_request" says "request": a word for a change.

      What this check looks for
    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".

      Matched text

      description: "...accountId is taken from your configured credentials). Returns a JSON array."

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.