A complete, cross-platform Model Context Protocol server
that lets an AI coding agent create, edit, query, transform, export, and live-preview
SVG vector graphics using Inkscape. 22 focused tools, a dual engine (direct lxml
editing + a persistent inkscape --shell), and a browser live-preview.
uv— runs the server (and manages Python for you)- Inkscape 1.2+ (developed and tested against 1.4.2): https://inkscape.org/release/
- Python 3.11+ (uv provides this automatically if you don't have it)
The server runs straight from GitHub — no clone required:
uvx --from git+https://github.com/jaags-dev/inkscape-mcp inkscape-mcpThat exact command is also what you drop into your agent's MCP config (below). Prefer a local checkout? See From source.
This is a standard stdio MCP server, so any MCP-capable agent can use it. Most of them share the same JSON shape — set it once and reuse it:
{
"mcpServers": {
"inkscape": {
"command": "uvx",
"args": ["--from", "git+https://github.com/jaags-dev/inkscape-mcp", "inkscape-mcp"],
"env": { "INKSCAPE_MCP_WORKSPACE": "/absolute/path/to/your/svg/workspace" }
}
}
}Use an absolute path for
INKSCAPE_MCP_WORKSPACE— it's the only folder the server may read/write (its security sandbox). Agents launch the server from different working directories, so relative paths are unreliable.
| Agent | Where to add it | Config key |
|---|---|---|
| Claude Code | claude mcp add … (see below) or a project .mcp.json |
mcpServers |
| Claude Desktop | Settings → Developer → Edit Config → claude_desktop_config.json (macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\) |
mcpServers |
| Cursor | .cursor/mcp.json (project) or ~/.cursor/mcp.json (global) |
mcpServers |
| Windsurf | Settings → Cascade → MCP → ~/.codeium/windsurf/mcp_config.json |
mcpServers |
| Cline (VS Code) | MCP Servers panel → Configure → cline_mcp_settings.json |
mcpServers |
| Gemini CLI | ~/.gemini/settings.json |
mcpServers |
| Continue | ~/.continue/config.yaml (or a project .continue/) |
mcpServers |
| JetBrains AI Assistant / Junie | Settings → Tools → AI Assistant → Model Context Protocol → Add (paste the JSON) | mcpServers |
| VS Code (GitHub Copilot) | .vscode/mcp.json (workspace) or user settings.json |
servers (see below) |
| Zed | settings.json (Cmd/Ctrl+,) |
context_servers (see below) |
| OpenAI Codex CLI | ~/.codex/config.toml |
TOML (see below) |
Everything in the first group accepts the JSON above verbatim. The four below use a different shape:
Claude Code — one command (no file editing):
claude mcp add inkscape --scope user \
-e INKSCAPE_MCP_WORKSPACE=/absolute/path/to/workspace \
-- uvx --from git+https://github.com/jaags-dev/inkscape-mcp inkscape-mcpVS Code (GitHub Copilot agent mode) — .vscode/mcp.json; note the servers key and type:
{
"servers": {
"inkscape": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/jaags-dev/inkscape-mcp", "inkscape-mcp"],
"env": { "INKSCAPE_MCP_WORKSPACE": "/absolute/path/to/workspace" }
}
}
}Zed — settings.json, under context_servers:
{
"context_servers": {
"inkscape": {
"source": "custom",
"command": "uvx",
"args": ["--from", "git+https://github.com/jaags-dev/inkscape-mcp", "inkscape-mcp"],
"env": { "INKSCAPE_MCP_WORKSPACE": "/absolute/path/to/workspace" }
}
}
}OpenAI Codex CLI — ~/.codex/config.toml:
[mcp_servers.inkscape]
command = "uvx"
args = ["--from", "git+https://github.com/jaags-dev/inkscape-mcp", "inkscape-mcp"]
env = { INKSCAPE_MCP_WORKSPACE = "/absolute/path/to/workspace" }If your agent can't find
uvx: GUI apps often don't inherit your shellPATH. Use the absolute path touvxascommand— e.g.~/.local/bin/uvx(macOS/Linux) orC:\Users\<you>\.local\bin\uvx.exe(Windows).Schemas drift: MCP client config formats change between releases. If a key differs from the table, check that tool's own MCP docs — but the
command/args/envvalues stay the same.
Restart the agent (or reload its MCP servers) after editing config. You should then
see the inkscape tools available.
git clone https://github.com/jaags-dev/inkscape-mcp
cd inkscape-mcp
uv sync
uv run inkscape-mcp # smoke-run; Ctrl+C to stopThen use this as the command in any config above (instead of the uvx form):
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/inkscape-mcp", "inkscape-mcp"]| Variable | Default | Meaning |
|---|---|---|
INKSCAPE_PATH |
auto-detected | Path to the inkscape executable |
INKSCAPE_MCP_WORKSPACE |
current dir | Root folder all file reads/writes are scoped to (security boundary) |
INKSCAPE_MCP_MAX_FILE_MB |
50 | Max size of an SVG that can be opened |
INKSCAPE_MCP_ACTION_ALLOWLIST |
built-in set | Comma-separated Inkscape actions the escape hatch may run |
- Documents:
new_document,open_document,save_document,get_svg_source - Shapes:
create_shape(rect/circle/ellipse/line/polygon/star) - Paths:
create_path,path_boolean(union/difference/intersection/exclusion),object_to_path - Text:
add_text,edit_text - Style:
set_style - Transform:
transform_object,align_distribute - Layers:
manage_layers(create/list/update/reorder) - Query:
list_objects,get_object,describe_document,get_geometry - Export:
export(png/pdf/svg/ps/eps) - Preview:
start_preview,stop_preview(live auto-reloading browser preview) - Escape hatch:
run_inkscape_action
start_preview spins up a local HTTP + Server-Sent-Events server and returns a
http://127.0.0.1:<port> URL. Open that URL in any browser tab; it renders the
current SVG and automatically refreshes whenever the document changes (e.g. after
another tool call). This is a cross-platform preview mechanism — it does not
drive a running Inkscape GUI window and does not use DBus.
- Claude Code:
claude mcp list→inkscape: ✔ Connected. - Any client: run the
uvx …command in a terminal — it should start and wait on stdin (that's the stdio server;Ctrl+Cto stop).