Skip to main content
Glama
Desmond-Labs

image-metadata-embed-and-report

by Desmond-Labs

Image Metadata Embed and Report

A streamlined MCP server for XMP metadata embedding with beautiful formatting and smart filename indicators. Features professional XMP display and automatic "_me" suffix for processed images.

✨ Features

āœ… Beautiful XMP Formatting: Clean, aligned metadata display without technical prefixes
āœ… Smart "_me" Filename Suffix: Instant visual indicator for metadata-enhanced images
āœ… šŸ“Š Category-Based Reports: Metadata organized by natural categories with analysis type headers
āœ… šŸŽÆ Analysis Type Identification: Clear "LIFESTYLE/PRODUCT/ORBIT" headers in all reports
āœ… 5 Core Tools: embed, read, validate, create_xmp, create_metadata_report with improved UX
āœ… Stream Processing: Memory-only image processing, no local files
āœ… Multi-Schema Support: Lifestyle, Product, and Orbit schemas
āœ… Supabase Integration: Seamless cloud storage processing
āœ… TypeScript: Full type safety and modern development
āœ… Zero Setup: Single build command, immediate productivity

Related MCP server: universal-image-mcp

Quick Start

1. Install Dependencies

npm install

2. Set Environment Variables

Copy the example environment file and configure your Supabase credentials:

cp .env.example .env

Edit .env with your Supabase project details:

SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_ANON_KEY=your_anon_key_here
SUPABASE_BUCKET_NAME=your_storage_bucket_name

Get these values from your Supabase project dashboard at https://supabase.com/dashboard/project/_/settings/api

3. Build and Start

npm run build
npm start

4. Configure Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "image-metadata-embed-and-report": {
      "command": "node",
      "args": ["/path/to/your/image-metadata-embed-and-report/dist/server.js"],
      "env": {
        "SUPABASE_URL": "https://your-project-id.supabase.co",
        "SUPABASE_ANON_KEY": "your_anon_key_here",
        "SUPABASE_BUCKET_NAME": "your_storage_bucket_name"
      },
      "description": "Image Metadata Embed and Report - XMP metadata with beautiful formatting"
    }
  }
}

Replace /path/to/your/image-metadata-embed-and-report/ with the actual path where you cloned this repository.

✨ Enhanced Features Overview

Beautiful XMP Display

Transform technical metadata into professional, readable format:

Before:

Lifestyle marketing potential emotional hooks: Comfort, Pleasure, Well-being
Product physical characteristics primary color: Silver/Gray

After:

emotional hooks    : Comfort, Pleasure, Well-being
primary color      : Silver/Gray

--- Raw JSON ---
{"lifestyle_marketing_potential_emotional_hooks": "Comfort, Pleasure, Well-being", ...}

Smart Filename Suffix

All processed images automatically get "_me" suffix:

# Input → Output
restaurant_scene.png → restaurant_scene_me.jpg
product_photo.tiff → product_photo_me.jpg
folder/image.png → folder/image_me.jpg

Benefits:

  • āœ… Instant visual identification of processed images

  • āœ… Preserves original file names and organization

  • āœ… Automatic format conversion for universal XMP support

Available Tools

1. embed_image_metadata (Enhanced)

Embed XMP metadata with beautiful formatting and smart filename suffix.

{
  "source_path": "images/restaurant_scene.png",
  "metadata": {
    "scene_overview": {
      "setting": "Outdoor restaurant patio",
      "time_of_day": "Evening"
    },
    "human_elements": {
      "number_of_people": 8,
      "social_dynamics": "Friends enjoying dinner"
    },
    "marketing_potential": {
      "emotional_hooks": ["Social connection", "Relaxed dining"]
    }
  },
  "output_path": "processed/restaurant_scene.png",
  "schema_type": "lifestyle"
}

Enhanced Output:

  • šŸ“ File: processed/restaurant_scene_me.jpg (automatic suffix + conversion)

  • ✨ Beautiful XMP: Clean, aligned field display without technical prefixes

  • šŸ”„ Auto-conversion: PNG/TIFF → JPG for universal compatibility

  • šŸ“Š Metrics: Processing time, field count, completeness score

