PluginBench
MCP Server
Maintained
MIT

io.github.ethbak/icon-composer-mcp MCP Server

io.github.ethbak/icon-composer-mcp

Create Apple .icon bundles with Liquid Glass effects for iOS 26+ via CLI or MCP server.

What is the io.github.ethbak/icon-composer-mcp MCP server?

Icon Composer MCP is a CLI and MCP server for creating Apple .icon bundles with Liquid Glass effects (iOS 26+). It provides 12 MCP tools and a command-line interface to programmatically generate icons, logos, and images with specular highlights, blur materials, shadows, and translucency. The server supports dark mode and appearance variants, and integrates with Apple's Icon Composer for pixel-perfect rendering.

Icon Composer MCP lets you create professional Apple .icon bundles with advanced Liquid Glass visual effects. You can build icons from PNG or SVG glyphs, customize glass effects (specular highlights, blur, shadows, translucency), set up dark mode and tinted appearance variants, and export previews or App Store-ready marketing images. It works as both a standalone CLI tool and an MCP server integrated with Claude, Cursor, VS Code, and other AI agents.

How to install io.github.ethbak/icon-composer-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "icon-composer-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "icon-composer-mcp"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • create_icon — Create a .icon bundle from a foreground image and background color
  • add_layer_to_icon — Add a new layer to an existing bundle
  • remove_layer — Remove a layer or group, optionally clean up assets
  • read_icon — Inspect bundle manifest and assets
  • set_glass_effects — Configure specular, blur, shadow, translucency
  • set_appearances — Set dark/tinted mode overrides
  • set_fill — Set background fill
  • set_layer_position — Adjust layer scale and offset
  • toggle_fx — Enable/disable all glass effects at once
  • export_preview — Render a preview PNG
  • render_liquid_glass — Render via Apple's ictool (requires Icon Composer)
  • export_marketing — Export flat opaque PNG for App Store Connect

Use cases

  • Create iOS app icons with Liquid Glass effects from a logo or glyph
  • Design dark mode and tinted appearance variants for icon bundles
  • Export preview PNGs and App Store Connect-ready marketing images
  • Programmatically build and modify .icon bundles with custom glass effects
  • Render pixel-perfect Liquid Glass icons using Apple's ictool

io.github.ethbak/icon-composer-mcp MCP server FAQ

What is Icon Composer MCP?

Icon Composer MCP is a CLI and MCP server for creating Apple .icon bundles with Liquid Glass effects. It provides 12 tools to build icons from images, customize glass effects, set appearance variants, and export previews or App Store-ready PNGs.

Is Icon Composer MCP free?

Yes, Icon Composer MCP is open-source and free to use. It is available on npm as icon-composer-mcp.

How do I install it in Cursor?

Add to `.cursor/mcp.json` in your project root or `~/.cursor/mcp.json` globally: {"mcpServers": {"icon-composer": {"command": "npx", "args": ["-y", "icon-composer-mcp"]}}}. The server will appear in Cursor Settings > MCP Servers.

