# OrganizedPlay > Software for running tournaments in a game store: pairings, results, standings, and > the schedule around them. One store per API key. ## Reaching it as an agent MCP server: `POST https://www.organizedplay.gg/api/mcp` — JSON-RPC 2.0, methods `initialize`, `tools/list`, `tools/call`. Send an OrganizedPlay API key as the `Authorization` header, with or without a `Bearer` prefix. A store makes keys under Integrations. ## Tools - `list_events` (read) — Every event this store has, upcoming and finished, with seat counts. Start here: every other tool needs an event id and this is where they come from. - `get_standings` (read) — The current table for one event, ranked, with each player’s record and the tiebreakers this ruleset applies. Empty before the first round is paired — that means the event has not started, not that something failed. Where the event runs age or other divisions, each is ranked separately and rows carry a division name. - `get_rounds` (read) — Every round and who sat at which table, with results where they have been reported. Pass round="latest" for the one being played. A table with no winner is either still playing or was drawn — check `reported` to tell those apart rather than assuming. - `get_roster` (read) — Who is registered for an event and what state each of them is in — registered, checked in, waitlisted or dropped. Registration is intent; checking in is being in the room, and only checked-in players are paired. - `register_player` (write) — Seat a player at an event by name. Waitlists them if the room is full. This writes to a real store’s roster and somebody will be expecting a seat — confirm the event and the spelling with the person you are acting for before calling it. - `create_event` (write) — Put a real tournament on the store’s own calendar — players will see it and show up. Public by default; a free-plan store can only ask for anything else once it is on a paid plan. Confirm the date and the game with the person you are acting for before calling it. Beyond the store’s weekly allowance the event is still created, but as a draft that needs payment before it is announced — check the response for that rather than assuming the call failed. - `start_competition` (write) — Start the real tournament against whoever is checked in — confirm the room is actually ready before calling it, since round one pairs immediately. Registering is intent; only a checked-in player gets seated. Calling this again once it has started is safe and simply returns the competition already running. - `check_in_player` (write) — Mark a real, registered player as physically present — confirm they are actually in the room before calling it. Only a checked-in player is paired; somebody who registered online but never walked in should stay off the roster the engine seats. ## What to know before calling anything This is one store’s tournament data. Every tool is scoped to the store that issued the API key — there is no way to reach another store, and no parameter that widens it. Start with list_events. Everything else needs an event id. An empty standings table means the event has not started, not that the call failed. A table with no winner is either still being played or was drawn; `reported` tells those apart. Do not compute placings, tiebreakers or who advances — the engine has already done it, applies the ruleset the store actually chose, and will disagree with arithmetic done from raw results. Where an event runs divisions, each is ranked separately. A player’s rank is their place in their own division, not in the room. Names may be redacted for players recorded as children: a given name and a family initial. That is deliberate and is not missing data. ## HTTP, if you would rather - `/api/v1/events` - `/api/v1/events/{eventId}/standings` - `/api/v1/events/{eventId}/rounds` - `/api/v1/events/{eventId}/registrations` - `/api/v1/events/{eventId}/registrations` - `/api/v1/events` - `/api/v1/events/{eventId}/competition` - `/api/v1/events/{eventId}/registrations/{registrationId}/check-in` Documentation: https://www.organizedplay.gg/developers Rate limit: 100 requests a minute per key on a paid plan, 20 on the free plan. ## Attribution Any project using this API should show a visible credit and a link back to OrganizedPlay. We ask rather than enforce: nothing checks for it, and no key is revoked over it. Suggested:
Tournament data from OrganizedPlay