delete_branch
Delete a branch from a Storyblok space by providing its numeric ID, removing the pipeline permanently.
Instructions
Deletes a branch (pipeline) by its ID in a Storyblok space.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| branch_id | Yes | Numeric ID of the branch to delete |
Implementation Reference
- src/tools/pipelines.ts:116-134 (handler)The delete_branch tool handler: calls apiDelete on /branches/{branch_id} to delete a branch by its numeric ID, then returns the JSON response.
// Tool: delete_branch server.tool( 'delete_branch', 'Deletes a branch (pipeline) by its ID in a Storyblok space.', { branch_id: z.number().describe('Numeric ID of the branch to delete'), }, async ({ branch_id }) => { try { const data = await apiDelete(`/branches/${branch_id}`); return createJsonResponse(data); } catch (error) { if (error instanceof APIError) { return createErrorResponse(error); } throw error; } } ); - src/tools/pipelines.ts:120-122 (schema)Input schema for delete_branch: requires a numeric branch_id.
{ branch_id: z.number().describe('Numeric ID of the branch to delete'), }, - src/tools/index.ts:19-64 (registration)Registration: registerBranches is imported from pipelines.ts and called in registerAllTools to register all branch tools including delete_branch.
import { registerBranches } from './pipelines.js'; import { registerPresets } from './presets.js'; import { registerReleases } from './releases.js'; import { registerSchedulingStories } from './scheduling-stories.js'; import { registerSpace } from './space.js'; import { registerSpaceRoles } from './space-roles.js'; import { registerTasks } from './tasks.js'; import { registerWebhooks } from './webhooks.js'; import { registerWorkflows } from './workflows.js'; import { registerWorkflowStages } from './workflow-stage.js'; import { registerWorkflowStageChanges } from './workflow-stage-changes.js'; import { registerComponents } from './components.js'; import { registerComponentsFolder } from './components-folder.js'; import { registerAssets } from './assets.js'; import { registerAssetsFolders } from './assets-folder.js'; import { registerStories } from './stories.js'; import { registerDiscussions } from './discussions.js'; import { registerExtensions } from './extensions.js'; import { registerFieldPlugins } from './field-plugins.js'; /** * Registers all tools with the MCP server */ export function registerAllTools(server: McpServer): void { // Simple tools registerPing(server); registerMeta(server); // Tag management registerTags(server); registerInternalTags(server); // Access and authentication registerAccessTokens(server); // Activity tracking registerActivities(server); // Workflow management registerApprovals(server); registerWorkflows(server); registerWorkflowStages(server); registerWorkflowStageChanges(server); // Branch/Pipeline management registerBranches(server); - src/utils/api.ts:227-234 (helper)The apiDelete helper function used by delete_branch to make the DELETE HTTP request to the Storyblok Management API.
export async function apiDelete<T = unknown>(path: string): Promise<T> { const url = buildManagementUrl(path); const response = await fetch(url, { method: 'DELETE', headers: getManagementHeaders(), }); return handleResponse<T>(response, url); } - src/utils/response.ts:37-53 (helper)The createErrorResponse helper used by delete_branch to format error responses.
export function createErrorResponse( error: unknown, errorCode?: string ): McpErrorResponse { const message = error instanceof Error ? error.message : String(error); const response: McpErrorResponse = { isError: true, content: [{ type: 'text', text: message }], }; if (errorCode) { response.errorCode = errorCode; response.errorMessage = message; } return response; }