How it works
Follow a single paste from your clipboard, through detection and extraction, into the taste profile your coding agent reads over MCP.
Krafa has one job: turn the design references you collect into instructions a coding agent can follow. Everything in the product is a step in that pipeline.
1. Capture
A board is an infinite canvas. You add to it by pasting, dropping files, or importing from a connected account.
Krafa inspects whatever arrives and picks a node type for it: a hex value becomes a swatch, a Figma URL becomes a design preview, an indented block of braces becomes a highlighted code block. There is no "choose a block type" step, because deciding what something is is work you shouldn't have to do. See Pasting for the full detection order.
The node itself is what you keep. Boards render from persisted data, so reopening one never refetches an embed or flashes a loading state.
2. Learn
Adding a node kicks off an extraction pass against a claude-sonnet-4-5 call, run alongside every memory the board already holds. Doing both in one pass is what lets Krafa notice contradictions rather than just piling up observations.
The pass returns up to three new memories, each one a durable principle with the concrete evidence behind it:
{
"category": "color",
"statement": "Accents are a single saturated warm hue against near-neutral surfaces",
"evidence": ["accent: #ff5c00", "surface: #0a0a0a", "no secondary accent present"]
}Not everything you paste is worth learning from. Video, audio, tables, folders, and short scraps of text are skipped, and images still uploading are left alone until they resolve. Extraction lists the exact rules.
If a reference disagrees with something Krafa already believes (a soft pastel palette landing on a board that has been all high-contrast monochrome), it doesn't quietly overwrite or quietly ignore. It stops and asks you whether the new reference replaces the old belief, joins it, or should be dropped.
3. Serve
Every board can mint a read-only bearer token that authenticates an MCP client against a hosted Streamable HTTP server at https://app.krafa.ai/api/mcp. The token is the board scope: one token, one board's taste.
Your agent gets three tools:
| Tool | What it returns |
|---|---|
get_taste_profile | The whole profile as Markdown, grouped by category. The one to read first |
list_memories | The same memories as structured JSON, optionally filtered to one category |
get_exemplars | Up to five of the actual reference images behind those memories |
The Markdown profile is what most agents act on. The exemplars matter more than they look: handing a vision model the real screenshots you curated communicates things a sentence about "generous whitespace" never will.
Full schemas and return shapes are in the MCP server reference.
Why boards, not one global profile
Taste isn't singular. The look you want for an internal admin tool is not the look you want for a marketing site, and a profile that averages both is useless for either.
Each board is an independent profile with its own token, so you can point one project's agent at your dense-dashboard board and another's at your editorial board. Deleting a node prunes the memories it produced, which means a board stays an accurate reflection of what's currently on it rather than an append-only log of everything you ever pasted.