图像元数据解析服务

一个基于exifr库的离线图像元数据解析服务,支持多种图像格式和元数据段提取,适用于图像分析、库管理和开发调试。

  • by stass
  • TypeScript
  • 本地部署
  • 40 星标
  • 更新于
在 GitHub 查看 stass/exif-mcp

使用说明

exif mcp

一种MCP服务器,允许LLM(或人类)完全离线按需读取图像元数据。基于优秀的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坐标和缩略图

安装

# Clone the repository
git clone https://github.com/stass/exif-mcp.git
cd exif-mcp

# Install dependencies
npm install

# Build the project
npm run build

用法

克劳德桌面

将其放入Claude配置文件(Claude_desktop_config.json)中:

"mcpServers": {
    "exif-mcp": {
      "command": "node",
      "args": [
        "/path/to/exif-mcp/dist/server.js"
      ]
    }
  },

重启克劳德。现在,您可以让Claude为您检查图像,或者查找用特定相机拍摄的文件。这与文件系统MCP工具结合使用效果最佳,这样Claude就可以找到文件并列出目录。

启动服务器

# Start the server
npm start

# For development with auto-reload
npm run dev

服务器使用 StdioServerTransport 通过MCP SDK,使其与支持STDIO传输的任何MCP客户端兼容。

您可以使用mcp代理启用远程访问。

可用工具

服务器提供以下工具:

工具名称 描述
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检查器进行调试

  1. 启动检查器: npx @modelcontextprotocol/inspector node dist/server.js
  2. 使用STDIO传输通过MCP检查器连接到它
  3. 调用工具。, read-metadata 带参数:
    {
      "image": {
        "kind": "path",
        "path": "/path/to/image.jpg"
      }
    }
    
  4. 您还可以使用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="[]"

图像源类型

服务器支持多种方式提供图像数据:

// From local file system
{
  "kind": "path",
  "path": "/path/to/image.jpg"
}

// From URL (http, https, or file://)
{
  "kind": "url",
  "url": "https://example.com/image.jpg"
}

// From base64 data (raw or data URI)
{
  "kind": "base64",
  "data": "data:image/jpeg;base64,/9j/4AAQSkZ..."
}

// From base64 buffer
{
  "kind": "buffer",
  "buffer": "/9j/4AAQSkZ..."
}

发展

运行测试

# Run tests
npm test

# Run tests with watch mode
npm run test:watch

项目结构

exif-mcp/
├── src/
│   ├── server.ts         # Main entry point
│   ├── tools/
│   │   ├── index.ts      # Tool registration
│   │   ├── loaders.ts    # Image loading utilities
│   │   └── segments.ts   # exifr options builders
│   └── types/
│       └── image.ts      # Type definitions
├── tests/                # Test files
└── README.md

错误处理

服务器为常见问题提供标准化的错误处理:

  • 不支持的格式或缺少元数据
  • 网络获取失败
  • 超大有效载荷
  • 内部 exifr 错误

许可证

BSD 2条款

致谢

  • exifr -速度极快且功能强大的EXIF解析库