MCP App Store
by KeenEthics
Daysync: Tour Manager icon

Daysync: Tour Manager

By Daysync Pty Ltd

Get New App Alerts

Overview

Daysync is the tour management platform for artists, tour managers and production crews. This connector gives Claude access to your Daysync workspace, so you can run the road from a chat. Ask Claude to pull up day sheets, schedules, venues, accommodation, guest lists and tour members for any tour you have access to. It can search a whole run for a lobby call, load-in time, hotel confirmation or advance note. It can also summarise tour chat conversations and bulletins so you know what's changed. Claude can read, upload and attach files like riders, stage plots, itineraries and settlement docs, and it can create and update tour data through Daysync's operations, with safe retries that won't create duplicates. Claude only sees what your Daysync permissions allow, and you can disconnect at any time. Built for the people who keep shows on the road.

Tools

add_day_audience

ChatGPT
Add audiences to a limited day. Widens only — never removes anyone — and repeating it changes nothing. Returns a restoreToken.

add_guest

ChatGPT
Add a guest-list entry to a tour day. passes[].passId values come from list_pass_types. Returns { id }. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

add_parallel_day

ChatGPT
Add a parallel day on a date the tour already has, beside its days (a second show, a split crew); add new dates with update_tour (404 DATE_NOT_FOUND here). Optional name (≤50), typeId, location+time_zone, place_id (resolved via Google Places) and audience: isPublic false + targets = limited, false alone = admins only. Returns the day, days, and a restoreToken for undo_day_change (15 min). Needs manage-tour trust or org admin (403 MANAGE_TOUR_REQUIRED). After undo_day_change, re-adding the SAME day within ~10 minutes returns the undone day again unless you pass a new idempotency_key. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

add_tour_member

ChatGPT
Attach somebody who is ALREADY in the organisation to this tour, at the seat you name (1 org admin, 2 editor, 3 viewer). Costs no paid seat, because seats are counted from organisation membership and pending invitations and not from tour membership. It does NOT add anybody new to the organisation — that is a billing decision and stays with an org admin. The person lands with the seat you give them and no memberships; set those with set_personnel_memberships and their access with set_personnel_access.

apply_schedule_template

ChatGPT
Create the template's items on a tour day. The day must belong to the template's own tour. MERGE (default) adds them alongside whatever is there; REPLACE first soft-deletes the day's existing items you may delete (the rest stay) — reversible with undo_applied_schedule_template. Returns { ids } of the created items. Private-account boundary: it copies the template's items, with their reminders and attachment links, onto a day of that tour in the connected user's own Daysync account — nothing is booked and no booking or other outside service is called on your behalf. Notifications: applying sends none; copied reminders later notify the people who can see each item (in app, plus push/email per their settings). Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

attach_file

ChatGPT
Attach a file you have already uploaded to a schedule item, venue, stay or pass type. key is the value upload_file returned. This is ADDITIVE — it never touches the entity's existing attachments. It is also idempotent: attaching the same key to the same entity twice returns the first attachment and reports alreadyAttached, so a retry is safe. Only to an entity you can edit, on that tour. It checks the uploaded object in Daysync's own storage and refuses it if it is missing (an expired or unfinished upload), empty, larger than 25 MB, or of a type that is not allowed; it downloads nothing from the internet and sends no notification. Bulletins do not support attachments. Supported entityType values: schedule_item, venue, accommodation, pass_type.

attach_flight

ChatGPT
Attach a searched flight to a tour day, creating the item or re-connecting an existing one. Pass ONLY the key of a search_flights option — no route, time or duration is accepted, so nothing you supply becomes trusted scheduled data. Omit itemId to create; pass it to replace an item's connection and every auto-filled value in one commit. The OWNING DAY NEVER MOVES: a day-before or day-after departure leaves the item where it is, and on a re-attach dayId is ignored in favour of the item's own day. A created item is Unconfirmed and visible to everyone on the tour. A key that no longer resolves, or departs outside the three-day window, is refused and writes NOTHING. The TITLE is rewritten only when the item is not already wearing one a human gave it, so read the returned name; data.replaceManualValues: true is the only way past that rule. It also fills the Flight Information fields Airline and Flight number under that same rule. Returns the item id, the code and that title; the legs it wrote are in the text content, and get_flight_legs reads them back. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

calculate_drive_route

ChatGPT
Calculate a drive's arrival time, duration and distance for a given vehicle and set of avoided road types. Persists nothing and is safe to repeat. THREE outcomes to distinguish: (1) a normal result; (2) noRouteFound=true, a DEFINITE answer that no road route exists for this vehicle — do not retry, change the vehicle or the avoids; (3) a non-empty constraintViolations, meaning the route is usable but the provider could NOT honour something you asked for — never present this as a clean success.

clear_date

ChatGPT
Reset a date: every day on it is removed and one fresh, empty, public day replaces them; the date's name is cleared. 403 HIDDEN_DAYS_ON_DATE when a day on it is hidden from you. Returns the new day and a restoreToken for undo_day_change (15 min).

clear_day

ChatGPT
Empty a day's schedule: soft-deletes the schedule items on it that you may delete; others stay. The day, its venues, stays and guest lists are kept. Returns affectedItemCount and a restoreToken for undo_day_change (15 min).

clear_flight

ChatGPT
Remove the link AND every value the flight filled in — route, times, timezones, airline, duration, all legs and any layovers — leaving an empty flight ready to search again. The title reverts to the placeholder ONLY if it is still the one the lookup wrote; a typed title is kept, so read the returned name. DESTRUCTIVE and not reversible; use disconnect_flight to keep the values. The Airline and Flight number rows go too, unless a human edited them, and the item is left with no legs at all. Notes, tags, reminders and attachments are NOT touched. Safe to repeat.

