{"description":"The actions a visitor's own AI agent may take on this website.","endpoint":"/api/v1/webmcp/tools","spec":"mcp-server-card-draft","tools":[{"description":"List the forms on this website, or — given a form's slug — the fields it asks for, with their keys, labels, types and which are required. Call this before submit_form so the values are sent under the keys this site's form actually uses.","effect":"read","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"the form's slug; omit to list the forms on this site"}},"additionalProperties":false},"name":"describe_form"},{"description":"Ask this website to email the person you are helping when someone replies in a page's discussion. Use their own address, as they gave it — never one you chose. The site sends a confirmation first and delivers nothing until they accept it, so this cannot subscribe anyone who does not agree.","effect":"submit","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"path of the page whose discussion to follow, e.g. /blog/hello; omit for the page the visitor is on"},"email":{"type":"string","description":"the person's own email address, as THEY gave it — never invented; a confirmation is sent and nothing arrives until they accept it"}},"required":["email"],"additionalProperties":false},"name":"follow_discussion"},{"description":"List what this website publishes — its latest posts, its products, or everything filed under one category or tag — with each item's title, URL, short excerpt and date. Use it to find out what a site offers before searching it: search_site needs a query, and this answers \"what have you got\". Omit every argument for the site's main feed. The reply names the content types this site actually has, so a follow-up call can narrow to one.","effect":"read","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"content type key to list, e.g. post or product; omit for this site's main feed"},"taxonomy":{"type":"string","description":"taxonomy key to narrow by, e.g. category or tag; needs term"},"term":{"type":"string","description":"term slug within that taxonomy, e.g. news; needs taxonomy"},"page":{"type":"integer","description":"1-based page; omit for the first"}},"additionalProperties":false},"name":"list_content"},{"description":"Cancel the guest's booking from their mail link, if the venue's cutoff allows it. Give the reference and the token from the link.","effect":"submit","inputSchema":{"properties":{"ref":{"description":"The booking's reference, like B-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_cancel_mine"},{"description":"List a setup's free times on a day, a room type's options, or a class's sessions (site local time), plus the questions to answer when booking. Give setup, date, party; rooms: arrival, departure, guests; classes: from, days. If it says waitlist true, booking_waitlist_join applies.","effect":"read","inputSchema":{"properties":{"arrival":{"description":"For a room type: the arrival day, YYYY-MM-DD.","type":"string"},"date":{"description":"The day, YYYY-MM-DD, the site's local time; for tables and appointments.","type":"string"},"days":{"description":"For a class: how many days the window covers; default 14.","type":"integer"},"departure":{"description":"For a room type: the departure day, YYYY-MM-DD.","type":"string"},"from":{"description":"For a class: the first day of the window, YYYY-MM-DD; default today.","type":"string"},"guests":{"description":"For a room type: how many guests.","type":"integer"},"party":{"description":"How many guests; default 2.","type":"integer"},"setup":{"description":"The setup's short name (slug). Empty uses the only active setup.","type":"string"}},"required":["setup"],"type":"object"},"name":"nilda_booking.booking_check_availability"},{"description":"For a restaurant that lets guests choose their table: list the tables and combinations that seat a party at a start from booking_check_availability, each free or taken, with seats and zone, and the floor plan's description. Then book one by label with booking_reserve.","effect":"read","inputSchema":{"properties":{"party":{"description":"How many guests.","type":"integer"},"setup":{"description":"The setup's short name (slug).","type":"string"},"start":{"description":"The start from booking_check_availability, RFC 3339.","type":"string"}},"required":["setup","start","party"],"type":"object"},"name":"nilda_booking.booking_check_tables"},{"description":"Confirm the guest's booking from the link in the verification email. Give the reference and the token from the link.","effect":"submit","inputSchema":{"properties":{"ref":{"description":"The booking's reference, like B-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_confirm_mine"},{"description":"Move the guest's booking from their mail link, if the cutoff allows it. Give the reference, the token and the new start time; for a room type give the new arrival and departure instead; for a class give the new session's id.","effect":"submit","inputSchema":{"properties":{"arrival":{"description":"For a room type: the new arrival day, YYYY-MM-DD.","type":"string"},"departure":{"description":"For a room type: the new departure day, YYYY-MM-DD.","type":"string"},"ref":{"description":"The booking's reference.","type":"string"},"session_id":{"description":"For a class: the new session's id from booking_check_availability.","type":"string"},"start":{"description":"The new start, RFC 3339, from booking_check_availability; not for rooms or classes.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_move_mine"},{"description":"Read one booking from the guest's mail link: what, when, party, status and whether it can still be changed. Give the reference and the token from the link.","effect":"read","inputSchema":{"properties":{"ref":{"description":"The booking's reference, like B-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_my_booking"},{"description":"See what can be booked on this site: every setup — restaurant tables, appointments, rooms and classes — with its location, party range, room rules and deposit rule, the locations (name, address) and the site's time zone. Read this before checking times or booking.","effect":"read","inputSchema":{"properties":{"location":{"description":"Only what this location (its short name, from this tool's locations) offers; empty lists everything.","type":"string"}},"type":"object"},"name":"nilda_booking.booking_options"},{"description":"Book a table, appointment, room or class for the person you act for: setup, start (rooms: arrival, departure; classes: session id), party, name, email, answers to the setup's questions by key, and where guests may choose, a table label from booking_check_tables. Returns the reference and status.","effect":"submit","inputSchema":{"properties":{"answers":{"additionalProperties":{"type":"string"},"description":"Answers to the setup's questions, by key, as listed by booking_options or booking_check_availability.","type":"object"},"arrival":{"description":"For a room type: the arrival day, YYYY-MM-DD.","type":"string"},"departure":{"description":"For a room type: the departure day, YYYY-MM-DD.","type":"string"},"email":{"description":"The guest's email.","type":"string"},"guests":{"description":"For a room type: how many guests (party when empty).","type":"integer"},"name":{"description":"The guest's name.","type":"string"},"note":{"description":"A note from the guest.","type":"string"},"party":{"description":"How many guests, or seats in a class.","type":"integer"},"phone":{"description":"The guest's phone.","type":"string"},"session_id":{"description":"For a class: the session's id from booking_check_availability.","type":"string"},"setup":{"description":"The setup's short name (slug).","type":"string"},"start":{"description":"The start from booking_check_availability, RFC 3339; not for rooms or classes.","type":"string"},"table":{"description":"Optional, for a setup that lets guests choose: the label of a table or combination from booking_check_tables. Empty lets the venue choose.","type":"string"}},"required":["setup","party","name","email"],"type":"object"},"name":"nilda_booking.booking_reserve"},{"description":"Book the place held for the guest from the email that offered it, before the hold ends. Give the reference and the token from the link. Returns the booking's reference and status.","effect":"submit","inputSchema":{"properties":{"ref":{"description":"The waiting-list reference from the guest's email, like W-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_waitlist_accept"},{"description":"When availability says a day or class session is full and waitlist is true, put the guest on the waiting list: setup, party, name, email; a day also date, from, to (HH:MM, from the window times); a class session_id. They are emailed if a place frees up. The answer is the same for everyone.","effect":"submit","inputSchema":{"properties":{"date":{"description":"The wanted day, YYYY-MM-DD, the site's local time; for tables and appointments.","type":"string"},"email":{"description":"The guest's email; the offer is sent there.","type":"string"},"from":{"description":"The earliest start you could make, HH:MM; one of the window times booking_check_availability gives when a day is full.","type":"string"},"name":{"description":"The guest's name.","type":"string"},"party":{"description":"How many guests, or places in a class.","type":"integer"},"phone":{"description":"The guest's phone.","type":"string"},"session_id":{"description":"For a class: the full session's id from booking_check_availability.","type":"string"},"setup":{"description":"The setup's short name (slug).","type":"string"},"to":{"description":"The latest start you could make, HH:MM; not before from.","type":"string"}},"required":["setup","party","name","email"],"type":"object"},"name":"nilda_booking.booking_waitlist_join"},{"description":"Take the guest off the waiting list, or give up the place held for them, from their email link. Give the reference and the token from the link.","effect":"submit","inputSchema":{"properties":{"ref":{"description":"The waiting-list reference from the guest's email, like W-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_waitlist_leave"},{"description":"Read one waiting-list entry from the guest's email link: what, the wanted day and window, the party, its status and, while a place is held for them, until when. Give the reference and the token from the link.","effect":"read","inputSchema":{"properties":{"ref":{"description":"The waiting-list reference from the guest's email, like W-7KQ3XM.","type":"string"},"token":{"description":"The token from the guest's link.","type":"string"}},"required":["ref","token"],"type":"object"},"name":"nilda_booking.booking_waitlist_mine"},{"description":"Read the full text of one published page on this website, given its path. Use it after search_site has found the page, or when the visitor is asking about the page they are currently on.","effect":"read","inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"the path of a page on this site, e.g. /about or /blog/hello"}},"required":["path"],"additionalProperties":false},"name":"read_page"},{"description":"Search this website's published content and get back matching pages with their titles, URLs and short excerpts. Use it to find out whether this site covers a topic, or to locate the page that answers a question before reading it.","effect":"read","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"what to search this site for"},"page":{"type":"integer","description":"1-based results page; omit for the first"}},"required":["query"],"additionalProperties":false},"name":"search_site"},{"description":"Send this website's owner a message through one of its forms — a contact form, a signup, an enquiry. The values must use the field keys describe_form reported. The site's own spam and rate-limit protections apply exactly as they do to a person filling the form in.","effect":"submit","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"the slug of the form to submit, from describe_form"},"values":{"type":"object","description":"the field values, keyed by the field keys from describe_form","additionalProperties":true}},"required":["slug","values"],"additionalProperties":false},"name":"submit_form"}],"transport":"http"}