2. read_image_metadata (Enhanced)

Extract and display metadata with beautiful formatting.

{
  "image_path": "processed/restaurant_scene_me.jpg",
  "format": "formatted",
  "include_xmp": true
}

Beautiful Output:

setting           : Outdoor restaurant patio
time of day       : Evening
number of people  : 8
social dynamics   : Friends enjoying dinner
emotional hooks   : Social connection, Relaxed dining

--- Raw JSON ---
{"lifestyle_scene_overview_setting": "Outdoor restaurant patio", ...}

3. validate_metadata_schema

Validate metadata against schema requirements.

{
  "metadata": {
    "product_identification": {
      "product_type": "Console Table",
      "design_style": "Minimalist"
    }
  },
  "schema_type": "product",
  "strict_mode": false
}

4. create_xmp_packet

Generate standalone XMP packets.

{
  "metadata": {
    "scene_overview": {
      "setting": "Modern office",
      "activities": ["Working", "Collaboration"]
    }
  },
  "output_path": "metadata/office_scene.xmp",
  "pretty_print": true
}

5. create_metadata_report (NEW!)

Generate human-readable reports from XMP metadata with category organization.

{
  "image_path": "processed/restaurant_scene_me.jpg",
  "format": "detailed",
  "include_raw_json": true
}

Category-Based Output:

šŸŽÆ TYPE OF ANALYSIS COMPLETED: LIFESTYLE
Categories Found: 8 | Total Fields: 14 | Processing Time: 4.2ms

šŸ“Š SCENE OVERVIEW
-----------------------------------------------------------------
Setting         : Elegant restaurant interior
Time Of Day     : Evening

šŸ‘„ HUMAN ELEMENTS
-----------------------------------------------------------------
Number Of People: 6
Social Dynamics : Family celebration dinner

[... other organized categories ...]

=================================================================
RAW JSON DATA (Machine Readable)
=================================================================
{...complete metadata...}

Three Report Formats:

  • detailed: Full categorized report with all metadata + raw JSON

  • simple: Key fields organized by category for quick review

  • json-only: Raw machine-readable metadata only

Supported Schemas

Lifestyle Schema (36+ fields)

Social dynamics, cultural context, and lifestyle analysis

  • scene_overview - Setting, time, occasion, activities

  • human_elements - Demographics, interactions, emotions

  • environment - Location, architecture, spatial arrangement

  • marketing_potential - Target demographics, brand alignment

Product Schema (25+ fields)

Design aesthetics and commercial product analysis

  • product_identification - Type, category, style, brand

  • physical_characteristics - Color, material, texture, dimensions

  • commercial_analysis - Market positioning, target market, pricing

  • quality_assessment - Construction, materials, craftsmanship

Orbit Schema (40+ fields)

Comprehensive visual intelligence analysis

  • scene_overview - Setting, time, activities, mood

  • human_elements - People count, age groups, interactions

  • key_objects - Products, technology, notable items

  • atmospheric_elements - Color scheme, lighting, visual mood

Architecture

simple-orbit-mcp/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ server.ts              # Main MCP server
│   ā”œā”€ā”€ core/
│   │   ā”œā”€ā”€ supabase-client.ts # Stream-based storage client
│   │   ā”œā”€ā”€ xmp-processor.ts   # XMP creation and embedding
│   │   └── metadata-validator.ts # Schema validation
│   ā”œā”€ā”€ tools/
│   │   ā”œā”€ā”€ embed-metadata.ts  # Embedding tool
│   │   ā”œā”€ā”€ read-metadata.ts   # Reading tool
│   │   ā”œā”€ā”€ validate-schema.ts # Validation tool
│   │   ā”œā”€ā”€ create-xmp.ts      # XMP creation tool
│   │   └── create-metadata-report.ts # NEW! Category-based reports
│   └── types/
│       └── schemas.ts         # TypeScript interfaces
└── dist/                      # Compiled JavaScript

Development

Build and Watch

npm run build     # Compile TypeScript
npm run watch     # Watch for changes
npm run dev       # Development mode with tsx

Environment Setup

# Required environment variables
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your_anon_key_here

