MCP server for Efecto - create stunning visual designs with ASCII effects, glitch art, and more from your CLI
npm install @efectoapp/mcp-serverModel Context Protocol (MCP) server for programmatic poster creation with Efecto.
Create stunning visual designs with ASCII effects, glitch art, halftone patterns, animated text, and more—all from your CLI or AI agent.
Install and set up:
``bash`
npx @efectoapp/mcp-server install
Then restart Claude Code and you're ready to go!
Ask Claude:
> "Use efecto to list available effects"
`bash`
claude mcp add efecto -- npx @efectoapp/mcp-server
> "Make a cyberpunk image that says DOPE for Instagram"
`
1. search_images({ query: "cyberpunk", orientation: "vertical" })
→ Returns images from Lummi
2. create_poster({ aspectRatio: "9:16" })
→ Creates Instagram story format
3. set_background({ type: "image", imageUrl: "
→ Sets the cyberpunk image as background
4. apply_effect({ effectId: "glitch-digital" })
→ Applies digital glitch effect
5. add_postprocess({ type: "chromatic-aberration", strength: 0.02 })
→ Adds RGB split effect
6. add_postprocess({ type: "scanlines", intensity: 0.3 })
→ Adds CRT scanlines
7. add_layer({ type: "text", content: "DOPE", fontSize: 120, fontFamily: "Space Grotesk", color: "#ffffff", animationType: "glitch", animationSpeed: 2 })
→ Adds animated glitch title text
8. generate_url()
→ Returns shareable URL like https://efecto.app/canvas?lm=1&...
`
| Tool | Description |
|------|-------------|
| list_effects | List all available main effects |list_fonts
| | List available fonts for text layers |list_palettes
| | List color palettes |list_materials
| | List 3D materials |list_postprocess
| | List post-processing effects |list_text_animations
| | List text animation types and parameters |
#### search_images
Search for free stock images from Lummi.
| Parameter | Type | Description |
|-----------|------|-------------|
| query | string | Search query (e.g., "cyberpunk", "nature"). Empty = featured |orientation
| | string | "vertical" (9:16), "horizontal" (16:9), "square" (1:1) |type
| | string | "photo", "illustration", "3d" |luminance
| | string | "dark", "neutral", "bright" |limit
| | number | Max results (default: 10, max: 50) |
#### create_poster
Create a new poster.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| aspectRatio | string | "16:9" | "16:9", "9:16", "1:1", "4:3", "full" |backgroundColor
| | string | "#1a1a1a" | Background color (hex) |
#### set_background
Set the background layer (always at index 0).
| Parameter | Type | Description |
|-----------|------|-------------|
| type | string | "solid" or "image" |color
| | string | Hex color (for solid type) |imageUrl
| | string | Image URL (for image type) |
#### add_layer
Add a layer to the poster.
| Parameter | Type | Description |
|-----------|------|-------------|
| type | string | "text", "image", "video", "3d" |name
| | string | Layer name |
Text layer parameters:
- content: Text contentfontFamily
- : Font name (e.g., "Space Grotesk", "Inter")fontSize
- : Size in pixelsfontWeight
- : "normal", "medium", "semibold", "bold"color
- : Hex colortextAlign
- : "left", "center", "right"
Text animation parameters (optional):
- animationType: Animation type (see below)animationSpeed
- : Speed multiplier (0.1-5.0)animationAmplitude
- : Intensity (0-100)animationStaggerDelay
- : Delay between characters in ms (0-500)animationStaggerMode
- : "sequential", "random", "center-out", "edges-in"animationLoop
- : Loop the animation (default: true)
Animation types: wave, rotate, scale, orbit, bounce, shake, spiral, typewriter, glitch, elastic, cascade, neon
Each animation type has additional specific parameters. Use list_text_animations to see all options.
Image/Video layer parameters:
- mediaUrl: Media URLobjectFit
- : "cover", "contain"
Transform parameters (all layers):
- x, y: Position (-1 to 1, 0 = center)width
- , height: Size (0 to 1+, 1 = full canvas)rotation
- : Degreesopacity
- : 0-1
#### modify_layer
Modify an existing layer by ID.
#### remove_layer
Remove a layer by ID (cannot remove background).
#### apply_effect
Apply the main effect. Only one can be active.
| Parameter | Type | Description |
|-----------|------|-------------|
| effectId | string | Effect ID (see below) |enabled
| | boolean | Enable/disable (default: true) |
Available Effect IDs:
| Category | Effect IDs |
|----------|------------|
| ASCII | ascii-standard, ascii-blocks, ascii-braille, ascii-hatching, ascii-matrix, ascii-technical, ascii-dense, ascii-minimal |dither-floyd-steinberg
| Dither | , dither-atkinson, dither-jarvis-judice-ninke, dither-stucki, dither-burkes, dither-sierra, dither-two-row-sierra, dither-sierra-lite |halftone-mono
| Halftone | , halftone-cmyk |glitch-chromatic
| Glitch | , glitch-digital, glitch-vhs, glitch-weird |art-kuwahara
| Art | , art-crosshatch, art-lineart, art-engraving, art-stipple |
Effect-specific parameters:
- ASCII: cellSize (4-32), color (bool), invert (bool)pixelation
- Dither: (1-10), colors (array)dotSize
- Halftone: speed
- Glitch:
#### add_postprocess
Add a stackable post-processing effect.
| Parameter | Type | Description |
|-----------|------|-------------|
| type | string | Post-process type (see below) |enabled
| | boolean | Enable/disable |
Post-process types: scanlines, vignette, chromatic-aberration, curvature, grain, noise, pixelate, wave, rgb-glitch, brightness-contrast, color-tint, palette, jitter, bloom, dot-screen, sepia, grid, light-beams, motion-blur
Common parameters by type:
- scanlines: intensity, countvignette
- : intensity, radiuschromatic-aberration
- : strength, anglegrain
- : intensity, size, speedbrightness-contrast
- : brightness, contrast, saturation, huepalette
- : colors (array), intensity
#### get_state
Get the current poster state as JSON.
#### generate_url
Generate a shareable URL for the current poster.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| baseUrl | string | "https://efecto.app" | Base URL |
Returns a URL that opens in any browser with all effects applied.
#### render_image
Render the poster to an image (async).
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| format | string | "png" | "png", "jpeg", "webp" |width
| | number | auto | Output width |height
| | number | auto | Output height |quality
| | number | 90 | JPEG/WebP quality |
Returns a job ID for polling status.
`bash`
pnpm install # Install dependencies
pnpm build # Build TypeScript
pnpm dev # Watch mode
pnpm start # Run server
The MCP server calls these Efecto API endpoints:
| Endpoint | Method | Description |
|----------|--------|-------------|
| /api/v1/images/search | GET | Search Lummi images |/api/v1/state/encode
| | POST | Encode state to URL |/api/v1/state/decode
| | POST | Decode URL to state |/api/v1/state/validate
| | POST | Validate state |/api/v1/render` | POST | Render to image |
|
MIT