confirm_all_schedule_items

ChatGPT
Mark every schedule item on a day as confirmed. Returns the ids that were previously unconfirmed or had no status, so the change can be undone.

create_accommodation

ChatGPT
Create an accommodation stay. CAMELCASE ids (tourId/dayId); check-in/out are epoch-millisecond numbers; formatted_address needs geometry.location + geometry.viewport. Audience: aims says who it is for; see the field for the rules. Any create ending with NO audience is PUBLIC to the permission ladder and needs the Public permission — that includes isAdminsOnly, which is a no-audience create — so a selected-parties editor must name their own scope in aims. visibilityList still works. isAdminsOnly does not round-trip: the item reads back is_admin_only: false, and it is visible to you and to anyone with See-everything sight. Returns { id, name }. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_bulletin

ChatGPT
Create a bulletin on a tour day (dayId only — the tour is resolved from the day). Content field is "body". Returns { bulletin_id }. Notifications: without scheduledFor it is posted at once, its audience sees it in the app, and this call sends no notification for it — hasNotification takes effect only with scheduledFor. With a future scheduledFor it stays hidden until then, and if hasNotification is true Daysync then notifies its audience (in app, plus push/email per their settings), not you. A scheduledFor already in the past is refused (400) when hasNotification is true; with hasNotification false it is posted at once without a notification. Private-account boundary: the connected user's own Daysync tour; no outside service is called on your behalf. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_key_contact

ChatGPT
Add a person to the organization's key-contact book, then link them to a venue or stay with set_venue_key_contacts / set_stay_key_contacts. Returns { id, ... }. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_open_role

ChatGPT
Create an open role — a seat on the roster with nobody in it, so counts, coverage and aims are right before the hire lands. A seat carries places in the structure and NO access whatsoever: whoever fills it starts at own/none with every toggle off. Repeating this call creates a second seat.

create_pass_type

ChatGPT
Create a guest-list pass type on a tour. day_ids are the days it applies to. Audience: aims says who it is for; see the field for the rules. Any create ending with NO audience is PUBLIC to the permission ladder and needs the Public permission — that includes isAdminOnly (note the singular), which is a no-audience create — so a selected-parties editor must name their own scope in aims. visibilityList still works. isAdminOnly (note the singular) does not round-trip: the item reads back is_admin_only: false, and it is visible to you and to anyone with See-everything sight. Permission: an org admin, or a tour member whose editMode is not none and who holds the guests permission (public for a no-audience create, as above). Returns { id }. Private-account boundary: a pass type is a guest-list category (such as AAA or Guest) on a tour in the connected user's own Daysync account — no ticket is issued, sold or printed, no ticketing or other outside service is called on your behalf, and no notification is sent. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_room

ChatGPT
Add a room to a stay. roomType comes from list_reference_types (hotelRoomTypes); dates and times are epoch milliseconds. generalNotes and confirmationNumber are required by the API — pass "" if empty. Returns { id, name }. Private-account boundary: it writes a room record on a stay in the connected user's own Daysync account — no hotel booking or reservation is made and no booking or other outside service is called on your behalf. Notifications: unless hasNotification is false, Daysync sends a room-assignment notification (in app, plus push/email per their settings) to everyone who can see this stay — org admins included, and occupants unless the stay is sealed without naming them — but not to you; an unchanged retry within the idempotency window does not send it again. Send hasNotification: false to suppress it. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_schedule_item

ChatGPT
Create a schedule item on a tour day. Times are HH:mm time-of-day strings (NOT ISO — the date comes from day_id); travel items (type 2–6) require origin. Audience: aims says who it is for; see the field for the rules. Any create ending with NO audience is PUBLIC to the permission ladder and needs the Public permission — that includes isAdminsOnly, which is a no-audience create — so a selected-parties editor must name their own scope in aims. visibilityList still works. isAdminsOnly does not round-trip: the item reads back is_admin_only: false, and it is visible to you and to anyone with See-everything sight. Returns { id, route_stale, route_computed_at } — plus reminders with their server-generated ids when the request sent a reminder list. Private-account boundary: it writes a schedule entry on a tour in the connected user's own Daysync account. A flight, hotel or transfer item is a record only — nothing is booked, bought or reserved, no booking or other outside service is called on your behalf, and attachment links are stored, not downloaded. Notifications: the create itself sends none; each reminder later notifies the people who can see the item (in app, plus push/email per their settings). Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_schedule_items

ChatGPT
Create MANY schedule items in one call — use this instead of looping create_schedule_item when adding a set of items. Same body shape per item, aims included — each item carries its own audience. Returns { ids } in request order. All or nothing: up to 1,000 items (within the 512 KB request limit) are written in one transaction, so if any item is refused none is created. Private-account boundary: the connected user's own Daysync tour; nothing is booked and no booking or other outside service is called on your behalf. Notifications: the create sends none; reminder entries notify later, as on create_schedule_item. Safe to retry unchanged within ~10 minutes (returns the original ids). Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_tag

ChatGPT
Create a tag on a tour. colorId is an AvatarColor id — get one from list_reference_types (group "avatarColors"). Returns the new tag. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_tour

ChatGPT
Create a tour with its days (at least one). Needs org_id from list_organizations and day_type_id values from list_day_types. Only org_admin users can create tours. Returns { id } — the new tour's UUID; call list_tours afterwards to get the created day ids. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_tour_party

ChatGPT
Create a party — the top level of a tour's structure, e.g. "Audio" or "Band". Repeating this call creates a SECOND party with the same name; read get_tour_structure first if you are unsure whether it exists.

