Roblox Engine API · Capability

Roblox Experience Management

Unified workflow capability for managing Roblox experiences using the Open Cloud API. Combines universe configuration, place publishing, data store management, cross-server messaging, player moderation, and community management into workflows for Roblox game developers and operations teams.

Run with Naftiko GamingGame DevelopmentRobloxOpen CloudExperiencesMetaverse

What You Can Do

GET
Get universe — Get details about a Roblox experience
/v1/universes/{universeId}
PATCH
Update universe — Update experience settings
/v1/universes/{universeId}
GET
Get place — Get details about a place
/v1/universes/{universeId}/places/{placeId}
GET
List data stores — List all data stores in a universe
/v1/universes/{universeId}/data-stores
GET
Get entry — Get a data store entry
/v1/universes/{universeId}/data-stores/{storeName}/entries
POST
Set entry — Set a data store entry
/v1/universes/{universeId}/data-stores/{storeName}/entries
DELETE
Delete entry — Delete a data store entry
/v1/universes/{universeId}/data-stores/{storeName}/entries
POST
Publish message — Publish a message to all universe servers
/v1/universes/{universeId}/messaging/{topic}
GET
Get restriction — Check player restriction status
/v1/universes/{universeId}/user-restrictions/{userId}
PATCH
Update restriction — Ban or unban a player
/v1/universes/{universeId}/user-restrictions/{userId}
GET
Get user — Get a Roblox user
/v1/users/{userId}
GET
Get group — Get a Roblox group
/v1/groups/{groupId}
GET
List memberships — List group members and roles
/v1/groups/{groupId}/memberships

MCP Tools

get-universe

Get details about a Roblox experience including settings and metadata

read-only
update-universe

Update the settings for a Roblox experience

idempotent
get-place

Get details about a specific place within a universe

read-only
list-data-stores

List all data stores available in a universe

read-only
get-data-store-entry

Retrieve a player or game data store entry by key

read-only
set-data-store-entry

Set or update a data store entry value

idempotent
delete-data-store-entry

Delete a data store entry

idempotent
publish-message

Broadcast a message to all active servers in a universe

get-user

Get information about a Roblox player by user ID

read-only
get-group

Get information about a Roblox community group

read-only
list-group-memberships

List members and their roles in a Roblox group

read-only
get-user-restriction

Check if a player is banned or restricted from a universe

read-only
ban-player

Ban a player from accessing a universe (set user restriction)

idempotent

APIs Used

roblox

Capability Spec

experience-management.yaml Raw ↑
naftiko: "1.0.0-alpha1"

info:
  label: "Roblox Experience Management"
  description: >-
    Unified workflow capability for managing Roblox experiences using the
    Open Cloud API. Combines universe configuration, place publishing, data
    store management, cross-server messaging, player moderation, and community
    management into workflows for Roblox game developers and operations teams.
  tags:
    - Gaming
    - Game Development
    - Roblox
    - Open Cloud
    - Experiences
    - Metaverse
  created: "2026-05-02"
  modified: "2026-05-02"

binds:
  - namespace: env
    keys:
      ROBLOX_API_KEY: ROBLOX_API_KEY

capability:
  consumes:
    - import: roblox
      location: ./shared/open-cloud.yaml

  exposes:
    - type: rest
      port: 8080
      namespace: roblox-experience-api
      description: "Unified REST API for Roblox experience management including universes, data stores, players, and communities."
      resources:
        - path: /v1/universes/{universeId}
          name: universe
          description: "Experience universe management"
          operations:
            - method: GET
              name: get-universe
              description: "Get details about a Roblox experience"
              call: "roblox.get-universe"
              with:
                universeId: "rest.universeId"
              outputParameters:
                - type: object
                  mapping: "$."
            - method: PATCH
              name: update-universe
              description: "Update experience settings"
              call: "roblox.update-universe"
              with:
                universeId: "rest.universeId"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/universes/{universeId}/places/{placeId}
          name: place
          description: "Place management"
          operations:
            - method: GET
              name: get-place
              description: "Get details about a place"
              call: "roblox.get-place"
              with:
                universeId: "rest.universeId"
                placeId: "rest.placeId"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/universes/{universeId}/data-stores
          name: data-stores
          description: "Data store management"
          operations:
            - method: GET
              name: list-data-stores
              description: "List all data stores in a universe"
              call: "roblox.list-data-stores"
              with:
                universeId: "rest.universeId"
                prefix: "rest.prefix"
                limit: "rest.limit"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/universes/{universeId}/data-stores/{storeName}/entries
          name: data-store-entries
          description: "Data store entry management"
          operations:
            - method: GET
              name: get-entry
              description: "Get a data store entry"
              call: "roblox.get-data-store-entry"
              with:
                universeId: "rest.universeId"
                datastoreName: "rest.storeName"
                entryKey: "rest.entryKey"
              outputParameters:
                - type: object
                  mapping: "$."
            - method: POST
              name: set-entry
              description: "Set a data store entry"
              call: "roblox.set-data-store-entry"
              with:
                universeId: "rest.universeId"
                datastoreName: "rest.storeName"
                entryKey: "rest.entryKey"
              outputParameters:
                - type: object
                  mapping: "$."
            - method: DELETE
              name: delete-entry
              description: "Delete a data store entry"
              call: "roblox.delete-data-store-entry"
              with:
                universeId: "rest.universeId"
                datastoreName: "rest.storeName"
                entryKey: "rest.entryKey"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/universes/{universeId}/messaging/{topic}
          name: messaging
          description: "Cross-server messaging"
          operations:
            - method: POST
              name: publish-message
              description: "Publish a message to all universe servers"
              call: "roblox.publish-message"
              with:
                universeId: "rest.universeId"
                topic: "rest.topic"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/universes/{universeId}/user-restrictions/{userId}
          name: user-restrictions
          description: "Player moderation"
          operations:
            - method: GET
              name: get-restriction
              description: "Check player restriction status"
              call: "roblox.get-user-restriction"
              with:
                universeId: "rest.universeId"
                userId: "rest.userId"
              outputParameters:
                - type: object
                  mapping: "$."
            - method: PATCH
              name: update-restriction
              description: "Ban or unban a player"
              call: "roblox.update-user-restriction"
              with:
                universeId: "rest.universeId"
                userId: "rest.userId"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/users/{userId}
          name: users
          description: "User information"
          operations:
            - method: GET
              name: get-user
              description: "Get a Roblox user"
              call: "roblox.get-user"
              with:
                userId: "rest.userId"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/groups/{groupId}
          name: groups
          description: "Community group management"
          operations:
            - method: GET
              name: get-group
              description: "Get a Roblox group"
              call: "roblox.get-group"
              with:
                groupId: "rest.groupId"
              outputParameters:
                - type: object
                  mapping: "$."

        - path: /v1/groups/{groupId}/memberships
          name: group-memberships
          description: "Group membership"
          operations:
            - method: GET
              name: list-memberships
              description: "List group members and roles"
              call: "roblox.list-group-memberships"
              with:
                groupId: "rest.groupId"
                maxPageSize: "rest.maxPageSize"
                pageToken: "rest.pageToken"
              outputParameters:
                - type: object
                  mapping: "$."

    - type: mcp
      port: 9080
      namespace: roblox-experience-mcp
      transport: http
      description: "MCP server for AI-assisted Roblox experience management and community operations."
      tools:
        - name: get-universe
          description: "Get details about a Roblox experience including settings and metadata"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.get-universe"
          with:
            universeId: "tools.universeId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: update-universe
          description: "Update the settings for a Roblox experience"
          hints:
            readOnly: false
            destructive: false
            idempotent: true
          call: "roblox.update-universe"
          with:
            universeId: "tools.universeId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: get-place
          description: "Get details about a specific place within a universe"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.get-place"
          with:
            universeId: "tools.universeId"
            placeId: "tools.placeId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: list-data-stores
          description: "List all data stores available in a universe"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.list-data-stores"
          with:
            universeId: "tools.universeId"
            prefix: "tools.prefix"
          outputParameters:
            - type: object
              mapping: "$."

        - name: get-data-store-entry
          description: "Retrieve a player or game data store entry by key"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.get-data-store-entry"
          with:
            universeId: "tools.universeId"
            datastoreName: "tools.datastoreName"
            entryKey: "tools.entryKey"
            scope: "tools.scope"
          outputParameters:
            - type: object
              mapping: "$."

        - name: set-data-store-entry
          description: "Set or update a data store entry value"
          hints:
            readOnly: false
            destructive: false
            idempotent: true
          call: "roblox.set-data-store-entry"
          with:
            universeId: "tools.universeId"
            datastoreName: "tools.datastoreName"
            entryKey: "tools.entryKey"
          outputParameters:
            - type: object
              mapping: "$."

        - name: delete-data-store-entry
          description: "Delete a data store entry"
          hints:
            readOnly: false
            destructive: true
            idempotent: true
          call: "roblox.delete-data-store-entry"
          with:
            universeId: "tools.universeId"
            datastoreName: "tools.datastoreName"
            entryKey: "tools.entryKey"
          outputParameters:
            - type: object
              mapping: "$."

        - name: publish-message
          description: "Broadcast a message to all active servers in a universe"
          hints:
            readOnly: false
            destructive: false
          call: "roblox.publish-message"
          with:
            universeId: "tools.universeId"
            topic: "tools.topic"
          outputParameters:
            - type: object
              mapping: "$."

        - name: get-user
          description: "Get information about a Roblox player by user ID"
          hints:
            readOnly: true
            openWorld: true
          call: "roblox.get-user"
          with:
            userId: "tools.userId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: get-group
          description: "Get information about a Roblox community group"
          hints:
            readOnly: true
            openWorld: true
          call: "roblox.get-group"
          with:
            groupId: "tools.groupId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: list-group-memberships
          description: "List members and their roles in a Roblox group"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.list-group-memberships"
          with:
            groupId: "tools.groupId"
            maxPageSize: "tools.maxPageSize"
            pageToken: "tools.pageToken"
          outputParameters:
            - type: object
              mapping: "$."

        - name: get-user-restriction
          description: "Check if a player is banned or restricted from a universe"
          hints:
            readOnly: true
            openWorld: false
          call: "roblox.get-user-restriction"
          with:
            universeId: "tools.universeId"
            userId: "tools.userId"
          outputParameters:
            - type: object
              mapping: "$."

        - name: ban-player
          description: "Ban a player from accessing a universe (set user restriction)"
          hints:
            readOnly: false
            destructive: true
            idempotent: true
          call: "roblox.update-user-restriction"
          with:
            universeId: "tools.universeId"
            userId: "tools.userId"
          outputParameters:
            - type: object
              mapping: "$."