{"ok":true,"site":{"host":"latch.aa-c41.workers.dev","url":"https://latch.aa-c41.workers.dev/","type":"live","desc":"LATCH is a live deal board for WebMCP. The agent can rewrite terms. HOLD takes one card out of its hands.","tools":[{"name":"get_board_state","kind":"answer","impl":"imperative","description":"Read the live LATCH board: scenario (A hourly / B retainer / C rush), phase, committed, per-term notes, special opinions, held cards, objections, cut terms, writable cards, and current text. Notes, opinions, and vetoes are binding. If committed is true the board is locked — call load_scenario with A for a fresh unlocked hourly board. Do not click A/B/C. If veto.cut is true, drop that term from the deal.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_card","kind":"answer","impl":"imperative","description":"Read one deal card by id, including hold state, veto (object / cut + optional comment), the human note or special opinion, and any pending rewrite. Follow the note and the veto. Treat kind=opinion as a term the human added.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Card id from get_board_state. Stock ids: rate, scope, ip, indemnity, term, payment. Opinion cards use their own id."}},"required":["card_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_card_change","kind":"act","impl":"imperative","description":"Propose new text for a card. Does not apply it. Call get_board_state first. Fails if the board is locked, the card is on HOLD, or the card is cut. Follow that card's note and any veto.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Card id from get_board_state. Stock ids: rate, scope, ip, indemnity, term, payment. Opinion cards use their own id."},"text":{"type":"string","description":"Replacement card text. One or two sentences."}},"required":["card_id","text"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_card_change","kind":"act","impl":"imperative","description":"Apply new text to a card and update the live board. Call get_board_state first. Fails if the board is locked, the card is on HOLD, or the card is cut. Indemnity (high risk) asks the human to confirm. Follow that card's note and any veto.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Card id from get_board_state. Stock ids: rate, scope, ip, indemnity, term, payment. Opinion cards use their own id."},"text":{"type":"string"}},"required":["card_id","text"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"request_release","kind":"act","impl":"imperative","description":"Ask the human to release a card that is on HOLD. Does not release it by itself unless the human confirms. Fails if the card is not held.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"Card id from get_board_state. Stock ids: rate, scope, ip, indemnity, term, payment. Opinion cards use their own id."},"reason":{"type":"string"}},"required":["card_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_deal","kind":"act","impl":"imperative","description":"Freeze the whole board. Always asks the human to confirm. Irreversible in this session. Fails if the board is already locked.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_scenario","kind":"act","impl":"imperative","description":"Judge/demo fixture: replace the board with a fresh unlocked deal and clear committed. Not a production unlock of a signed contract. Use A after a locked board (hourly, 6 open). B is a retainer with indemnity already held. C is a rush with payment cut. Do not click A/B/C on the page.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"scenario":{"type":"string","enum":["A","B","C"],"description":"A hourly unlock. B retainer, indemnity held. C rush, payment cut."}},"required":["scenario"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"AI & Agents","favicon":"/favicons/latch.aa-c41.workers.dev.svg","apiSurface":"spec","toolCount":7}}