create_tour_split

ChatGPT
Create a split — a cross-cutting group that ignores the party tree, like "Bus A" or "Early flight".

create_tour_subgroup

ChatGPT
Create a subgroup under a party. A subgroup may hold members from ANY party — joining it gives access to what it is aimed at, and to nothing else its parent party has. Set sharesToParent when items aimed at it should also be visible to the parent party (viewing only, never editing).

create_tour_vehicle

ChatGPT
Save a vehicle on a tour so drives can be routed for its size, weight and speed. Units are METRIC. lengthM and trailerLengthM are stored but do NOT affect routing — the provider constrains on height, width and weight only. A trailer's height and width DO: the route is constrained by max(vehicle, trailer) for each. maxSpeedKph and avgSpeedKph DO affect the result, applied to the provider's durations afterwards rather than sent to it. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

create_venue

ChatGPT
Create a venue on a tour day. venueCategoryId is required in practice (1=commercial, 2=private). Audience: aims says who it is for; see the field for the rules. Any create ending with NO audience is PUBLIC to the permission ladder and needs the Public permission — that includes isAdminsOnly, which is a no-audience create — so a selected-parties editor must name their own scope in aims. visibility_list still works. isAdminsOnly does not round-trip: the item reads back is_admin_only: false, and it is visible to you and to anyone with See-everything sight. Returns { id }. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

delete_accommodation

ChatGPT
Delete an accommodation.

delete_bulletin

ChatGPT
Soft-delete a bulletin.

delete_guest

ChatGPT
Delete a guest-list entry.

delete_pass_type

ChatGPT
Soft-delete a pass type. WITHOUT force it is a SAFE CHECK: if any guest still holds this pass, nothing is deleted and the blocking entries come back in data.guestLists. With force:true those allocations are deleted too, and any guest left holding no pass at all is soft-deleted with them. Reversible with restore_pass_type.

delete_room

ChatGPT
Soft-delete a room. Reversible with restore_room.

delete_schedule_item

ChatGPT
Delete a schedule item.

delete_schedule_template

ChatGPT
Soft-delete a template. Reversible with restore_schedule_template. Schedule items previously created FROM the template are not affected.

delete_structure_group

ChatGPT
Delete a party, subgroup or split. Deleting a party deletes its subgroups — INCLUDING subgroups sitting under other parties — and clears the affected members' memberships; splits survive. Editing lanes and viewing grants pointing at it are removed in the same transaction. Run preview_structure_delete first. aimCascade decides what happens to items aimed at the group: keep_reach (the default) replaces the aim with the people it reached at that moment, so nobody's visibility changes; remove deletes the aim, and an item left with no aim at all enters AWAITING RE-AIM — visible only to people who can see the whole tour, NOT public, and not visible to its own creator.

delete_tag

ChatGPT
Permanently delete a tag. This is a HARD delete — the tag is removed from every schedule item that carries it and cannot be restored. Check get_tag_usage first.

delete_tour

ChatGPT
Soft-delete a tour.

delete_tour_vehicle

ChatGPT
Retire a vehicle. Every drive using it switches to Car (default) and is marked for recalculation; the drives themselves are not deleted. Check get_vehicle_usage first to see how many are affected.

delete_venue

ChatGPT
Delete a venue.

describe_operations

ChatGPT
Get the exact typed input for named operations — the same JSON Schema each one carries in the tool list. On this connection (tools=all) all 151 operations it is authorised for are already advertised as their own tools with these schemas, so you only need this to re-read one. Returns each operation's full description, inputSchema, outputSchema and read/destructive/idempotent flags. Ask for at most 10 at a time.

disconnect

ChatGPT
Disconnect this MCP session from its Daysync account. Use this when whoami shows the wrong account: it revokes the current session so your NEXT request prompts you to sign in again — reconnect with the correct account. Does not delete any Daysync data.

disconnect_flight

ChatGPT
Remove the LINK between a flight item and the lookup, KEEPING every value it filled in so a human can edit them. Reversible and safe to repeat. NOT clear_flight: use it when the figures are right but should stop tracking the lookup. The legs survive unchanged — read them with get_flight_legs. The title is not touched at all.

export_day_sheet

ChatGPT
Render one tour day as a PDF day sheet and get a short-lived download URL back. Answers { url, expiresAt, fileName, pageCount, bytes, ignoredIdCount, cached } — the URL expires, so fetch it promptly rather than storing it. Read-only: it creates nothing on the tour and changes no record (the rendered PDF is cached, nothing else is stored), so it is safe to repeat. Start with a preset (FULL, SCHEDULE or MINIMAL) and narrow it with options if needed; ids you pass that you cannot see are dropped and reported in ignoredIdCount.

fill_open_role

ChatGPT
Put an existing organisation member into an open role. They inherit the seat's party, subgroups and splits — and nothing else: they land at sight own, edit none, no permissions. The previous occupant's names on sealed items do NOT transfer, because a seal names a person and never a seat. Costs no paid seat.

get_accommodation

ChatGPT
Get one stay in full — including its custom fields, emails/phones/urls and visibility. list_accommodation returns a leaner projection.

get_approved_guest_count

ChatGPT
Total guests across a day's APPROVED guest-list entries — the number a day's cap is checked against. It is a SUM of party sizes, not a row count, and it is not derivable from a paged get_guest_list.

get_conversation

ChatGPT
Get one channel or group chat: name, description, whether it is public/archived, and its member count.

get_day_audience_candidates

ChatGPT
Parties, subgroups, splits and people that could be added to a day's audience, each with how many people it would add.

