{"ok":true,"site":{"host":"draft-room-webmcp.hungv47.chatgpt.site","url":"https://draft-room-webmcp.hungv47.chatgpt.site/","type":"live","desc":"A fantasy football squad builder built for agents. Fourteen WebMCP tools share one £100m budget, one rule engine, and one manager's brief with the human interface.","tools":[{"name":"list_available_players","kind":"answer","impl":"imperative","description":"List undrafted players with id, name, position (GK/DF/MF/FW), club, price, projected points, points-per-£m, and a floor/ceiling outlook (p10/p90 season points). Filter by position, club, price band, or a name search; sort by points, price, value, floor, or ceiling. Use the returned id with draft_player, swap_player, or scenario plans.","title":"List available players","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"position":{"type":"string","enum":["GK","DF","MF","FW"]},"team":{"type":"string","description":"Club abbreviation, e.g. ARS, LIV, MCI."},"maxPrice":{"type":"number","description":"Only players at or under this price, in £m."},"minPrice":{"type":"number","description":"Only players at or over this price, in £m."},"search":{"type":"string","description":"Case-insensitive substring match on player name or club."},"sort":{"type":"string","enum":["points","price","value","floor","ceiling"],"default":"points"},"limit":{"type":"integer","minimum":1,"maximum":120,"description":"Max players to return (default 40)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_roster_summary","kind":"answer","impl":"imperative","description":"Return the current squad: formation, each slot and who is in it (and whether you or the agent picked them), money spent and remaining, total projected points, and a probability outlook (mean, p10, p90) for the season total. Also lists the formations available to set_formation.","title":"Get squad summary","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"draft_player","kind":"act","impl":"imperative","description":"Add an available player to the squad. Slots follow the current formation (GK, DF1-n, MF1-n, FW1-n). If slotId is omitted, the first empty slot for the player's position is used. Fails clearly if the player is already drafted, no slot for their position is open (change formation to make room), or the price exceeds the remaining budget.","title":"Draft a player","annotations":{"readOnlyHint":false,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"playerId":{"type":"string","description":"Player id from list_available_players (the player's name also works)."},"slotId":{"type":"string","description":"Optional slot id, e.g. GK, DF2, MF1, FW3."}},"required":["playerId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_player","kind":"act","impl":"imperative","description":"Remove a player from the squad by slot id or player id, freeing their price back into the budget and marking them available again. Players the manager has marked protected (see get_brief) cannot be removed without force=true.","title":"Remove a player","annotations":{"readOnlyHint":false,"destructiveHint":true},"inputSchema":{"type":"object","properties":{"slotId":{"type":"string"},"playerId":{"type":"string"},"force":{"type":"boolean","default":false,"description":"Override the manager's protection on this player."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"swap_player","kind":"act","impl":"imperative","description":"Replace the player in a slot with a different available player of the same position, in one step. Fails if the new player is not eligible for that slot, does not fit under the resulting budget, or the outgoing player is protected by the manager's brief (force=true overrides).","title":"Swap a player","annotations":{"readOnlyHint":false,"destructiveHint":true},"inputSchema":{"type":"object","properties":{"slotId":{"type":"string"},"newPlayerId":{"type":"string"},"force":{"type":"boolean","default":false,"description":"Override the manager's protection on the outgoing player."}},"required":["slotId","newPlayerId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"auto_fill_roster","kind":"act","impl":"imperative","description":"Fill every empty slot under the remaining budget. strategy 'value' maximises the objective per £m and then spends spare money on the best upgrades; 'stars_and_scrubs' buys the best available for the highest-need slots and fills the rest cheaply. objective picks what is maximised: expected points, a safe floor, or upside. Filled slots are never touched.","title":"Auto-fill the squad","annotations":{"readOnlyHint":false,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"strategy":{"type":"string","enum":["value","stars_and_scrubs"],"default":"value"},"objective":{"type":"string","enum":["mean","floor","ceiling"],"default":"mean","description":"What to optimise: 'mean' expected points, 'floor' the 10th-percentile season (safe), or 'ceiling' the 90th percentile (upside)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_formation","kind":"act","impl":"imperative","description":"Agent-only. Re-shape the squad to one of 4-3-3, 4-4-2, 3-5-2, 3-4-3, 5-3-2, 4-5-1, 5-4-1. Drafted players keep their slots' positions and are re-seated within their line. If more players of a position are drafted than the new shape fields, the call fails and names them, unless force=true, which releases the lowest projected surplus back to the pool. The budget is unchanged.","title":"Change formation","annotations":{"readOnlyHint":false,"destructiveHint":true},"inputSchema":{"type":"object","properties":{"formation":{"type":"string","enum":["4-3-3","4-4-2","3-5-2","3-4-3","5-3-2","4-5-1","5-4-1"]},"force":{"type":"boolean","default":false,"description":"Release surplus players automatically instead of failing."}},"required":["formation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_scenarios","kind":"act","impl":"imperative","description":"Agent-only, read-only. Evaluate up to six alternative plans side by side without changing the squad. Each plan can switch formation, remove, swap, and add players, then auto-fill what is left. Returns, per plan, the steps taken, money spent and left, projected points, and a probability outlook (mean, sd, p10, p90, and P(total ≥ target) when a target is given), plus the delta against the current squad. Plans that break a rule report which step failed and why.","title":"Simulate scenarios","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"scenarios":{"type":"array","description":"One to six plans.","items":{"type":"object","description":"An ordered plan. Steps run as: formation, remove, swap, add, fill. Any failing step fails the whole plan.","properties":{"label":{"type":"string","description":"Short name for this scenario, echoed in the result."},"formation":{"type":"string","enum":["4-3-3","4-4-2","3-5-2","3-4-3","5-3-2","4-5-1","5-4-1"],"description":"Optional formation to switch to first."},"remove":{"type":"array","description":"Slot ids or player ids/names to release.","items":{"type":"string"}},"swap":{"type":"array","description":"Replacements to make, each { slotId, newPlayerId }.","items":{"type":"object","properties":{"slotId":{"type":"string"},"newPlayerId":{"type":"string"}},"required":["slotId","newPlayerId"]}},"add":{"type":"array","description":"Players to draft, each { playerId, slotId? }.","items":{"type":"object","properties":{"playerId":{"type":"string"},"slotId":{"type":"string"}},"required":["playerId"]}},"fill":{"type":"object","description":"Optional: auto-fill whatever is still open, { strategy, objective }.","properties":{"strategy":{"type":"string","enum":["value","stars_and_scrubs"],"default":"value"},"objective":{"type":"string","enum":["mean","floor","ceiling"],"default":"mean","description":"What to optimise: 'mean' expected points, 'floor' the 10th-percentile season (safe), or 'ceiling' the 90th percentile (upside)."}}}}}},"target":{"type":"number","description":"Optional season points target to compute P(total ≥ target) for."}},"required":["scenarios"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_scenario","kind":"act","impl":"imperative","description":"Agent-only. Run one plan (formation, removes, swaps, adds, fill) and commit it atomically: either every step lands or nothing changes and the failing step is reported. Use after simulate_scenarios to make a multi-step change in one call.","title":"Apply a scenario","annotations":{"readOnlyHint":false,"destructiveHint":true},"inputSchema":{"type":"object","properties":{"scenario":{"type":"object","description":"An ordered plan. Steps run as: formation, remove, swap, add, fill. Any failing step fails the whole plan.","properties":{"label":{"type":"string","description":"Short name for this scenario, echoed in the result."},"formation":{"type":"string","enum":["4-3-3","4-4-2","3-5-2","3-4-3","5-3-2","4-5-1","5-4-1"],"description":"Optional formation to switch to first."},"remove":{"type":"array","description":"Slot ids or player ids/names to release.","items":{"type":"string"}},"swap":{"type":"array","description":"Replacements to make, each { slotId, newPlayerId }.","items":{"type":"object","properties":{"slotId":{"type":"string"},"newPlayerId":{"type":"string"}},"required":["slotId","newPlayerId"]}},"add":{"type":"array","description":"Players to draft, each { playerId, slotId? }.","items":{"type":"object","properties":{"playerId":{"type":"string"},"slotId":{"type":"string"}},"required":["playerId"]}},"fill":{"type":"object","description":"Optional: auto-fill whatever is still open, { strategy, objective }.","properties":{"strategy":{"type":"string","enum":["value","stars_and_scrubs"],"default":"value"},"objective":{"type":"string","enum":["mean","floor","ceiling"],"default":"mean","description":"What to optimise: 'mean' expected points, 'floor' the 10th-percentile season (safe), or 'ceiling' the 90th percentile (upside)."}}}}}},"required":["scenario"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"project_points","kind":"act","impl":"imperative","description":"Agent-only, read-only. Monte Carlo the current squad's season total (or a hypothetical list of player ids) with rotation risk and club correlation. Returns mean, sd, p10/p50/p90, P(total ≥ target) when a target is given, club stacks that concentrate risk, and each player's contribution with floor and ceiling. Deterministic for a given sample count.","title":"Project season points","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"target":{"type":"number","description":"Season points target to compute P(total ≥ target) for."},"playerIds":{"type":"array","description":"Optional. Project this list instead of the current squad.","items":{"type":"string"}},"samples":{"type":"integer","minimum":500,"maximum":20000,"default":4000}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"player_outlook","kind":"answer","impl":"imperative","description":"Agent-only, read-only. For one or more players (ids or names), return the probability model behind the projection: mean, sd, p10/p50/p90 season points, start probability (rotation risk), and volatility. Optionally the probability each player scores at least a target. Use to compare a safe pick against a boom-or-bust one.","title":"Player outlook","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"playerIds":{"type":"array","items":{"type":"string"},"description":"One to twelve player ids or names."},"target":{"type":"number","description":"Optional points target per player."}},"required":["playerIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"find_upgrades","kind":"answer","impl":"imperative","description":"Agent-only, read-only. Search every single-swap improvement to the current squad that fits the remaining budget, ranked by gain on the chosen objective (mean, floor, or ceiling). Restrict to one slot or one position, cap the extra spend, and limit the count. Each result gives the outgoing and incoming player, the points gain, the price change, and gain per extra £m.","title":"Find upgrades","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"objective":{"type":"string","enum":["mean","floor","ceiling"],"default":"mean","description":"What to optimise: 'mean' expected points, 'floor' the 10th-percentile season (safe), or 'ceiling' the 90th percentile (upside)."},"slotId":{"type":"string","description":"Only look at this slot."},"position":{"type":"string","enum":["GK","DF","MF","FW"],"description":"Only look at slots of this position."},"maxCost":{"type":"number","description":"Max extra spend for one swap, in £m (default: remaining budget)."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":8}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_brief","kind":"answer","impl":"imperative","description":"Read-only. The manager's standing instructions, set by clicking players on the pitch: who wears the captain's armband (points count double) and the vice's, duties (penalties, set pieces), which players are protected from removal or swaps, and free-text notes per player. Read this before making changes so your plan respects it; the same brief is what the manager sees in the console.","title":"Read the manager's brief","annotations":{"readOnlyHint":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_assignment","kind":"act","impl":"imperative","description":"Give a drafted player the armband ('captain' doubles their points in every projection; 'vice' inherits it if the captain's season is disrupted; 'none' hands it back), replace their duties (penalties, set_pieces, protected), and/or set a note the manager will see on the card. Only fields you pass change. The manager can edit the same fields by clicking the card.","title":"Set an assignment","annotations":{"readOnlyHint":false,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"playerId":{"type":"string","description":"Player id or name; must be in the squad."},"armband":{"type":"string","enum":["captain","vice","none"]},"duties":{"type":"array","items":{"type":"string","enum":["penalties","set_pieces","protected"]},"description":"Replaces the duty list. Pass [] to clear."},"note":{"type":"string","description":"Up to 280 characters. Pass an empty string to clear."}},"required":["playerId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/draft-room-webmcp.hungv47.chatgpt.site.png","apiSurface":"spec","toolCount":14}}