← WebMCP Directory

Tool tree

lpcode808.github.io

Health & EducationTools verified
Website
A classroom seating chart that exposes its own verbs to an AI agent through WebMCP. Say the constraints out loud; drag to fix what the agent got wrong.
Explore capabilities
    get_chart_stateAnswer

    Read the whole seating chart at once: every table with its students, who is unseated, the active rules, and any rule conflicts. Call this first, and again after the teacher moves someone by hand, so you are not working from a stale picture.

    View tool JSON
    {
      "name": "get_chart_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the whole seating chart at once: every table with its students, who is unseated, the active rules, and any rule conflicts. Call this first, and again after the teacher moves someone by hand, so you are not working from a stale picture.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/challenge-webmcp/"
    }
    list_studentsAnswer

    List students with their reading band, support flag, and current table. Optionally filter to one trait value, for example every student whose support flag is "front".

    View tool JSON
    {
      "name": "list_students",
      "kind": "answer",
      "impl": "imperative",
      "description": "List students with their reading band, support flag, and current table. Optionally filter to one trait value, for example every student whose support flag is \"front\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "trait": {
            "type": "string",
            "enum": [
              "reading",
              "support"
            ],
            "description": "Which trait to filter on. Omit to list everyone."
          },
          "value": {
            "type": "string",
            "description": "The trait value to match, e.g. \"emerging\", \"extending\", \"multilingual\", \"front\"."
          }
        }
      },
      "page": "/challenge-webmcp/"
    }
    list_rulesAnswer

    List the seating rules currently in force, with the id needed to remove one.

    View tool JSON
    {
      "name": "list_rules",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the seating rules currently in force, with the id needed to remove one.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/challenge-webmcp/"
    }
    explain_seatAction

    Explain why one student is where they are: which table, which row, which rules mention them, and whether those rules are currently satisfied. Use this when the teacher asks "why is X there?".

    View tool JSON
    {
      "name": "explain_seat",
      "kind": "act",
      "impl": "imperative",
      "description": "Explain why one student is where they are: which table, which row, which rules mention them, and whether those rules are currently satisfied. Use this when the teacher asks \"why is X there?\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "student": {
            "type": "string",
            "description": "Student name or partial name."
          }
        },
        "required": [
          "student"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    set_roomAction

    Set how many tables the room has and how many seats are at each. Tables fill left to right, three per row; row one is the front of the room nearest the board.

    View tool JSON
    {
      "name": "set_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Set how many tables the room has and how many seats are at each. Tables fill left to right, three per row; row one is the front of the room nearest the board.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Number of tables, 1 to 12."
          },
          "capacity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 8,
            "description": "Seats at each table, 1 to 8."
          }
        },
        "required": [
          "count",
          "capacity"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    seat_studentAction

    Move one student to a table. Names match loosely, so a first name is usually enough. Omit the seat number to take the first open seat; if the seat is taken, the occupant moves rather than being dropped.

    View tool JSON
    {
      "name": "seat_student",
      "kind": "act",
      "impl": "imperative",
      "description": "Move one student to a table. Names match loosely, so a first name is usually enough. Omit the seat number to take the first open seat; if the seat is taken, the occupant moves rather than being dropped.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "student": {
            "type": "string",
            "description": "Student name or partial name."
          },
          "table": {
            "type": "string",
            "description": "Table label such as \"Table 3\", or just the number 3."
          },
          "seat": {
            "type": "integer",
            "minimum": 1,
            "maximum": 8,
            "description": "Optional seat number at that table."
          }
        },
        "required": [
          "student",
          "table"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    swap_studentsAction

    Exchange the seats of two students who are both already seated. Use this rather than two seat_student calls when the teacher says "switch these two".

    View tool JSON
    {
      "name": "swap_students",
      "kind": "act",
      "impl": "imperative",
      "description": "Exchange the seats of two students who are both already seated. Use this rather than two seat_student calls when the teacher says \"switch these two\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "a": {
            "type": "string",
            "description": "First student name."
          },
          "b": {
            "type": "string",
            "description": "Second student name."
          }
        },
        "required": [
          "a",
          "b"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    unseat_studentAction

    Take a student out of their seat and put them back on the bench. Use for an absence, or to free a seat before a rearrangement.

    View tool JSON
    {
      "name": "unseat_student",
      "kind": "act",
      "impl": "imperative",
      "description": "Take a student out of their seat and put them back on the bench. Use for an absence, or to free a seat before a rearrangement.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "student": {
            "type": "string",
            "description": "Student name or partial name."
          }
        },
        "required": [
          "student"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    add_ruleAction

    Add a seating constraint. "apart" keeps two students at different tables, "together" puts them at the same one, "front" puts a student in the front row, and "spread" distributes a trait evenly across tables. Adding a rule does not move anyone — call auto_arrange to apply it.

    View tool JSON
    {
      "name": "add_rule",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a seating constraint. \"apart\" keeps two students at different tables, \"together\" puts them at the same one, \"front\" puts a student in the front row, and \"spread\" distributes a trait evenly across tables. Adding a rule does not move anyone — call auto_arrange to apply it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "apart",
              "together",
              "front",
              "spread"
            ],
            "description": "Which kind of rule to add."
          },
          "a": {
            "type": "string",
            "description": "First student. Required for apart, together, and front."
          },
          "b": {
            "type": "string",
            "description": "Second student. Required for apart and together."
          },
          "trait": {
            "type": "string",
            "enum": [
              "reading",
              "support"
            ],
            "description": "Trait to balance. Required for spread."
          }
        },
        "required": [
          "type"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    remove_ruleAction

    Drop a rule from the list, by its id from list_rules or by a phrase from the rule text.

    View tool JSON
    {
      "name": "remove_rule",
      "kind": "act",
      "impl": "imperative",
      "description": "Drop a rule from the list, by its id from list_rules or by a phrase from the rule text.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Rule id, or part of the rule wording."
          }
        },
        "required": [
          "id"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    auto_arrangeAction

    Seat the whole class to satisfy as many rules as possible, then report which conflicts are left. This is the heavy one: it reshuffles everybody, so say what changed afterward and remind the teacher that Undo reverses it in one step.

    View tool JSON
    {
      "name": "auto_arrange",
      "kind": "act",
      "impl": "imperative",
      "description": "Seat the whole class to satisfy as many rules as possible, then report which conflicts are left. This is the heavy one: it reshuffles everybody, so say what changed afterward and remind the teacher that Undo reverses it in one step.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "seed": {
            "type": "integer",
            "description": "Optional seed. The same seed gives the same arrangement; change it to see a different valid one."
          }
        }
      },
      "page": "/challenge-webmcp/"
    }
    export_chartAction

    Return the finished chart as plain text, table by table, ready to paste into a sub plan or an email.

    View tool JSON
    {
      "name": "export_chart",
      "kind": "act",
      "impl": "imperative",
      "description": "Return the finished chart as plain text, table by table, ready to paste into a sub plan or an email.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/challenge-webmcp/"
    }
    import_rosterAction

    Add a whole class at once from pasted text, one student per line as "Name" or "Name | reading | support". Duplicates are skipped, not overwritten. This is the fast path when a teacher has a class list in an email or a spreadsheet column — use it instead of calling add_student thirty times.

    View tool JSON
    {
      "name": "import_roster",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a whole class at once from pasted text, one student per line as \"Name\" or \"Name | reading | support\". Duplicates are skipped, not overwritten. This is the fast path when a teacher has a class list in an email or a spreadsheet column — use it instead of calling add_student thirty times.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "The class list. One student per line; pipes separate optional reading band and support flag."
          },
          "replace": {
            "type": "boolean",
            "description": "True to clear the existing roster and rules first. Defaults to false, which appends."
          }
        },
        "required": [
          "text"
        ]
      },
      "page": "/challenge-webmcp/"
    }
    reset_chartAction

    Discard the current chart and restore the bundled demo class of 24 fictional students. Destructive — confirm with the teacher before calling it, and say that Undo will not bring a hand-built roster back once the page is reloaded.

    View tool JSON
    {
      "name": "reset_chart",
      "kind": "act",
      "impl": "imperative",
      "description": "Discard the current chart and restore the bundled demo class of 24 fictional students. Destructive — confirm with the teacher before calling it, and say that Undo will not bring a hand-built roster back once the page is reloaded.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/challenge-webmcp/"
    }
    add_studentAction

    Add one student to the class roster with optional traits. Use this before seating anyone new.

    View tool JSON
    {
      "name": "add_student",
      "kind": "act",
      "impl": "declarative",
      "description": "Add one student to the class roster with optional traits. Use this before seating anyone new.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Ada Okonkwo"
          },
          "reading": {
            "type": "string",
            "enum": [
              "secure",
              "emerging",
              "extending"
            ]
          },
          "support": {
            "type": "string",
            "enum": [
              "none",
              "multilingual",
              "front",
              "lowdistraction"
            ]
          }
        },
        "required": [
          "name"
        ]
      },
      "page": "/challenge-webmcp/"
    }