mcp-imagemagick
使用ImageMagick和darktable进行图像转换的MCP(模型上下文协议)服务器。
概述
此服务器提供将DNG(数字负片)RAW图像文件转换为WebP格式的工具,使用ImageMagick或darktable作为转换后端。服务器通过stdio传输实现MCP协议,使其与Claude Desktop等MCP客户端兼容。
对于那些对创建MCP服务器感兴趣的人来说,这个项目既是一个功能工具,也是一个学习资源。虽然目前专注于DNG到WebP的转换,但我们计划随着时间的推移扩展其功能,以支持更多的图像格式和操作。我们发布这篇文章是为了分享我们的MCP实现方法,并为其他人提供一个可以学习的工作示例。
特性
- 使用无损压缩将DNG文件转换为WebP格式
- 根据可用性自动选择转换器
- ImageMagick和darktable之间的回退支持
- 完整的MCP协议实施(2024-11-05版)
- 强大的错误处理和恢复
- 详细记录到stderr进行调试
先决条件
您需要至少安装以下图像转换器之一:
ImageMagick 7
- 命令:
convert7或magick - 在Ubuntu/Debian上安装:
sudo apt install imagemagick - 验证安装:
convert7 -version或magick -version
暗表cli
- 暗表RAW处理器的命令行界面
- 在Ubuntu/Debian上安装:
sudo apt install darktable - 验证安装:
darktable-cli --version
从源头构建
- 确保您已安装Rust(https://rustup.rs/)
- 克隆或下载此存储库
- 构建项目:
cd mcp-imagemagick
cargo build --release二进制文件将在 target/release/mcp-imagemagick.
用法
MCP客户端配置
将服务器添加到MCP客户端配置中。对于Claude Desktop,请添加到您的设置中:
{
"mcpServers": {
"imagemagick": {
"command": "/path/to/mcp-imagemagick",
"args": [],
"env": {}
}
}
}可用工具
convert_dng_to_webp
使用无损压缩将DNG文件转换为WebP格式。
参数:
input_path(string,必填):DNG文件的路径output_path(字符串,必填):WebP输出文件的路径converter(字符串,可选):使用哪个转换器
- "auto" (默认):自动选择最佳可用转换器 - "imagemagick":使用ImageMagick(需要 convert7 或 magick) - "darktable":使用暗表cli
示例用法:
{
"tool": "convert_dng_to_webp",
"arguments": {
"input_path": "/path/to/photo.DNG",
"output_path": "/path/to/output.webp",
"converter": "auto"
}
}check_converters
检查系统上有哪些可用的图像转换器。
参数: 无需
退货: 可用转换器及其状态列表
技术细节
转换器优先级
使用时 "auto" 转换器选择:
- ImageMagick (优先级:60)-可用时先尝试
- 暗台 (优先级:40)-用作后备或在特别要求时使用
注意:ImageMagick可能无法在所有系统上直接支持DNG文件。如果ImageMagick失败,自动转换器将自动回退到暗表。
转换设置
ImageMagick WebP 设置 :
webp:lossless=true-无损压缩webp:exact=true-保留精确的像素值webp:method=6-最大压缩力webp:partition-limit=0-无分区限制
暗表cli:
- 使用darktable的RAW处理管道
- 自动应用任何XMP sidecar文件(如果存在)
- 为RAW文件提供精确的颜色管理
错误处理
服务器包括全面的错误处理:
- 即使单个转换失败,也会继续运行
- 返回正确的JSON-RPC错误响应
- 将详细的错误信息记录到stderr
- 在可用时自动回退到其他转换器
日志记录
使用控制日志的冗长程度 RUST_LOG 环境变量:
# Show only errors
RUST_LOG=error mcp-imagemagick
# Show informational messages
RUST_LOG=info mcp-imagemagick
# Show detailed debug information
RUST_LOG=debug mcp-imagemagick测试
运行集成测试:
cd mcp-imagemagick
python3 test_mcp.py项目结构
mcp-imagemagick/
├── src/
│ ├── main.rs # Entry point with panic handler
│ ├── server.rs # MCP server implementation
│ ├── transport.rs # Synchronous stdio transport
│ ├── handlers/ # Request handlers
│ │ └── image.rs # Image conversion tools
│ └── converters/ # Converter implementations
│ ├── mod.rs # Auto-converter with fallback
│ ├── imagemagick.rs # ImageMagick converter
│ └── darktable.rs # darktable converter
├── docs/ # Additional documentation
└── test_mcp.py # Integration test许可证
MIT许可证-有关详细信息,请参阅许可证文件。
安全考虑
此项目继承了ImageMagick的安全考虑。请注意:
- ImageMagick处理多种文件格式,其中一些可能包含恶意有效载荷
- 始终处理来自可信来源的图像 在可能的情况下
- 检查您的ImageMagick安全策略 (
policy.xml)已正确配置 - 考虑以有限权限运行 在生产环境中
有关详细的安全信息,请参阅 安全.md 和 ImageMagick的安全策略.
第三方软件
本项目使用以下第三方软件:
ImageMagick
- 版权所有©1999 ImageMagick工作室有限责任公司
- 根据ImageMagick许可证授权
- 许可证:https://imagemagick.org/script/license.php
- 用于图像转换操作
暗台
- 版权所有©darktable开发者
- 根据GPL 3.0或更高版本许可
- 许可证:https://github.com/darktable-org/darktable/blob/master/LICENSE
- 用于RAW图像处理
注意:此项目通过命令行界面调用这些工具,不分发或合并其源代码。
