Kalpana Designer
Server Details
Design editable social, banner and ad templates from a brief, checked by rendering.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Score is being calculated.
Available Tools
41 toolsanimateAnimate layersInspect
Add motion to layers: presets (fade_in, slide_in_up, pop_in, spring_in, bounce_in, tilt_in, blur_in, wipe_in_right, draw_on, pulse, float, spin, shake, drift, count_up, count_down, orbit, ring_spin, peel and the outs) placed at a start time, raw keyframes per property (with springs), word or letter text reveals (typewriter, scramble), shape morphs between a vector layer's shapes, and stagger to cascade a motion over a layer's children. Motion adds to what a layer has unless replace is set; the timeline grows to fit. Check it with render_contact_sheet. A template with motion can still fill batches as images. Each image shows one moment of the motion. The default moment is the last frame. An outro or a loop can make the last frame a bad image. Find the moment where all the content shows (render_contact_sheet, render_timeline), ask the user if you are not sure, and set that second with set_timeline still_time.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| animations | Yes |
calculateCalculateRead-onlyInspect
Evaluate arithmetic exactly instead of estimating: + - * / % ^, parentheses, pi, trigonometry in radians (rad() and deg() convert), sqrt, abs, min, max, round, floor, ceil, clamp, lerp, pow, hypot, atan2, ln, log10, exp. One expression, several named ones, or one expression over a range.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | Optional: a few words on why. | |
| series | No | Evaluate `expression` over a range of one variable instead. | |
| variables | No | Values for names used in the expressions. | |
| expression | No | One expression, e.g. "1080 / 3 - 24" or "sin(rad(30)) * r". | |
| expressions | No | Several named expressions at once; later ones may use earlier names. |
cameraMove a camera through the designInspect
Films the design's layers with a camera: push in on a detail, pan across, roll, tilt in 3D, pull back out. Stops give time, zoom (1 = whole design), the focus point at the centre of the shot, and rotation/tilt. The layers move into a design-sized Camera frame at the back (their positions do not change); kinetic type and transitions stay on screen above the shot. Calling it again replaces the move.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | The top-level layers the camera films (default every top-level layer except transitions, which stay fixed to the screen). | |
| stops | Yes | Where the camera is over time: pushes, pans to a detail, rolls. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. |
check_layoutCheck a design's layoutRead-onlyInspect
Layout problems after layout: text over other text, layers cut off by a clipping frame or running off the canvas, text too small for the size the design is seen at, and text with too little contrast on what is behind it. Each issue names the layers and has a severity (error or info; info is often on purpose). Confirm an issue with render_design before changing the design. Opt-in craft checks with craft: true.
| Name | Required | Description | Default |
|---|---|---|---|
| craft | No | Run every craft check (all "info", never blocking): orphan, near_touch, raw_hex, empty_frame, chrome_drift, sliver, empty_band. | |
| checks | No | Craft checks to run, by name (see `craft`). | |
| ignore | No | Pairs of layer ids whose overlap is on purpose (a stamp over a headline): not reported. | |
| intent | No | Optional: a few words on why. | |
| margin | No | Content margin in px (one number, or [left, top, right, bottom]): report layers whose painted extent (strokes included) crosses it. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| allow_bleed | No | Layers (and their children) that bleed past the page or their clipping frame on purpose: not reported. | |
| display_width | No | How wide the design is seen on screen, px. Sets the smallest readable text and what counts as large text. Default: 400 for 1080-wide square or portrait social posts, 1280 for 1920x1080, else the page width. |
clear_animationRemove motionInspect
Remove all motion of layers, or only some properties (shape removes a shape morph with its outlines).
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| tracks | No | Only these properties (all motion of the layers when omitted). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| node_ids | No | The layers to clear. Leave it out to clear every layer. |
color_mathColour mathsRead-onlyInspect
Exact colour answers: WCAG contrast of two colours (and whether it passes for body and large text), the most readable text colour on a background, a 50-900 tint and shade scale of a colour, or a mix of two colours. ops runs several at once.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | contrast, readable, scale or mix. | |
| to | No | ||
| ops | No | Several operations, each {op, ...}; results come back in order. | |
| from | No | mix. | |
| color | No | scale: the colour at 500. | |
| pairs | No | contrast: [[foreground, background], ...] for several pairs. | |
| amount | No | mix: 0-1 of the way from `from` to `to`. | |
| intent | No | Optional: a few words on why. | |
| amounts | No | mix: several amounts, one colour each. | |
| background | No | contrast, readable. | |
| candidates | No | readable: colours to choose from (default black and white). | |
| foreground | No | contrast. |
create_designCreate a designInspect
Start a new design: a canvas of the given size (1080x1080 post, 1080x1920 story, 1920x1080 slide or banner) with a background. Returns the page_id that every other design tool takes. Add content with create_layers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A name for the design ("Untitled" when omitted). | |
| width | Yes | Width in px (1 to 8192). | |
| height | Yes | Height in px (1 to 8192). | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| background | No | The canvas fill: a colour such as "#FFFFFF", a gradient, or "none" for transparent. White when omitted. | |
| template_id | No | Add the design as the next page of this template (a template_id from an earlier create_design) instead of starting a new template. Pages of one template share its inputs by layer name. |
create_layersCreate layersInspect
Add layers (frames, groups, text, rectangles, ellipses, lines, images from a URL, and vector paths from SVG path data) to a design, nested with children in one call. Frames with a flow arrange their children in a row or column, so build text stacks and button rows as flows instead of placing each line by hand. Returns the new layer ids; change them later with update_layers. Layout problems (overflow, overlap, text off the page) this call made or changed come back as layout_issues.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Position among the parent's children (front-most last); end when omitted. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| layers | No | ||
| page_id | Yes | The page to work on, as returned by create_design. | |
| preview | No | Also return a preview picture of the result. Use it only when you need to see the design (the finished build, visual fixes); leave it off for empty frames and structural steps. | |
| replace | No | A layer in `layers` whose `id` exists replaces that layer and its children in place, keeping the id. | |
| parent_id | No | Frame or group to add into; the scene when omitted. |
design_guideDesign guideRead-onlyInspect
How designs, layers, templates and these tools fit together: the model, the working loop, placing layers, numbers, motion, and going from a design to a batch of images: the reference for a first design.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
duplicateCopy pagesInspect
Copy pages. Each copy keeps its layers, names, motion and input descriptions. A copy never replaces a page or a template. With template_id, the copies are added to that template (it can be the pages' own template). Without template_id, a new template is made and the first copy is its first page. To copy a whole template, give all its pages from pages list. With width and height, each copy gets that page size, and the flows and constraints place its layers again: render the copy and adjust it for the new size.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The new template's name (default: the source template's name with "copy"). | |
| width | No | Page width of each copy in px, with height. | |
| height | No | Page height of each copy in px, with width. | |
| page_ids | Yes | The pages to copy, in order (their page_ids from pages list or create_design). | |
| template_id | No | Add the copies to this template. Leave it out to make a new template. |
edit_keyframesEdit single keyframesInspect
Tune existing motion one keyframe at a time: add a keyframe, move one in time, change its value or easing (or hold), delete one, or shift a layer's whole motion earlier or later. Keyframes are found by track and time; read them with get_design timeline_detail. animate with tracks replaces a whole track instead.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | Changes applied in order; if one cannot apply, none do. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. |
edit_structureRearrange layersInspect
Move layers to another parent or position, delete, duplicate, wrap siblings in a group or a flow frame, mask, combine shapes with a boolean (union, subtract, intersect, exclude), unwrap, scale layers with everything inside them, change paint order, align and distribute. To change a layer's own properties use update_layers.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| skip_missing | No | Skip ids that are not on the scene in move, delete and unwrap ops instead of failing the whole call; the result lists them in `skipped`. |
find_imagesFind imagesRead-onlyInspect
Images in this workspace (photos, logos, product shots), newest first, or those whose file name contains search or that are in a collection, with a numbered preview sheet to see them. Without filters the reply also names the workspace's collections: when the user says where their images are ("the Diwali photos"), look in that collection. Each image comes with its image key, the key a design places it by, its asset_id, the id the same image has in batch rows, and its name and pixel size. Place one with create_layers type: "image" (or image in a fill) and fit. An image layer is a template input, like text: name it by role ("Product photo", "Brand logo"). A new image from an https URL is stored in the workspace when it is placed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | At most this many images (default 6). | |
| search | No | Only images whose file name contains this. | |
| collection | No | Only images in this collection (its name). |
get_designRead a designRead-onlyInspect
Outline of a design's layers after layout: id, type, name, box [x, y, w, h] in design px, text, colours, layout flow and each layer's etag, plus the fonts used. Read it before changing a design; render_design shows how it looks. timeline: true adds what moves on each layer and when (the keyframes of node_id when given).
| Name | Required | Description | Default |
|---|---|---|---|
| time | No | ||
| depth | No | Levels of children to include (all when omitted). | |
| intent | No | Optional: a few words on why. | |
| compact | No | A shorter reply, to look rather than edit. | |
| node_id | No | Describe only this layer and what is inside it. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| timeline | No | Also return the timeline: length, still time, choreography and what moves on each layer and when; with node_id, that layer's keyframes [time, value]. | |
| with_preview | No | Also return a small picture of the scene (at `time`, default 0). | |
| timeline_detail | No | Like timeline, with keyframes as {t, value, easing, hold} to tune with edit_keyframes. |
import_svgImport an SVGInspect
Add an SVG (icon, logo, illustration, a drawing made elsewhere) as editable vector layers inside one group, from its markup in svg: paths, rectangles, circles, lines and polygons with their fills, strokes, linear and radial gradients and transforms. Each becomes a group named from its id, data-name or inkscape:label, and each shape keeps its name, so update_layers select and animate can find them. Text, images, masks, clips, filters and are skipped and listed in skipped. Returns the group and every layer made.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Left edge in px relative to the parent (centred when omitted). | |
| y | No | Top edge in px relative to the parent (centred when omitted). | |
| svg | No | The SVG markup. | |
| name | No | Name of the group the shapes go into ("SVG" by default). | |
| width | No | Width in px to scale to, keeping the aspect ratio. Default: the SVG's own width, shrunk to fit inside the parent when larger. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| parent_id | No | Frame or group to add into; the scene when omitted. |
kinetic_typeSet a phrase as kinetic typeInspect
Lay out a phrase word by word, measured by the real text engine (wrapping at width, words sharing a baseline), with emphasis on chosen words (colour, style, size, tilt, a highlight pill) and motion that gives every word its own path: fly, drop, scatter, pop, wave, glitch, zoom; exit_at sends them out. Seeded, so it varies per phrase but repeats exactly. Returns the group id and the block's size.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Where the block sits in the parent and how wide it may be, px. | |
| y | Yes | ||
| name | No | The group's name (default: the text). | |
| seed | No | ||
| text | Yes | ||
| align | No | left | |
| color | No | #111111 | |
| start | No | Seconds. | |
| width | Yes | ||
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| motion | No | ||
| exit_at | No | Leave at this second (words fly back out in reverse). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| stagger | No | Seconds between words (default 0.08). | |
| duration | No | Seconds each word takes (default 0.7). | |
| emphasis | No | ||
| font_size | Yes | ||
| parent_id | No | ||
| strike_at | No | Strike the whole phrase through at this second: a line draws across the words left to right (a "stop doing this" list item). | |
| font_style | No | ||
| font_family | No | ||
| line_height | No | Line height: a multiple of the size (default 1.15), or px when above 4. | |
| strike_color | No | The strike line's colour (default the text colour). |
list_fontsList fontsRead-onlyInspect
Font families in Kalpana's library for this workspace (the global library and the workspace's uploads). Only these can be used: a design and its batches load fonts from Kalpana, and a font_family outside this list is refused. Without family: the family names. With family: that family's styles (style name, weight, italic), or the families whose name contains it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | At most this many families (default 200). | |
| family | No | Only families whose name contains this (case-insensitive), e.g. "inter". Each family's styles are listed when 20 or fewer match. | |
| intent | No | Optional: a few words on why. |
list_shadersList shader fillsRead-onlyInspect
Procedural fills: dot grids and halftone, grain and mesh gradients, god rays, noise, waves, dithering and more. Fill with {shader, preset, params, speed}; speed: 0 keeps it still. With name: its settings, defaults and presets.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | One shader's settings with defaults, presets and options. | |
| intent | No | Optional: a few words on why. |
list_workspacesThe connected workspaceRead-onlyInspect
The one Kalpana workspace this connection designs in, chosen when the user connected: its id, name and whether its designer subscription is active. Every tool works in this workspace, so none takes a workspace id. Designing in another workspace needs a reconnect that chooses it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
make_carouselBuild a 3D card carousel animationInspect
An animation inside one design, not a multi-slide post: cards (image, title, subtitle) on a track that steps to the next card every step seconds; the centred card sits flat, its neighbours swing back in 3D (tilt), smaller and shaded. For an Instagram carousel make one design per slide instead.
| Name | Required | Description | Default |
|---|---|---|---|
| y | Yes | Top of the cards. | |
| gap | No | Space between a neighbour's near edge and the centre card's edge; negative tucks it behind (default -2% of the card width, like a hinged panel). | |
| name | No | ||
| step | No | Seconds each card stays centred before the next (default 0.5). | |
| tilt | No | Degrees the neighbours swing back about their hinge (default 58). | |
| color | No | ||
| enter | No | Slide the whole carousel up into place just before `start` (default true). | |
| items | Yes | ||
| start | No | Seconds: when the first card is centred. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| radius | No | Corner radius of the card (default 6% of its width). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| art_fill | No | ||
| center_x | Yes | Centre of the focused card, px in the parent. | |
| card_fill | No | Card fill (default white), art panel fill (default #F4F4F4), title colour (default near-black), subtitle colour (default #8A8A8A). | |
| parent_id | No | ||
| card_width | No | Card size (default 720 x 940). | |
| side_scale | No | Neighbours' size relative to the centre card (default 1). | |
| side_shade | No | How much the neighbours fade toward the card colour, 0-1 (default 0.12). | |
| card_height | No | ||
| font_family | No | ||
| move_duration | No | Seconds the move between cards takes (default 0.35, at most `step`). | |
| subtitle_color | No |
make_chartMake a chart from dataInspect
Draw a chart from numbers as editable layers in a design: line, area, bar, horizontal bar, stacked bar, scatter, donut, pie, sparkline, progress ring, gauge or radar. Every point, bar, tick and label is computed exactly. Pick a style, a palette and a font_size; never hand-write chart paths.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Where the chart sits in its parent, and its size, px. | |
| y | Yes | ||
| max | No | Progress ring, gauge and radar: the full-scale value (default 100, or radar's largest value). | |
| axes | No | Axis labels, x and y together (default: per style; off for sparklines and rings). `x_labels` and `y_labels` set each side on its own. | |
| dots | No | A dot on each point (default: per style). | |
| grid | No | ||
| kind | No | ||
| name | No | The chart layer's name (default "Chart"). | |
| sizes | No | Scatter: a size per point, making it a bubble chart. | |
| style | No | How it is drawn (default clean). Vary it with the design. | |
| ticks | No | Grid lines (default 4). With both y_min and y_max the lines are exactly (y_max - y_min) / ticks apart. 0 = no grid lines, no y tick labels and no left margin. | |
| width | Yes | ||
| y_max | No | ||
| y_min | No | Fix the value range (default: from 0, or the data's minimum when it is below 0, up to a round number above the maximum). | |
| corner | No | Bar corner radius px (default per style; half the width = pill). | |
| height | Yes | ||
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| labels | No | A label per value along the x axis (per bar, segment or spoke). | |
| legend | No | A key of series names above the plot (default: when 2+ series); on donuts and pies, of the `labels` (default: when given). | |
| prefix | No | ||
| series | Yes | ||
| smooth | No | Curve lines through the points (default: per style). | |
| suffix | No | ||
| page_id | Yes | The page to work on, as returned by create_design. | |
| palette | No | Series colours in order, as hex. Default: a built-in palette. | |
| step_at | No | Step chart: where the level changes between two points. `start` (default) holds a value until the next point, `end` jumps at the first point of each pair, `middle` changes halfway. | |
| decimals | No | Decimal places in value labels (default: 0 for whole data, else 1), or "auto" to print as many as the data and fixed range need. | |
| x_labels | No | The category labels under the plot (default: as `axes`). | |
| x_values | No | Scatter: the x of each point (default 0, 1, 2...). | |
| y_labels | No | The value tick labels left of the plot (default: as `axes`). | |
| bar_width | No | Bar thickness as a share of its slot, 0.1 to 1 (default per style). | |
| font_size | No | Size of every chart label, px (default: the height / 22, at least 24 px, so it reads when the chart is shown small; below about 20 px the result warns). | |
| parent_id | No | Put the chart inside this layer (the scene when omitted). | |
| thickness | No | Ring thickness, px (donut, progress ring, gauge). | |
| grid_color | No | Hex. | |
| line_width | No | ||
| text_color | No | Hex. | |
| annotations | No | Points worth pointing out. | |
| font_family | No | ||
| value_labels | No | Label the last point / the top of each bar / the ring's value. |
make_cursorAdd a cursor that moves and clicksInspect
A pointer (arrow, a named pill, or a touch dot) that glides through stops ({x, y, t, click}) with eased moves; each click presses the cursor and spreads a ripple. Use it to walk through product UI. It sits on top.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| size | No | Size of the arrow in px (default 40). | |
| color | No | Cursor colour (default near-black). | |
| label | No | Pill style: the name on it. | |
| stops | Yes | The path: at least one stop; it glides between them. | |
| style | No | ||
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| ripple | No | Ripple colour (default the cursor colour). | |
| page_id | Yes | The page to work on, as returned by create_design. |
make_listBuild an animated listInspect
Rows of UI (a ranked list, inbox, settings, search results) with text and an optional value on the right; rows spring in one after another and a highlight slides from row to row at the select times. Pair with make_cursor clicks at the same times. static: true builds a still list or table instead.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Top-left of the list and its width. | |
| y | Yes | ||
| gap | No | ||
| fill | No | Row fill (default white), text colour (default near-black). | |
| name | No | ||
| color | No | ||
| items | Yes | ||
| start | No | Seconds: when rows start arriving, and between rows (default 0.07). | |
| width | Yes | ||
| accent | No | Highlight fill and the text colour on it. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| select | No | The highlight's path: it lands on each row in turn. | |
| static | No | A still list or table (ranked rows, a ledger, an answer key): a column layout flow of row frames, each a row flow with a Label text filling the width and an optional Value on the right. No motion, no highlight (`select`, `start`, `stagger` are refused). Edit rows later with update_layers like any flow. | |
| divider | No | Static lists: a hairline under each row but the last, in this colour (rows then have no fill unless `fill` is given). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| stagger | No | ||
| numbered | No | Number each row (1, 2, 3...), for ranked lists. | |
| font_size | No | ||
| parent_id | No | ||
| row_height | No | Row height px (default 64) and gap between rows (default 10). | |
| accent_text | No | ||
| font_family | No |
make_particlesScatter a particle fieldInspect
Fill a region with many small shapes (dots, rings, sparkles, stars, plus, cross, pills, squares, triangles, blobs) spread by a seed: no clumps, no grid, sizes leaning small, some out of focus for depth, colours from a palette, a box kept clear behind text. Motion: float, twinkle, burst (from a point), rain, rise, pop, or still. Sits behind the other layers unless front is set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The group's layer name (default "Particles"). | |
| seed | No | Same seed, same field. | |
| size | No | Smallest and largest size, px (default 6 to 28). | |
| avoid | No | Keep this box clear (e.g. behind a headline): [x, y, width, height]. | |
| count | Yes | How many, 1 to 400. | |
| depth | No | Share of particles pushed out of focus (bigger, blurred, fainter) for depth, 0 to 1 (default 0.2). | |
| front | No | Put the field on top of everything (default: behind the other layers). | |
| start | No | Seconds: when the motion starts (default 0). | |
| until | No | Seconds: when floating stops (default start + duration + 4, so the field doesn't stretch a short scene). The scene timeline grows to it. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| motion | No | ||
| origin | No | Burst: the point they fly out from, in the parent (default the region's centre). | |
| region | Yes | The area they live in (px in the parent): [x, y, width, height]. | |
| shapes | No | Which shapes, mixed (default dot, ring, sparkle). | |
| opacity | No | Lowest and highest opacity (default 0.5 to 1). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| palette | No | Series colours in order, as hex. Default: a built-in palette. | |
| duration | No | Seconds: how long the arrival takes (burst, rain, pop; default 1.2), or the whole drift (rise). | |
| strength | No | How far they drift, px (default 14). | |
| parent_id | No |
make_transitionAdd a graphic transitionInspect
Shapes that cover or reveal the design: circle (rings of colour grow from a point), stripes (tilted bands sweep across), blades (panels slam shut and part) or burst (rays, then a flood). part: out ends fully covered at at + duration; part: in uncovers from 0. It sits on top of everything.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Seconds: when it starts. For `out`, usually the scene's end minus `duration`; for `in`, 0. | |
| name | No | ||
| part | No | ||
| size | No | The scene's size [width, height] (default 1920 x 1080). | |
| angle | No | Stripes: the tilt in degrees (default -18). | |
| count | No | Stripes: how many (default 5); burst: how many rays (default 14). | |
| style | No | ||
| colors | No | The layers of colour, first to last (the last is what the screen is covered by at the cut). Default: a built-in palette. | |
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| origin | No | Where circles and bursts start: [x, y] (default the centre). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| duration | No | Seconds (default 0.6). |
measure_textMeasure textRead-onlyInspect
The real size of text in a font as the renderer lays it out: each line and its width, the height, and whether the last line is a widow; or the largest font size that fits a box (width + fit_height). With page_id + layer_id it measures a text layer of that design. texts measures many at once, and pack lays them out as chips in rows. Use it before placing text instead of guessing.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | No | With `texts`: lay them out as pills or chips packed in rows with no overlaps, and return each one's box (x, y, width, height) ready for create_layers. | |
| runs | No | Text in differently styled runs, as create_layers takes them (mixed families or weights), in place of `text`. | |
| text | No | The text to measure (or give `texts`). | |
| wrap | No | Line breaks as create_layers `wrap` sets them: "normal", "balance" or "pretty" (a stored layer keeps its own unless given). | |
| texts | No | Measure many texts in one call (same font, size and width); the result lists each one's width, height and lines. | |
| width | No | Wrap within this width (px); one line when omitted. | |
| intent | No | Optional: a few words on why. | |
| page_id | No | The page to work on, as returned by create_design. | |
| layer_id | No | ||
| max_size | No | ||
| min_size | No | ||
| font_size | No | Measure at this size (px). | |
| fit_height | No | Instead of measuring, find the largest size in [min_size, max_size] whose text fits `width` x `fit_height`. | |
| font_style | No | "Regular", "Bold"... | |
| font_family | No | ||
| line_height | No | line_height like create_layers ("120%", "auto", or px). | |
| letter_spacing | No | letter_spacing like create_layers: px number or a percentage of the font size like "-3%". | |
| min_last_line_words | No | Fewest words a wrapped paragraph may end on, as create_layers takes it. |
pagesWork with a template's pagesDestructiveInspect
A template has one or more pages, each a design of its own (its own size and layers): a post, a story and a banner of one campaign, say. Every page's id is a page_id the design tools take. list the pages of a template (template_id), rename a page (page_id, name) or delete one (page_id; a template keeps at least one page). To copy pages or templates, use duplicate. To add an empty page, use create_design with template_id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | rename: the new name. | |
| action | Yes | ||
| page_id | No | rename, delete: the page. | |
| template_id | No | list: the template whose pages to list. |
place_itemsCompute positions for itemsRead-onlyInspect
Where to put N items: around a circle, along an arc, in a grid, evenly along a line or a path. Returns each centre, the top-left x/y for an item of item_size, and the rotation that faces along the layout. Use it for radial menus, timelines and grids.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | How many places. | |
| intent | No | Optional: a few words on why. | |
| layout | Yes | The shape to place them on, e.g. `{kind: "circle", center: [540, 540], radius: 300}`. | |
| item_size | No | The items' size [width, height], to also get each top-left x/y. |
render_contact_sheetRender frames of an animationRead-onlyInspect
Frames of the design's animation tiled into one PNG, left to right and top to bottom: evenly spaced frames from start to end, or exact times. One call checks a whole animation; a design without a timeline gives one frame. Returns the times shown. For one moment at full size use render_design with time. Previews are PNGs at most 800 px on the longest side, with a faint repeating "Kalpana preview" mark. The mark is only on previews; the design, its exports and batch renders do not have it, and sample_points read the design's own colours. Zoom with region or node_id to check small text or detail.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Last second (default the end of the timeline). | |
| start | No | First second (default 0). | |
| times | No | Exact seconds to show instead of `frames` (1 to 32). | |
| frames | No | How many frames, evenly spaced from `start` to `end` (default 12, at most 32). | |
| intent | No | Optional: a few words on why. | |
| columns | No | Frames per row (default 4, at most 8). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| cell_width | No | Width of each frame in px (default and at most 320). |
render_designRender a designRead-onlyInspect
A PNG of the design, rendered as it will export. Check the work with it after each meaningful change. Zoom with region or node_id, read pixel colours with sample_points, or judge shapes with hide, only and mode; time shows one moment of an animation. For layout problems as data use check_layout; for many moments of an animation use render_contact_sheet. Previews are PNGs at most 800 px on the longest side, with a faint repeating "Kalpana preview" mark. The mark is only on previews; the design, its exports and batch renders do not have it, and sample_points read the design's own colours. Zoom with region or node_id to check small text or detail.
| Name | Required | Description | Default |
|---|---|---|---|
| hide | No | Hide these layers for this picture only (the design is unchanged). | |
| mode | No | "color" (default), "grey" for a value study, or "silhouette" to judge a shape's read (use with `only`). | |
| only | No | Show only these layers (with their children) for this picture. | |
| time | No | Second of the animation to show (default 0). See render_contact_sheet for many moments in one picture. | |
| sizes | No | Several pictures in one call, each with this longest side in px (1 to 4 values, each at most 800), in place of max_size. | |
| intent | No | Optional: a few words on why. | |
| region | No | Zoom into this part: [x, y, width, height] in design px. | |
| node_id | No | Zoom into a layer: its laid-out box grown by `padding`. | |
| padding | No | Space around `node_id`'s box in design px (default 24). | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| regions | No | Several close-ups in one call: each [x, y, width, height] in design px. Combines with `node_ids`; 4 pictures at most, each `max_size`. | |
| max_size | No | Longest side of the picture in px (default and at most 800). Zoom with region or node_id for detail. | |
| node_ids | No | Several layers to zoom into, one picture each (box grown by `padding`). | |
| sample_points | No | Points [x, y] in design px whose colour to read; returned as {x, y, hex, alpha}. |
render_timelinePicture of the timelineRead-onlyInspect
The timeline as a diagram, not a frame: a time ruler, a row per animated layer with a bar over its motion, and under it a row per property with keyframe diamonds; where the motion ends is marked. Check timing and overlap here, then get_design timeline with node_id for the keyframes to change. node_ids limits it to layers; properties: false shows layer rows only.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | Optional: a few words on why. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| node_ids | No | Only these layers (or groups, with what is inside). | |
| properties | No | A row per property under each layer (default true). |
search_templatesFind templates to editRead-onlyInspect
The workspace's templates, still and animated, newest first, or those matching query (an exact template id, or words of a name, description or campaign topic). Each comes with its template_id, name, size, whether it is animated, a preview image URL and a link that opens it in Kalpana. To edit one, pages list with its template_id gives each page's page_id for get_design and the other design tools.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page of results, from 1 (default 1). | |
| limit | No | At most this many templates (default 10). | |
| query | No | At least 3 characters; omit to list the newest. |
send_feedbackTell Kalpana what got in the wayInspect
Feedback for the people who build these tools, not for the user: a tool, its arguments or the design guide that was confusing, missing something, wrong, or that worked especially well, with what was tried, what happened and what would have helped. It is for when a tool or the guide got in the way; nothing needs sending when none did. It holds no user content (their copy, names, image URLs or brand details). Free, and it changes nothing in the design.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | confusing: a tool or argument did not do what its description led you to expect. missing: something you needed has no tool or argument. bug: a wrong result or a failure. guide: the design guide was unclear or lacked something. worked_well: worth keeping as it is. | |
| tools | No | The tools it is about, by name; empty for the guide or the connection as a whole. | |
| page_id | No | The design you were working on, if any. | |
| what_happened | Yes | What you tried and what happened. | |
| what_would_help | No | What change to the tool or guide would have helped. |
set_choreographySet choreographyInspect
Camera moves and morphs between layers for the design, in the stored format (read the current value with get_design timeline). {} clears it. A flow alone (slides in order joined by transitions) is compiled into the camera and morphs it plays. Validated before saving; the timeline grows to fit the flow.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| choreography | Yes | Camera moves and morphs between layers, in the stored format (read the current value with get_timeline). `{}` clears it. May instead carry just a `flow` (the slides in video order, joined by transitions, under `stage`/`steps`), the camera and morphs it plays are compiled from it and saved alongside it. |
set_template_infoName the templateInspect
The name and description a template is saved with, and what each input may hold. Name: short and specific, e.g. "Ember Roasters autumn menu". Description: a sentence on what it is and where it is used. inputs: a description per text or image layer, by its id or name, saying what it holds and how long it can be ("Headline: up to 2 lines, about 45 characters"); batches show it to whoever fills the rows, and "" clears one. It also saves every change still waiting to be saved, so call it last: the template is then ready to fill with data.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| inputs | No | Layer id or name to its input description: what it holds and its length limit. | |
| description | No | ||
| template_id | Yes |
set_timelineSet the timelineInspect
Set the design's animation length in seconds (at most 30) and its frame rate.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| duration | No | Length of the scene's video in seconds. | |
| still_time | No | The second a still image of the scene shows: the moment where all its content is in place. A negative value clears it (the last frame). |
shape_pathCompute a shape outlineRead-onlyInspect
Exact SVG path data for a shape (arc, sector, ring, rounded polygon, star, spiral, wave, gear, arrow, blob, comic burst (jitter, seed, aspect), smooth line through points, the graph of a function), a stroke's filled outline, a boolean of paths, or the gap between two shapes. layer_gap with page_id gives the gap between two placed layers. Returns paths, width and height to pass to a vector layer in create_layers.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | ||
| b | No | ||
| op | No | ||
| to | No | ||
| cap | No | ||
| end | No | ||
| bend | No | ||
| form | No | ||
| from | No | ||
| head | No | ||
| join | No | ||
| kind | Yes | ||
| seed | No | ||
| x_to | No | ||
| depth | No | ||
| paths | No | ||
| sides | No | ||
| start | No | ||
| teeth | No | ||
| turns | No | ||
| width | No | ||
| y_max | No | ||
| y_min | No | Fix the y range (default: the function's own min and max). | |
| aspect | No | ||
| closed | No | ||
| corner | No | ||
| height | No | ||
| intent | No | Optional: a few words on why. | |
| jitter | No | ||
| points | No | ||
| radius | No | ||
| smooth | No | ||
| wobble | No | ||
| x_from | No | ||
| page_id | No | The page to work on, as returned by create_design. | |
| samples | No | ||
| amplitude | No | ||
| expression | No | ||
| wavelength | No | ||
| inner_ratio | No | ||
| inner_radius | No |
stagger_timesCompute stagger timesRead-onlyInspect
Start times for N items that cascade: a fixed step apart or spread over a total, evenly or easing in or out. Pass the times to animate.
| Name | Required | Description | Default |
|---|---|---|---|
| ease | No | linear (default), in, out, in_out: how the gaps shrink or grow. | |
| step | No | Seconds between starts; or give `total`. | |
| count | Yes | ||
| start | No | Seconds for the first one. | |
| total | No | Seconds from the first start to the last. | |
| intent | No | Optional: a few words on why. |
undoUndoInspect
Revert the latest change of a design. Returns the revision the design is now at.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | The page to work on, as returned by create_design. |
update_layersChange layersInspect
Change existing layers: position, size, rotation, visibility, opacity, blend mode, masks, fills, strokes, radius, shadows, blur, image zoom and focus, vector paths, text and its style, flows and sizing in a flow. Only the given fields change. To move, wrap, delete or align layers use edit_structure. Layout problems this call made or changed come back as layout_issues.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | One short sentence: what you change and why. Kept in the design history. | |
| page_id | Yes | The page to work on, as returned by create_design. | |
| preview | No | Also return a preview picture of the result. Use it only when you need to see the design (the finished build, visual fixes); leave it off for empty frames and structural steps. | |
| updates | No |
upload_imagesAdd images to the workspaceInspect
Bring the user's own images (PNG, JPEG or WebP, up to 5 MB each) into the workspace, optionally into a collection (made when it does not exist). Without files: a link to the workspace's Images page (the collection's page with collection) for the user to open and drop the images into; after they say they are done, find them with find_images and that collection. When you have the files yourself (a shell, files on disk): pass files with each one's SHA-256 hash, content type and size, PUT each file's bytes to its upload_url with that Content-Type header, then call again with done (each hash and file name) to record them; the reply gives each image's image key for create_layers and its asset_id for batch rows. Never send image data as base64. Images already on the web can be placed straight from their https URL instead.
| Name | Required | Description | Default |
|---|---|---|---|
| done | No | Files you uploaded, to record them. | |
| files | No | Files you will upload yourself. | |
| collection | No | Collection to put the images in, by name. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
41 tool updates
- First observed
animate - First observed
calculate - First observed
camera - First observed
check_layout - First observed
clear_animation - First observed
color_math - First observed
create_design - First observed
create_layers - First observed
design_guide - First observed
duplicate - First observed
edit_keyframes - First observed
edit_structure - First observed
find_images - First observed
get_design - First observed
import_svg - First observed
kinetic_type - First observed
list_fonts - First observed
list_shaders - First observed
list_workspaces - First observed
make_carousel - First observed
make_chart - First observed
make_cursor - First observed
make_list - First observed
make_particles - First observed
make_transition - First observed
measure_text - First observed
pages - First observed
place_items - First observed
render_contact_sheet - First observed
render_design - First observed
render_timeline - First observed
search_templates - First observed
send_feedback - First observed
set_choreography - First observed
set_template_info - First observed
set_timeline - First observed
shape_path - First observed
stagger_times - First observed
undo - First observed
update_layers - First observed
upload_images
Publisher details
- Operator
- Shreekaram Technologies ยท Publisher source
- Operator website
- https://kalpana.one ยท Publisher source
- Vendor relationship
- First-party
- Documentation
- https://docs.kalpana.one/mcp/designer
- Trust center
- Not available
- Restrictions
- Requires an active paid Kalpana plan; designer calls are paid from the workspaceโs render credits. Each connection covers one workspace chosen at sign-in, within the userโs role there. ยท Publisher source
Related MCP Connectors
Generate branded images at scale: design templates and render them to PNGs by prompt.
Photos and a brief in, finished social-media designs out. First design free, no account.
Generate on-brand images from your AI agent: design, edit, and render templates over MCP.
Deterministic image rendering for agents: JSON template in, on-brand PNG out.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTurns photos plus a short brief into finished social-media designs such as stories, carousels, reel covers and invites. It searches and ranks templates, uploads images, places photos and copy, and returns rendered designs with links for further editing.Apache 2.0
- FlicenseBqualityCmaintenanceEnables brand-guided design generation by creating social media graphics, quote posts, and one-page layouts from a fictional sample identity, with asset validation and auditing.13-
- AlicenseNot gradedqualityDmaintenanceGenerates logos, social media posts, app-store screenshots, comic panels, and visual-novel assets from natural-language prompts using 119 templates.MIT
- AlicenseAqualityCmaintenanceGenerate production-ready images from text prompts. AI-powered design API with 50+ templates for social posts, banners, OG images, and more.84 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.