get_day_sheet_data

ChatGPT
Read one tour day as a print-ready day sheet MODEL: header, running order, venues, stays, consolidated key contacts, guest-list totals, bulletins and the upcoming-days strip, filtered to what you can see. Use it to decide what to include before calling export_day_sheet; the ids it returns are the ids that tool accepts. For the raw records instead, use get_tour_data.

get_day_visibility

ChatGPT
Who can see a day: mode (public/limited/admins), its audiences, day and tour headcounts, whether you are on it and can manage it, and the dayRevision.

get_file

ChatGPT
Get a download URL and the authoritative size/content-type for ONE file from list_files. The URL is signed and EXPIRES in about five minutes — fetch or hand it to the user straight away, and never store it or paste it into a document as a permanent link; call this again for a fresh one. Returns 404 both when the file does not exist and when the connected user is not allowed to see it, so it cannot be used to probe for files on other tours.

get_flight_legs

ChatGPT
The persisted legs of a flight item, in order, plus the code it is auto-filled from — stops, terminals, coordinates, each airport's street address and per-leg times, all UTC. flightLookupCode null means the item is manual or was disconnected. A null originFormattedAddress is usually FINAL, not pending: an airport we asked about and could not place is cached as a permanent negative and is never re-asked, so do not poll for it and never synthesise one from the name. An airport name can EQUAL its municipality (ZQN is 'Queenstown' at every provider endpoint): compare them rather than reading it as missing, and never append 'Airport'. A null airlineIcao means fall back to IATA, never derive one.

get_guest_list

ChatGPT
Get the guest list for a specific tour day. Each guest includes its current pass allocation under passes ([{ passType, count }]) — read these before update_guest, which hard-replaces the whole pass set. Pass limit/offset to page large days.

get_item_aims

ChatGPT
What an item is aimed at right now — the audience BEFORE you change it, with group identity preserved. Read this before set_item_aims: the item reads carry a flat visibilityList of the people a group aim currently REACHES, so writing that list back would turn one aim at "Crew" into twelve individual ones. It also separates the three states that all look like an empty audience: isPublic (everyone), sealed (the named list and nobody else), and awaitingReaim (a structure delete stranded it and nobody has chosen an outcome).

get_item_custom_fields

ChatGPT
Get a schedule item's custom fields (its "extra info" rows).

get_message_reactions

ChatGPT
List the reactions on a message, grouped by emoji with who reacted.

get_messages

ChatGPT
Read a conversation's messages, NEWEST FIRST. Paging is cursor-based on message id, not offset: pass the returned nextCursor back as cursor to fetch the next (older) page. Max 100 per call. To jump to a specific message pass aroundMessageId with before/after instead. Thread replies are not in this feed — use get_thread_replies.

get_schedule

ChatGPT
Get the schedule items for a specific tour day. The server returns at most 1000 items per call — for larger days pass limit/offset to page.

get_schedule_template_items

ChatGPT
Read the items a template holds — times, notes, locations, attachments, reminders, travel details and visibility. Use it to see what apply_schedule_template would create.

get_stay_contacts

ChatGPT
Get a stay's own emails, phone numbers and urls.

get_stay_custom_fields

ChatGPT
Get a stay's custom fields.

get_stay_key_contacts

ChatGPT
Get the people from the org contact book linked to a stay.

get_tag_usage

ChatGPT
Count how many schedule items currently carry a tag — use before delete_tag to see what would be affected.

get_thread_replies

ChatGPT
Read the replies on a threaded message, oldest first. Cursor is a message id and returns replies NEWER than it (the opposite direction to get_messages).

get_tour_data

ChatGPT
Load a whole tour in ONE call: every day with its schedule items, venues, stays, guest lists, bulletins and pass types, plus per-day counts. Prefer this over paging the per-resource endpoints day by day. Narrow it with dayIds and the per-resource limits for big tours. Because it spans several resources it needs read access to all of them (tours, schedule, venues, accommodation, guestlist, bulletins).

get_tour_personnel

ChatGPT
The tour roster: members, pending invites and open roles, each with their four settings — what they can see (own/all), how far their editing reaches (none/selected/all_visible), which kinds of thing they may edit, and whether they manage personnel. Use this before changing anyone's access. Needs the personnel-management trust on this tour (or an organisation admin role) — without it this answers 403; list_tour_members is the ungated lighter read that answers only who is on the tour.

get_tour_structure

ChatGPT
The parties, subgroups and splits of a tour, with live member counts. Parties are the top level; a subgroup belongs to one party but can hold members from any; a split is a cross-cutting group like a bus or a flight. Needs the personnel-management trust on this tour (or an organisation admin role) — without it this answers 403, and you can still aim at individual people by name using get_tour_personnel's lighter sibling list_tour_members.

get_vehicle_usage

ChatGPT
Count how many drives currently route as a vehicle — use before delete_tour_vehicle to see what would be reassigned.

get_venue

ChatGPT
Get one venue in full — including its custom fields, emails/phones/urls, age restriction and visibility. list_venues returns a leaner projection.

get_venue_contacts

ChatGPT
Get a venue's own emails, phone numbers and urls.

get_venue_custom_fields

ChatGPT
Get a venue's custom fields.

get_venue_key_contacts

ChatGPT
Get the people from the org contact book linked to a venue.

invoke_operation

ChatGPT
Run a Daysync operation by name. On this connection (tools=all) all 151 operations it is authorised for are also advertised as their own tools — prefer calling those directly: each carries its own read-only / destructive / open-world hints, while this dispatcher must carry the worst case of anything it can reach. operation is a name from list_capabilities; input is that operation's arguments, validated against its real schema, so a wrong shape is rejected with the expected fields rather than half-applied. Only operations your connection is authorised for are reachable; this cannot call arbitrary URLs or endpoints. Operations reported as idempotent are safe to retry: re-sending the same operation with the same input within ~10 minutes returns the original record rather than creating a second one, and passing a new idempotency_key in input forces a genuine duplicate.

is_chat_enabled

ChatGPT
Check whether chat is switched on for a tour. Call before the other chat tools — they return nothing useful on a tour with chat disabled.

list_accommodation

ChatGPT
List the accommodation for a tour. Pass limit/offset to page large tours.

list_age_restrictions

ChatGPT
List venue age restrictions (ageRestrictionId for create_venue/update_venue). Not part of list_reference_types. Each entry is { id, label }.

list_bulletins

ChatGPT
List the bulletins for a tour. Pass limit/offset to page large tours.

list_capabilities

ChatGPT
Map of everything this Daysync connection can do. This connection uses the full tool surface (tools=all): all 151 operations it is authorised for are already advertised as their own tools, so you can call any of them directly. Call it with no arguments for the domains (tours, schedule, venues, accommodation, guest list, bulletins, chat, files, organizations) and how many operations each holds; call it with domain for that domain's operation names, one-line summaries and read-only / destructive / idempotent flags. Cheap, and makes no Daysync API call.

list_conversation_members

ChatGPT
List who is in a channel or group chat.

list_conversations

ChatGPT
List the tour's chat channels and group chats that the user belongs to, each with its unread count and last message. 1:1 direct messages are not available through this API.

list_day_types

ChatGPT
List the available day types — day_type_id values for create_tour days[] and update_tour day_list[].

list_files

ChatGPT
List the files attached to a tour — across its schedule items, venues, stays and pass types — with id, name, size, which entity holds it and when it was added. Returns only files the connected user is allowed to see: a file on a private item they are not on is not listed. Narrow it with entityTypes, dayId or a file-name search, and page with limit/offset (max 200 per call). Each row's fileId is what get_file takes. Chat files are NOT here — use search_chat_files for those.

list_guestlist_requesters

ChatGPT
List the tour users who can be set as a guest-list entry's requester.

list_org_key_contacts

ChatGPT
List the organization's key-contact book — the people who can be linked to venues and stays.

list_organization_members

ChatGPT
List the members of an organization.

list_organizations

ChatGPT
List the organizations the authenticated Daysync user belongs to.

list_pass_types

ChatGPT
List the guest-list pass types for a tour (pass type ids are required to add guests). Pass limit/offset to page a tour with many pass types.

list_pinned_messages

ChatGPT
List a conversation's pinned messages — usually the load-in details, addresses and running order worth surfacing first.

list_recent_flight_searches

ChatGPT
The flight numbers this user recently searched on this tour — up to 5, newest first, with the airline for each. Useful for offering a repeat rather than asking for a code again. A search that found nothing is deliberately not recorded, so this list never suggests a typo back.

list_reference_types

ChatGPT
Look up the id values the create/update tools require. Returns 24 reference tables in one call under data.types[] — each { name, type: [{ id, type, description }] }. Includes statusTypes, scheduleItemTypes, scheduleItemTimeTypes, scheduleItemTravelTypes, reminderTypes, avatarColors (colorId for tags and item colours), dayTypes, guestlistStatuses, pickupMethods, passMaterialTypes, venueTypes, venueCategories and hotelRoomTypes. Call once and reuse.

list_rooms

ChatGPT
List a stay's rooms with their occupants and pending invites.

list_schedule_templates

ChatGPT
List YOUR saved schedule templates for a tour, with how many items each holds. Templates are per-user: this never shows another member's templates. Call it before apply_schedule_template — template ids cannot be guessed.

list_stay_field_templates

ChatGPT
List the premade accommodation custom-field templates — the templateKey values and their labels.

list_tags

ChatGPT
List the tags defined on a tour, with their colours. Call this before set_item_tags or before passing tagIds to create_schedule_item — tag ids are per-tour and cannot be guessed.

list_tour_members

ChatGPT
List the members of a tour.

list_tour_vehicles

ChatGPT
List the saved vehicles on a tour, with their dimensions. Call this before calculate_drive_route to get a vehicleProfileId — ids are per-tour and cannot be guessed. Pass the same id to create_schedule_item / update_schedule_item to record which vehicle a drive's saved figures belong to. A drive with no vehicle routes as Car (default), which is not a row in this list.

list_tours

ChatGPT
List tours in an organization as memberships ({ role, member_count, tour }). Returns { items, total, offset, limit, hasMore } — pages of 50 by default; pass offset (and limit) to fetch the rest when hasMore is true. Chaining: items[].tour.id is the tourId; items[].tour.tourDays[].day.id is the dayId for the schedule and guest-list tools (NOT tourDays[].id, which is the join-row id). For very large organizations pass include_days:false to replace each tour's tourDays with a day_count.

list_venue_field_templates

ChatGPT
List the premade venue custom-field templates — the templateKey values and their labels/types.

list_venues

ChatGPT
List the venues for a tour. Pass limit/offset to page large tours.

name_date

ChatGPT
Set the name shared by every day on a date, like "Festival weekend". Null, empty or omitted clears it. Returns tourDate and a restoreToken for undo_day_change (15 min).

preview_day_visibility_change

ChatGPT
Changes nothing. Shows what set_day_visibility WOULD remove: each dropped audience with its item count, totals, headcount before/after, and the dayRevision to pass to it.

preview_structure_delete

