← WebMCP Directory

Tool tree

duet-ten.vercel.app

Travel & EventsTools verified
Website
Weddings, galas, offices, classrooms — an arrangement planner where you and your AI agent work the same floor plan. You pin the judgment calls; your agent proposes, solves, and briefs. Live, via…
Explore capabilities
    get_seating_planAnswer

    Get the full current state of the seating plan: event info, tables with who is seated, unassigned guests, all guests with dietary/accessibility needs, constraints, and current conflicts. Call this first to understand the plan.

    View tool JSON
    {
      "name": "get_seating_plan",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get the full current state of the seating plan: event info, tables with who is seated, unassigned guests, all guests with dietary/accessibility needs, constraints, and current conflicts. Call this first to understand the plan.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    add_guestsAction

    Add one or more guests to the guest list (they start unassigned). Accepts name, optional group (e.g. "bride family", "college friends"), diet, and accessibility flag for guests needing wheelchair-accessible seating.

    View tool JSON
    {
      "name": "add_guests",
      "kind": "act",
      "impl": "imperative",
      "description": "Add one or more guests to the guest list (they start unassigned). Accepts name, optional group (e.g. \"bride family\", \"college friends\"), diet, and accessibility flag for guests needing wheelchair-accessible seating.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guests": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "group": {
                  "type": "string"
                },
                "diet": {
                  "type": "string",
                  "enum": [
                    "none",
                    "vegetarian",
                    "vegan",
                    "gluten-free",
                    "halal",
                    "kosher"
                  ]
                },
                "accessibility": {
                  "type": "boolean"
                }
              },
              "required": [
                "name"
              ]
            }
          }
        },
        "required": [
          "guests"
        ]
      }
    }
    add_tableAction

    Add a table to the floor plan. Shape is "round" or "rect". Mark accessible:true if it can host wheelchair users.

    View tool JSON
    {
      "name": "add_table",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a table to the floor plan. Shape is \"round\" or \"rect\". Mark accessible:true if it can host wheelchair users.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "capacity": {
            "type": "number"
          },
          "shape": {
            "type": "string",
            "enum": [
              "round",
              "rect"
            ]
          },
          "accessible": {
            "type": "boolean"
          }
        },
        "required": [
          "label",
          "capacity"
        ]
      }
    }
    remove_guestAction

    Remove a guest from the event entirely (their constraints are cleaned up too). Refused for guests the human pinned — ask them or unpin first.

    View tool JSON
    {
      "name": "remove_guest",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a guest from the event entirely (their constraints are cleaned up too). Refused for guests the human pinned — ask them or unpin first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string"
          }
        },
        "required": [
          "guest"
        ]
      }
    }
    update_guestAction

    Edit a guest's details: name, group, diet, or accessibility need. Does not move them.

    View tool JSON
    {
      "name": "update_guest",
      "kind": "act",
      "impl": "imperative",
      "description": "Edit a guest's details: name, group, diet, or accessibility need. Does not move them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string",
            "description": "Current name to match."
          },
          "name": {
            "type": "string"
          },
          "group": {
            "type": "string"
          },
          "diet": {
            "type": "string",
            "enum": [
              "none",
              "vegetarian",
              "vegan",
              "gluten-free",
              "halal",
              "kosher"
            ]
          },
          "accessibility": {
            "type": "boolean"
          }
        },
        "required": [
          "guest"
        ]
      }
    }
    remove_tableAction

    Remove a table from the floor plan. Anyone seated there returns to the unassigned pool (their pins are released, since the human's chosen table no longer exists — mention this to them).

    View tool JSON
    {
      "name": "remove_table",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a table from the floor plan. Anyone seated there returns to the unassigned pool (their pins are released, since the human's chosen table no longer exists — mention this to them).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "table": {
            "type": "string"
          }
        },
        "required": [
          "table"
        ]
      }
    }
    seat_guestAction

    Seat a guest at a table (or move them there). Reference the guest by name and the table by label. Reports any conflicts this creates.

    View tool JSON
    {
      "name": "seat_guest",
      "kind": "act",
      "impl": "imperative",
      "description": "Seat a guest at a table (or move them there). Reference the guest by name and the table by label. Reports any conflicts this creates.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string"
          },
          "table": {
            "type": "string"
          }
        },
        "required": [
          "guest",
          "table"
        ]
      }
    }
    unseat_guestAction

    Remove a guest from their table back to the unassigned pool.

    View tool JSON
    {
      "name": "unseat_guest",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a guest from their table back to the unassigned pool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string"
          }
        },
        "required": [
          "guest"
        ]
      }
    }
    add_constraintAction

    Record a relationship constraint between two guests: kind "together" (should share a table) or "apart" (must NOT share a table, e.g. divorced, feuding). The solver and conflict checker honor these.

    View tool JSON
    {
      "name": "add_constraint",
      "kind": "act",
      "impl": "imperative",
      "description": "Record a relationship constraint between two guests: kind \"together\" (should share a table) or \"apart\" (must NOT share a table, e.g. divorced, feuding). The solver and conflict checker honor these.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "together",
              "apart"
            ]
          },
          "guest_a": {
            "type": "string"
          },
          "guest_b": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "guest_a",
          "guest_b"
        ]
      }
    }
    set_group_ruleAction

    Set a placement policy for a whole group: mode "spread" mixes the group across tables (at most max_per_table together — networking dinners, hosts, chatty kids), mode "cluster" keeps them together (the default tendency), mode "none" removes the rule. The solver and conflict checker enforce this.

    View tool JSON
    {
      "name": "set_group_rule",
      "kind": "act",
      "impl": "imperative",
      "description": "Set a placement policy for a whole group: mode \"spread\" mixes the group across tables (at most max_per_table together — networking dinners, hosts, chatty kids), mode \"cluster\" keeps them together (the default tendency), mode \"none\" removes the rule. The solver and conflict checker enforce this.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "group": {
            "type": "string"
          },
          "mode": {
            "type": "string",
            "enum": [
              "spread",
              "cluster",
              "none"
            ]
          },
          "max_per_table": {
            "type": "number",
            "description": "Only for spread; default 2."
          }
        },
        "required": [
          "group",
          "mode"
        ]
      }
    }
    propose_arrangementAction

    PREFERRED way to rearrange the room: run the constraint solver and present the result to the human as a reviewable proposal (they see the move list with Accept / Dismiss buttons; nothing changes until accepted). Never moves guests the human pinned (📌). Set respect_current:true to only place currently unassigned guests. Provide a short note explaining your reasoning.

    View tool JSON
    {
      "name": "propose_arrangement",
      "kind": "act",
      "impl": "imperative",
      "description": "PREFERRED way to rearrange the room: run the constraint solver and present the result to the human as a reviewable proposal (they see the move list with Accept / Dismiss buttons; nothing changes until accepted). Never moves guests the human pinned (📌). Set respect_current:true to only place currently unassigned guests. Provide a short note explaining your reasoning.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "respect_current": {
            "type": "boolean",
            "description": "If true, currently seated guests stay put and only unassigned guests are placed."
          },
          "note": {
            "type": "string",
            "description": "One sentence shown to the human: why this arrangement."
          }
        }
      }
    }
    auto_arrangeAction

    Run the constraint solver and apply the result IMMEDIATELY, without human review. Never moves guests the human pinned (📌). Prefer propose_arrangement unless the human explicitly asked you to just do it. Set respect_current:true to only place unassigned guests.

    View tool JSON
    {
      "name": "auto_arrange",
      "kind": "act",
      "impl": "imperative",
      "description": "Run the constraint solver and apply the result IMMEDIATELY, without human review. Never moves guests the human pinned (📌). Prefer propose_arrangement unless the human explicitly asked you to just do it. Set respect_current:true to only place unassigned guests.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "respect_current": {
            "type": "boolean",
            "description": "If true, currently seated guests stay put and only unassigned guests are placed."
          }
        }
      }
    }
    resolve_proposalAction

    Apply or withdraw the pending arrangement proposal. Use action "apply" only when the human said yes in conversation; use "withdraw" to retract your own proposal.

    View tool JSON
    {
      "name": "resolve_proposal",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply or withdraw the pending arrangement proposal. Use action \"apply\" only when the human said yes in conversation; use \"withdraw\" to retract your own proposal.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "apply",
              "withdraw"
            ]
          }
        },
        "required": [
          "action"
        ]
      }
    }
    set_pinAction

    Pin or unpin a guest. Pinned guests (📌) are human-locked decisions: the solver and rearrangement never move them. Guests the human seats by drag are pinned automatically; only unpin when the human asks.

    View tool JSON
    {
      "name": "set_pin",
      "kind": "act",
      "impl": "imperative",
      "description": "Pin or unpin a guest. Pinned guests (📌) are human-locked decisions: the solver and rearrangement never move them. Guests the human seats by drag are pinned automatically; only unpin when the human asks.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string"
          },
          "pinned": {
            "type": "boolean"
          }
        },
        "required": [
          "guest",
          "pinned"
        ]
      }
    }
    load_templateAction

    Start a scenario from a template. Replaces the current plan. Available: "wedding" (24 guests, feuding relatives, dietary needs, a head table.) · "gala" (120 guests, 15 tables, donors to host, press to manage.) · "corporate" (6 companies, mixed for networking, a host at every table.) · "office" (23 employees, quiet zones vs sales calls, team adjacency.) · "classroom" (28 students, reading groups, chatty pairs to separate.)

    View tool JSON
    {
      "name": "load_template",
      "kind": "act",
      "impl": "imperative",
      "description": "Start a scenario from a template. Replaces the current plan. Available: \"wedding\" (24 guests, feuding relatives, dietary needs, a head table.) · \"gala\" (120 guests, 15 tables, donors to host, press to manage.) · \"corporate\" (6 companies, mixed for networking, a host at every table.) · \"office\" (23 employees, quiet zones vs sales calls, team adjacency.) · \"classroom\" (28 students, reading groups, chatty pairs to separate.)",
      "inputSchema": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string",
            "enum": [
              "wedding",
              "gala",
              "corporate",
              "office",
              "classroom"
            ]
          }
        },
        "required": [
          "template"
        ]
      }
    }
    explain_seatingAction

    Explain WHY someone sits where they sit: which together/apart requests, group rules, accessibility needs, and pins shaped their placement. Pass a guest name, or a table label to explain everyone at that table. Use this when the human asks "why is X there?" or before proposing changes.

    View tool JSON
    {
      "name": "explain_seating",
      "kind": "act",
      "impl": "imperative",
      "description": "Explain WHY someone sits where they sit: which together/apart requests, group rules, accessibility needs, and pins shaped their placement. Pass a guest name, or a table label to explain everyone at that table. Use this when the human asks \"why is X there?\" or before proposing changes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "guest": {
            "type": "string",
            "description": "Guest name (optional if table is given)."
          },
          "table": {
            "type": "string",
            "description": "Table label — explains every guest seated there."
          }
        }
      }
    }
    get_activity_logAnswer

    Read the recent activity feed — every change made by the human (drags, pins, rules, accepts) and by you. Call this when returning to the conversation to catch up on what the human did in the meantime.

    View tool JSON
    {
      "name": "get_activity_log",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the recent activity feed — every change made by the human (drags, pins, rules, accepts) and by you. Call this when returning to the conversation to catch up on what the human did in the meantime.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "description": "Max entries, default 25."
          }
        }
      }
    }
    export_planAction

    Export the finished plan as clean markdown: per-table seating list plus a dietary/accessibility brief. Use when the human wants to share the plan, email the caterer, or print place cards.

    View tool JSON
    {
      "name": "export_plan",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the finished plan as clean markdown: per-table seating list plus a dietary/accessibility brief. Use when the human wants to share the plan, email the caterer, or print place cards.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    get_conflictsAnswer

    List all current conflicts: violated apart/together constraints, over-capacity tables, and accessibility mismatches.

    View tool JSON
    {
      "name": "get_conflicts",
      "kind": "answer",
      "impl": "imperative",
      "description": "List all current conflicts: violated apart/together constraints, over-capacity tables, and accessibility mismatches.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    dietary_reportAction

    Summarize dietary needs across all guests, and per table — useful for the caterer.

    View tool JSON
    {
      "name": "dietary_report",
      "kind": "act",
      "impl": "imperative",
      "description": "Summarize dietary needs across all guests, and per table — useful for the caterer.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    undo_last_changeAction

    Undo the most recent change to the plan (works for both human and agent actions).

    View tool JSON
    {
      "name": "undo_last_change",
      "kind": "act",
      "impl": "imperative",
      "description": "Undo the most recent change to the plan (works for both human and agent actions).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }