{"id":"round-robin-schedule-generate","version":"1.0.0","description":"Generate a deterministic single or double round-robin schedule with ordered rounds, home/away assignments, and byes.","supported_operations":["generate round robin schedule","create league pairings","single round robin fixtures","double round robin fixtures","schedule every participant pair","make tournament rounds with byes"],"unsupported_operations":["optimize venues or travel","schedule dates or times","apply team availability constraints"],"semantics":["Participant identifiers are non-empty, unique, case-sensitive strings; their input order is canonical and is not sorted or normalized.","The format defaults to single. Single schedules each unordered pair once; double appends a return leg in the same round order with every home and away assignment swapped.","The circle method fixes the first slot, rotates the remaining slots right by one after each round, and appends a bye sentinel for odd participant counts.","Within a round, pairs are emitted from the outside inward. For input positions i and j, i is home when the forward cyclic distance from i to j is less than half the participant count; at an even-count half-cycle tie, the lower input position is home.","In every single leg, each participant has equally many home and away matches when the participant count is odd, and the counts differ by exactly one when it is even.","Rounds are numbered from 1. Byes follow the same deterministic circle order and each odd-sized single leg gives every participant exactly one bye."],"limits":{"max_participants":128,"max_identifier_bytes":64,"max_rounds":254},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["participants"],"properties":{"participants":{"type":"array","minItems":2,"maxItems":128,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":64}},"format":{"type":"string","enum":["single","double"],"default":"single"}}},"output_schema":{"type":"object","additionalProperties":false,"required":["format","participant_count","rounds"],"properties":{"format":{"type":"string","enum":["single","double"]},"participant_count":{"type":"integer","minimum":2,"maximum":128},"rounds":{"type":"array","minItems":1,"maxItems":254,"items":{"type":"object","additionalProperties":false,"required":["round","matches","byes"],"properties":{"round":{"type":"integer","minimum":1,"maximum":254},"matches":{"type":"array","maxItems":64,"items":{"type":"object","additionalProperties":false,"required":["home","away"],"properties":{"home":{"type":"string"},"away":{"type":"string"}}}},"byes":{"type":"array","maxItems":1,"items":{"type":"string"}}}}}}},"examples":[{"input":{"participants":["A","B"]},"output":{"format":"single","participant_count":2,"rounds":[{"round":1,"matches":[{"home":"A","away":"B"}],"byes":[]}]}},{"input":{"participants":["A","B","C"],"format":"double"},"output":{"format":"double","participant_count":3,"rounds":[{"round":1,"matches":[{"home":"B","away":"C"}],"byes":["A"]},{"round":2,"matches":[{"home":"C","away":"A"}],"byes":["B"]},{"round":3,"matches":[{"home":"A","away":"B"}],"byes":["C"]},{"round":4,"matches":[{"home":"C","away":"B"}],"byes":["A"]},{"round":5,"matches":[{"home":"A","away":"C"}],"byes":["B"]},{"round":6,"matches":[{"home":"B","away":"A"}],"byes":["C"]}]}}],"execute_url":"/v1/tools/round-robin-schedule-generate/versions/1.0.0/execute"}