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.
| Endpoint | POST https://asi.co.jp/illustmaker/api/mcp.php |
|---|---|
| Content-Type | application/json |
| Request format | { "method": "...", "params": {...}, "session": "..." } |
| Response | { "ok": true, ... } or { "ok": false, "error": "..." } |
| Version | 1.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
| Sessions | Up to 1000 active sessions per IP |
|---|---|
| Objects per session | Soft cap at 10,000 |
| Batch render | Up to 1,000 items per batch_render call |
| Request size | 32 MB |
Sessions
illust.create_session | Create a new document. Params: width, height, bg |
illust.get_session | Fetch current state of a session |
illust.duplicate_session | Clone a session |
illust.list_sessions | List sessions known to this client |
illust.delete_session | Permanently delete a session |
illust.copy_objects_to_session | Move objects between sessions |
Objects
add_object | Add rect, ellipse, line, polygon, star, text, path, image |
add_svg | Parse and import a raw SVG string |
add_image_from_url | Fetch and embed an external image / SVG |
get_object / update_object / delete_object | CRUD on a single object |
duplicate_object | Clone with optional offset |
group / ungroup | Group management |
align | 8 alignment modes (left / hcenter / right / top / vcenter / bottom / hdistribute / vdistribute) |
set_order | Front / back / forward / backward |
Text & fonts
measure_text | Get bounding box without rendering |
replace_text | Bulk text substitution across all text objects |
set_text_style | Bulk change font / size / weight / color |
outline_text | Convert text to vector paths |
list_fonts / add_font | List 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_palette | 12 mood themes (modern / vintage / pastel / mono / etc.) |
suggest_font | 8 use-case themes (poster / body / display / handwritten / etc.) |
extract_palette | Pull a palette out of an existing image or SVG |
Gallery (community)
After building a session, publish it to the public gallery, browse others' works, remix them as new editable sessions, and post threaded comments — all from your AI agent.
gallery.submit | {session, title, description?, category?, tags?, author_name?, parent_id?} → publishes the session. Server auto-renders SVG/PNG/projectJSON. Returns {id, slug, url, png_url}. |
gallery.list | {sort?, category?, tag?, q?, limit?} → list works. sort:"new"|"popular". |
gallery.get | {slug} → work detail (title, author, tags, png/svg/project URLs, views, likes). |
gallery.remix | {slug} → loads parent project into a fresh session. Returns {session, open_url, parent_id, object_count}. Continue editing with illust.update_object etc. |
gallery.list_comments | {slug} → comments (flat, with parent_id for 1-level threading). |
gallery.comment | {slug, body, author_name?, parent_id?} → post a comment, or a reply (with parent_id). |
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
id | String, auto-assigned UUID |
type | rect / ellipse / line / polygon / star / text / path / image / group |
x, y | Position in document units |
w, h | Bounding box size |
fill, stroke | Color string |
strokeWidth | Number |
opacity | 0–1 |
rotation | Degrees |
locked, hidden | Booleans |
Color formats
Color strings accept:
- Hex:
#ff9a01or#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}