roblox-server-data — Claude Code skill for Roblox cross-server data
A skill for Roblox cross-server data: OrderedDataStore leaderboards, MessagingService, MemoryStore coordination, seasons and guilds.
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a claude-codeWhat roblox-server-data does
The skill tells the agent which Roblox service fits a given job. OrderedDataStore handles global leaderboards, MessagingService carries messages between servers, MemoryStoreService covers temporary coordination like matchmaking and leases, and GlobalDataStore holds non-player state such as guilds and seasons.
There is a pitfalls section worth reading before you ship. MessagingService is fire-and-forget and unordered, so handlers need to be idempotent. For request/response flows the skill suggests correlating with {reqId}, an ack and a timeout — and warns that a missing ack does not mean the work never ran. Replay the same {reqId} instead of granting twice.
MemoryStoreService quotas are game-level, one shared pool rather than per server. A read batch comes out of a queue only after processing succeeds. For identity the skill points at player.User (User.Id, DomainType, DomainId) and recommends keying cross-server data on UserId, since domain IDs are per-experience.
What it helps with
- build a global leaderboard on OrderedDataStore
- broadcast an event to every running server
- run a matchmaking queue with expiring entries
- keep season or guild state outside a player session
- debug a request that granted a reward twice
Example prompts for the agent
- Build a global coin leaderboard with OrderedDataStore
- Set up a cross-server event announcement via MessagingService
- Review my MemoryStoreService matchmaking queue for lost entries
How to install roblox-server-data
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a claude-code2Manually: put the files in place
~/.claude/skills/roblox-server-data/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/roblox-server-data/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a codex2Manually: put the files in place
.agents/skills/roblox-server-data/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a cursor2Manually: put the files in place
.cursor/skills/roblox-server-data/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install TabooHarmony/roblox-brain roblox-server-data2Manually: put the files in place
.github/skills/roblox-server-data/SKILL.md1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a gemini-cli2Platform CLI
gemini skills install https://github.com/TabooHarmony/roblox-brain --path skills/core/roblox-server-dataManually: put the files in place
.devin/skills/roblox-server-data/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about roblox-server-data
How do I install roblox-server-data in Claude?
Run npx skills add TabooHarmony/roblox-brain --skill roblox-server-data -a claude-code. The skill lands in ~/.claude/skills/roblox-server-data/SKILL.md.
What does roblox-server-data do?
It guides the agent to the right Roblox service for shared data: OrderedDataStore for leaderboards, MessagingService for cross-server messages, MemoryStoreService for temporary coordination, GlobalDataStore for guild and season state.
How is it different from roblox-data?
roblox-server-data covers data shared between servers, while roblox-data handles player progress persistence. The same set also ships roblox-cloud for Open Cloud work.
Source text
SKILL.md · MIT
---
name: roblox-server-data
description: "Use when building or fixing Roblox cross-server data: OrderedDataStore leaderboards, MessagingService, MemoryStore, world state, seasons."
when_to_use: "Also for global leaderboards, cross-server announcements or events, matchmaking queues, shared counters, and reviewing non-player persistence."
last_reviewed: 2026-10-14
sources:
- https://create.roblox.com/docs/reference/engine/classes/MemoryStoreSortedMap
- https://create.roblox.com/docs/reference/engine/classes/OrderedDataStore
- https://create.roblox.com/docs/reference/engine/classes/MessagingService
- https://create.roblox.com/docs/reference/engine/classes/MemoryStoreService
- https://create.roblox.com/docs/reference/engine/classes/DataStoreService
- https://create.roblox.com/docs/cloud-services/data-stores/right-to-be-forgotten
- https://create.roblox.com/docs/cloud-services/data-stores/error-codes-and-limits
- original
---
# Roblox Server & Shared Data
## When to Load
Load for leaderboards, messaging, MemoryStore coordination, world state, seasons, or guilds. Player persistence: `roblox-data`; Open Cloud: `roblox-cloud`.
## Quick Reference
### OrderedDataStore (Leaderboards)
- Sortable DataStore: string keys (`tostring(UserId)`), integer sort values; `GetSortedAsync` → pages; `BatchGetAsync` multi-key read (missing keys omitted).
- Budget bursts via `GetRequestBudgetForRequestType(OrderedWrite)` (per server: 30 + numPlayers×5 writes/min).
- Leaderboards only, never player saves. Keep `player_<UserId>` a static key substring so RTBF templates match.
### MessagingService (Cross-Server)
- `SubscribeAsync` / `PublishAsync`; no delivery or ordering guarantee — design for idempotency.
- Request/response: `{reqId}` correlation + ack + timeout; no ack ≠ not executed — replay same reqId, don't double-grant.
- Budget broadcast receives, not just sends; limits and polling trade-offs: full.md. <!-- temporal: 2026-10 -->
### GlobalDataStore (Shared State)
- Persistent non-player state (guilds, seasons, counters). Use `UpdateAsync`; never for player session data.
### MemoryStoreService (Temporary Coordination)
- Queues and sorted maps for expiring matchmaking, leases, coordination.
- Remove a read batch only after successful, idempotent processing.
- Sorted-map paging: last item's `{key, sortKey}` = next exclusive bound. Quotas are **game-level** (one shared pool): request units 1000+120×CCU/min, memory 64 KB+1.2 KB/user, value ≤32 KB, TTL 45 days; batch calls bill per item. <!-- temporal: 2026-10 -->
### Cross-Server Patterns
- Register servers with expiring heartbeats; notify via MessagingService.
### User Identity
- Identify users with `player.User` (`User.Id`, `DomainType`, `DomainId`); `UserId` stays valid. Domain IDs are per-experience: key cross-server data on `UserId`.
### Pitfalls
- MessagingService: fire-and-forget, unordered; not for time-critical work
- GlobalDataStore: same rate limits as player DataStores
- Never store Instances; `SetAsync` overwrites — use `UpdateAsync` for shared counters
> Store selection and workflows: [references/full.md](references/full.md)
© TabooHarmony · MIT · TabooHarmony/roblox-brain