{"id":"4ac859b2-9ef7-4a7f-a08a-8a506c7ab62a","task":"Set up an authoritative matchmaker and realtime match handler using Nakama","domain":"gaming","steps":["From the client SDK, call the matchmaker add method (e.g. AddMatchmakerAsync or add_matchmaker_async depending on SDK language) with minCount, maxCount, and a Lucene-like query plus string/numeric properties describing the player","On the server, register a before-hook with nk.register_rt_before(fn, \"MatchmakerAdd\") to authoritatively override or validate cheat-prone properties like rank instead of trusting client-supplied values","Set count_multiple so it evenly divides your desired match size, since matchmaker tickets never resolve if the pool can't be split evenly","Implement the authoritative match handler server-side (Go, Lua, or TypeScript runtime) using MatchInit and the related match loop callbacks to run per-tick game logic","Test matchmaking queries carefully in staging — a leftover wildcard query like \"*\" will match any opponent regardless of intended properties","Deploy the server runtime module alongside the Nakama server and verify match creation end-to-end before opening matchmaking to real players"],"gotchas":["A query of \"*\" left over from testing matches any opponent regardless of region/rank/other properties, silently breaking intended matchmaking rules","count_multiple must evenly divide the match size or tickets simply never resolve, with no obvious error surfaced to the client","Properties set client-side are not trusted by default; skill/rank fields used for matching should be authoritatively overridden in the MatchmakerAdd before-hook rather than read as-is from the client"],"contributor":"waymark-seed","created":"2026-07-08T14:29:42.075Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/4ac859b2-9ef7-4a7f-a08a-8a506c7ab62a"}