Scribus MCP
MCP服务器 Scribus --允许LLM以编程方式创建专业的RGB/CMYK布局。
建筑
Claude Code/Desktop ←(MCP stdio)→ server.py ←(subprocess NDJSON)→ Scribus -g -py bridge.pyScribus作为一个持久的子进程无头运行。桥接脚本在Scribus的嵌入式Python中执行,通过stdin接收JSON命令,通过stdout返回结果。突变会自动保存在延迟30秒的计时器上(将快速更改批处理为一次写入)。新文档保存到 ~/.scribus-mcp/workspace/document.sla;打开的文档将保存回其原始路径。
先决条件
- Python 3.10+
- 紫外线 包管理器
- Scribus 安装在以下位置之一:
- macOS: /Applications/Scribus.app/Contents/MacOS/Scribus - Linux: /usr/bin/scribus - 窗户: C:\Program Files\Scribus 1.6\Scribus.exe - 或设置 SCRIBUS_EXECUTABLE env var(请参见 自定义Scribus路径)
设置
git clone https://github.com/chrisgliddon/scribus-mcp.git
cd scribus-mcp
uv sync码头工人
如果你不想在本地安装Scribus或uv,请构建Docker镜像:
docker build -t scribus-mcp .然后使用下面基于Docker的MCP配置示例——不需要本地Scribus或uv。
在Claude代码中配置
添加 .mcp.json 在项目根目录中,或 ~/.claude.json 用于所有会话的全局访问。
原生(uv)-macOS/Linux:
{
"mcpServers": {
"scribus": {
"command": "uv",
"args": ["--directory", "/path/to/scribus-mcp", "run", "scribus-mcp"]
}
}
}原生(uv)-Windows:
{
"mcpServers": {
"scribus": {
"command": "uv",
"args": ["--directory", "C:\\path\\to\\scribus-mcp", "run", "scribus-mcp"]
}
}
}Docker(跨平台):
{
"mcpServers": {
"scribus": {
"command": "docker",
"args": ["run", "--rm", "-i", "scribus-mcp"]
}
}
}在Claude桌面中配置
添加一个 "scribus" 进入 mcpServers 配置文件中的对象:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
原生(uv)-macOS/Linux:
{
"mcpServers": {
"scribus": {
"command": "uv",
"args": ["--directory", "/path/to/scribus-mcp", "run", "scribus-mcp"]
}
}
}原生(uv)-Windows:
{
"mcpServers": {
"scribus": {
"command": "uv",
"args": ["--directory", "C:\\path\\to\\scribus-mcp", "run", "scribus-mcp"]
}
}
}Docker(跨平台):
{
"mcpServers": {
"scribus": {
"command": "docker",
"args": ["run", "--rm", "-i", "scribus-mcp"]
}
}
}工具
文件
| 工具 | 它做什么 |
|---|---|
create_document | 具有不对称边距、对页和出血的新文档。参数: width, height, margins, margin_top/bottom/left/right, facing_pages, first_page_left, bleed_top/bottom/left/right, unit (毫米/磅/英寸), pages, orientation |
open_document | 打开现有 .sla 文件。返回页数、页面大小和对象列表。自动保存会写回打开的文件。参数: file_path |
add_page | 添加页面。参数: count, where (-1=追加), master_page |
get_document_info | 查询文档状态——页面、边距、对象、颜色、母版页、段落样式、字符样式 |
set_baseline_grid | 设置跨列文本对齐的文档基线网格。参数: grid (间距单位为pt), offset |
颜色
| 工具 | 它做什么 |
|---|---|
define_color | 命名颜色。参数: name, mode (cmyk/rgb), c/m/y/k (0-100%)或 r/g/b (0-255) |
文本和排版
| 工具 | 它做什么 |
|---|---|
place_text | 具有内容、样式、列和段落样式的文本框架。参数: x, y, w, h, text, font, font_size, color, alignment, page, line_spacing, line_spacing_mode (0=固定,1=自动,2=基线网格), columns, column_gap, style |
edit_text | 编辑现有框架中的文本。参数: name, action (插入/apply_char_style/apply_para_style/连字符/脱氢酚), text, position, start, count, style |
get_text_info | 获取文本帧度量:溢出计数、字符计数、行计数。参数: name, refresh_layout |
create_paragraph_style | 命名段落样式。参数: name, font, font_size, line_spacing, line_spacing_mode, alignment, first_indent, space_above, space_below, drop_cap, drop_cap_lines, char_style |
create_char_style | 命名字符样式。参数: name, font, font_size, fill_color, features (例如“粗体、斜体、小写”), tracking |
link_text_frames | 链接两个框架以实现文本流。参数: from_frame, to_frame |
unlink_text_frames | 从文本链中取消帧链接。参数: frame |
图像和形状
| 工具 | 它做什么 |
|---|---|
place_image | 图像框架。参数: x, y, w, h, file_path, scale_to_frame, proportional, page |
place_svg | 在页面上放置一个SVG文件。参数: file_path, x, y, page |
draw_shape | 矩形、椭圆形或直线。参数: shape, x/y/w/h 或 x1/y1/x2/y2, fill_color, line_color, line_width |
modify_object | 更改对象道具。参数: name+位置、大小、旋转、颜色、文本道具、, line_spacing, line_spacing_mode, columns, column_gap, corner_radius, text_flow_mode, fill_transparency, line_style |
get_object_properties | 检查对象的属性(位置、大小、旋转、角半径、text_flow_mode、填充透明度、特定类型:文本内容、字体、颜色、列)。参数: name |
delete_object | 从文档中删除对象。参数: name |
control_image | 获取或设置帧内的图像偏移/比例。参数: name, action (get/set_offset/set_scale/fit_frame_to_image), offset_x, offset_y, scale_x, scale_y |
duplicate_objects | 复制一个或多个对象。参数: names |
图层和分组
| 工具 | 它做什么 |
|---|---|
manage_layers | 创建、删除、列出、激活和配置图层。参数: action (创建/删除/列表/获取活动/设置活动/发送层/设置属性/获取属性), layer, name, visible, locked, printable |
organize_objects | 分组、取消分组或更改z顺序。参数: action (分组/取消分组/向前移动/向后移动), names, name |
表格
| 工具 | 它做什么 |
|---|---|
create_table | 创建桌子框架。参数: x, y, w, h, rows, columns, page |
modify_table_structure | 插入/删除行/列、调整大小、合并单元格。参数: name, action (insert_rows/insert_columns/remove_rows/remove_columns/resize_row/resisze_column/merge_cells/get_size), index, count, size, row, col, num_rows, num_cols |
set_table_content | 读取或写入表格单元格中的文本。参数: name, cells ({行、列、文本}的列表), get_cell ({行,列}) |
style_table | 设置表格及其单元格的样式。参数: name, table_fill_color, table_style, cells (带填充颜色、样式、边框的列表\_*,衬垫\_*) |
布局和母版页
| 工具 | 它做什么 |
|---|---|
set_guides | 在页面上设置水平/垂直参考线。参数: horizontal, vertical, page |
create_master_page | 创建新的母版页。参数: name |
edit_master_page | 进入母版页编辑模式。参数: name |
close_master_page | 退出母版页编辑模式 |
apply_master_page | 将母版页应用于文档页。参数: master_page, page |
list_master_pages | 列出所有母版页名称 |
delete_page | 从文档中删除一页。参数: page |
PDF导出
| 工具 | 它做什么 |
|---|---|
export_pdf | 使用印前选项导出PDF。参数: file_path, quality (屏幕/电子书/印刷机), pdf_version (1.3/1.4/1.5/x-1a/x-3/x-4), pages, crop_marks, bleed_marks, registration_marks, color_marks, mark_length, mark_offset, use_doc_bleeds, output_profile (ICC配置文件名称), embed_profiles, info, font_embedding (嵌入/轮廓/无), resolution |
高级
| 工具 | 它做什么 |
|---|---|
run_script | 执行原始的Scribus Python。参数: code.Set result 返回数据的变量 |
get_font_names | 列出Scribus中所有可用的字体名称 |
示例提示
创建一个A4文档,在C=100 M=80 Y=0 K=20处定义一种名为“BrandBlue”的CMYK颜色,在顶部中心添加一个36pt的标题“Hello World”,在其后面绘制一个蓝色矩形,然后以PDF格式导出到~/Desktop/test.PDF
打开一个US Letter横向文档,将图像放在左上角的~/logo.png处,缩放为50x50mm,在其下方添加正文,导出为PDF
打开文件~/Documents/layout.sla,显示第1页上的对象,删除旧的“header_text”框架,并将其替换为顶部中心24pt的新标题“Updated Title”
创建一个245x290mm的封面书籍,带有3mm的出血、不对称的边距(顶部=17,底部=20,左侧=20,右侧=15),设置一个13pt的基线网格,在DejaVu Serif 9.5pt中定义一个对齐对齐的“正文”段落样式,然后导出为PDF/X-4,带有裁剪标记和ISOcoat_v2 ICC配置文件
发展
# install dev deps
uv sync
# run tests
uv run pytest tests/ -v
# test with MCP Inspector
npx @modelcontextprotocol/inspector uv run scribus-mcp配置
自定义Scribus路径
如果Scribus不在标准位置:
macOS/Linux(bash/zsh):
export SCRIBUS_EXECUTABLE=/path/to/scribusWindows(命令提示符):
set SCRIBUS_EXECUTABLE=C:\path\to\Scribus.exeWindows(PowerShell):
$env:SCRIBUS_EXECUTABLE = "C:\path\to\Scribus.exe"超时和保存间隔
| 变量 | 默认值 | 描述 |
|---|---|---|
SCRIBUS_COMMAND_TIMEOUT | 30 | 在杀死Scribus之前等待命令响应的秒数 |
SCRIBUS_STARTUP_TIMEOUT | 60 | 启动时等待就绪哨兵的秒数 |
SCRIBUS_SAVE_INTERVAL | 30 | 延迟自动保存之间的秒数。设置为 0 在每次命令后保存(传统行为) |
运作原理
- 在第一次工具调用时,
client.py启动Scribus无头(-g -ns -py bridge.py) bridge.py重定向stdout以避免协议污染,发送{"ready": true}哨兵- 客户端通过stdin发送NDJSON命令,从stdout读取JSON响应
- 每个命令都有一个超时(默认为30秒)——如果Scribus停滞,进程将被终止,并在下次调用时自动重新启动
- 突变被批量保存为延迟自动保存(默认每30秒一次);强制保存在PDF导出之前和关闭时运行
- 新文档保存到
~/.scribus-mcp/workspace/document.sla;打开的文档保存回其原始路径
许可证
麻省理工学院——见 许可证
