MCP Server

The Scribble Thing

club.boringstuff/the-scribble-thing
Design & Creative Media & Content Public & reachable MCP 2025-11-25

What this MCP does

Creates asynchronous hand-drawn scribe animation videos from line-art images and provides preview and download access.

create_scribe_animation
Create an asynchronous animation from a base64-encoded line-art image.
Open world Idempotent
Input schema
{'type': 'object', 'title': 'create_scribe_animationArguments', 'required': ['image_base64', 'image_mime_type', 'idempotency_key', 'accepted_terms_version', 'accept_terms', 'accept_retention'], 'properties': {'speed': {'enum': ['slow', 'normal', 'fast'], 'type': 'string', 'title': 'Speed', 'default': 'normal'}, 'show_hand': {'type': 'boolean', 'title': 'Show Hand', 'default': False}, 'order_text': {'type': 'string', 'title': 'Order Text', 'default': '', 'maxLength': 2000}, 'accept_terms': {'type': 'boolean', 'title': 'Accept Terms'}, 'image_base64': {'type': 'string', 'title': 'Image Base64', 'maxLength': 14000000, 'minLength': 4, 'description': 'Raw base64 PNG or JPEG bytes; do not include a data-URL prefix.'}, 'idempotency_key': {'type': 'string', 'title': 'Idempotency Key', 'maxLength': 200, 'minLength': 8}, 'image_mime_type': {'enum': ['image/png', 'image/jpeg'], 'type': 'string', 'title': 'Image Mime Type'}, 'installation_id': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 8}, {'type': 'null'}], 'title': 'Installation Id', 'default': None}, 'accept_retention': {'type': 'boolean', 'title': 'Accept Retention'}, 'accepted_terms_version': {'type': 'string', 'title': 'Accepted Terms Version', 'maxLength': 40, 'minLength': 1}}}
Output schema
{'type': 'object', '$defs': {'AgentUnlockDetails': {'type': 'object', 'title': 'AgentUnlockDetails', 'required': ['state', 'instructions', 'endpoint', 'purchase_url'], 'properties': {'state': {'enum': ['watermarked', 'unlocked'], 'type': 'string', 'title': 'State'}, 'endpoint': {'type': 'string', 'title': 'Endpoint'}, 'instructions': {'type': 'string', 'title': 'Instructions'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}}}}, 'title': 'AgentCreateResponse', 'required': ['animation_id', 'status', 'stage', 'progress', 'error', 'created_at', 'expires_at', 'seconds_remaining', 'retention_hours', 'terms_version', 'unlocked', 'preview_download_available', 'clean_download_available', 'status_url', 'preview_url', 'clean_url', 'manage_url', 'purchase_url', 'unlock', 'access_token', 'token_type', 'idempotent_replay'], 'properties': {'error': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}], 'title': 'Error'}, 'stage': {'type': 'string', 'title': 'Stage', 'description': 'Short user-facing description of current work.'}, 'status': {'enum': ['queued', 'running', 'completed', 'failed'], 'type': 'string', 'title': 'Status', 'description': 'Current asynchronous job state.'}, 'unlock': {'$ref': '#/$defs/AgentUnlockDetails'}, 'progress': {'type': 'integer', 'title': 'Progress', 'maximum': 100, 'minimum': 0, 'description': 'Approximate percent complete.'}, 'unlocked': {'type': 'boolean', 'title': 'Unlocked'}, 'clean_url': {'type': 'string', 'title': 'Clean Url'}, 'created_at': {'type': 'string', 'title': 'Created At'}, 'expires_at': {'type': 'string', 'title': 'Expires At'}, 'manage_url': {'type': 'string', 'title': 'Manage Url', 'description': 'Private browser handoff URL for user review and unlock.'}, 'status_url': {'type': 'string', 'title': 'Status Url'}, 'token_type': {'type': 'string', 'const': 'Bearer', 'title': 'Token Type'}, 'preview_url': {'type': 'string', 'title': 'Preview Url'}, 'access_token': {'type': 'string', 'title': 'Access Token', 'description': 'Secret bearer capability scoped to this animation only.'}, 'animation_id': {'type': 'string', 'title': 'Animation Id', 'description': 'Canonical UUID for this animation.'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}, 'terms_version': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Terms Version'}, 'retention_hours': {'type': 'integer', 'title': 'Retention Hours'}, 'idempotent_replay': {'type': 'boolean', 'title': 'Idempotent Replay'}, 'seconds_remaining': {'type': 'integer', 'title': 'Seconds Remaining'}, 'clean_download_available': {'type': 'boolean', 'title': 'Clean Download Available'}, 'preview_download_available': {'type': 'boolean', 'title': 'Preview Download Available'}}}
delete_scribe_animation
Immediately delete one animation session and all of its stored files.
Destructive Open world
Input schema
{'type': 'object', 'title': 'delete_scribe_animationArguments', 'required': ['animation_id', 'access_token'], 'properties': {'access_token': {'type': 'string', 'title': 'Access Token', 'maxLength': 128, 'minLength': 32}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}}}
Output schema
{'type': 'object', 'title': 'MCPDeleteResponse', 'required': ['animation_id', 'deleted'], 'properties': {'deleted': {'type': 'boolean', 'title': 'Deleted'}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}}}
get_scribble_service_info
Get current limits, terms, retention, pricing, and integration URLs.
Read only Open world Idempotent
Input schema
{'type': 'object', 'title': 'get_scribble_service_infoArguments', 'properties': {}}
Output schema
{'type': 'object', 'title': 'MCPServiceInfo', 'required': ['service', 'website_url', 'mcp_url', 'rest_documentation_url', 'skill_url', 'current_terms_version', 'terms_url', 'privacy_url', 'retention_hours', 'max_upload_bytes', 'max_image_dimension', 'accepted_image_types', 'watermarked_preview_price', 'clean_video_unlock_price', 'purchase_url'], 'properties': {'mcp_url': {'type': 'string', 'title': 'Mcp Url'}, 'service': {'type': 'string', 'title': 'Service'}, 'skill_url': {'type': 'string', 'title': 'Skill Url'}, 'terms_url': {'type': 'string', 'title': 'Terms Url'}, 'privacy_url': {'type': 'string', 'title': 'Privacy Url'}, 'website_url': {'type': 'string', 'title': 'Website Url'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}, 'retention_hours': {'type': 'integer', 'title': 'Retention Hours'}, 'max_upload_bytes': {'type': 'integer', 'title': 'Max Upload Bytes'}, 'max_image_dimension': {'type': 'integer', 'title': 'Max Image Dimension'}, 'accepted_image_types': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Accepted Image Types'}, 'current_terms_version': {'type': 'string', 'title': 'Current Terms Version'}, 'rest_documentation_url': {'type': 'string', 'title': 'Rest Documentation Url'}, 'clean_video_unlock_price': {'type': 'string', 'title': 'Clean Video Unlock Price'}, 'watermarked_preview_price': {'type': 'string', 'title': 'Watermarked Preview Price'}}}
get_scribe_animation
Poll one private animation until it completes or fails.
Read only Open world Idempotent
Input schema
{'type': 'object', 'title': 'get_scribe_animationArguments', 'required': ['animation_id', 'access_token'], 'properties': {'access_token': {'type': 'string', 'title': 'Access Token', 'maxLength': 128, 'minLength': 32}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}}}
Output schema
{'type': 'object', '$defs': {'AgentUnlockDetails': {'type': 'object', 'title': 'AgentUnlockDetails', 'required': ['state', 'instructions', 'endpoint', 'purchase_url'], 'properties': {'state': {'enum': ['watermarked', 'unlocked'], 'type': 'string', 'title': 'State'}, 'endpoint': {'type': 'string', 'title': 'Endpoint'}, 'instructions': {'type': 'string', 'title': 'Instructions'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}}}}, 'title': 'AgentAnimationResponse', 'required': ['animation_id', 'status', 'stage', 'progress', 'error', 'created_at', 'expires_at', 'seconds_remaining', 'retention_hours', 'terms_version', 'unlocked', 'preview_download_available', 'clean_download_available', 'status_url', 'preview_url', 'clean_url', 'manage_url', 'purchase_url', 'unlock'], 'properties': {'error': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}], 'title': 'Error'}, 'stage': {'type': 'string', 'title': 'Stage', 'description': 'Short user-facing description of current work.'}, 'status': {'enum': ['queued', 'running', 'completed', 'failed'], 'type': 'string', 'title': 'Status', 'description': 'Current asynchronous job state.'}, 'unlock': {'$ref': '#/$defs/AgentUnlockDetails'}, 'progress': {'type': 'integer', 'title': 'Progress', 'maximum': 100, 'minimum': 0, 'description': 'Approximate percent complete.'}, 'unlocked': {'type': 'boolean', 'title': 'Unlocked'}, 'clean_url': {'type': 'string', 'title': 'Clean Url'}, 'created_at': {'type': 'string', 'title': 'Created At'}, 'expires_at': {'type': 'string', 'title': 'Expires At'}, 'manage_url': {'type': 'string', 'title': 'Manage Url', 'description': 'Private browser handoff URL for user review and unlock.'}, 'status_url': {'type': 'string', 'title': 'Status Url'}, 'preview_url': {'type': 'string', 'title': 'Preview Url'}, 'animation_id': {'type': 'string', 'title': 'Animation Id', 'description': 'Canonical UUID for this animation.'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}, 'terms_version': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Terms Version'}, 'retention_hours': {'type': 'integer', 'title': 'Retention Hours'}, 'seconds_remaining': {'type': 'integer', 'title': 'Seconds Remaining'}, 'clean_download_available': {'type': 'boolean', 'title': 'Clean Download Available'}, 'preview_download_available': {'type': 'boolean', 'title': 'Preview Download Available'}}}
get_scribe_animation_download
Create a short-lived download URL for a completed preview or clean video.
Read only Open world Idempotent
Input schema
{'type': 'object', 'title': 'get_scribe_animation_downloadArguments', 'required': ['animation_id', 'access_token', 'kind'], 'properties': {'kind': {'enum': ['preview', 'clean'], 'type': 'string', 'title': 'Kind'}, 'access_token': {'type': 'string', 'title': 'Access Token', 'maxLength': 128, 'minLength': 32}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}}}
Output schema
{'type': 'object', 'title': 'MCPDownloadResponse', 'required': ['animation_id', 'kind', 'available', 'download_url', 'bearer_required', 'expires_in_seconds', 'manage_url', 'message'], 'properties': {'kind': {'enum': ['preview', 'clean'], 'type': 'string', 'title': 'Kind'}, 'message': {'type': 'string', 'title': 'Message'}, 'available': {'type': 'boolean', 'title': 'Available'}, 'manage_url': {'type': 'string', 'title': 'Manage Url'}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}, 'download_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Download Url'}, 'bearer_required': {'type': 'boolean', 'title': 'Bearer Required'}, 'expires_in_seconds': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Expires In Seconds'}}}
redeem_scribe_unlock_code
Consume a user-supplied single-use code to unlock one clean video.
Destructive Open world
Input schema
{'type': 'object', 'title': 'redeem_scribe_unlock_codeArguments', 'required': ['animation_id', 'access_token', 'unlock_code'], 'properties': {'unlock_code': {'type': 'string', 'title': 'Unlock Code', 'maxLength': 100, 'minLength': 1}, 'access_token': {'type': 'string', 'title': 'Access Token', 'maxLength': 128, 'minLength': 32}, 'animation_id': {'type': 'string', 'title': 'Animation Id'}}}
Output schema
{'type': 'object', '$defs': {'AgentUnlockDetails': {'type': 'object', 'title': 'AgentUnlockDetails', 'required': ['state', 'instructions', 'endpoint', 'purchase_url'], 'properties': {'state': {'enum': ['watermarked', 'unlocked'], 'type': 'string', 'title': 'State'}, 'endpoint': {'type': 'string', 'title': 'Endpoint'}, 'instructions': {'type': 'string', 'title': 'Instructions'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}}}}, 'title': 'AgentAnimationResponse', 'required': ['animation_id', 'status', 'stage', 'progress', 'error', 'created_at', 'expires_at', 'seconds_remaining', 'retention_hours', 'terms_version', 'unlocked', 'preview_download_available', 'clean_download_available', 'status_url', 'preview_url', 'clean_url', 'manage_url', 'purchase_url', 'unlock'], 'properties': {'error': {'anyOf': [{'type': 'object', 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, {'type': 'null'}], 'title': 'Error'}, 'stage': {'type': 'string', 'title': 'Stage', 'description': 'Short user-facing description of current work.'}, 'status': {'enum': ['queued', 'running', 'completed', 'failed'], 'type': 'string', 'title': 'Status', 'description': 'Current asynchronous job state.'}, 'unlock': {'$ref': '#/$defs/AgentUnlockDetails'}, 'progress': {'type': 'integer', 'title': 'Progress', 'maximum': 100, 'minimum': 0, 'description': 'Approximate percent complete.'}, 'unlocked': {'type': 'boolean', 'title': 'Unlocked'}, 'clean_url': {'type': 'string', 'title': 'Clean Url'}, 'created_at': {'type': 'string', 'title': 'Created At'}, 'expires_at': {'type': 'string', 'title': 'Expires At'}, 'manage_url': {'type': 'string', 'title': 'Manage Url', 'description': 'Private browser handoff URL for user review and unlock.'}, 'status_url': {'type': 'string', 'title': 'Status Url'}, 'preview_url': {'type': 'string', 'title': 'Preview Url'}, 'animation_id': {'type': 'string', 'title': 'Animation Id', 'description': 'Canonical UUID for this animation.'}, 'purchase_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Purchase Url'}, 'terms_version': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Terms Version'}, 'retention_hours': {'type': 'integer', 'title': 'Retention Hours'}, 'seconds_remaining': {'type': 'integer', 'title': 'Seconds Remaining'}, 'clean_download_available': {'type': 'boolean', 'title': 'Clean Download Available'}, 'preview_download_available': {'type': 'boolean', 'title': 'Preview Download Available'}}}
Added
delete_scribe_animation
Sept. 17, 2026, 7:58 a.m.
Added
redeem_scribe_unlock_code
Sept. 17, 2026, 7:58 a.m.
Added
get_scribe_animation_download
Sept. 17, 2026, 7:58 a.m.
Added
get_scribe_animation
Sept. 17, 2026, 7:58 a.m.
Added
create_scribe_animation
Sept. 17, 2026, 7:58 a.m.
Added
get_scribble_service_info
Sept. 17, 2026, 7:58 a.m.