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
| Name | Required | Description | Default |
|---|---|---|---|
| roomId | Yes | ||
| defaultAccesses | Yes | The default access permissions for the room. Permissions can be: 1. ["room:write"] // public 2. ["room:read", "room:presence:write"] // read-only 3. [] // private | |
| groupsAccesses | No | 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 } | |
| usersAccesses | No | 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 } | |
| metadata | No |
Implementation Reference
- src/server.ts:71-87 (handler)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 } ) ); }
- src/server.ts:64-70 (schema)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 } ) ); } );
- src/zod.ts:41-48 (schema)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 ` );
- src/zod.ts:50-73 (schema)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 } ` );
- src/zod.ts:74-96 (schema)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 } `);