svg mcp
一个MCP服务器,它提供了一个持久的SVG画布,您可以通过简单的工具调用进行绘制。每个工具都会将当前画布返回为PNG图像,这样您就可以在每个步骤后直观地检查进度。
特性
- 持久内存画布——元素在工具调用中累积
- 用于矩形、圆形、椭圆形、直线、折线、多边形、路径和文本的形状工具
draw_raw_svg任意SVG片段的转义阴影add_def用于渐变、图案、剪辑路径和过滤器- 导出到 可缩放矢量图形 或 便携式网络图形 (具有可配置的分辨率比例)
- 每个工具都将当前画布作为PNG预览返回
需求
- Python≥3.14
- 开罗 系统库(由使用
cairosvg用于PNG渲染)
在Ubuntu/Debian上:
sudo apt install libcairo2在macOS(Homebrew)上:
brew install cairoPython依赖关系:
pip install cairosvg "mcp[cli]"运行服务器
服务器通过以下方式进行通信 标准 (标准MCP传输):
python main.pyMCP客户端配置
使用Nix(推荐)
如果你有 尼克斯 已安装,不需要本地签出。使用 nix run 命令--Nix将自动获取、构建和缓存所有内容。
克劳德桌面(claude_desktop_config.json)
{
"mcpServers": {
"svg-mcp": {
"command": "nix",
"args": ["run", "github:datakurre/svg-mcp"]
}
}
}VS代码(settings.json)
{
"mcp": {
"servers": {
"svg-mcp": {
"type": "stdio",
"command": "nix",
"args": ["run", "github:datakurre/svg-mcp"]
}
}
}
}没有Nix(本地Python)
克劳德桌面(claude_desktop_config.json)
{
"mcpServers": {
"svg-mcp": {
"command": "python",
"args": ["/path/to/svg-mcp/main.py"]
}
}
}VS代码(settings.json)
{
"mcp": {
"servers": {
"svg-mcp": {
"type": "stdio",
"command": "python",
"args": ["/path/to/svg-mcp/main.py"]
}
}
}
}替换 /path/to/svg-mcp/main.py 机器上的绝对路径。
工具参考
画布管理
| 工具 | 说明 |
|---|---|
create_canvas(width, height, background) | 创建或重置画布。默认值:800×600,白色背景。 |
resize_canvas(width, height, background) | 调整画布大小而不清除元素。背景是可选的。 |
clear_canvas() | 删除所有元素(和defs),保留大小和背景。 |
get_canvas() | 返回当前画布的PNG预览,不做任何更改。 |
get_svg_source() | 返回当前画布的原始SVG源代码。 |
list_elements() | 按z顺序列出所有元素ID(底部→ top). |
get_element(element_id) | 返回单个元素的原始SVG片段。 |
remove_element(element_id) | 按ID删除单个元素 |
update_element(element_id, svg_fragment) | 替换元素的SVG,保留其z位置。 |
Z顺序
| 工具 | 说明 |
|---|---|
bring_forward(element_id) | 向顶部移动一步(稍后渲染=在前面)。 |
send_backward(element_id) | 向底部移动一步(之前渲染=后面渲染)。 |
bring_to_front(element_id) | 移动到堆栈的最顶部。 |
send_to_back(element_id) | 移动到堆栈的最底部。 |
撤消/恢复
| 工具 | 说明 |
|---|---|
undo() | 撤消上次画布更改(最多50步)。 |
redo() | 重新应用上次撤消的更改。 |
绘图
| 工具 | 关键参数 |
|---|---|
draw_rect | x, y, width, height, rx, ry, fill, stroke, stroke_width, stroke_dasharray, opacity, rotation |
draw_circle | cx, cy, r, fill, stroke, stroke_width, stroke_dasharray, opacity |
draw_ellipse | cx, cy, rx, ry, fill, stroke, stroke_width, stroke_dasharray, opacity, rotation |
draw_line | x1, y1, x2, y2, stroke, stroke_width, stroke_dasharray, opacity, stroke_linecap |
draw_polyline | points (例如。 "0,0 50,50 100,0"),填充,笔划,stroke_dasharray |
draw_polygon | points (闭合形状)、填充、笔划、stroke_dasharray、 |
draw_path | d (SVG路径数据)、填充、笔划、stroke_dasharray、 |
draw_text | x, y, text, font_size, font_family, fill, text_anchor, font_weight, rotation |
draw_image | x, y, width, height, href (URL或数据URI) |
draw_group | children (原始SVG字符串), transform (例如。 "translate(100,50) rotate(45)"), opacity |
draw_raw_svg | svg_fragment --任何有效的SVG字符串,例如。 `, `,过滤器 |
所有绘图工具都接受可选 element_id 参数。如果省略,则会自动生成一个唯一的ID。
stroke_dasharray 接受任何SVG破折号模式,例如。 "5,3" (5px破折号,3px间隙)或 "10,5,2,5" (长短交替)。
定义
| 工具 | 说明 |
|---|---|
add_def(def_fragment) | 添加a `` 子对象,如渐变、图案或剪辑路径。 |
示例——定义一个线性梯度并使用它:
add_def('
')
draw_rect(x=0, y=0, width=800, height=600, fill="url(#sky)")出口
| 工具 | 说明 |
|---|---|
export_svg(file_path) | 将画布写入 .svg 文件。 |
export_png(file_path, scale) | 将画布写为 .png 文件。 scale=2.0 分辨率加倍。 |
示例会话
create_canvas(width=600, height=400, background="#1a1a2e")
draw_circle(cx=300, cy=200, r=120, fill="#e94560", stroke="white", stroke_width=3)
draw_text(x=300, y=210, text="Hello!", font_size=48, fill="white", text_anchor="middle")
export_png("output/hello.png", scale=2.0)坐标系
SVG使用 左上原点 y向下增加。所有单位都是相对于中设置的画布尺寸的像素 create_canvas.
