{"ok":true,"site":{"host":"transfer-window-sandbox.vercel.app","url":"https://transfer-window-sandbox.vercel.app/","type":"live","desc":"A WebMCP sandbox where an AI agent runs your transfer window, and the page refuses any deal that breaks Premier League PSR or squad-registration rules.","tools":[{"name":"get_club_state","kind":"answer","impl":"imperative","description":"Financial and squad position of the club you are managing: three-year PSR aggregate, remaining headroom, current-season projection, and squad counts. Call this first — every spending decision depends on the headroom figure.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_squad","kind":"answer","impl":"imperative","description":"The current squad with full accounting detail per player: wage, remaining contract, annual amortisation charge, and book value. Book value is what you must beat on a sale to book a profit.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"position":{"type":"string","enum":["GK","DF","MF","FW"],"description":"Filter by position."},"academy_only":{"type":"boolean","description":"Only academy graduates (book value zero)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_players","kind":"answer","impl":"imperative","description":"Search the transfer market for players at other clubs. Returns market value, which is the price you would be quoted. Filter before you reason — do not ask for the whole list and sort it yourself.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"position":{"type":"string","enum":["GK","DF","MF","FW"]},"max_value_millions":{"type":"number","description":"Upper bound on market value, in £m."},"max_age":{"type":"number"},"homegrown_only":{"type":"boolean","description":"Only homegrown players — useful when the non-homegrown limit is tight."},"limit":{"type":"number","description":"Max results. Defaults to 10."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_player","kind":"answer","impl":"imperative","description":"Full detail on one player, including the accounting figures that decide what buying or selling them does to PSR.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"player_id":{"type":"string"}},"required":["player_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compute_psr_position","kind":"act","impl":"imperative","description":"The full PSR calculation for the plan as it currently stands, broken down line by line. Use this to explain *why* a club is where it is, rather than asserting figures.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"check_squad_compliance","kind":"answer","impl":"imperative","description":"Registration legality only: 25-man senior squad, maximum 17 non-homegrown, under-21s exempt. Returns every violation, hard and advisory.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"evaluate_transfer","kind":"act","impl":"imperative","description":"What-if. Model a signing or a sale WITHOUT adding it to the plan, and get the exact effect on PSR and squad legality. Use this before proposing anything expensive so you can tell the manager the cost before they commit.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["signing","sale"]},"player_id":{"type":"string"},"fee_millions":{"type":"number","description":"Fee in £m. Defaults to market value."},"contract_years":{"type":"number","description":"Signings only. Defaults to 4."},"weekly_wage_gbp":{"type":"number","description":"Signings only. Defaults to current wage."}},"required":["kind","player_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rank_sale_candidates","kind":"act","impl":"imperative","description":"Rank every squad player by how much selling them at market value would improve the PSR position. The answer is frequently counterintuitive: an expensive recent signing can help more than an academy graduate, because you shed their amortisation and wages as well as booking the fee. Do not guess this — ask.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"How many to return. Defaults to 8."},"exclude_position":{"type":"string","enum":["GK","DF","MF","FW"],"description":"Protect a position you cannot afford to weaken."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_plan","kind":"answer","impl":"imperative","description":"The transfer plan as it stands, with move ids, net spend, and current legality.","annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_signing","kind":"act","impl":"imperative","description":"Add a signing to the transfer plan. The page REFUSES the move if it would breach PSR or the squad-registration limits, and tells you by exactly how much. To stage a package deal — sign a star, fund it with a sale — pass allow_provisional: true, then balance the books before submitting.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"player_id":{"type":"string"},"fee_millions":{"type":"number","description":"Fee in £m. Defaults to market value."},"contract_years":{"type":"number","description":"Contract length. Longer deals spread the fee, but amortisation caps at 5 years."},"weekly_wage_gbp":{"type":"number"},"allow_provisional":{"type":"boolean","description":"Add the move even if it currently breaches, so it can be balanced by a sale."}},"required":["player_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_sale","kind":"act","impl":"imperative","description":"Add a sale to the transfer plan. Sales are how you create PSR room: the profit is booked immediately, and you shed the wages and amortisation too.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"player_id":{"type":"string"},"fee_millions":{"type":"number","description":"Fee in £m. Defaults to market value."}},"required":["player_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_from_plan","kind":"act","impl":"imperative","description":"Undo one planned move by its move_id. Everything in the plan is reversible.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"move_id":{"type":"string"}},"required":["move_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_plan","kind":"act","impl":"imperative","description":"Discard every planned move and start the window again.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"submit_window","kind":"transact","impl":"imperative","description":"Ask for the transfer window to be submitted. This does NOT submit it. If the plan is illegal the page refuses outright. If it is legal, the page raises a confirmation in the UI and THIS CALL BLOCKS until a human presses a button — expect to wait. It resolves only when the manager confirms or declines. You can never complete this action on the manager’s behalf.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","apiSurface":"spec","toolCount":14}}