stass
服务介绍
exif-mcp
一个允许LLM(或人类)按需读取图像元数据的MCP服务器,完全离线运行。基于优秀的exifr库,它非常快速且不依赖任何外部工具。
使用场景:
- 分析图像元数据并可视化
- 对您的图像库进行分析:我最常用的相机是什么?镜头分布如何?一周中哪几天拍摄的照片最多?最喜欢的位置是哪里?
- 调试图像处理代码。
该工具被反向地理定位服务PlaceSpotter广泛用于开发和测试。
概述
exif-mcp是一个模型上下文协议(MCP)服务器,提供从图像中提取各种元数据段的工具。它使用TypeScript构建,并利用了优秀的exifr库来解析JPEG、PNG、TIFF和HEIC等常见格式图像中的元数据。这使得该服务能够在不执行任何外部工具的情况下解析图像元数据,从而既高效又安全。
特性
- 本地操作:完全离线工作,无需远程网络
- 多段提取:提取EXIF、GPS、XMP、ICC、IPTC、JFIF和IHDR元数据
- 多种输入格式:支持JPEG、TIFF、HEIC/AVIF和PNG
- 灵活的图像源:从文件系统、URL、base64数据或缓冲区读取
- 专用工具:获取方向、旋转信息、GPS坐标和缩略图
安装
csh
克隆仓库
git clone https://github.com/stass/exif-mcp.git
cd exif-mcp
安装依赖
npm install
构建项目
npm run build
使用
Claude Desktop
将以下内容放入Claude配置文件(claude_desktop_config.json)中:
json
"mcpServers": {
"exif-mcp": {
"command": "node",
"args": [
"/path/to/exif-mcp/dist/server.js"
]
}
},
重启Claude。现在您可以要求Claude为您检查图像,例如查找用特定相机拍摄的文件。结合文件系统MCP工具使用效果最佳,这样Claude可以找到文件并列出目录。
启动服务器
csh
启动服务器
npm start
开发模式下自动重载
npm run dev
服务器使用MCP SDK中的StdioServerTransport,使其与支持STDIO传输的任何MCP客户端兼容。
您可以使用mcp-proxy启用远程访问。
可用工具
服务器提供了以下工具:
| 工具名称 | 描述 |
|---|---|
read-metadata |
读取所有或指定的元数据段 |
read-exif |
专门读取EXIF数据 |
read-xmp |
读取XMP数据 |
read-icc |
读取ICC色彩配置文件数据 |
read-iptc |
读取IPTC元数据 |
read-jfif |
读取JFIF段数据 |
read-ihdr |
读取IHDR段数据 |
orientation |
获取图像方向(1-8) |
rotation-info |
获取旋转和翻转信息 |
gps-coordinates |
提取GPS坐标 |
thumbnail |
提取嵌入的缩略图 |
使用MCP Inspector调试
-
启动检查器:
npx @modelcontextprotocol/inspector node dist/server.js -
使用STDIO传输通过MCP Inspector连接到它
-
调用工具,例如
read-metadata,带参数:
json
{
"image": {
"kind": "path",
"path": "/path/to/image.jpg"
}
} -
您也可以像这样使用MCP检查器命令行:
npx @modelcontextprotocol/inspector --cli node dist/server.js --method tools/call --tool-name read-exif --tool-arg image= {"kind": "path", "path": "/path/to/image.jpeg"} --tool-arg pick="[]"
图像源类型
服务器支持多种方式提供图像数据:
typescript
// 从本地文件系统
{
"kind": "path",
"path": "/path/to/image.jpg"
}
// 从URL (http, https, 或 file://)
{
"kind": "url",
"url": "https://example.com/image.jpg"
}
// 从base64数据 (原始或data URI)
{
"kind": "base64",
"data": "data:image/jpeg;base64,/9j/4AAQSkZ..."
}
// 从base64缓冲区
{
"kind": "buffer",
"buffer": "/9j/4AAQSkZ..."
}## 开发
运行测试
bash
运行测试
npm test
以监视模式运行测试
npm run test:watch
项目结构
exif-mcp/
├── src/
│ ├── server.ts # 主入口点
│ ├── tools/
│ │ ├── index.ts # 工具注册
│ │ ├── loaders.ts # 图像加载工具
│ │ └── segments.ts # exifr 选项构建器
│ └── types/
│ └── image.ts # 类型定义
├── tests/ # 测试文件
└── README.md
错误处理
服务器为常见问题提供了标准化的错误处理:
- 不支持的格式或缺少元数据
- 网络抓取失败
- 超大负载
- 内部 exifr 错误
许可证
BSD 2-clause
致谢
- exifr - 极快且强大的 EXIF 解析库