# Optional: Use service role key for enhanced permissions
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

Stream Processing Benefits

  • āœ… No Local Storage: Images never touch your hard drive

  • āœ… Memory Efficient: Process large images in RAM

  • āœ… Fast Processing: Direct memory-to-memory operations

  • āœ… Security: No local file persistence or cleanup needed

  • āœ… Scalable: Works with any Supabase Storage bucket

Example Workflows

Lifestyle Image Analysis

# 1. Validate lifestyle metadata
validate_metadata_schema({
  "metadata": {
    "scene_overview": { "setting": "Coffee shop", "time_of_day": "Morning" },
    "human_elements": { "number_of_people": 2, "social_dynamics": "Business meeting" }
  },
  "schema_type": "lifestyle"
})

# 2. Embed into image
embed_image_metadata({
  "source_path": "uploads/coffee_meeting.jpg",
  "metadata": { /* lifestyle metadata */ },
  "output_path": "processed/coffee_meeting_analyzed.jpg"
})

# 3. Verify embedding
read_image_metadata({
  "image_path": "processed/coffee_meeting_analyzed.jpg",
  "format": "json"
})

Product Catalog Processing

# 1. Create XMP packet for product
create_xmp_packet({
  "metadata": {
    "product_identification": { "product_type": "Office Chair", "design_style": "Ergonomic" },
    "commercial_analysis": { "target_market": ["Businesses", "Home offices"] }
  },
  "schema_type": "product",
  "output_path": "metadata/office_chair.xmp"
})

# 2. Embed into product image
embed_image_metadata({
  "source_path": "catalog/chair_001.jpg",
  "metadata": { /* product metadata */ },
  "output_path": "catalog/processed/chair_001_metadata.jpg"
})

Category-Based Report Generation

# 1. Generate detailed categorized report
create_metadata_report({
  "image_path": "processed/restaurant_celebration_me.jpg",
  "format": "detailed",
  "include_raw_json": true
})

# Output: Organized report with category headers:
# šŸŽÆ TYPE OF ANALYSIS COMPLETED: LIFESTYLE
# šŸ“Š SCENE OVERVIEW | šŸ‘„ HUMAN ELEMENTS | šŸŒ ENVIRONMENT
# šŸ½ļø KEY OBJECTS | šŸŒ… ATMOSPHERIC ELEMENTS | etc.

# 2. Generate simple summary report for quick review
create_metadata_report({
  "image_path": "catalog/chair_001_me.jpg",
  "format": "simple"
})

# Output: Condensed report showing key fields by category
# Analysis: PRODUCT (6 categories, 13 fields)

# 3. Generate JSON-only report for API integration
create_metadata_report({
  "image_path": "orbit/workspace_me.jpg", 
  "format": "json-only"
})

✨ Enhanced Features Summary

Professional XMP Display

  • Clean field names without schema prefixes

  • Aligned formatting for consistent appearance

  • Dual format: human-readable + machine-parseable

  • ExifTool compatible output

šŸ“Š Category-Based Reports (NEW!)

  • Metadata organized by natural categories (Scene Overview, Human Elements, etc.)

  • Clear analysis type identification (LIFESTYLE/PRODUCT/ORBIT)

  • Three report formats: detailed, simple, json-only

  • Professional formatting with emoji headers and alignment

  • Separated raw JSON section for machine processing

Smart Filename Management

  • Automatic "_me" suffix for processed images

  • Preserves original file organization

  • Format conversion for universal XMP support

  • Clear visual indicators of enhancement

Stream Processing

  • Memory-only image processing

  • No local file downloads or cleanup

  • Fast, efficient operations

  • Secure cloud-to-cloud processing

Dependencies

  • @modelcontextprotocol/sdk - MCP server framework

  • @supabase/supabase-js - Supabase client for cloud storage

  • sharp - High-performance image processing

Requirements

  • Node.js 18+

  • TypeScript 5+

  • Supabase project with Storage bucket

  • Valid Supabase credentials

