Skip to main content
Glama
liveblocks

Liveblocks

Official
by liveblocks

create-room

Create a Liveblocks room with configurable access permissions for users and groups to enable real-time collaboration.

Instructions

Create a Liveblocks room

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
roomIdYes
defaultAccessesYesThe default access permissions for the room. Permissions can be: 1. ["room:write"] // public 2. ["room:read", "room:presence:write"] // read-only 3. [] // private
groupsAccessesNo The group ID accesses for the room. Permissions can be: 1. ["room:write"] // public 2. ["room:read", "room:presence:write"] // read-only 3. [] // private For example, when setting a "design" group to have full/public access: { design: ["room:write"] } Setting to null is used to remove an existing access level: { design: null }
usersAccessesNo The user ID accesses for the room. Permissions can be: 1. ["room:write"] // public 2. ["room:read", "room:presence:write"] // read-only 3. [] // private For example, when setting "charlie" user ID to have full/public access: { charlie: ["room:write"] } Setting to null is used to remove an existing access level: { charlie: null }
metadataNo

Implementation Reference

  • The handler function that executes the create-room tool logic. It calls the Liveblocks createRoom API with the provided roomId, access permissions, and metadata, wrapped in callLiveblocksApi for response formatting.
    async (
      { roomId, defaultAccesses, groupsAccesses, usersAccesses, metadata },
      extra
    ) => {
      return await callLiveblocksApi(
        getLiveblocks().createRoom(
          roomId,
          {
            defaultAccesses: defaultAccesses as any,
            groupsAccesses: groupsAccesses as any,
            usersAccesses: usersAccesses as any,
            metadata,
          },
          { signal: extra.signal }
        )
      );
    }
  • Input schema definition for the create-room tool parameters using Zod.
    {
      roomId: z.string(),
      defaultAccesses: DefaultAccesses,
      groupsAccesses: GroupsAccesses.optional(),
      usersAccesses: UsersAccesses.optional(),
      metadata: z.record(z.string(), z.string()).optional(),
    },
  • src/server.ts:61-88 (registration)
    Registration of the 'create-room' tool on the McpServer instance.
    server.tool(
      "create-room",
      "Create a Liveblocks room",
      {
        roomId: z.string(),
        defaultAccesses: DefaultAccesses,
        groupsAccesses: GroupsAccesses.optional(),
        usersAccesses: UsersAccesses.optional(),
        metadata: z.record(z.string(), z.string()).optional(),
      },
      async (
        { roomId, defaultAccesses, groupsAccesses, usersAccesses, metadata },
        extra
      ) => {
        return await callLiveblocksApi(
          getLiveblocks().createRoom(
            roomId,
            {
              defaultAccesses: defaultAccesses as any,
              groupsAccesses: groupsAccesses as any,
              usersAccesses: usersAccesses as any,
              metadata,
            },
            { signal: extra.signal }
          )
        );
      }
    );
  • Zod schema definition for defaultAccesses used in create-room tool.
    export const DefaultAccesses = z.array(z.string()).describe(
      `The default access permissions for the room. Permissions can be: 
            
            1. ["room:write"] // public
            2. ["room:read", "room:presence:write"] // read-only
            3. [] // private        
        `
    );
  • Zod schema definition for groupsAccesses used in create-room tool.
    export const GroupsAccesses = z
      .record(z.string(), z.array(z.union([z.string(), z.null()])))
      .describe(
        `
          The group ID accesses for the room. Permissions can be: 
            
            1. ["room:write"] // public
            2. ["room:read", "room:presence:write"] // read-only
            3. [] // private   
    
             For example, when setting a "design" group to have full/public access:
    
             {
               design: ["room:write"]
             }
    
             Setting to null is used to remove an existing access level:
    
             {
               design: null
             }
          `
      );
  • Zod schema definition for usersAccesses used in create-room tool.
    export const UsersAccesses = z.record(
      z.string(),
      z.array(z.union([z.string(), z.null()]))
    ).describe(`
          The user ID accesses for the room. Permissions can be: 
            
            1. ["room:write"] // public
            2. ["room:read", "room:presence:write"] // read-only
            3. [] // private   
    
             For example, when setting "charlie" user ID to have full/public access:
    
             {
               charlie: ["room:write"]
             }
    
             Setting to null is used to remove an existing access level:
    
             {
               charlie: null
             }
          `);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/liveblocks/liveblocks-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server