ASCII Motion MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LIVE | Yes | Enable live browser sync via WebSocket. Required for visual output. Set to 'true' to enable. | true |
| PORT | No | WebSocket port for live mode (default: 9876). | 9876 |
| PROJECT_DIR | No | Project directory for file operations (default: current working directory). |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_cellA | Get the character and colors at a specific canvas position |
| set_cellA | Set the character and/or colors at a specific canvas position |
| clear_cellA | Clear a cell, resetting it to empty (space with transparent background) |
| set_cells_batchA | Set multiple cells in a single operation. More efficient than calling set_cell repeatedly. |
| paste_ascii_blockB | Paste a multi-line ASCII art block onto the canvas at a specified position. Great for pasting found ASCII art. |
| fill_regionB | Fill a region with a character and colors. Can be contiguous (flood fill) or global (all matching cells). |
| resize_canvasA | Resize the canvas. Content outside the new bounds will be clipped. |
| clear_canvasA | Clear all cells on the current frame, leaving it empty |
| list_framesA | List all frames in the animation with their metadata |
| add_frameC | Add a new frame to the animation |
| delete_frameA | Delete a frame from the animation. Cannot delete the last remaining frame. |
| duplicate_frameB | Duplicate a frame, inserting the copy immediately after the original |
| go_to_frameB | Navigate to a specific frame, making it the current/active frame |
| set_frame_durationB | Set the duration of a frame in milliseconds |
| set_frame_nameB | Set or change the name of a frame |
| new_projectA | Create a new empty project, discarding any unsaved changes |
| save_projectB | Save the current project to a .asciimtn file |
| load_projectA | Load a project from a .asciimtn file |
| get_project_infoC | Get information about the current project |
| set_project_nameC | Set the project name |
| list_project_filesB | List all .asciimtn project files in the project directory |
| get_canvas_summaryA | Get a compact summary of the canvas (dimensions, fill count, bounding box). Use this first to understand the canvas before requesting more detail. |
| get_canvas_previewB | Get non-empty cells in a region. Use for inspecting specific areas. |
| get_canvas_asciiA | Get the canvas as raw ASCII text (characters only, no color info). Good for verifying visual appearance. |
| get_frame_diffA | Get the cells that differ between two frames. Useful for understanding animation changes. |
| describe_animationA | Get a high-level description of the animation: frame count, timing, and motion patterns. |
| undoB | Undo the last action |
| redoA | Redo the last undone action |
| get_history_statusA | Check if undo/redo is available and what actions can be undone/redone |
| copy_frame_and_modifyA | Duplicate a frame and apply modifications in a single operation. Efficient for creating animation sequences. |
| shift_frame_contentA | Shift all content on the current frame by an x/y offset. Useful for creating scrolling or movement animations. |
| flip_regionB | Flip/mirror content horizontally or vertically |
| copy_region_to_frameC | Copy a region of cells from one frame to another |
| interpolate_framesC | Generate intermediate frames between two keyframes. Creates smooth transitions. |
| select_rectangleC | Select a rectangular region of the canvas |
| select_by_colorA | Select cells that match specific criteria (magic wand style) |
| get_selectionB | Get the current selection bounds and contents |
| clear_selectionA | Clear the current selection (deselect) |
| apply_to_selectionC | Apply an operation to all cells in the current selection |
| delete_selection_contentB | Delete all cell content within the current selection |
| export_textA | Export the current frame or all frames as plain text (.txt). Returns ASCII art as text. |
| export_jsonA | Export the project as structured JSON data. Good for programmatic processing. |
| export_sessionA | Export the project as an .asciimtn session file (can be loaded by Ascii-Motion app). |
| export_htmlB | Export the animation as a self-contained HTML file with embedded animation player. |
| export_reactB | Export the animation as a React component (JSX or TSX). |
| export_ansiB | Export the current frame with ANSI escape codes for terminal display. |
| apply_effectC | Apply a visual effect to the current frame or selection. Effects modify colors and/or characters. |
| get_color_statsA | Get statistics about colors used in the current frame. Useful before applying color effects. |
| batch_recolorB | Replace one color with another across the entire frame or selection. |
| batch_replace_charA | Replace one character with another across the entire frame or selection. |
| get_effect_blocksA | List all procedural effect blocks across layers, groups, and global effects. Shows effect type, timing, enabled status, and keyframe count. |
| add_effect_blockA | Add a non-destructive procedural effect to a layer, group, or global effects. Available types: levels, hue-saturation, remap-colors, remap-characters, scatter, wave-warp, wiggle. |
| update_effect_blockB | Update a procedural effect block's settings, timing, or enabled state. |
| remove_effect_blockB | Remove a procedural effect block from its owner (layer, group, or global). |
| add_effect_keyframeA | Add a keyframe to a procedural effect property. Creates the property track if it doesn't exist. |
| remove_effect_keyframeB | Remove a keyframe from a procedural effect property track. |
| run_generatorC | Generate procedural animation frames. Creates new frames with animated patterns. |
| preview_generatorA | Preview a single frame from a generator without applying to the project. |
| export_inkA | Export the current frame as an Ink (React CLI) component for Node.js terminal apps. |
| export_bubbleteaA | Export the current frame as a Bubbletea (Go TUI) component. |
| export_opentuiB | Export the current frame as an OpenTUI (Python TUI) component. |
| import_imageB | Import an image file and convert it to ASCII art on the canvas. Requires optional "sharp" or "jimp" package for image processing. |
| import_videoB | Import a video file and convert each frame to ASCII art animation. Requires ffmpeg and optional image processing package. |
| import_ascii_textC | Import ASCII art from a plain text file onto the canvas. |
| list_character_palettesA | List all available character palettes for ASCII art. |
| get_character_paletteA | Get all characters from a specific palette. |
| list_color_palettesB | List all available color palettes. |
| get_color_paletteB | Get all colors from a specific palette. |
| get_active_colorsA | Get the currently active foreground and background colors. |
| set_foreground_colorB | Set the active foreground (text) color. |
| set_background_colorB | Set the active background color. |
| set_selected_characterB | Set the active character used for drawing. |
| suggest_palette_for_styleC | Get palette recommendations for a specific style. |
| refresh_state_from_browserA | Request the browser to send its current state. Use this before reading canvas data to ensure you have the latest state. Returns success if browser is connected and responded. |
| compare_framesB | Compare two frames and show what cells changed between them. Useful for understanding motion and edits in an animation. |
| get_layersA | Get all layers in the project with their metadata, content frame count, and property track info. |
| add_layerA | Add a new layer to the project. If project is in legacy frame mode, this switches it to layer mode. |
| remove_layerA | Remove a layer by ID. Cannot remove the last remaining layer. |
| duplicate_layerA | Duplicate a layer with all its content frames and property tracks. |
| set_active_layerA | Set which layer is active for drawing and editing operations. |
| rename_layerB | Rename a layer. |
| reorder_layersB | Move a layer from one z-order position to another. Index 0 = bottom layer. |
| set_layer_visibilityC | Set visibility, solo, lock, or opacity on a layer. |
| add_content_frameB | Add a new content frame (canvas data segment) to a layer at a specific timeline position. |
| remove_content_frameB | Remove a content frame from a layer. |
| add_keyframeA | Add a keyframe to a layer property track. Creates the property track if it doesn't exist. |
| remove_keyframeC | Remove a keyframe from a property track. |
| get_layer_propertiesA | Get all transform property values for a layer at the current frame, including keyframe status. |
| create_groupB | Create a layer group to organize layers together. |
| ungroup_layersA | Dissolve a layer group, keeping the layers. |
| set_frame_rateA | Set the timeline frame rate (FPS). Preserves frame count — only changes playback speed. |
| set_timeline_durationA | Set the total timeline duration in frames. |
| get_connection_statusA | Check browser connection status. Returns whether browser is connected and client count |
| get_auth_tokenA | Get the authentication token for browser connection. |
| export_imageA | Export the current frame as an image (PNG, JPG, or SVG). The browser renders the image at full quality. Requires live mode with a connected browser. |
| export_videoA | Export the animation as a video file (MP4 or WebM). The browser renders each frame and encodes the video. Requires live mode with a connected browser. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create-animation | Create a simple animation with multiple frames |
| import-and-animate | Import an image and create an animation from it |
| generate-rain | Generate a digital rain (Matrix-style) animation |
| create-banner | Create an animated text banner or logo |
| apply-effects | Apply visual effects to existing ASCII art |
| export-for-cli | Export ASCII art for use in terminal/CLI applications |
| add-effects | Add procedural (non-destructive) effects to an animation for color adjustments, distortions, or character remapping |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| project-state | Current project state including canvas, frames, and settings. Returns a complete snapshot. |
| project-canvas | Current frame canvas data as a sparse map of cell positions to cell data. |
| project-frames | List of all animation frames with their metadata (id, name, duration, cell count). |
| project-selection | Current selection state including type and selected cells. |
| project-history | Undo/redo history status including available actions. |
| project-ascii | Plain text ASCII art preview of the current frame. |
| project-layers | Layer structure with content frames, property tracks, and groups. Only available in layer mode (v2). |
| guide-llm-best-practices | Best practices for LLMs using ASCII Motion MCP. Read before complex animation tasks. |
| guide-tool-categories | Quick reference of all available tool categories. |
Latest Blog Posts
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/CameronFoxly/ascii-motion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server