Performance

  • āœ… Sub-5ms Processing: Ultra-fast metadata embedding

  • āœ… Memory Efficient: <256MB per request

  • āœ… Format Conversion: Automatic PNG/TIFF → JPG optimization

  • āœ… Smart Filenames: Instant visual feedback

  • āœ… Beautiful Display: Professional XMP formatting

  • āœ… šŸ“Š Fast Reports: <5ms category-based report generation

  • āœ… šŸŽÆ Multi-Format: Detailed, simple, and JSON-only output formats

License

MIT License - see LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Support

If you encounter any issues or have questions, please open an issue on GitHub.


Image Metadata Embed and Report - Beautiful metadata, smart filenames, streamlined workflows

Available Tools

5 tools
create_metadata_reportC

Generate human-readable text reports from XMP metadata embedded in images

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesReport format: detailed (full report), simple (key fields), json-only (raw data)
image_pathYesPath to image with embedded XMP metadata (e.g., "folder/image_me.jpg")
output_pathNoPath where report will be saved (auto-generated if not provided)
include_raw_jsonNoInclude raw JSON data in detailed format (default: true)
include_processing_infoNoInclude processing information in the report (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose that the tool writes a report file to disk (via output_path), whether the source image is ever modified, or what permissions are required — a significant gap for a tool with a filesystem side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is part of why behavioral and usage context is missing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, no output schema, and no annotations, the description should explain the write-to-file behavior and output handling. Instead it covers only the headline purpose, leaving the agent without the context needed to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter including the format enum is documented in the schema itself, so the baseline is 3. The description adds no parameter detail beyond the schema, and actually sits in mild tension with the json-only format, which is not 'human-readable text'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Generate) and resource (human-readable text reports from XMP metadata in images), which clearly separates it from read_image_metadata and embed_image_metadata. It does not explicitly name the sibling it replaces, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no prerequisites, and never mentions alternatives such as read_image_metadata for simply inspecting values. An agent must infer the use case entirely from the name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_xmp_packetC

Create standalone XMP metadata packet from metadata object with validation

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataYesMetadata object to convert to XMP format (supports lifestyle, product, and orbit schemas)
output_pathNoPath to save XMP file in Supabase Storage (optional, e.g., "metadata/sample.xmp")
schema_typeNoSchema type for metadata validation (auto-detected if not specified)
pretty_printNoFormat XMP for readability with indentation (default: true)
include_wrappersNoInclude XMP packet wrappers (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions 'with validation' but doesn't describe what validation happens (schema validation? error handling?), whether it writes to storage (output_path suggests side effect), what happens on validation failure, or whether it requires external services like Supabase. For a tool with an optional storage write and validation, this is a significant omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single efficient sentence with no waste, though it's a bit terse given the tool's complexity. It front-loads the core action and result. Could benefit from slightly more structure but remains concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects, optional storage write, validation, and no output schema, the description is incomplete. It doesn't explain return format (even without an output schema, the agent needs to know what happens on success/failure), how validation errors are surfaced, or the relationship to sibling validation tools. The schema covers parameters but behavioral context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all five parameters thoroughly, including the metadata object, output_path, schema_type enum, pretty_print, and include_wrappers. The description adds no parameter details beyond what the schema already provides. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Create standalone XMP metadata packet from metadata object with validation.' Clear what it does. It does not differentiate from siblings like validate_metadata_schema or embed_image_metadata, which also deal with metadata conversion/validation, so it falls short of the 5 benchmark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative guidance. It doesn't clarify whether this is used before embedding, or how it differs from validate_metadata_schema. The description mentions validation but doesn't direct the agent to use validate_metadata_schema separately or explain the relationship.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

embed_image_metadataC

Embed XMP metadata into images stored in Supabase Storage using stream processing

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataYesMetadata object containing scene analysis (supports lifestyle, product, or orbit schemas)
output_pathYesPath where processed image with embedded metadata will be saved
schema_typeNoSchema type for metadata validation (auto-detected if not specified)
source_pathYesPath to source image in Supabase Storage (e.g., "folder/image.jpg")
compression_qualityNoJPEG compression quality (1-100, default: 95)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses only that stream processing is used, which hints at memory-efficient handling of large files, but says nothing about write/mutation effects, whether the source image is modified, overwrite behavior at output_path, permissions, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though the brevity leaves nothing to say about behavior or usage, which sits at the edge of under-specification rather than tight conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutation tool with five parameters, a nested object, no annotations, and no output schema, so the description must carry behavioral context. It omits what the tool returns, whether the source is preserved, whether output_path is overwritten, and how the three metadata schemas differ.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters, including the nested metadata object and the schema_type enum, are already documented in the schema. The description adds no syntax, format, or constraint detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (embed XMP metadata into images) plus the storage backend, so the agent knows it is a write-into-image operation. It reads clearly against read_image_metadata, but it never names or distinguishes itself from validate_metadata_schema or create_xmp_packet, which also touch metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no statement of prerequisites or ordering relative to siblings like create_xmp_packet or validate_metadata_schema, and no note on when this should be preferred over simply writing metadata directly. Usage is only inferred from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_image_metadataC

Extract XMP and basic EXIF metadata from images in Supabase Storage

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format for metadata (default: json)
image_pathYesPath to image in Supabase Storage (e.g., "folder/image.jpg")
include_xmpNoInclude XMP metadata extraction (default: true)
include_exifNoInclude basic EXIF data extraction (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not state whether extraction is read-only (implied but not declared), how large images are handled, whether failures on missing paths are returned or thrown, or what the output structure looks like. For a tool with zero annotation coverage, this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb and resource. It is efficient, though it omits any structural framing for parameters or behavior that would help an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a read-oriented extraction tool whose parameters are fully documented in the schema. However, with no annotations and no output schema, the description should disclose more about return shape and behavior to be complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters, their defaults, and the enum for format. The description adds no syntax, format, or constraint details beyond the schema. Baseline 3 is appropriate when structured data does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Extract) and resource (XMP and basic EXIF metadata) and scopes the source (images in Supabase Storage). It does not differentiate itself from siblings like embed_image_metadata or validate_metadata_schema, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative-tool guidance is provided. The agent must infer from the name that this is the read counterpart to embed_image_metadata, but the description offers no routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_metadata_schemaA

Validate metadata against ORBIT schemas without embedding (supports lifestyle, product, and orbit schemas)

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataYesMetadata object to validate against schema requirements
schema_typeNoSchema type for validation (auto-detected if not specified)
strict_modeNoEnable strict validation mode (default: false)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden; it discloses the important non-mutating trait ('without embedding') and the supported schema families. However, it says nothing about required permissions, whether validation has side effects, or how failures surface, so it covers only part of what an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly worded sentence with the action and the key differentiator front-loaded. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a validation tool with no output schema and no annotations, the description leaves a notable gap: it never says what validation returns (pass/fail, error list) or how results are reported. The core purpose is conveyed, but an agent lacks the return-value context needed to use it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters and the enum. The description's mention of 'lifestyle, product, and orbit schemas' merely echoes the schema_type enum values, adding no syntax, format, or default detail beyond the structured fields. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (validate) and resource (metadata against ORBIT schemas) and adds the scope 'without embedding', which implicitly distinguishes it from the sibling embed_image_metadata. Clear enough that an agent can tell it apart from the read/create siblings, though it never names the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: you call this when you want to check metadata against a schema without writing it. The 'without embedding' clause hints at a when-not condition relative to embed_image_metadata, but there is no explicit when-to-use statement, no prerequisites, and no named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedcreate_metadata_report
    • First observedcreate_xmp_packet
    • First observedembed_image_metadata
    • First observedread_image_metadata
    • First observedvalidate_metadata_schema

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: embedding, reading, validating, creating packets, and generating reports. There is no overlap between tool functionalities.

Naming Consistency4/5

Tools mostly follow a verb_noun pattern (embed_image_metadata, read_image_metadata, validate_metadata_schema, create_metadata_report), but create_xmp_packet deviates slightly with 'xmp' instead of 'metadata'.

Tool Count5/5

5 tools is appropriate for the specialized domain of image metadata embedding and reporting, covering the necessary operations without excess.

Completeness5/5

The tool set covers the full lifecycle: creating metadata packets, validating, embedding, reading, and reporting. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers