Pro-grade next-gen AI-first vector editor
"Illustmaker"

A single line of code is enough to bring vector design to life.
A simple HTTP JSON API (102 methods) you can call from AI agents, server-side programs, or cron — anywhere you write code.
Anything you can imagine, Illustmaker can bring to reality.

EndpointPOST https://asi.co.jp/illustmaker/api/mcp.php
Content-Typeapplication/json
Request format{ "method": "...", "params": {...}, "session": "..." }
Response{ "ok": true, ... } or { "ok": false, "error": "..." }
Version1.0.0
llms.txt/illustmaker/llms.txt

Quick start

1. Create a session

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{"method":"illust.create_session","params":{"width":800,"height":600,"bg":"#ffffff"}}'
{
  "ok": true,
  "session": "abc123def456",
  "state": {"docW":800,"docH":600,"docBg":"#ffffff","objects":[]},
  "open_url": "https://asi.co.jp/illustmaker/?s=abc123def456"
}

2. Add objects

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{"method":"illust.add_object","session":"abc123def456","params":{"type":"rect","x":100,"y":100,"w":300,"h":200,"fill":"#ff9a01"}}'

3. Export

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{"method":"illust.export","session":"abc123def456","params":{"format":"svg"}}'

Authentication

The MCP API is currently open during beta and does not require an API key for typical usage. Heavy or commercial integrations should reach out at asi.co.jp/contact.

Rate limits

SessionsUp to 1000 active sessions per IP
Objects per sessionSoft cap at 10,000
Batch renderUp to 1,000 items per batch_render call
Request size32 MB

Sessions

illust.create_sessionCreate a new document. Params: width, height, bg
illust.get_sessionFetch current state of a session
illust.duplicate_sessionClone a session
illust.list_sessionsList sessions known to this client
illust.delete_sessionPermanently delete a session
illust.copy_objects_to_sessionMove objects between sessions

Objects

add_objectAdd rect, ellipse, line, polygon, star, text, path, image
add_svgParse and import a raw SVG string
add_image_from_urlFetch and embed an external image / SVG
get_object / update_object / delete_objectCRUD on a single object
duplicate_objectClone with optional offset
group / ungroupGroup management
align8 alignment modes (left / hcenter / right / top / vcenter / bottom / hdistribute / vdistribute)
set_orderFront / back / forward / backward

Text & fonts

measure_textGet bounding box without rendering
replace_textBulk text substitution across all text objects
set_text_styleBulk change font / size / weight / color
outline_textConvert text to vector paths
list_fonts / add_fontList built-in fonts or load a custom font URL

Layers & ordering

Layers are simple groups in Illustmaker. Use group/ungroup for grouping, set_order to change z-order. Objects can also be locked or hidden via update_object.

Export

format: "svg"Editable vector SVG
format: "svg-optimized"Minified, attribute-cleaned SVG
format: "png"Raster PNG with optional scale
format: "jpeg"Raster JPEG with optional quality
format: "pdf"True vector PDF (TCPDF)
format: "ai"Adobe Illustrator-compatible SVG
format: "json"Full project state

Batch rendering

Generate many variants from a single template using batch_render.

curl -X POST https://asi.co.jp/illustmaker/api/mcp.php \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "illust.batch_render",
    "session": "abc...",
    "params": {
      "items": [{"name":"Soy sauce A"}, {"name":"Soy sauce B"}],
      "output": "pdf-imposition",
      "imposition": {"cols": 2, "rows": 4}
    }
  }'

Supported output modes: svg, svg-zip, png, png-zip, pdf-imposition.

Palette / font suggestions

suggest_palette12 mood themes (modern / vintage / pastel / mono / etc.)
suggest_font8 use-case themes (poster / body / display / handwritten / etc.)
extract_palettePull a palette out of an existing image or SVG

Gradient mesh / Brand kits / Live share (v4.0)

Gradient mesh

illust.add_mesh_gradient{session, x, y, w, h, cols?, rows?, detail?, corners?, colors?} → smooth 2D color gradient via bilinear interpolation. Specify 4 corner colors or full N×M grid. detail (8-60) controls smoothness; 576–3600 polygons.

Brand kits

