# Experience events

The MCP tools `roblox_create_event`, `roblox_read_event`, and `roblox_list_events` use Roblox's Open Cloud game-events v3 endpoints. Event IDs are decimal strings, including IDs larger than JavaScript's safe integer range. Never convert them to numbers.

Create accepts `{universeId, event, confirm: true}`. The event requires a title, subtitle, explicit `private`/`public` visibility, and future start/end timestamps with UTC offsets. Optional fields include description, group host, venue place, ranked category entries, ranked existing thumbnail media IDs, featuring status/tagline, and Roblox-native recurrence/notification configuration. `universeId` goes in the URL, not the upstream body. Media upload is separate; these tools associate existing media.

Creation sends one POST and then one GET to compare the saved fields. It returns `created: true` after a valid creation response, with `verified`, mismatched field names, and the event. Thumbnail persistence is separately checked against `allThumbnailsCreated`; this does not prove image moderation approval or final rendering. A lost or malformed creation response returns `created: "unknown"` without retrying. List and inspect existing events before another creation attempt. A failed readback keeps the known event ID and reports `verified: false`.

Read requires both the universe ID and the exact string event ID and rejects mismatched targets. List accepts one page at a time (default 20, maximum 50), a continuation token, optional start/end bounds, and visibility. Returned `nextPageToken` can be passed as `pageToken`. Roblox defaults end filtering to now when neither end bound is supplied, so explicitly set an end bound when inspecting older events. Missing or malformed collections are not presented as empty successful results.

The configured Open Cloud credential needs `universe.event:read` and creation also needs `universe.event:write`. The shared transport bounds each response to 512 KiB with a 20-second deadline. Tool input limits (title/subtitle 256 characters, description 10,000, up to 10 thumbnails and 16 category entries) are romcp limits, not claims about Roblox's product limits. Roblox validates content, scheduling, recurrence syntax, and permissions.

## Evidence and remaining work

The authenticated local public API exposes POST `/v1/cloud/events/create`, `/read`, and `/list`. SDK equivalents are `client.events.create(input)`, `.read(input)`, and `.list(input)`, with exported input/result types and `GameEvent`. No Studio connection is required. All use the same service as MCP and validate the response contract; a contradictory result such as `created: "unknown", verified: true` is rejected.

Creation requires `confirm: true`. Invalid requests, including numeric event IDs and past start times, return HTTP 400 before cloud work. Read/list failures return sanitized `CLOUD_ERROR` responses (502). Creation uncertainty is returned as data so the caller can distinguish it from a confirmed creation whose readback failed. A successful HTTP status alone does not mean creation was verified. SDK requests are never automatically retried. Use a 60-second SDK timeout for creation plus its readback if needed; a client timeout does not cancel an already dispatched creation.

Contract checked on September 7, 2026 against Roblox's [published OpenAPI schema](https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/cloud/openapi.json) and [game-event reference](https://create.roblox.com/docs/cloud/reference/features/virtual-events). The endpoints are marked experimental. The [Open Cloud announcement](https://devforum.roblox.com/t/new-opencloud-apis-for-analytics-events-experiments-and-thumbnail-personalization/4828676) confirms the feature family; detailed implementation is based on the schema.

Tests use synthetic cloud responses, including SDK-to-HTTP integration, and do not create real events. Live event creation, moderation, recurrence behavior, notifications, and partial thumbnail persistence remain unverified. Event editing/deletion and UI drafts remain outstanding. No event has been created or published during implementation.