How do I install it in Claude Desktop?

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`: {"mcpServers": {"icon-composer": {"command": "npx", "args": ["-y", "icon-composer-mcp"]}}}

Does Icon Composer MCP require authentication?

No authentication is required. However, rendering Liquid Glass effects requires macOS with Apple's Icon Composer installed (installable via `brew install --cask icon-composer`). Flat previews and bundle creation work on any platform.

What platforms does it support?

Icon Composer MCP runs on macOS, Linux, and Windows. Full Liquid Glass rendering requires macOS with Icon Composer installed; flat previews and bundle operations work on any platform.

README (reference)

Source of truth, from the repository.

<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="assets/banner-dark.png"> <source media="(prefers-color-scheme: light)" srcset="assets/banner-light.png"> <img alt="icon-composer-mcp" src="assets/banner-light.png" width="700"> </picture> </p> <h1 align="center">Icon Composer MCP</h1> <p align="center"> CLI and MCP server for creating images, icons, and logos with Liquid Glass effects (iOS 26+). Not affiliated with Apple . </p> <p align="center"> <a href="https://www.npmjs.com/package/icon-composer-mcp"><img src="https://img.shields.io/npm/v/icon-composer-mcp" alt="npm version"></a> <a href="LICENSE"><img src="https://img.shields.io/npm/l/icon-composer-mcp" alt="license"></a> <img src="https://img.shields.io/badge/platform-macOS-blue" alt="platform"> <img src="https://img.shields.io/badge/MCP-compatible-green" alt="MCP compatible"> <a href="https://glama.ai/mcp/servers/ethbak/icon-composer-mcp"><img src="https://glama.ai/mcp/servers/ethbak/icon-composer-mcp/badges/score.svg" alt="Glama score"></a> </p>

Demo

<p align="center"> <img alt="demo" src="assets/demo.gif" width="650"> </p>

Key Features

  • Create .icon bundles programmatically from PNG or SVG glyphs
  • Full Liquid Glass support: specular highlights, blur material, shadows, translucency
  • Dark mode + appearance variants with per-appearance fill specializations
  • AI-agent ready: 12 MCP tools + 3 workflow prompts with built-in instructions

Installation

<details open> <summary>&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/lobehub/lobe-icons/refs/heads/master/packages/static-svg/icons/claudecode-color.svg" width="16" height="16">&nbsp;<b>Claude Code</b></summary>

 

claude mcp add icon-composer -- npx -y icon-composer-mcp
</details> <details> <summary>&nbsp;&nbsp;<img src="https://cdn.simpleicons.org/claude/D97757" width="16" height="16">&nbsp;<b>Claude Desktop</b></summary>

 

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "icon-composer": {
      "command": "npx",
      "args": ["-y", "icon-composer-mcp"]
    }
  }
}
</details> <details> <summary>&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.simpleicons.org/cursor/FFFFFF"><source media="(prefers-color-scheme: light)" srcset="https://cdn.simpleicons.org/cursor/000000"><img src="https://cdn.simpleicons.org/cursor/000000" width="16" height="16"></picture>&nbsp;<b>Cursor</b></summary>

 

Add to .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "icon-composer": {
      "command": "npx",
      "args": ["-y", "icon-composer-mcp"]
    }
  }
}

The server will appear in Cursor Settings > MCP Servers. No restart required.

</details> <details> <summary>&nbsp;&nbsp;<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg" width="16" height="16">&nbsp;<b>VS Code</b></summary>

 

Add to .vscode/mcp.json in your project root (or open Command Palette > MCP: Open User Configuration for global):

Note: VS Code uses "servers" (not "mcpServers") and requires a "type" field.

{
  "servers": {
    "icon-composer": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "icon-composer-mcp"]
    }
  }
}

You'll see Start/Stop/Restart buttons inline in the editor. First launch will prompt a trust confirmation.

</details> <details> <summary>&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://cdn.simpleicons.org/windsurf/FFFFFF"><source media="(prefers-color-scheme: light)" srcset="https://cdn.simpleicons.org/windsurf/0B100F"><img src="https://cdn.simpleicons.org/windsurf/0B100F" width="16" height="16"></picture>&nbsp;<b>Windsurf</b></summary>

 

First, enable MCP in Windsurf Settings > Cascade > Model Context Protocol (MCP).

Then add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "icon-composer": {
      "command": "npx",
      "args": ["-y", "icon-composer-mcp"]
    }
  }
}

Press the refresh button in Windsurf settings to load the server.

</details> <details> <summary>&nbsp;&nbsp;<b>Other MCP clients</b></summary>

 

The server uses stdio transport. Most MCP clients use this config format:

{
  "mcpServers": {
    "icon-composer": {
      "command": "npx",
      "args": ["-y", "icon-composer-mcp"]
    }
  }
}

Or run the server directly:

npx -y icon-composer-mcp
</details> <details> <summary>&nbsp;&nbsp;<b>CLI only (no MCP)</b></summary>

 

npm install -g icon-composer-mcp
icon-composer --help
</details>

How It Works

<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="assets/how-it-works-dark.png"> <source media="(prefers-color-scheme: light)" srcset="assets/how-it-works-light.png"> <img alt="how it works" src="assets/how-it-works-light.png" width="700"> </picture> </p>
  1. Provide a glyph — any PNG or SVG logo/image
  2. Create a .icon bundle — sets background fill, layer scale, and glass effects
  3. Apple's ictool renders Liquid Glass — specular highlights, shadows, depth, and translucency
  4. Export — preview PNGs, App Store marketing icon, or the .icon bundle for Xcode

Requirements

  • Node.js 18+
  • macOS with Icon Composer for Liquid Glass rendering
    brew install --cask icon-composer
    
  • Flat previews, bundle creation/editing, and marketing export work on any platform without Icon Composer

Run icon-composer doctor to check your setup.

CLI Commands

CommandDescription
createCreate a new .icon bundle from a foreground image
add-layerAdd a layer to an existing bundle
removeRemove a layer or group
inspectRead and display bundle contents
glassConfigure Liquid Glass effects on a group
appearanceSet dark/tinted mode overrides
fillSet background fill (solid, gradient, automatic, none)
positionSet layer/group scale and offset
fxToggle all glass effects on/off
previewExport a preview PNG (Liquid Glass or flat)
renderRender pixel-perfect Liquid Glass via ictool
export-marketingExport flat 1024x1024 PNG for App Store Connect (no alpha)
doctorCheck system setup and dependencies

Details

<details> <summary><b><code>create</code></b> — Create a new <code>.icon</code> bundle</summary>

 

icon-composer create <foreground_path> <output_dir> --bg-color <hex> [options]
OptionDefaultDescription
--bg-color <hex>requiredBackground color (e.g. "#0A66C2")
--bundle-name <name>AppIconBundle name (without .icon extension)
--dark-bg-color <hex>—Dark mode background color
--glyph-scale <n>1.0Glyph scale (1.0 = standard ~65% of icon area)
--specular / --no-speculartrueSpecular highlight
--shadow-kind <kind>layer-colorShadow type: neutral, layer-color, none
--shadow-opacity <n>0.5Shadow opacity (0–1)
--blur-material <n>—Blur material value (0–1)
--translucency-enabledfalseEnable translucency gradient
--translucency-value <n>0.4Translucency amount (0–1)

Output: Creates <output_dir>/<bundle_name>.icon/ containing icon.json manifest and Assets/ directory.

</details> <details> <summary><b><code>add-layer</code></b> — Add a layer to an existing bundle</summary>

 

icon-composer add-layer <bundle_path> <image_path> --name <name> [options]
OptionDefaultDescription
--name <name>requiredLayer name
--group-index <n>0Target group index
--create-groupfalseCreate a new group for this layer
--opacity <n>1.0Layer opacity (0–1)
--scale <n>1.0Layer scale
--offset-x <n>0X offset in points
--offset-y <n>0Y offset in points
--blend-mode <mode>normalBlend mode (e.g. multiply, screen, overlay)
--glass / --no-glasstrueParticipate in Liquid Glass effects

Supported formats: .png, .jpg, .jpeg, .svg, .webp, .heic, .heif

</details> <details> <summary><b><code>remove</code></b> — Remove a layer or group</summary>

 

icon-composer remove <bundle_path> --target <layer|group> --group-index <n> [--layer-index <n>]
</details> <details> <summary><b><code>inspect</code></b> — Read and display bundle contents</summary>

 

icon-composer inspect <bundle_path>

Output: Prints the full manifest JSON and lists all assets with sizes.

</details> <details> <summary><b><code>glass</code></b> — Configure Liquid Glass effects</summary>

 

icon-composer glass <bundle_path> [options]
OptionDescription
--group-index <n>Target group (default: 0)
--specular / --no-specularSpecular highlight
--blur-material <n>Blur amount (0–1)
--shadow-kind <kind>neutral, layer-color, or none
--shadow-opacity <n>Shadow opacity (0–1)
--translucency-enabled / --no-translucency-enabledTranslucency toggle
--translucency-value <n>Translucency amount (0–1)
--opacity <n>Group opacity (0–1)
--blend-mode <mode>Group blend mode
--lighting <type>combined or individual
</details> <details> <summary><b><code>appearance</code></b> — Set dark/tinted mode overrides</summary>

 

icon-composer appearance <bundle_path> --target <fill|group|layer> --appearance <dark|tinted> [options]
OptionDescription
--target <type>fill (background color), group (glass effects), or layer (individual layer)
--appearance <mode>dark or tinted
--group-index <n>Group index (for target=group or target=layer)
--layer-index <n>Layer index within the group (required when target=layer)
--bg-color <hex>Background color for this appearance
--specular / --no-specularSpecular for this appearance
--shadow-kind <kind>Shadow type for this appearance
--shadow-opacity <n>Shadow opacity for this appearance
--opacity <n>Opacity for this appearance
--blur-material <n>Blur material value (0–1) for this appearance
--translucency-enabled / --no-translucency-enabledTranslucency toggle for this appearance
--translucency-value <n>Translucency amount (0–1) for this appearance
--hidden / --no-hiddenHidden state for this appearance
--blend-mode <mode>Blend mode for this appearance (target=layer)
--fill-color <hex>Fill color for this appearance (target=layer)
--position-scale <n>Position scale for this appearance
--position-offset-x <n>Position X offset for this appearance
--position-offset-y <n>Position Y offset for this appearance
</details> <details> <summary><b><code>fill</code></b> — Set background fill</summary>

 

icon-composer fill <bundle_path> --type <solid|gradient|automatic|none> [options]
OptionDescription
--type <type>solid, gradient, automatic, or none
--color <hex>Primary color (for solid or gradient bottom)
--color2 <hex>Secondary color (gradient top)
--gradient-angle <n>Gradient angle in degrees (default: 0)
</details> <details> <summary><b><code>position</code></b> — Set layer/group scale and offset</summary>

 

icon-composer position <bundle_path> [options]
OptionDefaultDescription
--target <type>layerlayer or group
--group-index <n>0Group index
--layer-index <n>—Layer index (required for --target layer)
--scale <n>—Scale factor (0.05–3.0)
--offset-x <n>—X offset in points
--offset-y <n>—Y offset in points
</details> <details> <summary><b><code>fx</code></b> — Toggle all glass effects</summary>

 

icon-composer fx <bundle_path> --enable|--disable

Enables or disables specular, shadow, blur, and translucency on every group at once.

</details> <details> <summary><b><code>preview</code></b> — Export a preview PNG</summary>

 

icon-composer preview <bundle_path> <output_path> [options]
OptionDefaultDescription
--size <n>1024Output size in pixels
--appearance <mode>—dark or tinted
--flatfalseForce flat rendering (skip Liquid Glass)
--canvas-bg <preset>—light, dark, checkerboard, homescreen-light, homescreen-dark
--apple-preset <name>—Apple wallpaper: sine-purple-orange, sine-gasflame, sine-magenta, sine-green-yellow, sine-purple-orange-black, sine-gray
--canvas-bg-color <hex>—Custom background color
--canvas-bg-image <path>—Custom background image
--zoom <n>1.0Zoom level (icon size relative to canvas)

Output: PNG file. Uses Liquid Glass rendering by default (falls back to flat if Icon Composer is not installed).

</details> <details> <summary><b><code>render</code></b> — Render Liquid Glass via ictool</summary>

 

icon-composer render <bundle_path> <output_path> [options]
OptionDefaultDescription
--platform <name>iOSiOS, macOS, or watchOS
--rendition <name>DefaultDefault, Dark, TintedLight, TintedDark, ClearLight, ClearDark
--width <n>1024Output width
--height <n>1024Output height
--scale <n>1Scale factor (1x, 2x, 3x)
--light-angle <n>—Light angle (0–360)
--tint-color <n>—Tint hue (0–1)
--tint-strength <n>—Tint strength (0–1)
Canvas options—Same as preview

Requires: Icon Composer.app installed. Returns an error with install instructions if missing.

</details> <details> <summary><b><code>export-marketing</code></b> — Export for App Store Connect</summary>

 

icon-composer export-marketing <bundle_path> <output_path> [--size <n>]

Output: Flat PNG with no alpha channel (avoids ITMS-90717 rejection). Default 1024x1024.

</details> <details> <summary><b><code>doctor</code></b> — Check system setup</summary>

 

icon-composer doctor

Output: Reports Node version, platform, ictool path and version. Prints install instructions if Icon Composer is missing.

</details>

MCP Tools

ToolDescription
create_iconCreate a .icon bundle from a foreground image and background color
add_layer_to_iconAdd a new layer to an existing bundle
remove_layerRemove a layer or group, optionally clean up assets
read_iconInspect bundle manifest and assets
set_glass_effectsConfigure specular, blur, shadow, translucency
set_appearancesSet dark/tinted mode overrides
set_fillSet background fill
set_layer_positionAdjust layer scale and offset
toggle_fxEnable/disable all glass effects at once
export_previewRender a preview PNG
render_liquid_glassRender via Apple's ictool (requires Icon Composer)
export_marketingExport flat opaque PNG for App Store Connect

All tools return { content: [{ type: "text", text: "..." }], isError?: true }.

Details

<details> <summary><b><code>create_icon</code></b></summary>

 

Create a .icon bundle from a foreground image.

ParameterTypeRequiredDefaultDescription
foreground_pathstringyes—Absolute path to PNG or SVG
output_dirstringyes—Output directory
bundle_namestringnoAppIconBundle name
bg_colorstringyes—Background hex color
dark_bg_colorstringno—Dark mode background color
glyph_scalenumberno1.0Glyph scale (0.1–2.0)
specularbooleannotrueSpecular highlight
shadow_kindenumnolayer-colorneutral, layer-color, none
shadow_opacitynumberno0.5Shadow opacity (0–1)
blur_materialnumberno—Blur amount (0–1)
translucency_enabledbooleannofalseEnable translucency
translucency_valuenumberno0.4Translucency amount (0–1)
</details> <details> <summary><b><code>add_layer_to_icon</code></b></summary>

 

add_layer_to_icon

Add a layer to an existing bundle.

ParameterTypeRequiredDefaultDescription
bundle_pathstringyes—Path to .icon bundle
image_pathstringyes—Path to image file
layer_namestringyes—Layer name
group_indexnumberno0Target group
create_groupbooleannofalseCreate new group
opacitynumberno1.0Layer opacity (0–1)
scalenumberno1.0Layer scale (0.1–2.0)
offset_xnumberno0X offset
offset_ynumberno0Y offset
blend_modeenumnonormalBlend mode
glassbooleannotrueGlass participation
</details> <details> <summary><b><code>remove_layer</code></b></summary>

 

remove_layer

Remove a layer or group. layer_index required when target=layer.

ParameterTypeRequiredDefault
bundle_pathstringyes—
targetenumyes—
group_indexnumberyes—
layer_indexnumberno—
cleanup_assetsbooleannotrue
</details> <details> <summary><b><code>read_icon</code></b></summary>

 

read_icon

Inspect a bundle. Returns full manifest JSON and asset list with sizes.

ParameterTypeRequired
bundle_pathstringyes
</details> <details> <summary><b><code>set_glass_effects</code></b></summary>

 

set_glass_effects

Configure Liquid Glass on a group. All effect parameters are optional — only provided values are changed.

ParameterTypeDefaultDescription
bundle_pathstring—Path to bundle
group_indexnumber0Target group
specularboolean—Specular toggle
blur_materialnumber|null—Blur (0–1, null to disable)
shadow_kindenum—neutral, layer-color, none
shadow_opacitynumber—Shadow opacity (0–1)
translucency_enabledboolean—Translucency toggle
translucency_valuenumber—Translucency amount (0–1)
opacitynumber—Group opacity (0–1)
blend_modeenum—Blend mode
lightingenum—combined or individual
</details> <details> <summary><b><code>set_appearances</code></b></summary>

 

set_appearances

Set dark/tinted overrides for background fill, group effects, or individual layer properties.

ParameterTypeRequiredDescription
bundle_pathstringyesPath to bundle
targetenumyesfill, group, or layer
appearanceenumyesdark or tinted
group_indexnumbernoGroup index (for target=group or target=layer)
layer_indexnumbernoLayer index within the group (required when target=layer)
bg_colorstringnoBackground color for this appearance (target=fill)
specularbooleannoSpecular for this appearance (target=group)
shadow_kindenumnoShadow type (target=group)
shadow_opacitynumbernoShadow opacity (target=group)
opacitynumbernoOpacity for this appearance (target=group or target=layer)
blur_materialnumber|nullnoBlur material for this appearance (target=group)
translucency_enabledbooleannoEnable translucency for this appearance (target=group)
translucency_valuenumbernoTranslucency amount for this appearance (target=group)
hiddenbooleannoHidden state for this appearance (target=group or target=layer)
blend_modeenumnoBlend mode for this appearance (target=layer)
fill_colorstringnoFill color hex for this appearance (target=layer)
position_scalenumbernoPosition scale for this appearance (0.05–3.0)
position_offset_xnumbernoPosition X offset for this appearance
position_offset_ynumbernoPosition Y offset for this appearance
</details> <details> <summary><b><code>set_fill</code></b></summary>

 

set_fill

Set background fill.

ParameterTypeRequiredDescription
bundle_pathstringyesPath to bundle
fill_typeenumyessolid, gradient, automatic, none
colorstringnoHex color (solid or gradient bottom)
color2stringnoGradient top color
gradient_anglenumbernoAngle in degrees (default: 0)
</details> <details> <summary><b><code>set_layer_position</code></b></summary>

 

set_layer_position

Adjust layer or group scale and offset.

ParameterTypeDefaultDescription
bundle_pathstring—Path to bundle
targetenumlayerlayer or group
group_indexnumber0Group index
layer_indexnumber—Layer index (for target=layer)
scalenumber—Scale (0.05–3.0)
offset_xnumber—X offset
offset_ynumber—Y offset
</details> <details> <summary><b><code>toggle_fx</code></b></summary>

 

toggle_fx

Enable or disable all glass effects on every group.

ParameterTypeRequired
bundle_pathstringyes
enabledbooleanyes
</details> <details> <summary><b><code>export_preview</code></b></summary>

 

export_preview

Render a preview PNG. Uses Liquid Glass by default, falls back to flat.

ParameterTypeDefaultDescription
bundle_pathstring—Path to bundle
output_pathstring—Output PNG path
sizenumber1024Output size (16–2048)
appearanceenum—dark or tinted
flatbooleanfalseForce flat rendering
canvas_bgenum—Preset background
apple_presetenum—Apple wallpaper preset
canvas_bg_colorstring—Custom background hex
canvas_bg_imagestring—Background image path
zoomnumber1.0Zoom level (0.1–3.0)
return_imagebooleantrueReturn rendered image inline as base64
</details> <details> <summary><b><code>render_liquid_glass</code></b></summary>

 

render_liquid_glass

Pixel-perfect Liquid Glass via Apple's ictool. Requires Icon Composer.app.

ParameterTypeDefaultDescription
bundle_pathstring—Path to bundle
output_pathstring—Output PNG path
platformenumiOSiOS, macOS, watchOS
renditionenumDefaultDefault, Dark, TintedLight, TintedDark, ClearLight, ClearDark
widthnumber1024Output width (16–2048)
heightnumber1024Output height (16–2048)
scalenumber1Scale factor (1–3)
light_anglenumber—Light angle (0–360)
tint_colornumber—Tint hue (0–1)
tint_strengthnumber—Tint strength (0–1)
Canvas options——Same as export_preview
return_imagebooleantrueReturn rendered image inline as base64
</details> <details> <summary><b><code>export_marketing</code></b></summary>

 

export_marketing

Flat marketing PNG for App Store Connect. No glass effects, no alpha channel.

ParameterTypeDefaultDescription
bundle_pathstring—Path to bundle
output_pathstring—Output PNG path
sizenumber1024Output size (16–2048)
return_imagebooleantrueReturn rendered image inline as base64
</details>

MCP Prompts

PromptParametersDescription
create-app-iconimage_path, output_dir, brand_color, dark_color?Guided workflow: create icon from a logo, preview, iterate, export
add-dark-modebundle_path, dark_colorAdd dark mode to an existing icon with before/after preview
export-for-app-storebundle_path, output_dirExport marketing PNG + preview for App Store submission

Example Workflows

Create a branded icon

# Create with brand color
icon-composer create logo.svg ./out --bg-color "#0A66C2"

# Add dark mode
icon-composer appearance ./out/AppIcon.icon --target fill --appearance dark --bg-color "#0D1B2A"

# Configure glass effects
icon-composer glass ./out/AppIcon.icon --specular --shadow-kind layer-color --blur-material 0.3

# Preview
icon-composer preview ./out/AppIcon.icon preview.png

Export for App Store

# Marketing icon (flat, no alpha, 1024x1024)
icon-composer export-marketing ./out/AppIcon.icon marketing.png

# The .icon bundle goes into your Xcode project's asset catalog

Multi-layer icon with glass

# Create base icon
icon-composer create background.svg ./out --bg-color "#1C1C2E"

# Add foreground layers
icon-composer add-layer ./out/AppIcon.icon glyph.svg --name glyph --opacity 0.8
icon-composer add-layer ./out/AppIcon.icon badge.svg --name badge --create-group

# Configure glass per group
icon-composer glass ./out/AppIcon.icon --group-index 0 --specular --blur-material 0.3
icon-composer glass ./out/AppIcon.icon --group-index 1 --specular --shadow-kind neutral

# Render Liquid Glass
icon-composer render ./out/AppIcon.icon glass-preview.png

Limitations

  • Liquid Glass rendering requires macOS with Apple's Icon Composer.app installed. Flat rendering works everywhere.
  • ClearLight/ClearDark renditions render against gray. Apple's glass transparency requires Metal GPU, not available via CLI.

Architecture

src/lib/          Pure library (bundle, manifest, render, ictool)
src/lib/ops-*.ts  Operations layer (MCP result format)
src/cli.ts        CLI (Commander.js, 14 commands)
src/server.ts     MCP server (thin wrapper, 12 tools + 3 prompts)

Contributing

# Install dependencies
bun install

# Run tests
bun test              # 175 unit tests
npm run test:mcp      # 16 MCP integration tests

# Build
bun run build

# Visual test gallery
bun src/cli.ts visual-test --out ./gallery

Related MCP servers

ETEtymolt logo

Etymolt

Maintained

Brand-name verification MCP — five-axis signed verdicts for AI-generated names.

0
TypeScript
View repository →

An MCP server for weather information updating this value now.

View repository →
VOVotura Tours logo

Search AI-powered audio tours and points of interest by city. Walking, cycling, and driving tours.

1
MIT
View repository →

Analyze multiple URLs with categorized SEO / GEO checks and scored results.

0
TypeScript
View repository →

Analyze multiple URLs with categorized SEO / GEO checks and scored results.

0
TypeScript
View repository →

Construction compliance AI. Wire sizing, load calc, battery clearance. AU, USA, CA, UK, EU.

1
Python
MIT
View repository →