read-xmp
Extract XMP metadata from images using the exif-mcp server. Supports reading extended XMP segments and handles input from paths, URLs, base64, or buffers.
Instructions
Read XMP metadata from an image with option for extended XMP segments
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| extended | No | ||
| image | Yes |
Implementation Reference
- src/tools/index.ts:121-136 (handler)Handler function for the 'read-xmp' tool: destructures args, loads image buffer using loadImage, builds XMP-specific exifr options, parses metadata, validates XMP presence, returns success response with metadata or error.async (args, extra) => { try { const { image, extended } = args; const buf = await loadImage(image); const opts = buildXmpOptions(extended); const meta = await exifr.parse(buf, opts); if (!meta || !meta.xmp) { return createErrorResponse('No XMP metadata found in image'); } return createSuccessResponse(meta); } catch (error) { return createErrorResponse(`Error reading XMP data: ${error instanceof Error ? error.message : String(error)}`); } }
- src/tools/index.ts:115-138 (registration)Registration of the 'read-xmp' tool with the MCP server using server.tool(), including name, description, input schema, and handler function. Assigned to tools object for reference.const readXmpTool = server.tool('read-xmp', "Read XMP metadata from an image with option for extended XMP segments", { image: ImageSourceSchema, extended: z.boolean().optional() }, async (args, extra) => { try { const { image, extended } = args; const buf = await loadImage(image); const opts = buildXmpOptions(extended); const meta = await exifr.parse(buf, opts); if (!meta || !meta.xmp) { return createErrorResponse('No XMP metadata found in image'); } return createSuccessResponse(meta); } catch (error) { return createErrorResponse(`Error reading XMP data: ${error instanceof Error ? error.message : String(error)}`); } } ); tools['read-xmp'] = readXmpTool;
- src/tools/index.ts:117-120 (schema)Input schema for 'read-xmp' tool: requires 'image' (ImageSourceSchema) and optional 'extended' boolean flag.{ image: ImageSourceSchema, extended: z.boolean().optional() },
- src/tools/segments.ts:97-107 (helper)Helper function buildXmpOptions creates exifr.parse options tailored for XMP extraction, enabling only xmp: true and multiSegment if extended is true.export function buildXmpOptions(extended?: boolean): ExifrOptions { return { tiff: false, xmp: true, icc: false, iptc: false, jfif: false, ihdr: false, multiSegment: extended ?? false }; }