list_projects
List the projects in this studio: id, name and how many patterns each has. Start here when you do not know a project id.
Takes nothing.
Your model
The studio and your model use the same tools against the same store. Nothing is a model-only back door.
Available now
Open Settings, Model, and copy the command under Connect Claude Code. Run it in a terminal, or paste it into Claude Code and ask it to connect to knitted. It looks like this, with your own address:
claude mcp add --scope user --transport http knitted http://127.0.0.1:PORT/api/mcp/YOUR-KEYOther MCP clients take the address on its own. It works while knitted is open, and it holds a key, so keep it to yourself. Settings can make a new one and shut the old.
The server also speaks over stdio, so it needs no ports and no account. Clone the repository, run npm install, then add this to your client’s MCP settings with your own path.
{
"mcpServers": {
"knitted": {
"command": "node",
"args": ["/path/to/knitted-studio/packages/mcp/src/server.mjs"]
}
}
}From a clone, knitting needs Playwright and ffmpeg installed. The other tools do not.
List the projects in this studio: id, name and how many patterns each has. Start here when you do not know a project id.
Takes nothing.
Create a project. starter: social gives it five ready patterns (Story, Post, Square, Landscape, Banner) with a headline slot each; blank gives one empty pattern.
Takes name, starter (optional).
A project's patterns, how much Yarn it has, and its brand (colours, fonts and voice).
Takes projectId.
Show one of a project's images or videos (from its Yarn) on the project's card in the studio, so the person knows it at a glance. A logo or a key photo works well. Leave out yarnId to take the picture away.
Takes projectId, yarnId (optional).
List the files (Yarn) in a project: images, video, audio, fonts and saved copy. Filter by kind, tag or a search word. Use a Yarn name or id when filling an image slot.
Takes projectId, kind (optional), tag (optional), q (optional).
Add a file to a project's Yarn from a public web address: an image, a video, a sound, a font (to use it in a swatch) or a text file. Or save a piece of text as reusable copy. Local files are not accepted here; ask the person to upload them in the studio.
Takes projectId, url (optional), text (optional), name (optional).
Set the tags on a piece of Yarn. Tags let a batch pick from a group, like tag:product.
Takes yarnId, tags.
Rename a pattern or a piece of Yarn: give its patternId or its yarnId, and the new name. Use it to label a draft of your own, like "Draft: spring post"; only a person deletes, in the studio.
Takes patternId (optional), yarnId (optional), name.
The brand's colours, fonts and how it writes (voice, do and do-not lists, examples). Read this before writing any copy.
Takes projectId.
Propose a brand (a swatch) for the person to review: read it from the brand's website (url), give it yourself (colors, fonts, voice), or both, and what you give wins over what the site says. It is saved as a NEW swatch and never made the project's: the person looks it over in the Swatch tab and presses Use for this project. Fonts are matched to the bundled ones and to font files in the project's Yarn, so import_yarn a brand's font file first to use it. A swatch needs a primary, a text and a background colour.
Takes projectId, url (optional), name (optional), colors (optional), fonts (optional), voice (optional), logoYarnId (optional).
The patterns in a project.
Takes projectId.
A pattern as data: every stitch, with slot names, locked or free, and coordinates as fractions of the frame. Large; prefer describe_pattern.
Takes projectId, patternId.
A short text summary of a pattern: what slots it has, which are locked by the brand and which you may fill, what it says now, any animation, and the brand's voice. The cheapest way to understand a pattern.
Takes patternId.
Add an empty pattern to a project. Sizes: Story 1080x1920, Post 1080x1350, Square 1080x1080, Landscape 1920x1080, Banner 1456x816.
Takes projectId, name (optional), size (optional).
Copy a pattern, locks and all.
Takes patternId.
Write into a pattern's named slots. A text slot takes text. An image or video slot takes a Yarn name or id from list_yarn, or tag:product for the first file with that tag. A slot inside a part is addressed part.slot, like lower_third.name. Locked slots are REFUSED and reported: if you are refused, tell the person, do not look for another way around it. Returns what was filled and what was refused with the reason.
Takes projectId, patternId, slots.
Add a stitch. Coordinates are fractions of the frame (0 to 1). kind: text, image, shape. Give it a slot name so it can be filled later. Text sizes in style.fontSize are fractions of the frame WIDTH (0.05 is a modest body size, 0.1 a headline).
Takes patternId, kind, slot (optional), x, y, w, h, content (optional), yarnId (optional), style (optional).
Change a stitch's text, position, size, image or style. Address it by slot name.
Takes patternId, stitch, patch.
Remove a stitch. Locked stitches are refused.
Takes patternId, stitch.
Change a pattern's size. Everything is stored as fractions, so it re-lays out. Check the result with preview_pattern.
Takes patternId, size.
Apply several edit commands as ONE step, so a person can undo it as one. atomic: true applies all or nothing. Each command is {type, ...}: addStitch {stitch}, updateStitch {id, patch}, removeStitch {id}, reorder {id, toIndex}, setSize {size}, fillSlot {slot, content} (text slots only; set an image with updateStitch and a yarnId), setMeta {name, durationMs}, setMotion {stitchId, clips}, setAudio {audio}. setLocked is refused: only a person locks or unlocks.
Takes patternId, commands, atomic (optional).
Reusable parts you can insert: lower thirds, quotes, price tags and the project's own. Each lists its slots.
Takes projectId.
Put a part into a pattern. Then fill its slots with fill_slots using instance.slot.
Takes patternId, partId, slot (optional), x (optional), y (optional), w (optional), overrides (optional).
The animation presets available to set_motion.
Takes nothing.
Animate a stitch: give it clips, each {preset, startMs, endMs}. Replaces that stitch's clips. Also set the pattern's length with durationMs if the animation runs past it. Keep text on screen long enough to read (about 3 words a second).
Takes patternId, stitch, clips, durationMs (optional).
The voices available for voiceover, and whether the configured voice works right now.
Takes nothing.
Speak lines and put them on the pattern's timeline as sound, optionally with timed captions. Returns a job id: check it with get_job. The pattern becomes a video long enough for the speech.
Takes patternId, lines, voice (optional), captions (optional).
Render the pattern and SEE it: returns a PNG. Use it after layout changes to check your own work. time is milliseconds for animated patterns.
Takes patternId, time (optional).
Run the same quality checks Knit runs, without drawing anything: missing files, low contrast, text that will not fit, animation that is too busy. Fix errors before knitting.
Takes patternId, params (optional).
Make real files (PNG, JPEG, WebP or MP4) from a pattern, through the same job the studio's Knit button uses, with the same checks. params: sizes (array of {name,w,h}), format, scale (1 or 2), rows (an array of objects of slot values, one per post, to make many). A row may only fill free slots. Returns file paths and any issues, or a jobId when wait is false.
Takes projectId, patternId, params (optional), wait (optional).
Check on a job: a knit or a voiceover.
Takes jobId.
Stop a running job.
Takes jobId.
What has been knitted in a project, newest first.
Takes projectId.
A locked stitch cannot be changed through this interface. fill_slots refuses it and says so in its reply, so your model never believes it wrote a headline that it did not. Unlocking is a human act in the studio.