What arikusi/nakkas MCP server does
The arikusi/nakkas MCP server converts structured JSON into SVG artwork for use in logos, icons, loading indicators, README banners, badges, charts, and generative designs. Its output is pure SVG XML, with animation provided by CSS @keyframes and SMIL rather than JavaScript. The renderer can also produce a PNG image so an AI assistant can inspect the result.
The main generation tool accepts an SVG configuration containing a canvas, optional definitions, elements, animations, and output preferences. Each element requires a type field. Supported shapes include rectangles, circles, ellipses, lines, paths, polygons, images, text, text paths, groups, instances, and several pattern-oriented group types. Parametric elements can generate rose, heart, Lissajous, spiral, star, superformula, epitrochoid, hypotrochoid, and wave curves.
How it works
A typical workflow starts with render_svg. The server keeps the generated SVG as an artifact and returns its identifier with a PNG preview. The assistant can inspect that image, adjust the JSON, and render another version without sending the full SVG through its context. The supplied workflow recommends several preview-and-revision passes before saving.
The preview tool can render an existing artifact or raw SVG at a selected width. A normal preview represents the initial animation state, while the frames option creates a filmstrip of two to ten sampled CSS-animation states. This helps check rotation, timing, easing, and other motion details. SMIL animation is not included in those sampled frames.
The save tool accepts an artifact ID or raw SVG. It can write SVG text or rasterize the content to PNG. Automatic format selection uses the output filename extension, and an existing file receives a numeric suffix instead of being overwritten. Artifacts remain available only for the server process lifetime, with a maximum of 32 stored and older entries evicted.
Setup and configuration
The arikusi/nakkas MCP server runs locally through the npm package and does not require cloud credentials or API keys. For Claude Desktop, Cursor, Zed, and similar MCP clients, configure a server command using npx -y nakkas@latest. Claude Code can add the same server with claude mcp add nakkas npx nakkas@latest.
For development, clone the repository, run npm install && npm run build, and use dist/index.js as the command. No environment variables are specified as required.
Configurations must use the server's field names rather than assuming raw SVG syntax. Text uses content, text paths use pathId, and groups use a children array. Pattern groups accept one child positioned at the local origin. Gradients use linearGradient or radialGradient; filters use the preset form when selecting a built-in filter. Hex colors are required for gradient stops and filter colors, and keyframe offsets use from, to, or numeric percentages.
Tools and capabilities
render_svg: Generates animated SVG from JSON and returns a PNG preview, artifact ID, and possible design-analysis notes.
preview: Re-renders an artifact or raw SVG, optionally at a different width.
save: Writes an artifact or raw SVG as SVG text or PNG image.
- Definitions can include gradients, filters, clipping paths, masks, patterns, markers, symbols, and reusable paths.
- Pattern groups support radial, arc, grid, scatter, and path-based repetition.
- Built-in filter presets include effects such as glow, neon, blur, drop shadow, glitch, noise, outline, and emboss.
- Output options can include the SVG text, skip the preview, resize the preview, minify stored output, or generate animation filmstrips.
Limitations and notes
A single preview shows a static snapshot, so it does not establish that an animation behaves correctly. Use sampled frames for CSS motion; SMIL remains unsampled. The renderer returns transparent backgrounds by default unless the canvas specifies another background.
Pattern-group children are constrained to one element, and nested groups are not supported inside the ordinary group element. For radial or arc arrangements, children are expected to be drawn along the local x-axis when rotation is enabled; using the y-axis can produce an unintended chord-like ring. The server may report overflow, text overlap, missing transform settings, excessive concurrent animation, or contrast issues after rendering. These notes are checks to review, not automatic design fixes.