list_tools
List all available tool categories and their counts, providing a module-level summary of Storyblok Management API tools.
Instructions
Lists all available tool categories with their tool counts. Returns module-level summary of 130 Storyblok Management API tools.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/meta.ts:8-66 (handler)The registerMeta function registers the 'list_tools' tool handler with the MCP server. It calls server.tool('list_tools', ...) and the handler returns a hardcoded list of all 30 tool modules with their tool counts and descriptions.
export function registerMeta(server: McpServer): void { server.tool( 'list_tools', 'Lists all available tool categories with their tool counts. Returns module-level summary of 130 Storyblok Management API tools.', {}, async () => { try { const modules = [ { name: 'ping', tools: 1, description: 'Server health check' }, { name: 'meta', tools: 1, description: 'Tool discovery' }, { name: 'tags', tools: 5, description: 'Tag management' }, { name: 'internal-tags', tools: 4, description: 'Internal tag management' }, { name: 'access-tokens', tools: 4, description: 'Access token management' }, { name: 'activities', tools: 2, description: 'Activity tracking' }, { name: 'approvals', tools: 5, description: 'Approval workflows' }, { name: 'branch-deployments', tools: 1, description: 'Branch deployment status' }, { name: 'collaborators', tools: 4, description: 'Collaborator management' }, { name: 'data-sources', tools: 5, description: 'Datasource management' }, { name: 'datasource-entries', tools: 5, description: 'Datasource entry management' }, { name: 'pipelines', tools: 5, description: 'Branch/pipeline management' }, { name: 'presets', tools: 5, description: 'Preset management' }, { name: 'releases', tools: 5, description: 'Release management' }, { name: 'scheduling-stories', tools: 5, description: 'Story scheduling' }, { name: 'space', tools: 7, description: 'Space management' }, { name: 'space-roles', tools: 5, description: 'Space role management' }, { name: 'tasks', tools: 5, description: 'Task management' }, { name: 'webhooks', tools: 5, description: 'Webhook management' }, { name: 'workflows', tools: 6, description: 'Workflow management' }, { name: 'workflow-stage', tools: 5, description: 'Workflow stage management' }, { name: 'workflow-stage-changes', tools: 2, description: 'Workflow stage changes' }, { name: 'components', tools: 9, description: 'Component management' }, { name: 'components-folder', tools: 5, description: 'Component folder management' }, { name: 'assets', tools: 9, description: 'Asset management' }, { name: 'assets-folder', tools: 5, description: 'Asset folder management' }, { name: 'stories', tools: 18, description: 'Story CRUD and bulk operations' }, { name: 'discussions', tools: 10, description: 'Discussion and comment management' }, { name: 'extensions', tools: 7, description: 'Extension management' }, { name: 'field-plugins', tools: 5, description: 'Field plugin management' }, ]; const totalTools = modules.reduce((sum, m) => sum + m.tools, 0); const formatted = modules.map( (m) => `${m.name} (${m.tools} tools): ${m.description}` ); return { content: [ { type: 'text' as const, text: `Storyblok MCP Server - ${totalTools} tools across ${modules.length} modules:\n\n${formatted.join('\n')}`, }, ], total_tools: totalTools, total_modules: modules.length, }; } catch (error) { return createErrorResponse(error); } } - src/tools/meta.ts:8-67 (registration)The 'list_tools' tool is registered via server.tool() inside the registerMeta function. The registration includes an empty schema object {} (no input parameters) and a description string.
export function registerMeta(server: McpServer): void { server.tool( 'list_tools', 'Lists all available tool categories with their tool counts. Returns module-level summary of 130 Storyblok Management API tools.', {}, async () => { try { const modules = [ { name: 'ping', tools: 1, description: 'Server health check' }, { name: 'meta', tools: 1, description: 'Tool discovery' }, { name: 'tags', tools: 5, description: 'Tag management' }, { name: 'internal-tags', tools: 4, description: 'Internal tag management' }, { name: 'access-tokens', tools: 4, description: 'Access token management' }, { name: 'activities', tools: 2, description: 'Activity tracking' }, { name: 'approvals', tools: 5, description: 'Approval workflows' }, { name: 'branch-deployments', tools: 1, description: 'Branch deployment status' }, { name: 'collaborators', tools: 4, description: 'Collaborator management' }, { name: 'data-sources', tools: 5, description: 'Datasource management' }, { name: 'datasource-entries', tools: 5, description: 'Datasource entry management' }, { name: 'pipelines', tools: 5, description: 'Branch/pipeline management' }, { name: 'presets', tools: 5, description: 'Preset management' }, { name: 'releases', tools: 5, description: 'Release management' }, { name: 'scheduling-stories', tools: 5, description: 'Story scheduling' }, { name: 'space', tools: 7, description: 'Space management' }, { name: 'space-roles', tools: 5, description: 'Space role management' }, { name: 'tasks', tools: 5, description: 'Task management' }, { name: 'webhooks', tools: 5, description: 'Webhook management' }, { name: 'workflows', tools: 6, description: 'Workflow management' }, { name: 'workflow-stage', tools: 5, description: 'Workflow stage management' }, { name: 'workflow-stage-changes', tools: 2, description: 'Workflow stage changes' }, { name: 'components', tools: 9, description: 'Component management' }, { name: 'components-folder', tools: 5, description: 'Component folder management' }, { name: 'assets', tools: 9, description: 'Asset management' }, { name: 'assets-folder', tools: 5, description: 'Asset folder management' }, { name: 'stories', tools: 18, description: 'Story CRUD and bulk operations' }, { name: 'discussions', tools: 10, description: 'Discussion and comment management' }, { name: 'extensions', tools: 7, description: 'Extension management' }, { name: 'field-plugins', tools: 5, description: 'Field plugin management' }, ]; const totalTools = modules.reduce((sum, m) => sum + m.tools, 0); const formatted = modules.map( (m) => `${m.name} (${m.tools} tools): ${m.description}` ); return { content: [ { type: 'text' as const, text: `Storyblok MCP Server - ${totalTools} tools across ${modules.length} modules:\n\n${formatted.join('\n')}`, }, ], total_tools: totalTools, total_modules: modules.length, }; } catch (error) { return createErrorResponse(error); } } ); - src/tools/meta.ts:12-12 (schema)The input schema for 'list_tools' is an empty object {} — the tool takes no input parameters.
{}, - src/utils/response.ts:37-53 (helper)The createErrorResponse helper is used by the list_tools handler to format error responses in case of exceptions.
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; } - src/tools/index.ts:42-45 (registration)registerMeta(server) is called inside registerAllTools, which is the central tool registration entrypoint.
export function registerAllTools(server: McpServer): void { // Simple tools registerPing(server); registerMeta(server);