MCP App Store
by KeenEthics

Overview

Cartoply is scheduling software for teams that meet customers by appointment, including teams that travel to the customer. Connect your Cartoply account to run scheduling from a conversation. Set up your weekly availability and date-specific overrides, create event types with durations, buffers, minimum notice and custom intake questions, and share the resulting public booking link. For organizations it also manages the routing behind those bookings: service territories defined by ZIP code, city, county, radius or drive time; reusable groups of team members; and round-robin assignment across the reps who are actually free. You can list and filter bookings, approve or decline booking requests, reschedule, cancel, reassign a booking to a different rep, mark no-shows, and pull booking reports by person or group. Changes take effect on your live booking pages. Actions that email or text a guest are labelled as such, so ChatGPT confirms with you before running them.

Tools

add_group_member

ChatGPT
Add an org member (userId from get_org) to a group. Requires an active subscription.

add_org_holidays

ChatGPT
Add one or more org closures: holidays: [{name, startDate: "YYYY-MM-DD", endDate?: "YYYY-MM-DD" (inclusive; omit for one day)}]. Exact duplicates are skipped. Existing bookings on those dates are not changed. Requires an active subscription.

approve_booking

ChatGPT
Approve a pending booking request (status pending_approval). May return a conflict if the slot was taken in the meantime.

approve_reschedule

ChatGPT
Approve a guest's held reschedule on an approval-required booking (a confirmed booking with proposedStartTime set — list_bookings status "requests"). Moves the booking to the proposed time and notifies the guest. May return a conflict if that time was taken meanwhile.

assign_group_territory

ChatGPT
Attach a library territory to a group — every member becomes routable for it (unioned with their direct assignments). Requires an active subscription.

assign_territory

ChatGPT
Assign a library territory to an org member (userId), making them routable for addresses inside it. Requires an active subscription.

billing_status

ChatGPT
Personal billing/trial status; pass orgId for that org's subscription state (admin only).

bulk_invite

ChatGPT
Invite many members from a CSV or XLSX file (base64-encoded; one email per row, header optional). Requires an active subscription.

cancel_booking

ChatGPT
Cancel a booking (notifies the guest, cleans up the synced calendar event; paid host-cancelled bookings auto-refund). Optional reason.

cancel_invite

ChatGPT
Cancel a pending org invite (inviteId from list_invites).

create_drive_time_territory

ChatGPT
Create a polygon territory covering everything reachable within a drive time (5–120 minutes) of a point — a road-network isochrone, not a crow-flies radius. Provide address OR lat+lng. By default it goes into the org's shared library — auto-assigned in a one-member org, otherwise covering nobody until you assign_territory; pass userId to create it directly on that member instead. Requires an active subscription, and the server must have a routing provider configured.

create_event_type

ChatGPT
Create an event type. Personal by default; pass orgId for an org event type (round-robin across members; supports price, eligibleGroupIds, matchByTerritory). Common fields: name, slug (lowercase-hyphenated), description, duration (minutes, 5–1440), bufferBeforeMins, bufferAfterMins, minNoticeMins, maxBookingsPerDay, maxDaysOut, questions (max 10), screeningRules, approvalMode ("auto"|"manual", free events only), specializations, slotDisplay ("calendar"|"instant"). Personal event types cannot have a price.

create_group

ChatGPT
Create an org group. Body: {name}. Requires an active subscription.

create_member_territory

ChatGPT
Attach an admin-assigned zone directly to one member (same {name, type, data} shapes as create_territory) — admin-only, like all territory management; the rep sees it read-only. Lands in the personal bucket of list_member_territories; org routing honors it alongside library assignments. Prefer library territories + assign_territory for areas several reps share. Requires an active subscription.

create_org

ChatGPT
Create an organization (the caller becomes its admin). Body: {name}. Orgs unlock round-robin/territory routing and paid bookings; most org features need a subscription — see onboarding_status for the checkout URL.

create_territory

ChatGPT
Create a territory. Shapes (exact — data is stored as-is and drives routing): polygon → {name, type: "polygon", data: {polygon: [[lat,lng], ...]}} (one ring, implicitly closed); radius → {name, type: "radius", data: {center: {lat, lng}, radiusMiles}}; zip_codes → {data: {zipCodes: ["55401", ...]}}; cities/counties → {data: {cities|counties: [{name, state}]}}; states/countries → {data: {states|countries: [...]}}. Use geocode_address to turn an address into lat/lng. In a one-member org the territory is assigned to that member automatically; in a larger org it covers NOBODY until you call assign_territory or assign_group_territory — and a territory-matched event type turns every guest away while no member has coverage. Requires an active subscription.

decline_booking

ChatGPT
Decline a pending booking request, with an optional reason emailed to the guest.

decline_reschedule

ChatGPT
Decline a guest's held reschedule. The booking stays at its current time; the guest is emailed, with the optional reason.

delete_date_override

ChatGPT
Remove a date override by id (from list_date_overrides).

delete_event_type

ChatGPT
Delete an event type by id. Pass orgId when it is an org event type.

delete_group

ChatGPT
Delete an org group (members stay in the org; the group's territory attachments and routing references go away).

delete_member_territory

ChatGPT
Delete a member's directly-assigned territory.

delete_org_holiday

ChatGPT
Remove an org closure by id (from list_org_holidays), reopening those dates.

delete_territory

ChatGPT
Delete a territory from the org library.

geocode_address

ChatGPT
Resolve a street address / city / ZIP to {lat, lng} using the same geocoder the app's territory routing uses. Use before create_territory when you only have an address.

get_availability

ChatGPT
The user's weekly availability rows (dayOfWeek 0–6, startTime/endTime "HH:MM", isClosed).

get_booking_reschedule_slots

ChatGPT
Available slots a booking could move to, for a given date (query: date "YYYY-MM-DD").

get_experiment

ChatGPT
The event type's A/B experiment (running or last stopped), with per-variant views/bookings and significance inputs.

get_jobber_connect_url

ChatGPT
Browser URL for the human to connect the org's Jobber account (OAuth consent — cannot be completed by an agent). Requires an active subscription.

get_me

ChatGPT
Get the authenticated user profile: name, email, username (the public booking link is cartoply.com/<username>), timezone, trial status.

get_member_hours

ChatGPT
An org member's weekly working hours and timezone, as the org sees them. Use before set_member_hours so you edit the real schedule rather than replacing it blind.

get_notification_prefs

ChatGPT
The user's personal email-notification preferences.

get_org

ChatGPT
Org details incl. members (admin only).

get_org_notification_prefs

ChatGPT
Org-level notification preferences (admin only).

get_org_schedule

ChatGPT
The org-level default weekly schedule (fallback for members without personal availability on org event types).

get_reassign_candidates

ChatGPT
Org members eligible to take over a booking (availability-checked), for reassign_booking.

get_report

ChatGPT
Booking analytics. Personal by default; pass orgId for the whole org (admin only; optional groupId narrows to a group's members). range like "30d" | "90d" | "12m".

import_territories_commit

ChatGPT
Bulk-create territories from import_territories_preview candidates (all-or-nothing transaction). Body: {territories: [...]} exactly as returned by the preview (edit names/drop entries as needed). Requires an active subscription.

import_territories_preview

ChatGPT
Parse a Google My Maps KML/KMZ export (base64-encoded file content) and return territory candidates WITHOUT saving anything. Review the candidates, then call import_territories_commit with the ones to keep. Requires an active subscription.

integrations_status

ChatGPT
Whether a Google or Outlook calendar is connected to this Cartoply account, with browser connect-URLs for the human when it is not. Connecting one lets Cartoply read busy times so booked slots are not offered, and put confirmed Cartoply bookings on that calendar. It does NOT let Cartoply add arbitrary appointments or events — this tool reports connection state, it is not a way to manage someone's calendar.

invite_members

ChatGPT
Email org invites to one or more addresses. Each recipient gets a join link (7-day expiry). Requires an active subscription.

jobber_refresh_users

ChatGPT
Re-sync the org's Jobber user list (for booking→assessment assignment). Requires an active subscription.

jobber_status

ChatGPT
Whether the org's Jobber account is connected, and the mapped users.

list_bookings

ChatGPT
List bookings the user attends or owns. Query: status ("confirmed"|"cancelled"|"pending_approval"|"no_show"|"requests" — the last = everything awaiting review: pending requests plus confirmed bookings whose guest asked to reschedule, see proposedStartTime), payment (e.g. "refund_due"), upcoming (boolean). Omitting status returns confirmed bookings (plus no-shows for an org), so ask for status "pending_approval" explicitly to find requests still awaiting a decision. Pass orgId to see a whole org's bookings instead (admin only; supports groupId).

list_date_overrides

ChatGPT
Upcoming date-specific overrides (blocked days or altered hours).

list_event_types

ChatGPT
List event types. Personal by default; pass orgId for an organization's event types (org admin only).

list_google_calendars

ChatGPT
The user's Google calendars with which are currently checked for busy times (requires Google connected — see integrations_status).

list_groups

ChatGPT
Org groups (reusable member bundles used by routing, event-type eligibility, and territory assignment).

list_invites

ChatGPT
Pending (unexpired) org invites.

list_member_territories

ChatGPT
Everything that makes one member routable, in two buckets: personal — admin-assigned zones attached directly to this member (what create_member_territory writes; reps cannot create or edit territories themselves), and assignedFromLibrary — shared org-library territories assigned to them. Org routing honors the union of both (plus group-derived assignments); the rep sees the merged set read-only on their My Territories page.

list_org_holidays

ChatGPT
Upcoming org closures (holidays and other blocked date ranges). On these dates no org event type offers slots, whatever a member's own hours say.

list_orgs

ChatGPT
Organizations the user belongs to, with roles.

list_territories

ChatGPT
The org territory library (polygon and radius service areas used for territory-matched routing).

mark_booking_no_show

ChatGPT
Mark a booking as a no-show, or undo with noShow: false.

onboarding_status

ChatGPT
The setup checklist. Returns each onboarding step with its state and, for steps only a human can do in a browser (paying, connecting a calendar), the URL to hand to them. Call this first and after each setup step to see what remains.

reassign_booking

ChatGPT
Move a booking to a different rep (repUserId from get_reassign_candidates). Guest and both reps are notified; the synced calendar event moves.

remove_group_member

ChatGPT
Remove a member from a group (does NOT remove them from the org).

reschedule_booking

ChatGPT
Move a booking to a new start time (ISO datetime from get_booking_reschedule_slots). Re-checks the slot under the same double-booking lock as new bookings.

resend_invite

ChatGPT
Re-send a pending invite's email with a refreshed expiry (same link). Requires an active subscription.

select_google_calendars

ChatGPT
Set which Google calendars are checked for busy times. Body: {calendarIds: [...]} (at least one, from list_google_calendars).

set_date_override

ChatGPT
Block a date, unblock it, or set special hours. Body: {date: "YYYY-MM-DD", isBlocked?: boolean (default true), startTime?: "HH:MM", endTime?: "HH:MM"}.

set_member_hours

ChatGPT
Replace an org member's weekly working hours, and optionally their timezone. Pass the COMPLETE week in rows: {dayOfWeek: 0–6 (0=Sunday), startTime: "HH:MM", endTime: "HH:MM", isClosed?: boolean}. Send timezone (IANA, e.g. "America/Chicago") whenever the hours are meant in a specific zone — "9–5" means nothing without it, and hours saved against the wrong zone make a rep bookable in the middle of their night. Availability is global to that person, so this also changes their own booking page. Requires an active subscription.

set_org_schedule

ChatGPT
Set the org default weekly schedule — the hours members fall back to when they have set none of their own. Body: {timezone (IANA, e.g. "America/Chicago"), slots: [{dayOfWeek: 0–6 (0=Sunday), startTime: "HH:MM", endTime: "HH:MM"}]}. Include one slot per working day and simply omit the days the org is closed. Note this is NOT the same shape as set_weekly_availability: there is no isClosed flag here, and the timezone is required. Requires an active subscription.

set_weekly_availability

ChatGPT
Replace the weekly availability wholesale. Pass the COMPLETE week: rows of {dayOfWeek: 0–6 (0=Sunday), startTime: "HH:MM", endTime: "HH:MM", isClosed?: boolean}. One row per weekday; omitted days stay unset (org schedule may fill them); isClosed marks a deliberate day off.

start_experiment

ChatGPT
Start an A/B experiment on an org event type. One running experiment per event type. variantA and variantB are the two presentation treatments being compared: each is an object overriding whitelisted fields only — today just slotDisplay, "calendar" or "instant" — and the schema is strict, so any other key is rejected. A typical test is variantA {slotDisplay:"calendar"} against variantB {slotDisplay:"instant"}. splitPercentA is the percentage of visitors shown A (1–99, default even).

stop_experiment

ChatGPT
Stop the running experiment. Stopping alone just ends it and records the result. To also apply a variant's overrides to the event type itself, pass BOTH winner ("A" or "B") and promote: true — promote without a winner is rejected, since there would be nothing to apply. Promoting is permanent: it overwrites the event type's settings with that variant's.

toggle_member_exclusion

ChatGPT
Toggle whether a member is excluded from an org event type's rotation (excluded members are never assigned its bookings).

unassign_group_territory

ChatGPT
Detach a territory from a group.

unassign_territory

ChatGPT
Remove a member's territory assignment.

update_event_type

ChatGPT
Update an event type by id. Same fields as create_event_type. Pass orgId when it is an org event type.

update_group

ChatGPT
Rename an org group. Requires an active subscription.

update_me

ChatGPT
Update the user profile. Fields: firstName, lastName, displayName, bio, phone, timezone (IANA name), email, onboardingCompleted.

update_member_profile

ChatGPT
Set a member's org-facing displayName/bio (shown on booking pages). Requires an active subscription.

update_member_role

ChatGPT
Change an org member's role: "admin" or "member". Requires an active subscription.

update_member_territory

ChatGPT
Update a member's territory by id. Requires an active subscription.

update_notification_prefs

ChatGPT
Update personal notification toggles: newBookingEmail, cancellationEmail, reminderEmail24h, customerConfirmationEmail (booleans).

update_org

ChatGPT
Update org settings: name, brandPrimaryColor/brandBgColor (#hex), bookingRedirectUrl, noCoverageMessage. Requires an active subscription.

update_org_notification_prefs

ChatGPT
Update org-level notification preferences. Requires an active subscription. Body keys are booleans: guestConfirmationEmail, guestCancellationEmail, guestRescheduleEmail, teamNewBookingEmail, teamCancellationEmail, teamRescheduleEmail, teamReminderEmail, and the guest SMS switches guestConfirmationSms, guestReminderSms, guestCancellationSms, guestRescheduleSms. The SMS switches only decide which categories are eligible — a guest is texted only if they also opted in on the booking form.

update_territory

ChatGPT
Update a territory by id. Same shape as create_territory. Requires an active subscription.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps