Skip to main content
The server knows 140 operations, and by default it advertises 26 of them as tools. The rest are fully available — you reach them through three discovery tools instead of having all 140 definitions loaded into every conversation. You only ever see or reach operations covered by the scopes you approved at connect time — a read-only connection never shows a tool that writes, and discovery does not change that.
✓ in the Tool column means the operation is advertised as a tool by default. Everything else is reached via invoke_operation.⚠️ marks operations annotated as destructive. Well-behaved clients — including Claude — ask before running these.You do not need to memorise names. Ask in plain language and the client picks the operation — the names are here for debugging and for writing your own client.

The discovery model

Advertising every operation cost about 33,000 tokens of tool definitions back when there were 106 of them — before the client had read a single word of your question — and near-neighbours (create_schedule_item vs. create_schedule_items) made the choice ambiguous. With 140 it would be worse. The default surface stays small and the long tail is fetched on demand. So the write flow is: list_capabilities → describe_operations → invoke_operation. invoke_operation cannot call arbitrary URLs or endpoints. operation must name an operation in this catalogue, and one your connection is authorised for; anything else is refused.

Keeping the old tool list

If your client enumerates tools and you want everything advertised, append ?tools=all to the MCP URL (or send x-daysync-mcp-tools: all) to get all 140 as tools. Nothing is ever removed: every tool name that has existed is still callable by name, whether or not it appears in tools/list. An integration that hardcodes create_pass_type needs no change.

Where to start

A few tools do most of the work:

Session & users

whoami and disconnect are always available on any connection.

Files

tours.read to read, schedule.write to upload and attach. All four are advertised by default, because they are the only route to file content.

Choosing an upload source

upload_file takes a source: Uploading does not attach anything — call attach_file next.
Bulletins do not support attachments. Chat files are not in list_files either; use search_chat_files.Prefer attach_file over re-sending an entity’s update body with attachments, which replaces the whole set.

Limits and rejections

File reads are bounded by the same organization, tour, role and per-item visibility rules as everything else: a file on a private item you are not on is not listed, and files on another tour are not reachable.

Organizations

organization.read — read-only.

Tours

tours.read / tours.write.

Tours, days and lookups

Day sheet

The day sheet is a read, despite export_day_sheet being a POST. It rides tours.read, creates nothing on the tour, and changes no record — the POST is only because the render takes a body. Start from a preset (FULL, SCHEDULE, MINIMAL) and narrow it with options; ids you pass that you cannot see are dropped and counted in ignoredIdCount. See Day sheet.
get_tour_data, search_tour_content, get_day_sheet_data, export_day_sheet, list_files and get_file each span several resources, so they need the read scope for all of them — see Scopes. They appear with tours.read but fail without the rest.

Structure and personnel

A tour’s structure is its parties (top level, e.g. Band, Audio), subgroups under a party, and splits — cross-cutting groups like Bus A or Early flight. Personnel can belong to any combination, and items can be aimed at any of them.
Personnel operations need the personnel-management permission on the tour (or an organization admin role). Without it, get_tour_personnel and the writes answer 403 — list_tour_members still works.

Visibility: aims and seals

Every schedule item (travel included — a flight is a schedule item), venue, stay and pass type has an audience. Group targets follow membership; individual targets don’t. A viewer reached by several paths gets the strongest level.

Schedule

schedule.read / schedule.write.

Items

Tags

Flights

Vehicles and drive routing

Templates

Schedule templates are per user. list_schedule_templates shows only the connected account’s own templates, and a template can only be applied to a day of the tour its items came from. See Schedule Templates.

Venues

venues.read / venues.write.

Accommodation

accommodation.read / accommodation.write.

Guest list

guestlist.read / guestlist.write.
Prefer update_guest_statuses over looping update_guest, which requires the guest’s whole record on every call. And read delete_pass_type’s response rather than only its success: without force it deliberately deletes nothing when a guest still holds the pass.

Bulletins

bulletins.read / bulletins.write. Bulletins are aimed items, filtered by the same visibility rules as everything else.

Chat

chat.read — read-only, and 1:1 direct messages are never exposed. See Chat.

Retrying a write safely

Operations flagged idempotent in list_capabilities accept an optional idempotency_key. Today that covers create_tour, create_schedule_item, create_schedule_items, create_venue, create_accommodation, create_room, create_key_contact, create_tag, create_tour_vehicle, create_pass_type, create_bulletin, add_guest, save_schedule_template, apply_schedule_template, attach_flight, upload_file and upload_attachment. That last row is why a duplicated tool call — the failure mode a retrying agent is most prone to — does not silently create two schedule items.
The structure and personnel creates (create_tour_party, create_tour_subgroup, create_tour_split, create_open_role, add_tour_member) are not idempotent. Read get_tour_structure or get_tour_personnel before retrying.

Why a tool might be missing

  1. It is not on the default surface. Most operations are not advertised as tools. Call list_capabilities to find it, then describe_operations and invoke_operation — or append ?tools=all to the MCP URL to advertise everything.
  2. You did not consent to its scope. Reconnect and approve it. invoke_operation distinguishes this case explicitly: it answers INSUFFICIENT_SCOPE and names the scope needed, rather than telling you the operation does not exist.
  3. The application does not hold that scope. Nothing you can do client-side — the partner credential needs it.
  4. Your role doesn’t allow it. Personnel and some guest-list operations need tour-admin or personnel-management rights; these return 403.
  5. Your session predates the tool. Tool lists are cached from session start; start a new chat.
See Troubleshooting.

When something new becomes a tool

So the surface does not creep back up, new capabilities follow a fixed rule:
  1. If an existing tool covers it with one more field, that tool is extended.
  2. Otherwise it becomes an operation — reachable via list_capabilities / describe_operations / invoke_operation from day one, with no client change and no re-consent.
  3. It is promoted to an advertised tool only if an agent needs it to orient itself (a read), or it is the only route to a capability (files); its name is unambiguous against every other advertised tool; and its schema is small — a multi-kilobyte write body belongs behind describe_operations, which delivers it just in time.
  4. Reference and lookup data stays bundled into one read rather than one tool per table.
search_tour_content is the most recent promotion under rule 3.
Every operation maps to a documented REST endpoint — see Scopes & Permissions for the mapping.