返回市场
EXIF-MCP

EXIF-MCP

作者:stass24 星标更新:2025-11-14

项目介绍

exif-mcp

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

安装

# 克隆仓库
git clone https://github.com/stass/exif-mcp.git
cd exif-mcp

# 安装依赖
npm install

# 构建项目
npm run build

使用

Claude Desktop

将以下内容放入Claude配置文件(claude_desktop_config.json)中:

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

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

启动服务器

# 启动服务器
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调试

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

图像来源类型

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

// 从本地文件系统
{
  "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..."
}

开发

运行测试

# 运行测试
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条款

致谢

  • exifr - 极其快速且健壮的EXIF解析库