{"ok":true,"site":{"host":"next-play-lake.vercel.app","url":"https://next-play-lake.vercel.app/","type":"live","desc":"NextPlay is a browser-native basketball tactics board for coaches and agents.","tools":[{"name":"get_play_state","kind":"answer","impl":"imperative","description":"Read the current NextPlay basketball play, including its revision, clock, starting positions, actions, coach locks, and validation summary. Call this before adding or adapting actions.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"includeActionDetails":{"type":"boolean","description":"Include full timing, destination, target, and lock fields."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_play_actions","kind":"act","impl":"imperative","description":"Atomically add 1–12 timed move, dribble, screen, pass, or shot actions to the live play. Use the revision returned by get_play_state. Successful actions appear on the court and timeline.","inputSchema":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"description":"Revision returned by get_play_state."},"actions":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"object","properties":{"type":{"type":"string","enum":["move","dribble","screen","pass","shot"]},"actorId":{"type":"string","enum":["O1","O2","O3","O4","O5"]},"targetPlayerId":{"type":"string","enum":["O1","O2","O3","O4","O5"]},"destinationZone":{"type":"string","enum":["inbound_left","inbound_right","rim","left_block","right_block","left_short_corner","right_short_corner","left_corner","right_corner","left_elbow","right_elbow","nail","top","left_slot","right_slot","left_wing","right_wing","backcourt_center"]},"destinationPosition":{"type":"object","properties":{"x":{"type":"number","description":"Normalized court x coordinate."},"y":{"type":"number","description":"Normalized court y coordinate."}},"required":["x","y"],"additionalProperties":false},"startSecond":{"type":"number","minimum":0},"durationSecond":{"type":"number","exclusiveMinimum":0},"pathStyle":{"type":"string","enum":["straight","curve_left","curve_right","curl","flare","backdoor","slip"]},"screenType":{"type":"string","enum":["pin_down","flare","back_screen","ball_screen","cross_screen"]},"label":{"type":"string","maxLength":60,"description":"A concise label of at most 60 characters."}},"required":["type","actorId","startSecond","durationSecond"],"additionalProperties":false}}},"required":["actions"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_play","kind":"act","impl":"imperative","description":"Run deterministic execution checks on the current play for references, clock, same-player overlap, inbound pass, shot presence, and possession. Does not change saved play content.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"animate_play","kind":"act","impl":"imperative","description":"Animate the current structurally valid play on the visible court. Uses saved actions without changing play content.","inputSchema":{"type":"object","properties":{"speed":{"type":"number","enum":[0.5,1,1.5,2],"description":"Playback speed."},"loop":{"type":"boolean","description":"Repeat the animation until paused."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_play_action","kind":"act","impl":"imperative","description":"Update the timing, destination, or other accepted editable fields of one existing unlocked play action. Read the current play first and pass its current revision. Coach-locked actions cannot be changed.","inputSchema":{"type":"object","properties":{"actionId":{"type":"string","description":"ID of the existing action to update."},"expectedRevision":{"type":"integer","minimum":0,"description":"Current revision returned by get_play_state or the prior successful update."},"patch":{"type":"object","properties":{"destinationZone":{"type":"string","enum":["inbound_left","inbound_right","rim","left_block","right_block","left_short_corner","right_short_corner","left_corner","right_corner","left_elbow","right_elbow","nail","top","left_slot","right_slot","left_wing","right_wing","backcourt_center"]},"destinationPosition":{"type":"object","properties":{"x":{"type":"number","description":"Normalized court x coordinate."},"y":{"type":"number","description":"Normalized court y coordinate."}},"required":["x","y"],"additionalProperties":false},"targetPlayerId":{"type":"string","enum":["O1","O2","O3","O4","O5"]},"startSecond":{"type":"number","minimum":0},"durationSecond":{"type":"number","exclusiveMinimum":0},"pathStyle":{"type":"string","enum":["straight","curve_left","curve_right","curl","flare","backdoor","slip"]},"screenType":{"type":"string","enum":["pin_down","flare","back_screen","ball_screen","cross_screen"]},"label":{"type":"string","maxLength":60}},"additionalProperties":false}},"required":["actionId","patch"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"apiSurface":"spec","category":"Health & Education","toolCount":5}}