update_space_role
Update a space role's name, permissions, allowed paths, and other settings in Storyblok.
Instructions
Updates a space role's configuration via the Storyblok Management API.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| space_role_id | Yes | ID of the space role to update | |
| role_name | No | New name for the role | |
| permissions | No | Array of permission strings | |
| allowed_paths | No | Array of allowed path IDs | |
| field_permissions | No | Array of field permission strings | |
| readonly_field_permissions | No | Array of readonly field permission strings | |
| subtitle | No | Subtitle for the role | |
| datasource_ids | No | Array of allowed datasource IDs | |
| component_ids | No | Array of allowed component IDs | |
| branch_ids | No | Array of allowed branch IDs | |
| allowed_languages | No | Array of allowed language codes | |
| asset_folder_ids | No | Array of allowed asset folder IDs |
Implementation Reference
- src/tools/space-roles.ts:122-183 (handler)Main handler for the update_space_role tool. Builds a space_role payload from optional input fields and sends a PUT request to /space_roles/{space_role_id}.
// Tool: update_space_role server.tool( 'update_space_role', "Updates a space role's configuration via the Storyblok Management API.", { space_role_id: z.number().describe('ID of the space role to update'), role_name: z.string().optional().describe('New name for the role'), permissions: z.array(z.string()).optional().describe('Array of permission strings'), allowed_paths: z.array(z.number()).optional().describe('Array of allowed path IDs'), field_permissions: z.array(z.string()).optional().describe('Array of field permission strings'), readonly_field_permissions: z .array(z.string()) .optional() .describe('Array of readonly field permission strings'), subtitle: z.string().optional().describe('Subtitle for the role'), datasource_ids: z.array(z.number()).optional().describe('Array of allowed datasource IDs'), component_ids: z.array(z.number()).optional().describe('Array of allowed component IDs'), branch_ids: z.array(z.number()).optional().describe('Array of allowed branch IDs'), allowed_languages: z.array(z.string()).optional().describe('Array of allowed language codes'), asset_folder_ids: z.array(z.number()).optional().describe('Array of allowed asset folder IDs'), }, async ({ space_role_id, role_name, permissions, allowed_paths, field_permissions, readonly_field_permissions, subtitle, datasource_ids, component_ids, branch_ids, allowed_languages, asset_folder_ids, }) => { try { const spaceRoleData: Record<string, unknown> = {}; if (allowed_paths !== undefined) spaceRoleData.allowed_paths = allowed_paths; if (field_permissions !== undefined) spaceRoleData.field_permissions = field_permissions; if (readonly_field_permissions !== undefined) spaceRoleData.readonly_field_permissions = readonly_field_permissions; if (permissions !== undefined) spaceRoleData.permissions = permissions; if (role_name !== undefined) spaceRoleData.role = role_name; if (subtitle !== undefined) spaceRoleData.subtitle = subtitle; if (datasource_ids !== undefined) spaceRoleData.datasource_ids = datasource_ids; if (component_ids !== undefined) spaceRoleData.component_ids = component_ids; if (branch_ids !== undefined) spaceRoleData.branch_ids = branch_ids; if (allowed_languages !== undefined) spaceRoleData.allowed_languages = allowed_languages; if (asset_folder_ids !== undefined) spaceRoleData.asset_folder_ids = asset_folder_ids; const payload = { space_role: spaceRoleData }; const data = await apiPut(`/space_roles/${space_role_id}`, payload); return createJsonResponse(data); } catch (error) { if (error instanceof APIError) { return createErrorResponse(error); } throw error; } } ); - src/types/storyblok.ts:167-180 (schema)Type definition for SpaceRole, which is the domain model used/schematized by the update_space_role tool.
export interface SpaceRole { id: number; role: string; subtitle: string | null; allowed_paths: number[]; field_permissions: string[]; permissions: string[]; datasource_ids: number[]; component_ids: number[]; branch_ids: number[]; allowed_languages: string[]; asset_folder_ids: number[]; readonly_field_permissions: string[]; } - src/tools/index.ts:69-69 (registration)Registration call that adds all space role tools (including update_space_role) to the MCP server.
registerSpaceRoles(server); - src/utils/api.ts:211-222 (helper)Helper function apiPut used by update_space_role to make the PUT HTTP request to the Storyblok Management API.
export async function apiPut<T = unknown>( path: string, body: unknown ): Promise<T> { const url = buildManagementUrl(path); const response = await fetch(url, { method: 'PUT', headers: getManagementHeaders(), body: JSON.stringify(body), }); return handleResponse<T>(response, url); }