← WebMCP Directory

Tool tree

chessup-gamma.vercel.app

Health & EducationTools verified
Website
Play chess, review a mistake with your browser agent, and practise it on the same board.
Explore capabilities
    read_coach_instructionsAnswer

    Read this first. Explains how to coach on this board: the human plays the built-in bot, you review from `events`, run puzzle drills with set_puzzle_queue, keep a lesson plan and reward progress. Sparring (playing against the human) is optional. Cheap and read-only.

    View tool JSON
    {
      "name": "read_coach_instructions",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read this first. Explains how to coach on this board: the human plays the built-in bot, you review from `events`, run puzzle drills with set_puzzle_queue, keep a lesson plan and reward progress. Sparring (playing against the human) is optional. Cheap and read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_game_stateAnswer

    Read the board: FEN, turn, status, material, engine evaluation, recent moves, active puzzle and drill progress, the human's recent mistakes (heuristics and Stockfish centipawn loss), `events` since your last call and `next`. Call it every time the human talks to you.

    View tool JSON
    {
      "name": "get_game_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the board: FEN, turn, status, material, engine evaluation, recent moves, active puzzle and drill progress, the human's recent mistakes (heuristics and Stockfish centipawn loss), `events` since your last call and `next`. Call it every time the human talks to you.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_legal_movesAnswer

    List legal moves in SAN (optionally only for one square, then with from/to details), plus the best capture and any mate in one. Use it to check a move before make_move or to build hints.

    View tool JSON
    {
      "name": "get_legal_moves",
      "kind": "answer",
      "impl": "imperative",
      "description": "List legal moves in SAN (optionally only for one square, then with from/to details), plus the best capture and any mate in one. Use it to check a move before make_move or to build hints.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "square": {
            "type": "string",
            "description": "Optional square like 'e2' to list only moves of the piece on that square."
          }
        },
        "additionalProperties": false
      }
    }
    undo_moveAction

    Take back the last N half-moves (default 1) so the human can retry; also reactivates a failed puzzle.

    View tool JSON
    {
      "name": "undo_move",
      "kind": "act",
      "impl": "imperative",
      "description": "Take back the last N half-moves (default 1) so the human can retry; also reactivates a failed puzzle.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "Number of half-moves to undo. Default 1."
          }
        },
        "additionalProperties": false
      }
    }
    analyze_positionAction

    Run the built-in Stockfish engine on the current position (or a given FEN): evaluation from White's perspective, best move and line, and up to 3 alternatives with their evaluations. Use it to verify a claim before teaching it, to find the best move for a review, or to check a puzzle idea. Depth 8-20 (default 14).

    View tool JSON
    {
      "name": "analyze_position",
      "kind": "act",
      "impl": "imperative",
      "description": "Run the built-in Stockfish engine on the current position (or a given FEN): evaluation from White's perspective, best move and line, and up to 3 alternatives with their evaluations. Use it to verify a claim before teaching it, to find the best move for a review, or to check a puzzle idea. Depth 8-20 (default 14).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fen": {
            "type": "string",
            "description": "Position to analyse. Defaults to the board."
          },
          "depth": {
            "type": "integer",
            "minimum": 8,
            "maximum": 20,
            "description": "Search depth. Default 14."
          },
          "multipv": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "description": "How many best lines to return. Default 1."
          }
        },
        "additionalProperties": false
      }
    }
    highlight_squaresAction

    Colour squares to draw attention: green good/safe, red danger, yellow key square, blue plan, orange warning. Replaces highlights unless append=true. Cleared automatically on the next move.

    View tool JSON
    {
      "name": "highlight_squares",
      "kind": "act",
      "impl": "imperative",
      "description": "Colour squares to draw attention: green good/safe, red danger, yellow key square, blue plan, orange warning. Replaces highlights unless append=true. Cleared automatically on the next move.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "squares": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Squares like ['e4','d5']."
          },
          "color": {
            "type": "string",
            "enum": [
              "green",
              "red",
              "yellow",
              "blue",
              "orange"
            ],
            "description": "Highlight colour. Default green."
          },
          "append": {
            "type": "boolean",
            "description": "Keep existing highlights and add these. Default false."
          }
        },
        "required": [
          "squares"
        ],
        "additionalProperties": false
      }
    }
    draw_arrowsAction

    Draw arrows for plans, threats or candidate moves. Replaces arrows unless append=true. Cleared automatically on the next move.

    View tool JSON
    {
      "name": "draw_arrows",
      "kind": "act",
      "impl": "imperative",
      "description": "Draw arrows for plans, threats or candidate moves. Replaces arrows unless append=true. Cleared automatically on the next move.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "arrows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "from": {
                  "type": "string",
                  "description": "Start square, e.g. 'g1'."
                },
                "to": {
                  "type": "string",
                  "description": "End square, e.g. 'f3'."
                },
                "color": {
                  "type": "string",
                  "enum": [
                    "green",
                    "red",
                    "yellow",
                    "blue",
                    "orange"
                  ],
                  "description": "Arrow colour. Default green."
                }
              },
              "required": [
                "from",
                "to"
              ]
            }
          },
          "append": {
            "type": "boolean",
            "description": "Keep existing arrows and add these. Default false."
          }
        },
        "required": [
          "arrows"
        ],
        "additionalProperties": false
      }
    }
    clear_annotationsAction

    Remove all highlights and arrows from the board.

    View tool JSON
    {
      "name": "clear_annotations",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove all highlights and arrows from the board.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    coach_noteAction

    Show a one-sentence caption under the board (tip, praise, warning, question or info) tied to what is on the board right now. Put explanations in the chat, not here.

    View tool JSON
    {
      "name": "coach_note",
      "kind": "act",
      "impl": "imperative",
      "description": "Show a one-sentence caption under the board (tip, praise, warning, question or info) tied to what is on the board right now. Put explanations in the chat, not here.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "The note text."
          },
          "kind": {
            "type": "string",
            "enum": [
              "tip",
              "praise",
              "warning",
              "question",
              "info"
            ],
            "description": "Visual style of the note. Default 'tip'."
          }
        },
        "required": [
          "text"
        ],
        "additionalProperties": false
      }
    }
    set_lesson_planAction

    Replace the lesson plan in the side panel: a title and 3-6 steps with status todo/active/done/skipped. The page seeds a simple plan (play, review, drill) from the profile; replace it with a better one once you know the student, and keep it current with update_lesson_step.

    View tool JSON
    {
      "name": "set_lesson_plan",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace the lesson plan in the side panel: a title and 3-6 steps with status todo/active/done/skipped. The page seeds a simple plan (play, review, drill) from the profile; replace it with a better one once you know the student, and keep it current with update_lesson_step.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Plan title, e.g. 'Today: stop hanging pieces'."
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "todo",
                    "active",
                    "done",
                    "skipped"
                  ]
                }
              },
              "required": [
                "title"
              ]
            }
          }
        },
        "required": [
          "steps"
        ],
        "additionalProperties": false
      }
    }
    update_lesson_stepAction

    Update one lesson step by zero-based index: status (todo/active/done/skipped), title or description. Mark steps active when started and done when completed.

    View tool JSON
    {
      "name": "update_lesson_step",
      "kind": "act",
      "impl": "imperative",
      "description": "Update one lesson step by zero-based index: status (todo/active/done/skipped), title or description. Mark steps active when started and done when completed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer",
            "minimum": 0,
            "description": "Zero-based index of the step."
          },
          "status": {
            "type": "string",
            "enum": [
              "todo",
              "active",
              "done",
              "skipped"
            ]
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "index"
        ],
        "additionalProperties": false
      }
    }
    award_badgeAction

    Give a uniquely named badge with an emoji for a real milestone (first puzzle solved, a clean game, a new pattern learned). Badges are permanent in the profile.

    View tool JSON
    {
      "name": "award_badge",
      "kind": "act",
      "impl": "imperative",
      "description": "Give a uniquely named badge with an emoji for a real milestone (first puzzle solved, a clean game, a new pattern learned). Badges are permanent in the profile.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Badge name, e.g. 'Fork Master'."
          },
          "description": {
            "type": "string",
            "description": "Why it was earned."
          },
          "emoji": {
            "type": "string",
            "description": "A single emoji, e.g. '🍴'."
          }
        },
        "required": [
          "name",
          "description"
        ],
        "additionalProperties": false
      }
    }
    add_xpAction

    Add XP with a reason (negative allowed). Scale: 5-10 for a good move or answer, 20-40 for a puzzle, 50+ for a won game or a finished lesson step. Returns total, level and leveledUp.

    View tool JSON
    {
      "name": "add_xp",
      "kind": "act",
      "impl": "imperative",
      "description": "Add XP with a reason (negative allowed). Scale: 5-10 for a good move or answer, 20-40 for a puzzle, 50+ for a won game or a finished lesson step. Returns total, level and leveledUp.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "integer",
            "description": "XP to add (can be negative)."
          },
          "reason": {
            "type": "string",
            "description": "Short reason shown to the student."
          }
        },
        "required": [
          "amount",
          "reason"
        ],
        "additionalProperties": false
      }
    }
    record_mistakeAction

    Log a mistake the app cannot detect itself (opening, king safety, positional, endgame) into the human's long-term profile with severity, FEN before the move, movePlayed and betterMove. Simple tactical errors are auto-recorded.

    View tool JSON
    {
      "name": "record_mistake",
      "kind": "act",
      "impl": "imperative",
      "description": "Log a mistake the app cannot detect itself (opening, king safety, positional, endgame) into the human's long-term profile with severity, FEN before the move, movePlayed and betterMove. Simple tactical errors are auto-recorded.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "hanging_piece",
              "missed_mate",
              "allowed_mate",
              "missed_capture",
              "opening",
              "endgame",
              "tactics",
              "positional",
              "king_safety",
              "other"
            ]
          },
          "severity": {
            "type": "string",
            "enum": [
              "inaccuracy",
              "mistake",
              "blunder"
            ],
            "description": "Default 'mistake'."
          },
          "description": {
            "type": "string",
            "description": "One sentence the student will read later."
          },
          "fen": {
            "type": "string",
            "description": "Position before the mistake. Defaults to the position before the last move."
          },
          "movePlayed": {
            "type": "string",
            "description": "The move the student played (SAN)."
          },
          "betterMove": {
            "type": "string",
            "description": "What should have been played (SAN)."
          }
        },
        "required": [
          "category",
          "description"
        ],
        "additionalProperties": false
      }
    }
    get_player_profileAnswer

    Read the persistent profile: XP, level, badges, game and puzzle stats by theme, mistakes by category, weakestAreas, recent drills, the lesson plan, and candidatePuzzles: validated puzzles built from the human's own mistakes, ready to pass to set_puzzle_queue. Call it at session start and before every drill.

    View tool JSON
    {
      "name": "get_player_profile",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the persistent profile: XP, level, badges, game and puzzle stats by theme, mistakes by category, weakestAreas, recent drills, the lesson plan, and candidatePuzzles: validated puzzles built from the human's own mistakes, ready to pass to set_puzzle_queue. Call it at session start and before every drill.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    make_moveAction

    Play a move for the side to move. Use it in sparring mode (opponent 'agent') or to demonstrate a line. SAN ('Nf3', 'O-O', 'e8=Q') or from/to. Illegal moves are rejected with the legal list. Refused during the human's turn in an active puzzle. In sparring, follow with wait_for_player_move.

    View tool JSON
    {
      "name": "make_move",
      "kind": "act",
      "impl": "imperative",
      "description": "Play a move for the side to move. Use it in sparring mode (opponent 'agent') or to demonstrate a line. SAN ('Nf3', 'O-O', 'e8=Q') or from/to. Illegal moves are rejected with the legal list. Refused during the human's turn in an active puzzle. In sparring, follow with wait_for_player_move.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "san": {
            "type": "string",
            "description": "Move in Standard Algebraic Notation, e.g. 'Nf3'."
          },
          "from": {
            "type": "string",
            "description": "Origin square, e.g. 'e2' (use together with `to`)."
          },
          "to": {
            "type": "string",
            "description": "Target square, e.g. 'e4'."
          },
          "promotion": {
            "type": "string",
            "enum": [
              "q",
              "r",
              "b",
              "n"
            ],
            "description": "Promotion piece when a pawn reaches the last rank. Defaults to queen."
          },
          "comment": {
            "type": "string",
            "description": "Optional short explanation shown to the human next to the move."
          }
        },
        "additionalProperties": false
      }
    }
    new_gameAction

    Reset to the starting position. Choose the human's colour and the opponent: 'bot' (default, built-in engine level 1-3, instant), 'agent' (sparring: you play via make_move + wait_for_player_move) or 'human' (they play both sides). Clears any puzzle or drill.

    View tool JSON
    {
      "name": "new_game",
      "kind": "act",
      "impl": "imperative",
      "description": "Reset to the starting position. Choose the human's colour and the opponent: 'bot' (default, built-in engine level 1-3, instant), 'agent' (sparring: you play via make_move + wait_for_player_move) or 'human' (they play both sides). Clears any puzzle or drill.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "playerColor": {
            "type": "string",
            "enum": [
              "white",
              "black"
            ],
            "description": "Colour the human plays. Default white."
          },
          "opponent": {
            "type": "string",
            "enum": [
              "bot",
              "agent",
              "human"
            ],
            "description": "Who plays the other side. Default 'bot'; 'agent' = sparring with you."
          },
          "botLevel": {
            "type": "integer",
            "enum": [
              1,
              2,
              3
            ],
            "description": "Strength of the built-in bot when opponent is 'bot'."
          },
          "cancelDrill": {
            "type": "boolean",
            "description": "Set true to abandon an active drill on purpose."
          }
        },
        "additionalProperties": false
      }
    }
    set_positionAction

    Put a FEN on the board, or a single puzzle when you add title, goal, hint, theme and a SAN `solution` (human's move first, alternating sides). The app validates the line, auto-plays replies and grades the human. For several puzzles use set_puzzle_queue. Without title/goal/solution it only sets the position.

    View tool JSON
    {
      "name": "set_position",
      "kind": "act",
      "impl": "imperative",
      "description": "Put a FEN on the board, or a single puzzle when you add title, goal, hint, theme and a SAN `solution` (human's move first, alternating sides). The app validates the line, auto-plays replies and grades the human. For several puzzles use set_puzzle_queue. Without title/goal/solution it only sets the position.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fen": {
            "type": "string",
            "description": "Full FEN string, e.g. 'r1bqkb1r/pppp1ppp/2n2n2/4p2Q/2B1P3/8/PPPP1PPP/RNB1K1NR w KQkq - 4 4'."
          },
          "title": {
            "type": "string",
            "description": "Short puzzle title, e.g. 'Back-rank mate'."
          },
          "goal": {
            "type": "string",
            "description": "What the student must achieve, e.g. 'White to play and win a piece'."
          },
          "hint": {
            "type": "string",
            "description": "Optional hint the student can reveal."
          },
          "theme": {
            "type": "string",
            "description": "Tactical/strategic theme tag for tracking, e.g. 'fork', 'pin', 'mate_in_1'."
          },
          "solution": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Solution line in SAN, student's move first, alternating sides. e.g. ['Qxf7#'] or ['Nxe5','Nxe5','Qh5+','g6','Qxe5']."
          },
          "playerColor": {
            "type": "string",
            "enum": [
              "white",
              "black"
            ],
            "description": "Which colour the student plays. Defaults to the side to move in the FEN."
          },
          "cancelDrill": {
            "type": "boolean",
            "description": "Set true to abandon an active drill on purpose."
          }
        },
        "required": [
          "fen"
        ],
        "additionalProperties": false
      }
    }
    set_puzzle_queueAction

    Start a drill: 3-5 puzzles the app serves one by one, grades against the solution, auto-plays replies, awards XP and records results per theme. Each puzzle: fen, title, goal, optional hint, theme, and a SAN `solution` (human's move first, alternating). Every line is checked for legality and by Stockfish (the human's moves must be best); rejected puzzles come back with the reason. After calling it, END YOUR TURN; the human tells you when done.

    View tool JSON
    {
      "name": "set_puzzle_queue",
      "kind": "act",
      "impl": "imperative",
      "description": "Start a drill: 3-5 puzzles the app serves one by one, grades against the solution, auto-plays replies, awards XP and records results per theme. Each puzzle: fen, title, goal, optional hint, theme, and a SAN `solution` (human's move first, alternating). Every line is checked for legality and by Stockfish (the human's moves must be best); rejected puzzles come back with the reason. After calling it, END YOUR TURN; the human tells you when done.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Drill title, e.g. 'Hanging pieces, round 1'."
          },
          "puzzles": {
            "type": "array",
            "minItems": 1,
            "maxItems": 8,
            "items": {
              "type": "object",
              "properties": {
                "fen": {
                  "type": "string",
                  "description": "Full FEN of the puzzle position."
                },
                "title": {
                  "type": "string",
                  "description": "Short title."
                },
                "goal": {
                  "type": "string",
                  "description": "What to achieve, e.g. 'White to play and win a piece'."
                },
                "hint": {
                  "type": "string",
                  "description": "Optional hint the human can reveal."
                },
                "theme": {
                  "type": "string",
                  "description": "Theme tag, e.g. 'fork', 'back_rank', 'hanging_piece'."
                },
                "solution": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "SAN line, human's move first."
                }
              },
              "required": [
                "fen",
                "title",
                "goal",
                "solution"
              ]
            }
          },
          "cancelDrill": {
            "type": "boolean",
            "description": "Set true to replace an active drill on purpose."
          }
        },
        "required": [
          "puzzles"
        ],
        "additionalProperties": false
      }
    }