AffinityMCP
通用MCP服务器(Rust)公开了Canva工作流的工具——以及 亲和照片/设计师/出版商自动化--专为 自然语言 在MCP兼容客户端中使用。
特性
- 🎨 自然语言控制:使用自然语言命令控制Affinity应用程序
- 🖼️ 文件操作:打开文件、创建新文档、以各种格式导出
- ⚡ 16并行处理:最多可同时处理16个文件,以实现最高效率
- 🔧 高级工具:应用筛选器、获取文档信息等
- 🚀 轻松设置:为初学者提供简单的设置和全面的文档
- 🌐 跨平台就绪:目前macOS(AppleScript),计划支持Windows
快速开始
对于初学者,请参阅 SETUP_GUIDE.md 了解详细的分步说明。
快速安装:
# Build
cargo build --release
cp target/release/affinity-mcp dist/
# Use with Cursor
# Add to Cursor MCP settings:
{
"mcpServers": {
"affinity-mcp": {
"command": "npx",
"args": ["affinity-mcp"],
"autoStart": true
}
}
}安装
先决条件
- Node.js 18+(用于瘦npx包装器)
- Rust 1.76+/Cargo(适用于本地版本)
- 集
AFFINITY_MCP_API_KEY如果使用Canva Connect/MCP端点。
获取API密钥
- 如果您的工具需要Canva API,请从Canva开发人员控制台或MCP服务器指南中获取凭据。否则,您可以跳过此步骤。
本地建设
cd /path/to/affinity-mcp
cargo build --release
# copy target/release/affinity-mcp -> ./dist/
cp target/release/affinity-mcp dist/设置:克劳德代码(CLI)
使用这一行(替换为实际值):
claude mcp add AffinityMCP -s user -e AFFINITY_MCP_API_KEY="sk-your-real-key" -- npx affinity-mcp要删除:
claude mcp remove AffinityMCP设置:游标(此处不要提交.Cursor/mcp.json)
在客户端中创建配置:
{
"mcpServers": {
"affinity-mcp": {
"command": "npx",
"args": ["affinity-mcp"],
"env": { "AFFINITY_MCP_API_KEY": "sk-your-real-key" },
"autoStart": true
}
}
}其他客户和代理商
VS Code
code --add-mcp '{"name":"affinity-mcp","command":"npx","args":["affinity-mcp"],"env":{"AFFINITY_MCP_API_KEY":"sk-your-real-key"}}'Claude Desktop
遵循MCP安装指南并重用上述标准配置。
LM Studio
- 命令:npx
- Args:\[“亲和性mcp”\]
- 环境:AFFINIT_MCP_API_KEY=sk-您的本地密钥
Goose
- 类型:STDIO
- 命令:npx
- Args:\[“亲和性mcp”\]
- 启用:true
opencode
~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"affinity-mcp": {
"type": "local",
"command": ["npx", "affinity-mcp"],
"enabled": true
}
}
}Qodo Gen
添加一个新的MCP并粘贴标准JSON配置。
Windsurf
请参阅文档并重用上面的标准配置。
设置:Codex(TOML)
示例(Serena):
[mcp_servers.serena]
command = "uvx"
args = ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "codex"]此服务器(最小):
[mcp_servers.affinity-mcp]
command = "npx"
args = ["affinity-mcp"]
# Optional environment variables:
# AFFINITY_MCP_API_KEY = "sk-your-real-key"
# MCP_NAME = "affinity-mcp"配置(Env)
AFFINITY_MCP_API_KEY:Canva API密钥或令牌(如果适用)MCP_NAME:服务器名称覆盖(默认:关联mcp)
如果您的工具纯粹是本地的,则不需要API密钥。
可用工具
亲和工具(自然语言支持)
所有Affinity工具都支持自然语言命令。示例:
- “在Affinity Photo中打开文件/path/to/image.jpg”
- “创建宽度为1920、高度为1080的新文档”
- “将当前文档导出为PDF到/path/to/output.PDF”
affinity.open_file
在Affinity应用程序中打开文件(根据文件扩展名自动检测应用程序)。
- 输入:{“path”:字符串,“app”?:“Photo”|“Designer”|“Publisher”}
- 输出:{“open”:布尔值,“app”:字符串,“path”:字符串}
affinity.create_new
创建新的Affinity文档。
- 输入:{“应用程序”:“照片”|“设计器”|“发布者”,“宽度”:数字,“高度”:数字}
- 输出:{“created”:布尔值,“app”:字符串}
亲和力.出口
导出当前打开的文档。
- 输入:{“路径”:字符串,“格式”:“pdf”|“png”|“jpg”|“tiff”|“svg”,“质量”?:数字}
- 输出:{“export”:布尔值,“path”:字符串}
affinity.apply_filter
对当前文档应用筛选器。
- 输入:{“filter_name”:字符串,“intensity”?:数字}
- 输出:{“applied”:布尔值,“filter_name”:字符串}
affinity.get_active_document
获取有关当前活动文档的信息。
- 输入:{}
- 输出:{“is_open”:布尔值,“name”?:string,“path”?:string}
affinity.close_document
关闭当前打开的文档。
- 输入:{}
- 输出:{“closed”:boolean}
affinity.batch_open_files⚡ 16平行
同时打开多个文件(最多并行16个文件)。
- 输入:{“paths”:string\[\],“app”?:“Photo”|“Designer”|“Publisher”}
- 输出:{“success_count”:数字,“failure_count”:数字,“results”:OpenFileResult\[\]}
自然语言示例:“打开多个文件:/path/to/image1.jpg、/path/to/image2.jpg、/path/to/image3.jpg”
亲和性.匹配_输出⚡ 16平行
同时导出多个文档(最多并行导出16个)。
- 输入:{“exports”:ExportParams\[\]}
- 输出:{“成功计数”:数字,“失败计数”:数量,“结果”:ExportResult\[\]}
自然语言示例:“将所有打开的文档导出为PDF文件”
Canva工具
canva.create_design
- 输入:{“title”:字符串、“template_id”?:字符串、宽度?:数字、高度?:数字}
- 输出:{“design_id”:字符串,“url”?:字符串}
示例用法
自然语言命令
在Cursor或其他MCP兼容客户端中,您可以使用自然语言:
示例1:打开文件
User: "Open /Users/john/Desktop/image.jpg in Affinity Photo"
AI: [Calls affinity.open_file with path="/Users/john/Desktop/image.jpg", app="Photo"]示例2:创建和导出
User: "Create a new Affinity Photo document with size 1920x1080, then export it as PDF to my Desktop"
AI: [Calls affinity.create_new, then affinity.export]示例3:获取文档信息
User: "What document is currently open?"
AI: [Calls affinity.get_active_document]示例4:批处理操作(16个并行)
User: "Open these 5 images simultaneously: /path/to/img1.jpg, /path/to/img2.jpg, /path/to/img3.jpg, /path/to/img4.jpg, /path/to/img5.jpg"
AI: [Calls affinity.batch_open_files with paths array]示例5:批量导出(16个并行)
User: "Export all open documents as PDF files to the Desktop"
AI: [Calls affinity.batch_export with multiple export configurations]直接刀具调用(MCP刀具调用)
{
"type": "tool",
"name": "affinity.open_file",
"arguments": {
"path": "/path/to/image.jpg",
"app": "Photo"
}
}文档
- SETUP_GUIDE.md:初学者友好的设置指南,包含分步说明
- 规格.md:技术规范(日语)
- README.md:此文件(英文文档)
有关复杂的模式,请参见 src/tools/*.rs.
名称一致性和故障排除
始终使用CANONICAL_ID(affinity-mcp)用于标识符和密钥。
使用CANONICAL_DISPLAY(AffinityMCP)仅适用于UI标签。
注册后不要混合使用旧密钥。
一致性矩阵
- npm包名称→
affinity-mcp - 二进制名称→
affinity-mcp - MCP服务器名称→
affinity-mcp - 环境默认MCP_NAME→
affinity-mcp - 客户端注册表项→
affinity-mcp - UI标签→
AffinityMCP
冲突清理
删除过时的密钥并重新添加 affinity-mcp 只有。
光标仅为UI配置;此回购故意省略 .cursor/mcp.json.