Save palette + fonts + asset URLs as one anonymous brand kit (owner_fp = sha256(ip|ua)).

illust.brand_save{name, palette[], fonts[], assets[], kit_id?} → save a brand kit (pass kit_id to overwrite).
illust.brand_list→ list your brand kits.
illust.brand_delete{kit_id} → delete a brand kit.

Live share (read-only)

Issue a read-only URL for an in-progress session. Viewers see live updates via 3-second polling at /illustmaker/live/{token}. Valid 30 days.

illust.share_create{session, mode: view|comment, label?} → returns {token, url}.
illust.share_list→ list your share links.
illust.share_delete{token} → invalidate.
illust.share_view{token} → public endpoint (no auth). Returns current SVG for live viewer polling.

Viewer comments on shared sessions (v4.1)

When a share link is issued with mode='comment', viewers can post spatial comments (with x/y annotation pins) directly on the live viewer page. Rate-limited to 20/hour per viewer.

illust.share_comment_post{token, body, author_name?, x?, y?} → viewer posts a comment (public endpoint, no auth). Up to 2,000 chars. Omit x/y for a general comment.
illust.share_comment_list{token, include_resolved?} → list comments (public).
illust.share_comment_resolve{comment_id, resolved} → owner only. Toggle resolved flag.
illust.share_comment_delete{comment_id} → owner only. Soft-delete.

Real-time collaborative editing (v5.0)

When a share link is issued with mode='edit', multiple users can join /illustmaker/live/{token} and edit the same canvas simultaneously — drawing, moving, and deleting objects together. HTTP long-polling with LWW (Last-Write-Wins) conflict resolution. Participant cursors, selections and per-object edit locks are displayed live.

illust.collab_join{token, actor_name?, actor_color?, actor_id?} → join the session. Returns actor_id, initial state, and last_seq.
illust.collab_leave{token, actor_id} → leave.
illust.collab_op_submit{token, actor_id, op_type, payload} → submit an operation. op_type = add_object / update_object / delete_objects / set_document / reorder_objects / cursor / selection / lock_object / unlock_object.
illust.collab_poll{token, actor_id, since} → long-poll (up to 25s). Returns ops after since, current participants, and active locks.
illust.collab_status{token} → lightweight status (participant count, op count, last seq).

Claude Desktop

Published on npm: @illustmaker/mcp

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

{
  "mcpServers": {
    "illustmaker": {
      "command": "npx",
      "args": ["-y", "@illustmaker/mcp"]
    }
  }
}

If you see "failed to connect" on macOS / Homebrew: Claude Code and similar tools spawn subprocesses with a minimal PATH that may not include /usr/local/bin/. Use an absolute path instead (find yours with which npx):

{
  "mcpServers": {
    "illustmaker": {
      "command": "/usr/local/bin/npx",
      "args": ["-y", "@illustmaker/mcp"]
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json or your project's .cursor/mcp.json:

{
  "mcpServers": {
    "illustmaker": {
      "url": "https://asi.co.jp/illustmaker/api/mcp.php"
    }
  }
}

Cline

Use the MCP marketplace inside Cline and search for "illustmaker", or add manually via the same endpoint format as Cursor.

Browser console — window.IM

Open the editor at /illustmaker/app/ and drive it from DevTools:

// 5 lines: make a sushi-shop logo
IM.newDocument({width:600, height:600});
IM.addEllipse({cx:300, cy:300, rx:200, ry:180, fill:"#e74c3c"});
IM.addText("Sushi",{x:230, y:330, fontSize:80, fill:"#fff", fontWeight:900});
IM.exportSVG();  // returns SVG string

Object schema

idString, auto-assigned UUID
typerect / ellipse / line / polygon / star / text / path / image / group
x, yPosition in document units
w, hBounding box size
fill, strokeColor string
strokeWidthNumber
opacity0–1
rotationDegrees
locked, hiddenBooleans

Color formats

Color strings accept:

  • Hex: #ff9a01 or #ff9a01ff
  • RGB(A): rgb(255,154,1), rgba(255,154,1,0.8)
  • HSL(A)
  • Named colors: red, orange, transparent
  • Gradient objects: {type:"linear", stops:[...], angle:45}