ChatGPT
What deleting a party, subgroup or split WOULD affect — members who lose the membership, subgroups cascaded with a party (including ones under other parties), editing lanes and viewing grants removed, and items that would be left awaiting re-aim. Changes nothing. Call this before delete_structure_group so the cascade is a choice rather than a surprise.

remove_day

ChatGPT
Remove one day from a date that has several. Soft: the day and its items disappear and come back with undo_day_change (restoreToken, 15 min). 409 LAST_DAY_ON_DATE for a date's only day — use clear_date. 404 DAY_NOT_FOUND also means hidden or on another tour.

remove_tour_personnel

ChatGPT
Remove somebody from the tour. With keepRoleOpen the seat survives as an open role with its party, subgroups and splits — but NOT its permissions, so a replacement starts from nothing. Without it the row is removed entirely and re-adding the person later starts them from scratch. Either way their name comes off every seal on this tour, and created_by keeps pointing at them because it is audit, not access.

rename_schedule_template

ChatGPT
Rename a template. This is the only edit possible — a template's items are fixed when it is saved; to change them, save a new template. Returns { id }.

restore_guest

ChatGPT
Restore a soft-deleted guest-list entry, with its pass allocations.

restore_pass_type

ChatGPT
Restore a soft-deleted pass type, along with the guest allocations and guest-list entries that were removed with it. Refused if a live pass type in the same tour now uses its name or abbreviation — rename or delete that one first.

restore_room

ChatGPT
Restore a soft-deleted room.

restore_schedule_item

ChatGPT
Restore a soft-deleted schedule item.

restore_schedule_template

ChatGPT
Restore a soft-deleted template, with its items.

restore_tour_vehicle

ChatGPT
Undo a delete_tour_vehicle: bring the vehicle back and put its drives back on it. Safe to repeat — restoring a vehicle that is not deleted answers alreadyActive=true and changes nothing. reattachedDriveCount can be lower than the delete reported: a drive somebody edited, or pointed at another vehicle, afterwards keeps what they chose.

save_schedule_template

ChatGPT
Save a set of existing schedule items as a reusable template. itemIds come from get_schedule and must ALL be on the same tour — that tour becomes the template's tour, and the template can only ever be applied to days of it. Returns { id }. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

seal_item

ChatGPT
SEAL an item: from now on it is visible to the people NAMED on it and to nobody else. A seal beats every role — an organisation owner who is not named cannot see it, there is no half-view, and it is absent from every count and day sheet for everyone else. You are named automatically. An open role cannot be named; fill the role first.

search_chat

ChatGPT
Search a tour's chat history for a phrase, across every channel and group chat the user is in. Returns matches newest first with their conversation; cursor-paged by message id.

search_chat_files

ChatGPT
Find files and images shared in a conversation by name.

search_flights

ChatGPT
Look up a real flight by number (QF1, BA16) for a tour day and get the departures that can be attached. Searches THREE days — the day before, the day, the day after — anchored on dayId. Writes one thing: it adds the number to your recent-search list (nothing on the tour itself is touched). READ data.status FIRST: it is a string enum, NOT the boolean envelope status. OK = options found; NO_RESULTS = the code matches nothing anywhere (almost always a typo — do not retry unchanged); NOT_OPERATING = a REAL flight that does not fly on these dates, and only then does operatingWeekdays say which days it does; TAIL_NUMBER = an aircraft registration, so re-send the SAME query with treatAsFlightNumber true; INVALID_QUERY = not a flight number at all. None of the five is a failure — a provider failure is an error. data.lookupConfigured false means this environment has NO provider credential: a configuration problem, never 'no departures'. days is ALWAYS the three window dates. Each option's key goes to attach_flight verbatim; a multi-leg number offers the WHOLE service (kind SERVICE) plus EACH leg (kind LEG), and a SERVICE creates ONE item containing every leg.

search_tour_content

ChatGPT
Find something on a tour when you do not know which day it is on: searches schedule items, venues, stays, guests, files and bulletins by name in one call, ranked by relevance and grouped by kind, with an exact per-kind total. Scope TOUR searches one tour; scope ORG searches every tour the user can reach in that org (never another org). Returns only what the connected user is allowed to see — a private item they are not on never appears, and that now includes bulletins, which became an aimed item type and are filtered by the same rule as the rest. Each result carries dayId + section + navigateItemId, which together locate the item. Prefer this over paging get_tour_data across days to look for something. Because it spans several resources it needs read access to all of them (tours, schedule, venues, accommodation, guestlist, bulletins).

set_day_visibility

ChatGPT
Set who can see a day — the complete audience. isPublic true = everyone; false + targets = only those; false alone = admins only. Narrowing strips removed audiences from the day's items: call preview_day_visibility_change first and pass its dayRevision (409 STALE_DAY_PREVIEW otherwise). Returns a restoreToken.

set_guestlist_config

ChatGPT
Set a day's guest-list configuration: total cap and whether it is enforced (send both together), whether the list is locked, the request cut-off, and per-pass-type allocation caps. Pass venue_id to configure one venue on the day instead of the day's defaults. Requires tour-admin.

set_item_aims

ChatGPT
Set who an item is aimed at — the complete audience, replacing what is there. Works on a schedule item (travel included: a flight IS a schedule item), a venue, a stay or a pass type. An EMPTY aims array makes the item PUBLIC; it does not hide it. Group targets follow membership, individual ones do not, and a viewer reached by several paths gets the STRONGEST level. times_only is a schedule-item-only level that shows the real title and time and nothing else.

set_item_custom_fields

ChatGPT
Add, update or remove a schedule item's custom fields. Each entry carries its own operation, so one call can mix all three; only the fields you list are touched. When creating an item you can pass customFields inline instead.

