Skip to main content
Glama

Storyblok MCP Server

server.py•16.4 kB
import sys import signal from mcp.server.fastmcp import FastMCP from config import Config from tools.components import register_components from tools.components_folder import register_components_folder from tools.stories import register_stories from tools.assets import register_assets from tools.assets_folder import register_assets_folder from tools.tags import register_tags from tools.meta import register_meta from tools.releases import register_releases from tools.data_sources import register_datasources from tools.datasource_entries import register_datasource_entries from tools.space import register_space from tools.space_roles import register_space_roles from tools.ping import register_ping from tools.presets import register_presets from tools.access_tokens import register_access_tokens from tools.workflows import register_workflows from tools.workflow_stage import register_workflow_stages from tools.workflow_stage_changes import register_workflow_stage_changes from tools.scheduling_stories import register_story_schedules from tools.pipelines import register_branches from tools.branch_deployments import register_branch_deployments from tools.discussions import register_discussions from tools.tasks import register_tasks from tools.webhooks import register_webhooks from tools.collaborators import register_collaborators from tools.internal_tags import register_internal_tags from tools.approvals import register_approvals from tools.activities import register_activities from tools.extensions import register_extensions from tools.field_plugins import register_field_plugin_retrieval from httpx import AsyncClient # Load and validate config (space ID, tokens) cfg = Config() client = AsyncClient() # Create MCP server instance with name/version mcp = FastMCP(name="storyblok-mcp-server", version="1.0.0") all_tools_info = [ # access_tokens.py {"name": "retrieve_multiple_access_tokens", "description": "Retrieve multiple access tokens."}, {"name": "create_access_token", "description": "Create a new access token."}, {"name": "update_access_token", "description": "Update an existing access token."}, {"name": "delete_access_token", "description": "Delete an access token."}, # activities.py {"name": "retrieve_multiple_activities", "description": "Retrieve multiple activities."}, {"name": "retrieve_single_activity", "description": "Retrieve a single activity."}, # approvals.py {"name": "retrieve_multiple_approvals", "description": "Retrieve multiple approvals."}, {"name": "retrieve_single_approval", "description": "Retrieve a single approval."}, {"name": "create_approval", "description": "Create a new approval."}, {"name": "create_release_approval", "description": "Create a release approval."}, {"name": "delete_approval", "description": "Delete an approval."}, # assets.py {"name": "fetch_assets", "description": "Fetch assets."}, {"name": "get_asset", "description": "Get an asset by ID."}, {"name": "delete_asset", "description": "Delete an asset by ID."}, {"name": "update_asset", "description": "Update an asset."}, {"name": "delete_multiple_assets", "description": "Delete multiple assets."}, {"name": "bulk_move_assets", "description": "Bulk move assets."}, {"name": "bulk_restore_assets", "description": "Bulk restore assets."}, {"name": "init_asset_upload", "description": "Initialize asset upload."}, {"name": "complete_asset_upload", "description": "Complete asset upload."}, # assets_folder.py {"name": "retrieve_asset_folders", "description": "Retrieve asset folders."}, {"name": "fetch_asset_folder", "description": "Fetch an asset folder."}, {"name": "create_asset_folder", "description": "Create an asset folder."}, {"name": "update_asset_folder", "description": "Update an asset folder."}, {"name": "delete_asset_folder", "description": "Delete an asset folder."}, # branch_deployments.py {"name": "create_branch_deployment", "description": "Create a branch deployment."}, # collaborators.py {"name": "retrieve_multiple_collaborators", "description": "Retrieve multiple collaborators."}, {"name": "update_collaborator", "description": "Update a collaborator."}, {"name": "delete_collaborator", "description": "Delete a collaborator."}, # components.py {"name": "fetch_components", "description": "Fetch components."}, {"name": "get_component", "description": "Get a component by ID."}, {"name": "create_component", "description": "Create a component."}, {"name": "update_component", "description": "Update a component."}, {"name": "delete_component", "description": "Delete a component."}, {"name": "get_component_usage", "description": "Get component usage."}, {"name": "retrieve_component_versions", "description": "Retrieve component versions."}, {"name": "retrieve_single_component_version", "description": "Retrieve a single component version."}, {"name": "restore_component_version", "description": "Restore a component version."}, # components_folder.py {"name": "create_component_folder", "description": "Create a component folder."}, {"name": "update_component_folder", "description": "Update a component folder."}, {"name": "delete_component_folder", "description": "Delete a component folder."}, {"name": "fetch_component_folders", "description": "Fetch component folders."}, {"name": "retrieve_single_component_folder", "description": "Retrieve a single component folder."}, # datasource_entries.py {"name": "retrieve_multiple_datasource_entries", "description": "Retrieve multiple datasource entries."}, {"name": "retrieve_single_datasource_entry", "description": "Retrieve a single datasource entry."}, {"name": "create_datasource_entry", "description": "Create a datasource entry."}, {"name": "update_datasource_entry", "description": "Update a datasource entry."}, {"name": "delete_datasource_entry", "description": "Delete a datasource entry."}, # data_sources.py {"name": "retrieve_multiple_datasources", "description": "Retrieve multiple datasources."}, {"name": "retrieve_single_datasource", "description": "Retrieve a single datasource."}, {"name": "create_datasource", "description": "Create a datasource."}, {"name": "update_datasource", "description": "Update a datasource."}, {"name": "delete_datasource", "description": "Delete a datasource."}, # discussions.py {"name": "retrieve_multiple_discussions", "description": "Retrieve multiple discussions."}, {"name": "retrieve_specific_discussion", "description": "Retrieve a specific discussion."}, {"name": "retrieve_idea_discussions_comments", "description": "Retrieve idea discussions comments."}, {"name": "create_discussion", "description": "Create a discussion."}, {"name": "retrieve_my_discussions", "description": "Retrieve my discussions."}, {"name": "resolve_discussion", "description": "Resolve a discussion."}, {"name": "retrieve_multiple_comments", "description": "Retrieve multiple comments."}, {"name": "create_comment", "description": "Create a comment."}, {"name": "update_comment", "description": "Update a comment."}, {"name": "delete_comment", "description": "Delete a comment."}, # extensions.py {"name": "retrieve_all_extensions", "description": "Retrieve all extensions."}, {"name": "retrieve_extension", "description": "Retrieve an extension."}, {"name": "create_extension", "description": "Create an extension."}, {"name": "update_extension", "description": "Update an extension."}, {"name": "delete_extension", "description": "Delete an extension."}, {"name": "retrieve_extension_settings", "description": "Retrieve extension settings."}, {"name": "retrieve_all_extension_settings", "description": "Retrieve all extension settings."}, # field_plugins.py {"name": "retrieve_field_plugins", "description": "Retrieve field plugins."}, {"name": "retrieve_field_plugin", "description": "Retrieve a field plugin."}, {"name": "create_field_plugin", "description": "Create a field plugin."}, {"name": "update_field_plugin", "description": "Update a field plugin."}, {"name": "delete_field_plugin", "description": "Delete a field plugin."}, # internal_tags.py {"name": "retrieve_multiple_internal_tags", "description": "Retrieve multiple internal tags."}, {"name": "create_internal_tag", "description": "Create an internal tag."}, {"name": "update_internal_tag", "description": "Update an internal tag."}, {"name": "delete_internal_tag", "description": "Delete an internal tag."}, # meta.py {"name": "list_tools", "description": "List all available tools."}, # ping.py {"name": "ping", "description": "Ping the server."}, # pipelines.py {"name": "retrieve_multiple_branches", "description": "Retrieve multiple branches."}, {"name": "retrieve_single_branch", "description": "Retrieve a single branch."}, {"name": "create_branch", "description": "Create a branch."}, {"name": "update_branch", "description": "Update a branch."}, {"name": "delete_branch", "description": "Delete a branch."}, # presets.py {"name": "retrieve_multiple_presets", "description": "Retrieve multiple presets."}, {"name": "retrieve_single_preset", "description": "Retrieve a single preset."}, {"name": "create_preset", "description": "Create a preset."}, {"name": "update_preset", "description": "Update a preset."}, {"name": "delete_preset", "description": "Delete a preset."}, # releases.py {"name": "retrieve_multiple_releases", "description": "Retrieve multiple releases."}, {"name": "retrieve_single_release", "description": "Retrieve a single release."}, {"name": "create_release", "description": "Create a release."}, {"name": "update_release", "description": "Update a release."}, {"name": "delete_release", "description": "Delete a release."}, # scheduling_stories.py {"name": "retrieve_multiple_story_schedules", "description": "Retrieve multiple story schedules."}, {"name": "retrieve_one_story_schedule", "description": "Retrieve one story schedule."}, {"name": "create_story_schedule", "description": "Create a story schedule."}, {"name": "update_story_schedule", "description": "Update a story schedule."}, {"name": "delete_story_schedule", "description": "Delete a story schedule."}, # space.py {"name": "fetch_spaces", "description": "Fetch spaces."}, {"name": "get_space", "description": "Get a space."}, {"name": "create_space", "description": "Create a space."}, {"name": "update_space", "description": "Update a space."}, {"name": "duplicate_space", "description": "Duplicate a space."}, {"name": "backup_space", "description": "Backup a space."}, {"name": "delete_space", "description": "Delete a space."}, # space_roles.py {"name": "fetch_space_roles", "description": "Fetch space roles."}, {"name": "get_space_role", "description": "Get a space role."}, {"name": "create_space_role", "description": "Create a space role."}, {"name": "update_space_role", "description": "Update a space role."}, {"name": "delete_space_role", "description": "Delete a space role."}, # stories.py {"name": "fetch_stories", "description": "Fetch stories."}, {"name": "get_story", "description": "Get a story."}, {"name": "create_story", "description": "Create a story."}, {"name": "update_story", "description": "Update a story."}, {"name": "delete_story", "description": "Delete a story."}, {"name": "publish_story", "description": "Publish a story."}, {"name": "unpublish_story", "description": "Unpublish a story."}, {"name": "get_story_versions", "description": "Get story versions."}, {"name": "restore_story", "description": "Restore a story."}, {"name": "validate_story_content", "description": "Validate story content."}, {"name": "debug_story_access", "description": "Debug story access."}, {"name": "bulk_publish_stories", "description": "Bulk publish stories."}, {"name": "bulk_delete_stories", "description": "Bulk delete stories."}, {"name": "bulk_update_stories", "description": "Bulk update stories."}, {"name": "bulk_create_stories", "description": "Bulk create stories."}, {"name": "get_unpublished_dependencies", "description": "Get unpublished dependencies."}, {"name": "ai_translate_story", "description": "AI translate story."}, {"name": "compare_story_versions", "description": "Compare story versions."}, # tags.py {"name": "retrieve_multiple_tags", "description": "Retrieve multiple tags."}, {"name": "create_tag", "description": "Create a tag."}, {"name": "update_tag", "description": "Update a tag."}, {"name": "delete_tag", "description": "Delete a tag."}, {"name": "tag_bulk_association", "description": "Bulk tag association."}, # tasks.py {"name": "retrieve_multiple_tasks", "description": "Retrieve multiple tasks."}, {"name": "retrieve_single_task", "description": "Retrieve a single task."}, {"name": "create_task", "description": "Create a task."}, {"name": "update_task", "description": "Update a task."}, {"name": "delete_task", "description": "Delete a task."}, # webhooks.py {"name": "retrieve_multiple_webhooks", "description": "Retrieve multiple webhooks."}, {"name": "retrieve_single_webhook", "description": "Retrieve a single webhook."}, {"name": "add_webhook", "description": "Add a webhook."}, {"name": "update_webhook", "description": "Update a webhook."}, {"name": "delete_webhook", "description": "Delete a webhook."}, # workflows.py {"name": "retrieve_multiple_workflows", "description": "Retrieve multiple workflows."}, {"name": "retrieve_single_workflow", "description": "Retrieve a single workflow."}, {"name": "create_workflow", "description": "Create a workflow."}, {"name": "update_workflow", "description": "Update a workflow."}, {"name": "duplicate_workflow", "description": "Duplicate a workflow."}, {"name": "delete_workflow", "description": "Delete a workflow."}, # workflow_stage.py {"name": "retrieve_multiple_workflow_stages", "description": "Retrieve multiple workflow stages."}, {"name": "retrieve_single_workflow_stage", "description": "Retrieve a single workflow stage."}, {"name": "create_workflow_stage", "description": "Create a workflow stage."}, {"name": "update_workflow_stage", "description": "Update a workflow stage."}, {"name": "delete_workflow_stage", "description": "Delete a workflow stage."}, # workflow_stage_changes.py {"name": "retrieve_multiple_workflow_stage_changes", "description": "Retrieve multiple workflow stage changes."}, {"name": "create_workflow_stage_change", "description": "Create a workflow stage change."}, ] # Register all modular tool implementations for Storyblok MCP register_components(mcp, client) register_components_folder(mcp, client) register_stories(mcp, client) register_assets(mcp, client) register_tags(mcp, client) register_meta(mcp, all_tools_info) register_releases(mcp, client) register_ping(mcp, client) register_assets_folder(mcp, client) register_datasources(mcp, client) register_datasource_entries(mcp, client) register_space(mcp, client) register_space_roles(mcp, client) register_presets(mcp, client) register_access_tokens(mcp, client) register_workflows(mcp, client) register_workflow_stages(mcp, client) register_workflow_stage_changes(mcp, client) register_story_schedules(mcp, client) register_branches(mcp, client) register_branch_deployments(mcp, client) register_discussions(mcp, client) register_tasks(mcp, client) register_webhooks(mcp, client) register_internal_tags(mcp, client) register_collaborators(mcp, client) register_approvals(mcp, client) register_activities(mcp, client) register_extensions(mcp, client) register_field_plugin_retrieval(mcp, client) # Graceful exit on unexpected errors def _exit(*args): """Exit the application gracefully on SIGINT or SIGTERM signals.""" sys.exit(1) signal.signal(signal.SIGINT, _exit) signal.signal(signal.SIGTERM, _exit) # Entry point: Run the MCP server using stdio transport if __name__ == "__main__": mcp.run(transport='stdio')

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/Kiran1689/storyblok-mcp-server'

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