Skip to main content
Glama

Set up services, team and branches

manage_booking_services
DestructiveIdempotent

Set up WHAT people book, WHERE and WITH WHOM, and the packs and memberships they can buy: services and classes (each with its length, price, whether it is paid online at booking, and whether it is confirmed instantly or waits for the owner), the team (each person's weekly hours, per branch), and branches (locations of one business — a franchise's gyms, a clinic's sites). Use it whenever the owner describes more than one thing to book, more than one person taking bookings, or more than one place. Turn their words into the lists yourself; pass only the entries that change (matched by name — "Sam" updates Sam). Order: branches first, then people (their hours name a branch), then services (they name people). A paid service ("payment": "full" or "deposit") is always confirmed once paid; a free one confirms instantly only if the owner says so ("confirmation": "instant"), otherwise the owner confirms each booking. Before calling, read get_appointments_status (its services field lists what exists) and show the owner the plan in one short message. The website booking form shows the new choices after the next publish; chat books them straight away. Existing services, team members and branches can be removed or replaced, while passes can be stopped from sale; these changes affect live booking choices and prices. Confirm replacements or removals before calling. ON A SITE THAT STILL HOLDS SEVERAL DESIGNS this builds the site: Mondovo copies the chosen design into the working site (or reuses the copy made earlier), adds to that, and the response carries its new site_id and a build_transition — relay its tell_user and use the new site_id from then on. Pass variation_id for the design the user picked; omitted, Mondovo uses the design already built or the only one edited, and otherwise answers choose_design so you can ask the user.

Input Schema

NameRequiredDescriptionDefault
staffNoJSON list of team members: [{"name":"Sam","role":"Senior physio","hours":[{"day":"mon","start":"09:00","end":"17:00","location":"Ealing"}]}]. hours REPLACE that person's whole schedule; "location" names a branch (omit when there is one place). {"name":"…","remove":true} removes someone.
passesNoJSON list of packs and memberships sold online: [{"name":"5-session pack","kind":"pack","price":340,"sessions":5,"valid_days":180,"services":["Physio"]}, {"name":"Unlimited classes","kind":"membership","price":40,"interval":"month","sessions":null}]. A pack is N sessions paid once (valid_days = how long it lasts, null = no expiry); a membership is paid every month/year (sessions = per-period limit, null = unlimited). "services" = which services it covers (omit = every paid service). Customers buy them in the booking widget and use them instead of paying when they book, once signed in to their account. {"name":"…","remove":true} stops selling one (buyers keep theirs).
site_idYesThe site, from list_sites
servicesNoJSON list of services: [{"name":"Initial assessment","duration_minutes":45,"price":95,"payment":"none"|"deposit"|"full","deposit":20,"confirmation":"instant"|"owner","capacity":1,"staff":["Sam","Ana"],"description":"…"}]. price/deposit are in the site currency's main unit (95 = £95). "staff" = who performs it (omit on a new service = everyone on the team; [] = nobody in particular, the business's own hours). capacity > 1 = several people per time, only for services nobody in particular does (a room, a court) — a person always takes one appointment at a time; for group sessions with a leader use a class. {"name":"…","remove":true} deletes one; {"rename_from":"Old name","name":"New name"} renames. A CLASS (fixed times, several people each): {"name":"Spin","kind":"class","duration_minutes":45,"capacity":20,"price":12,"schedule":[{"day":"mon","start":"07:00","instructor":"Sarah","location":"Ealing"}]} — schedule is the WHOLE weekly timetable; capacity = spots per session; the instructor is busy for one-to-ones during it. PEOPLE-BASED places (a restaurant table service, a group tour): "capacity_unit":"people","capacity":40 (covers per time),"max_party":8 — each booking takes its party size. QUESTIONS asked at booking: "questions":[{"label":"Insurer","type":"select","options":["Bupa","AXA","Self-pay"],"required":true},{"label":"Pre-authorisation code"}] (types: text, long_text, select, checkbox, phone; replaces the list). ONLINE: "meeting":"link","meeting_url":"https://zoom.us/j/…" (the owner's own room) or "meeting":"google_meet" (a new Meet per booking; needs Google Calendar connected) — the link is sent only after booking.
locationsNoJSON list of branches: [{"name":"Ealing","address":"…","timezone":"Europe/London","photo_url":"https://…","hours":[{"day":"sat","start":"10:00","end":"14:00"}]}]. hours here are the branch's own opening hours, used only by services nobody in particular performs. Give "timezone" (IANA) only when a branch is in a different time zone from the business; its team hours and time off are then on that clock. {"name":"…","remove":true} removes one.
user_goalNoOptional: the user's goal behind this call, in one short sentence of plain words (e.g. "add a page so customers can book tables"). No names, emails or other personal details.
variation_idNoOn a site that still holds several designs: the design to build the site from (from list_variations). Mondovo copies it into the working site and adds to that. Omit on a site that is already built.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / user_goal
      Added value: +{
      +  "description": "Optional: the user's goal behind this call, in one short sentence of plain words (e.g. \"add a page so customers can book tables\"). No names, emails or other personal details.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / variation_id
      Added value: +{
      +  "description": "On a site that still holds several designs: the design to build the site from (from list_variations). Mondovo copies it into the working site and adds to that. Omit on a site that is already built.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds substantial non-obvious context: changes affect live booking choices and prices, passes are stopped from sale rather than deleted, removals must be confirmed first, and on multi-design sites it performs a build that returns a new site_id and a build_transition whose tell_user must be relayed. This is rich behavioral disclosure beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The WHAT/WHERE/WHOM framing front-loads the core purpose efficiently and each subsequent paragraph covers a distinct concern (ordering, payment rules, prerequisites, publish timing, build_transition). It is dense and long, but nearly every sentence carries actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 7-parameter mutation tool with no output schema, the description covers orchestration order, prerequisites, destructive-change confirmation, live-effect timing, and the multi-design build/variation_id flow. An agent has enough to call it correctly without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds real semantics: name-based matching ('"Sam" updates Sam'), the payment/confirmation dependency rule, the branch→people→services ordering constraint, and variation_id omission behavior. These go beyond what the schema states, though much of the per-field detail duplicates the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence uses a clear metaphor ('Set up WHAT people book, WHERE and WITH WHOM, and the packs and memberships they can buy') that maps directly to the services, locations, staff and passes parameters. It is specific about the resource and scope, but it does not explicitly name the sibling tools it differs from (e.g. set_up_appointments, manage_appointments, spin_up_pack), leaving that differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete triggering condition ('use it whenever the owner describes more than one thing to book...') and a prerequisite ('read get_appointments_status' before calling) plus an explicit call order (branches, then people, then services). It also says to confirm replacements/removals before calling. It stops short of naming when to prefer the adjacent appointment tools instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources