返回市场
mcp图像处理魔法

mcp图像处理魔法

作者:AeyeOps11 星标更新:2025-06-18

项目介绍

mcp-imagemagick

<img src="imagemagick-mcp-github.png" alt="MCP ImageMagick Server" width="256" height="384" align="right" style="margin-left: 20px;">

这是一个使用ImageMagick和darktable进行图像转换的MCP(模型上下文协议)服务器。

概述

此服务器提供了将DNG(数字负片)RAW图像文件转换为WebP格式的工具,可以使用ImageMagick或darktable作为转换后端。该服务器通过标准I/O传输实现了MCP协议,使其与Claude Desktop等MCP客户端兼容。

该项目既是一个功能工具,也是一个学习资源,适用于对创建MCP服务器感兴趣的人员。虽然目前专注于DNG到WebP的转换,但我们计划随着时间的推移扩展其功能,以支持更多图像格式和操作。我们发布这个项目作为一个起点,分享我们的MCP实现方法,并提供一个可工作的示例供他人学习。

特性

  • 将DNG文件转换为具有无损压缩的WebP格式
  • 根据可用性自动选择转换器
  • 在ImageMagick和darktable之间提供回退支持
  • 完整实现MCP协议(版本2024-11-05)
  • 健壮的错误处理和恢复机制
  • 详细的调试日志输出到stderr

先决条件

您需要安装以下至少一种图像转换器:

ImageMagick 7

  • 命令:convert7magick
  • 在Ubuntu/Debian上安装:sudo apt install imagemagick
  • 验证安装:convert7 -versionmagick -version

darktable-cli

  • darktable RAW处理器的命令行接口
  • 在Ubuntu/Debian上安装:sudo apt install darktable
  • 验证安装:darktable-cli --version

从源代码构建

  1. 确保已安装Rust(https://rustup.rs/)
  2. 克隆或下载此仓库
  3. 构建项目:
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(字符串,必需):DNG文件路径
  • output_path(字符串,必需):WebP输出文件路径
  • converter(字符串,可选):使用的转换器
    • "auto"(默认):自动选择最佳可用转换器
    • "imagemagick":使用ImageMagick(需要convert7magick
    • "darktable":使用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"转换器选择时:

  1. ImageMagick(优先级:60)- 当可用时首先尝试
  2. darktable(优先级:40)- 作为回退或当特别请求时使用

注意:ImageMagick可能无法在所有系统上直接支持DNG文件。自动转换器会在ImageMagick失败时自动回退到darktable。

转换设置

ImageMagick WebP设置:
  • webp:lossless=true - 无损压缩
  • webp:exact=true - 保留精确像素值
  • webp:method=6 - 最大压缩努力
  • webp:partition-limit=0 - 不设分区限制
darktable-cli:
  • 使用darktable的RAW处理流水线
  • 如果存在,自动应用任何XMP侧车文件
  • 为RAW文件提供准确的颜色管理

错误处理

服务器包括全面的错误处理:

  • 即使个别转换失败也能继续运行
  • 返回正确的JSON-RPC错误响应
  • 将详细错误信息记录到stderr
  • 当有可用替代转换器时自动回退

日志记录

使用RUST_LOG环境变量控制日志记录的详细程度:

# 只显示错误
RUST_LOG=error mcp-imagemagick

# 显示信息性消息
RUST_LOG=info mcp-imagemagick

# 显示详细的调试信息
RUST_LOG=debug mcp-imagemagick

测试

运行集成测试:

cd mcp-imagemagick
python3 test_mcp.py

项目结构

mcp-imagemagick/
├── src/
│   ├── main.rs           # 入口点,带有panic处理器
│   ├── server.rs         # MCP服务器实现
│   ├── transport.rs      # 同步stdio传输
│   ├── handlers/         # 请求处理器
│   │   └── image.rs      # 图像转换工具
│   └── converters/       # 转换器实现
│       ├── mod.rs        # 自动转换器及回退
│       ├── imagemagick.rs # ImageMagick转换器
│       └── darktable.rs  # darktable转换器
├── docs/                 # 额外文档
└── test_m_ cp.py          # 集成测试

许可证

MIT许可证 - 详情见LICENSE文件。

安全注意事项

本项目继承了ImageMagick的安全注意事项。请注意:

  • ImageMagick处理许多文件格式,其中一些可能包含恶意负载
  • 尽可能只处理来自可信来源的图像
  • 检查您的ImageMagick安全策略policy.xml)是否正确配置
  • 考虑在生产环境中以有限权限运行

有关详细的安全信息,请参阅SECURITY.mdImageMagick的安全策略

第三方软件

本项目使用以下第三方软件:

ImageMagick

darktable

注意:本项目通过这些工具的命令行界面调用它们,并不分发或合并其源代码。