Stream bounded event-driven world changes
world-deltaCapture live Roblox client world changes via RBXScriptConnections, then poll cursor-ordered deltas for additions, removals, camera, character, and tool events without modifying gameplay Instances.
Instructions
WRITES LIVE CLIENT OBSERVER STATE — installs RBXScriptConnections and a bounded getgenv registry, but never modifies gameplay Instances. action='start' subscribes to Workspace and PlayerGui descendant additions/removals, character spawn/removal and equipped Tool changes, CurrentCamera replacement and selected camera properties, Backpack Tool changes, plus explicitly requested Instance properties. action='poll' returns cursor-ordered deltas; action='status' reports observer health; action='stop' disconnects every connection. Events are filtered before storage, repeated noise is coalesced/throttled, the ring buffer reports every capacity eviction, and a fixed TTL runs the same cleanup path automatically. It uses Roblox signals only: no RenderStepped, per-frame polling, or world scans. Signature: { action: "start" | "poll" | "status" | "stop", observerId: string?, cursor: any?, limit: any?, maxEvents: any?, ttlSeconds: any?, throttleMs: any?, coalesceWindowMs: any?, filters: any?, cameraProperties: any?, watchedProperties: any?, threadContext: number? }. Phase: observe; cost=medium; idempotency=contextual-write. Requires: active-client, explicit-mutation-approval, getgenv capability, a bounded observation goal and relevant source filters. Capabilities: getgenv. Produces: grounded-evidence, event-driven-world-deltas, monotonic-cursor, buffer-gap-and-drop-accounting, observer-health-and-expiry, coalescing-and-throttle-statistics. Verify with: assert-state, observe-world. Safety: MUTATING; writes live game/client state, installs bounded RBXScriptConnections in the active client, stores bounded observer metadata and events in getgenv.__mcp_world_delta, schedules one TTL cleanup callback; no gameplay Instance is written. On failure: inspect tool-schema for exact fields, defaults, constraints, and an invocation example.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum events returned by one poll; hasMore indicates another page. | |
| action | Yes | start installs a bounded observer, poll reads events after cursor, status reports health without consuming events, and stop disconnects every observer connection. | |
| cursor | No | Poll returns events whose monotonically increasing cursor is greater than this value. Always persist the returned nextCursor for the next poll. | |
| filters | No | Start-only server-side filters, applied before an event consumes buffer capacity. | |
| maxEvents | No | Start-only ring-buffer capacity. Older events are evicted at the cap and reported through droppedEvents, droppedThrough, and cursorGap. | |
| observerId | No | Observer id returned by start. For poll/status/stop, omission selects the newest active observer owned by this MCP session. | |
| throttleMs | No | Minimum interval for storing repeated events with the same semantic key after their coalescing window. | |
| ttlSeconds | No | Start-only fixed lifetime. A delayed cleanup retires the observer and disconnects every connection even if the AI never calls stop. | |
| threadContext | No | Optional Roblox thread identity for this call; omit it to use the server default. | |
| cameraProperties | No | Camera properties watched with GetPropertyChangedSignal. Add CFrame or Focus only when needed; throttling protects high-frequency properties. | |
| coalesceWindowMs | No | Window in which identical source/kind/path/property events update one record and increment repeatCount. | |
| watchedProperties | No | Additional explicit Instance/property subscriptions. At most 16 targets and 64 aggregate property connections are allowed. |