{"ok":true,"site":{"host":"jimmycappucci.github.io","url":"https://jimmycappucci.github.io/seatcraft/","type":"live","desc":"An event seating planner where the host drags and locks seats while an AI agent solves the constraint puzzle through WebMCP tools — on the same live board.","tools":[{"name":"get_event_overview","kind":"answer","impl":"imperative","description":"Snapshot of the whole event: name, tables with occupancy, unseated guests, active constraints, and current violations. Call this first to orient yourself.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"list_guests","kind":"answer","impl":"imperative","description":"List all guests with their group, tags, table assignment and host-lock status. Optionally filter by text.","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Optional substring to match against name/group/tags"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"add_guests","kind":"act","impl":"imperative","description":"Add one or more guests to the event. Each needs a name; group/tags/notes are optional.","inputSchema":{"type":"object","required":["guests"],"properties":{"guests":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"group":{"type":"string","description":"e.g. 'bride family', 'work friends'"},"tags":{"type":"array","items":{"type":"string"},"description":"e.g. ['vegetarian','kid']"},"notes":{"type":"string"}}}}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"update_guest","kind":"act","impl":"imperative","description":"Update a guest's name, group, tags, or notes.","inputSchema":{"type":"object","required":["guest"],"properties":{"guest":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"},"name":{"type":"string"},"group":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"remove_guest","kind":"act","impl":"imperative","description":"Remove a guest from the event entirely (unseats them and drops their constraints).","inputSchema":{"type":"object","required":["guest"],"properties":{"guest":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"add_table","kind":"act","impl":"imperative","description":"Add a table with a name and seat capacity.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"capacity":{"type":"number","description":"Default 8"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"update_table","kind":"act","impl":"imperative","description":"Rename a table or change its capacity.","inputSchema":{"type":"object","required":["table"],"properties":{"table":{"type":"string","description":"Table id (t_xxx) or table name"},"name":{"type":"string"},"capacity":{"type":"number"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"remove_table","kind":"act","impl":"imperative","description":"Remove a table; its guests become unseated.","inputSchema":{"type":"object","required":["table"],"properties":{"table":{"type":"string","description":"Table id (t_xxx) or table name"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"seat_guest","kind":"act","impl":"imperative","description":"Seat a guest at a table (or unseat them by passing no table). Refuses to move guests the host has locked — ask the host instead.","inputSchema":{"type":"object","required":["guest"],"properties":{"guest":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"},"table":{"type":"string","description":"Table id (t_xxx) or table name. Omit to unseat."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"swap_guests","kind":"act","impl":"imperative","description":"Swap the table assignments of two guests. Refuses if either guest is host-locked.","inputSchema":{"type":"object","required":["guestA","guestB"],"properties":{"guestA":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"},"guestB":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"add_constraint","kind":"act","impl":"imperative","description":"Record a seating rule: 'together' (a and b must share a table), 'apart' (a and b must not), or 'at_table' (a belongs at a specific table).","inputSchema":{"type":"object","required":["type","a"],"properties":{"type":{"type":"string","enum":["together","apart","at_table"]},"a":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name"},"b":{"type":"string","description":"Guest id (g_xxx) or exact/partial unique name (for together/apart)"},"table":{"type":"string","description":"Table id (t_xxx) or table name (for at_table)"},"note":{"type":"string","description":"Why this rule exists, e.g. 'divorced 2019'"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"remove_constraint","kind":"act","impl":"imperative","description":"Remove a seating rule by its id (see get_event_overview).","inputSchema":{"type":"object","required":["constraintId"],"properties":{"constraintId":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"get_violations","kind":"answer","impl":"imperative","description":"List every current constraint violation and over-capacity table in plain language.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"auto_seat","kind":"act","impl":"imperative","description":"Run the constraint solver: seats everyone it can while honoring together/apart/at_table rules and never moving host-locked guests. Returns what moved and what still violates.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"},{"name":"set_event_name","kind":"act","impl":"imperative","description":"Set the event's display name.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/seatcraft/"}],"category":"Productivity & Business","apiSurface":"spec","toolCount":15}}