set_item_tags

ChatGPT
Set the tags on a schedule item. This REPLACES the item's whole tag set, so include every tag it should end up with (pass [] to clear). Read the current set from get_schedule (items[].schedule_item_tags). Tags must belong to the same tour.

set_personnel_access

ChatGPT
Set somebody's access settings: what they can see, how far their editing reaches, which kinds of thing they may edit, whether they manage personnel, and whether they manage the tour itself (name, dates, days, day types and locations — org admins only may set that one). These are INDEPENDENT — none implies another — and permissions is a complete set, so a kind you leave out is switched off. Sight is the ceiling: nothing can be edited that cannot be seen in full. An organisation admin is pinned to full rights and cannot be reduced here.

set_personnel_memberships

ChatGPT
Set which party, subgroups and splits somebody belongs to. Each list you send REPLACES what is there; omit a list to leave it alone, send [] to clear it. A null partyId is "No party yet", which is a valid permanent state.

set_seal_names

ChatGPT
Replace the list of people who may see a sealed item. The list you send is the COMPLETE one — anyone omitted loses sight of the item immediately. A seal may never be left naming nobody.

set_stay_contacts

ChatGPT
Add, update or remove a stay's own emails, phone numbers and urls. Each entry carries its own operation; at least one of emails/numbers/urls must be present.

set_stay_custom_fields

ChatGPT
Add, update or remove a stay's custom fields. Each entry carries its own operation. Use templateKey (from list_stay_field_templates) for a premade field, or a title for a free-form one.

set_stay_key_contacts

ChatGPT
Link or unlink org contact-book people on a stay. Only the links you list change. Create the contact first with create_key_contact.

set_venue_contacts

ChatGPT
Add, update or remove a venue's own emails, phone numbers and urls. Each entry carries its own operation; at least one of emails/numbers/urls must be present.

set_venue_custom_fields

ChatGPT
Add, update or remove a venue's custom fields. Each entry carries its own operation. Use templateKey (from list_venue_field_templates) for a premade field, or a title for a free-form one.

set_venue_key_contacts

ChatGPT
Link or unlink org contact-book people on a venue. Only the links you list change. The contact must already exist — create it with create_key_contact and find ids with list_org_key_contacts.

undo_applied_schedule_template

ChatGPT
Undo an apply: soft-delete the items this template created on that day. Only items stamped with this template id, and only ones you can see, are touched.

undo_day_change

ChatGPT
Undo one day change with the restoreToken it returned, within 15 minutes; each token works once. 410 RESTORE_EXPIRED after the window, 409 RESTORE_CONFLICT when later edits block it.

unseal_item

ChatGPT
Remove an item's seal, returning it to ordinary aim-based visibility.

update_accommodation

ChatGPT
Update an accommodation stay. All body fields optional; tourId/dayId/daysList/subtitle are silently ignored on edit. Returns { id, name }. To change who it is for, send aims here and it is applied in the SAME transaction as the content change — omit it and the audience is left untouched, send [] to clear it and make the item public. set_item_aims does the same thing on its own when the audience is all you are changing. The legacy visibility fields on this body still replace only the LEGACY half.

update_bulletin

ChatGPT
Update a bulletin. All body fields optional — send only what changes. Returns no data (status only). Overwrites the fields you send. Notifications: this call sends none. Only a bulletin created with a scheduledFor is ever notified, once, when that time arrives with hasNotification true (a past scheduledFor with hasNotification true is refused, 400). Until then, editing scheduledFor or hasNotification changes when — or whether — its audience is notified, even if it is already posted. A future scheduledFor also hides a posted bulletin again until that time. Private-account boundary: the connected user's own Daysync tour; no outside service is called on your behalf.

update_guest

ChatGPT
Update a guest-list entry — send the FULL record (firstName/lastName/numberOfGuests/pickupMethodId/statusId/passes stay required on edit), not a delta. The passes array HARD-REPLACES the guest's entire pass allocation (omitted pass types are deleted), so first read the guest's current passes via get_guest_list and resend them (adjusted) — sending a partial or empty passes set wipes the rest. Returns { id }.

update_guest_statuses

ChatGPT
Approve, deny or waitlist guest-list entries in bulk. Every id must belong to this tour — one foreign id rejects the WHOLE batch and changes nothing. Use this rather than looping update_guest, which requires the guest's full record.

update_key_contact

ChatGPT
Update a person in the organization's key-contact book. Send only what changes. NOTE number/country are strings here but numbers on create — an upstream quirk.

update_pass_type

ChatGPT
Update a pass type — send the FULL record, not a delta: name, abbv, tour_id and day_ids are all required, and day_ids REPLACES the days it applies to. Read the current values from list_pass_types first. Permission: an org admin, or a tour member whose editMode is not none, who can see the pass type and holds the guests permission (public if it is public) — a selected editor only within their lanes. Returns { id }. To change who it is for, send aims here and it is applied in the SAME transaction as the content change — omit it and the audience is left untouched, send [] to clear it and make the item public. set_item_aims does the same thing on its own when the audience is all you are changing. The legacy visibility fields on this body still replace only the LEGACY half. Overwrites: a day left out of day_ids is unlinked from the pass type (guests already given this pass for that day keep it). Private-account boundary: the connected user's own Daysync tour — no ticket is issued or sold, no ticketing or other outside service is called on your behalf, and no notification is sent.

update_personnel_details

ChatGPT
Update somebody's job title, or an open role's name and note. Display only — none of this grants access.

update_room

ChatGPT
Update a room. Send only what changes — but note guestList and pendingInvites together REPLACE the room's occupants: sending either one removes every existing occupant first, so guestList alone also drops the pending-invite occupants (and pendingInvites alone the users). Send both, with everyone the room should end up with. Private-account boundary: it edits a room record in the connected user's own Daysync account — no hotel booking or reservation is made or changed and no booking or other outside service is called on your behalf. Notifications: unless hasNotification is false, Daysync sends a room-update notification (in app, plus push/email per their settings) to everyone who can see this stay after the change — org admins included, and occupants unless the stay is sealed without naming them — but not to you. Send hasNotification: false to suppress it.

update_schedule_item

ChatGPT
Update a schedule item. All body fields optional — send only what changes; tour_id and type cannot be changed. Returns { id, route_stale, route_computed_at } — plus reminders with their server-generated ids when the request sent a reminder list (keep these: a reminder re-sent without its id is added again as a new one). To change who it is for, send aims here and it is applied in the SAME transaction as the content change — omit it and the audience is left untouched, send [] to clear it and make the item public. set_item_aims does the same thing on its own when the audience is all you are changing. The legacy visibility fields on this body still replace only the LEGACY half. Overwrites: each field you send replaces the stored value (a list such as travel breaks or custom fields replaces the whole list), except attachments and reminder: a new entry is ADDED and the ones you leave out are kept, so sending them never clears the others. Private-account boundary: the connected user's own Daysync tour; nothing is booked and no booking or other outside service is called on your behalf. Notifications: this call sends none; a reminder notifies the people who can see the item at its lead time.

update_structure_group

ChatGPT
Rename a party, subgroup or split, or change its colour, order, or (subgroups only) whether it shares to its parent party. Send only what changes.

update_tag

ChatGPT
Rename a tag or change its colour. Send only the fields that change.

update_tour

ChatGPT
Update a tour. All body fields are optional — send only what changes. day_list is ADD/UPDATE-ONLY here (day_id present = update that day, absent = add a day); days you don't mention are PRESERVED — unlike the raw API, omitting a day never deletes it. To delete days, pass their ids in delete_day_ids. Whenever you change days (day_list or delete_day_ids), also pass orgId (the org you used for list_tours) so the tour's other days can be protected. Returns no data (status only).

update_tour_vehicle

ChatGPT
Change a saved vehicle. Send only the fields that change. Editing a routing dimension or a speed limit marks every drive using it for recalculation.

update_venue

ChatGPT
Update a venue. All body fields optional — send only what changes; tour_id/day_id cannot be changed. Returns { id }. To change who it is for, send aims here and it is applied in the SAME transaction as the content change — omit it and the audience is left untouched, send [] to clear it and make the item public. set_item_aims does the same thing on its own when the audience is all you are changing. The legacy visibility fields on this body still replace only the LEGACY half.

upload_attachment

ChatGPT
Upload a file by URL for attaching to a tour item. The server fetches the file at url and stores it, returning { link, fileName, fileSize }. Then pass that link as an attachment on a create/update — e.g. create_item/update_item, create_venue/update_venue, create_accommodation/update_accommodation, add_guest — via attachment: { link, fileName, fileSize } (or the plural attachments: [...]). Attachments are NOT supported on bulletins. Safe to retry: repeating this call with the same details within ~10 minutes returns the ORIGINAL record instead of creating a second one — if you get back an id you have already seen, that is what happened. To create a genuine duplicate, pass a new idempotency_key.

upload_file

ChatGPT
Store a file and get back the key to attach with attach_file. Pick a source: • "content" — you HAVE the bytes: pass base64 in content plus contentType and tourId. Max 256KB; this is the only source an assistant can drive unaided. • "url" — the file is at a public https URL: pass url. The server fetches it (max 25MB, redirects not followed). No tourId needed. • "ticket" — the file is large and local to your app: pass tourId, fileName, contentType and the exact contentLength, then PUT the bytes to the returned signed URL with the returned headers EXACTLY as given. An assistant cannot do this itself. Uploading does not attach anything — call attach_file next, or pass the returned key as attachment.link on a create/update. Allowed content types: application/json, application/msword, application/pdf, application/rtf, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/x-zip-compressed, application/zip, audio/aac, audio/mp4, audio/mpeg, audio/wav, audio/webm, image/bmp, image/gif, image/heic, image/heif, image/jpeg, image/jpg, image/png, image/tiff, image/vnd.microsoft.icon, image/webp, image/x-icon, text/calendar, text/csv, text/markdown, text/plain, video/mp4, video/quicktime, video/webm. Safe to retry: the "content" and "url" sources store the file exactly once — repeating the same upload within ~10 minutes returns the ORIGINAL key rather than storing a second copy. Pass a new idempotency_key to force a distinct copy. ("ticket" only mints a signature, so it stores nothing to duplicate.)

whoami

ChatGPT
Show which Daysync account this MCP session is connected as — its email, name, and Cognito subject id. Use this to confirm you're acting on the RIGHT account before reading or changing data; the account here can differ from app.daysync.com. If it's the wrong account, call disconnect and reconnect.

attach_file

Claude

describe_operations

Claude

disconnect

Claude

get_accommodation

Claude

get_file

Claude

get_guest_list

Claude

get_messages

Claude

get_schedule

Claude

get_tour_data

Claude

get_venue

Claude

invoke_operation

Claude

list_accommodation

Claude

list_bulletins

Claude

list_capabilities

Claude

list_conversations

Claude

list_files

Claude

list_organizations

Claude

list_pass_types

Claude

list_reference_types

Claude

list_tags

Claude

list_tour_members

Claude

list_tours

Claude

list_venues

Claude

search_tour_content

Claude

upload_file

Claude

whoami

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps