Skip to main content
Glama
jicoing

MCP Image Metadata Server

by jicoing

MCP Image Metadata Server

MCP server for extracting rich metadata from images, monetized via x402 payments.

Live Demo

Server: https://mcp-image-metadata.onrender.com


Related MCP server: Image Metadata AI MCP

Quick Start

1. Upload Image

curl -X POST https://mcp-image-metadata.onrender.com/upload \
  -F "image=@your-image.jpg"

Response:

{
  "success": true,
  "filePath": "/tmp/uploads/abc123.jpg",
  "fileName": "abc123.jpg",
  "originalName": "your-image.jpg",
  "size": 12345
}

2. Extract Metadata

curl -X POST https://mcp-image-metadata.onrender.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "extract_image_metadata",
      "arguments": {
        "imageUrl": "/tmp/uploads/abc123.jpg",
        "payer": "0xYourWalletAddress"
      }
    }
  }'

Response:

{
  "success": true,
  "data": {
    "file": {
      "width": 1920,
      "height": 1080,
      "format": "jpeg",
      "colorDepth": 3,
      "dpi": 72,
      "fileSize": 456789,
      "mimeType": "image/jpeg"
    },
    "exif": {
      "cameraMake": "Apple",
      "cameraModel": "iPhone 14 Pro",
      "dateTime": "2024:01:15 12:30:00"
    },
    "gps": {
      "latitude": 37.7749,
      "longitude": -122.4194
    }
  },
  "price": 0.002,
  "paymentStatus": "free",
  "freemiumRemaining": 49
}

API Endpoints

Endpoint

Method

Description

/mcp

POST

MCP JSON-RPC interface

/upload

POST

Upload image file

/health

GET

Health check


MCP Tools

1. extract_image_metadata

Extract EXIF, GPS, IPTC, XMP metadata from an image.

Arguments:

{
  "imageUrl": "/tmp/uploads/abc123.jpg",
  "includeOptions": {
    "includeGps": true,
    "includeColor": true,
    "includeThumbnail": false,
    "includeOcr": false,
    "includeDeepHash": false
  },
  "paymentHeader": "...",
  "payer": "0xYourWallet"
}

Response:

{
  "success": true,
  "data": { "file": {...}, "exif": {...}, "gps": {...} },
  "price": 0.002,
  "paymentStatus": "free",
  "freemiumRemaining": 50
}

2. extract_batch_metadata

Extract metadata from multiple images (max 50).

Arguments:

{
  "imageUrls": ["/tmp/uploads/1.jpg", "/tmp/uploads/2.jpg"],
  "options": { "includeGps": true },
  "paymentHeader": "...",
  "payer": "0xYourWallet"
}

3. detect_image_manipulation

Analyze image for signs of manipulation/editing.

Arguments:

{
  "imageUrl": "/tmp/uploads/abc123.jpg",
  "analysisLevel": "standard",
  "paymentHeader": "...",
  "payer": "0xYourWallet"
}

analysisLevel:

  • basic - Basic checks ($0.002)

  • standard - Standard analysis ($0.002)

  • forensic - Deep forensic analysis ($0.015)


4. get_pricing

Get current pricing tiers and freemium status.

Arguments:

{
  "payer": "0xYourWallet"
}

Response:

{
  "pricing": {
    "basic": { "tier": "basic", "price": 0.001 },
    "standard": { "tier": "standard", "price": 0.002 },
    "premium": { "tier": "premium", "price": 0.005 },
    "forensic": { "tier": "forensic", "price": 0.015 }
  },
  "freemium": { "limit": 50, "remaining": 49 }
}

Complete Usage Flow

Step 1: Upload Image

# Upload image
curl -X POST https://mcp-image-metadata.onrender.com/upload \
  -F "image=@photo.jpg"

Response:

{
  "success": true,
  "filePath": "/tmp/uploads/abc123.jpg"
}

Step 2: Extract Metadata

curl -X POST https://mcp-image-metadata.onrender.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "extract_image_metadata",
      "arguments": {
        "imageUrl": "/tmp/uploads/abc123.jpg",
        "payer": "0xYourWallet123"
      }
    }
  }'

Step 3: Get Updated Freemium Status

curl -X POST https://mcp-image-metadata.onrender.com/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "get_pricing",
      "arguments": {
        "payer": "0xYourWallet123"
      }
    }
  }'

Pricing

Tier

Price

Description

Basic

$0.001 USDC

File info, dimensions, color profile

Standard

$0.002 USDC

Basic + GPS, IPTC, XMP

Premium

$0.005 USDC

Standard + thumbnail, deep hash

Forensic

$0.015 USDC

Premium + manipulation analysis


Freemium

  • 50 free requests per wallet address

  • After 50, requires x402 payment

  • Usage tracked in memory (resets on server restart)


x402 Payment Integration

For Agents/Apps

To make paid requests, include the paymentHeader:

{
  "name": "extract_image_metadata",
  "arguments": {
    "imageUrl": "/tmp/uploads/abc123.jpg",
    "payer": "0xYourWallet",
    "paymentHeader": "payment=v1_USDC_..."
  }
}

Payment Flow

  1. Agent calls tool with x402 payment header

  2. Server verifies payment via xpay facilitator

  3. If valid → returns metadata

  4. If invalid → returns error

  5. USDC transfers to your wallet on Base



Deployment

  1. Push to GitHub

  2. Go to render.com → New → Web Service

  3. Connect your repo

  4. Configure:

Setting

Value

Name

mcp-image-metadata

Region

Oregon

Build Command

npm install && npm run build

Start Command

node dist/index.js

  1. Add Environment Variables (see above)

  2. Deploy


Local Development

# Install dependencies
npm install

# Build
npm run build

# Run (stdio mode)
npm run dev

# Run with HTTP server
PORT=3000 node dist/index.js

Supported Image Formats

  • JPEG/JPG

  • PNG

  • GIF

  • WebP

  • TIFF

  • HEIC

  • BMP

  • SVG


Tech Stack

  • Node.js 20+

  • TypeScript

  • @modelcontextprotocol/sdk ^1.29.0

  • Sharp (image processing)

  • ExifReader (metadata parsing)

  • Express (HTTP server)

  • Multer (file uploads)


Security

This server implements multiple security measures:

  • Path Traversal Protection: File paths are validated to prevent directory traversal attacks

  • MIME Type Validation: Uploaded files are validated against allowed image types

  • Input Validation: Zod schemas reject path traversal patterns in user input

  • Error Sanitization: Error messages are sanitized to prevent information leakage

  • Rate Limiting: HTTP endpoints are protected with rate limiting (100 req/min per IP)

  • CORS Configuration: Optional origin validation for cross-origin requests

  • Security Logging: Security-relevant events are logged for monitoring

Security Configuration

# Optional: comma-separated list of allowed origins
ALLOWED_ORIGINS=https://example.com,https://app.example.com

# Optional: rate limit window in milliseconds (default: 60000)
RATE_LIMIT_WINDOW=60000

# Optional: max requests per window per IP (default: 100)
RATE_LIMIT_MAX=100

License

MIT

Available Tools

4 tools
detect_image_manipulationC

Analyze image for manipulation signs. Price: $0.002-0.015 USDC via x402

ParametersJSON Schema
NameRequiredDescriptionDefault
imageUrlYes
analysisLevelNostandard
paymentHeaderNox402 payment header (if paying for access)
payerNoCaller wallet address (for freemium tracking)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, description should fully disclose behavior. Only mentions pricing ($0.002-0.015 USDC) but not what the analysis entails, side effects, or limitations.

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

Conciseness3/5

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

Extremely brief (single sentence) but lacks essential details. Adequate conciseness but under-specified.

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?

No output schema, 4 parameters including payment and freemium fields. Description does not explain return values, error handling, or behavior changes with different analysis levels.

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

Parameters2/5

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

Schema coverage is 50%, but description adds no parameter-specific meaning. Parameters like 'analysisLevel' (with enum) are not elaborated beyond schema.

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

Purpose5/5

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

Description clearly states verb 'Analyze' and resource 'image' with specific purpose 'for manipulation signs'. Distinct from siblings (extract_batch_metadata, extract_image_metadata, get_pricing) which focus on metadata or pricing.

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 guidance on when to use this tool versus alternatives. Mentions pricing and payment parameters but does not specify context or exclude cases.

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

extract_batch_metadataC

Extract metadata from multiple images (max 50). Price: $0.001-0.005 USDC via x402

ParametersJSON Schema
NameRequiredDescriptionDefault
imageUrlsYes
optionsNo
paymentHeaderNox402 payment header (if paying for access)
payerNoCaller wallet address (for freemium tracking)

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden. It mentions a price range and 'via x402' but does not explain the payment mechanism, what happens without payment, or any side effects. The max 50 limit is noted, but other behavioral traits (e.g., idempotency, error handling) are missing.

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?

The description is short and front-loads the core purpose. It is efficient with one sentence plus pricing. However, it could be slightly more structured to include behavior or parameter hints, but overall it is concise and not verbose.

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?

Given the tool has 4 parameters, nested objects, no output schema, and no annotations, the description is incomplete. It omits details about return values, error handling, authentication (beyond payment hint), and concurrency for batch processing. Significant gaps remain.

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

Parameters2/5

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

Schema coverage is 50% (only paymentHeader and payer have descriptions). The description does not add any parameter-level detail beyond what is in the schema. For example, options is not explained, and imageUrls' limit is already in schema. No additional semantics are provided.

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?

The description clearly states the tool extracts metadata from multiple images with a max of 50, which is a specific verb+resource+limit. The name and sibling tools (extract_image_metadata) imply differentiation between batch and single, but the description does not explicitly distinguish, though it is still clear.

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 guidance on when to use this tool versus alternatives like extract_image_metadata or detect_image_manipulation. The pricing mention hints at a payment requirement but does not explain prerequisites or when to choose batch over single image extraction.

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

extract_image_metadataA

Extract metadata from image (EXIF, GPS, IPTC, XMP). Price: $0.002 USDC via x402

ParametersJSON Schema
NameRequiredDescriptionDefault
imageUrlYesURL or file path to the image
includeOptionsNo
paymentHeaderNox402 payment header (if paying for access)
payerNoCaller wallet address (for freemium tracking)

TDQS

A3.5/5.0
Behavior3/5

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

The description mentions a cost ($0.002 USDC via x402), which is a behavioral trait not in annotations (none provided). However, it does not clarify if payment is mandatory, what happens without paymentHeader, or any side effects. No annotations exist, so description carries burden but adds limited transparency beyond cost.

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?

Two sentences, front-loaded with purpose ('Extract metadata from image (EXIF, GPS, IPTC, XMP).'), then pricing. No redundancy. Could be slightly more informative about payment flow, but overall efficient and well-structured.

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?

The tool has nested input schema (includeOptions), optional payment parameters, and no output schema. The description does not explain the return format, the meaning of includeOptions, or how payment works (x402). Given the complexity and missing output schema, the description is incomplete.

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 75% (all parameters have descriptions, nested options have defaults). The tool description adds no additional parameter-level information beyond what the schema provides. At high coverage, baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Extract' and resource 'metadata from image', and lists specific metadata types (EXIF, GPS, IPTC, XMP). It distinguishes from siblings like detect_image_manipulation (manipulation detection) and extract_batch_metadata (batch operation) by implying single image focus.

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?

No explicit guidance on when to use vs alternatives like batch extraction or pricing tool. The description implies single image use but does not address when to choose this over extract_batch_metadata or detect_image_manipulation. The pricing info is a usage hint but not a guideline.

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

get_pricingA

Get current pricing for image metadata extraction tiers

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/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 indicates a read operation but does not disclose any behavioral traits such as data freshness, rate limits, or caching behavior. For a simple no-parameter tool, this minimal disclosure is adequate but not rich.

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?

The description is a single, clear sentence with no unnecessary words. It is front-loaded with the key information and earns its place.

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

Completeness4/5

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

Given the tool has no parameters, no output schema, and no annotations, the description covers the basic functionality. However, it lacks details on the output structure or what constitutes 'pricing tiers,' which could be improved for completeness.

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

Parameters4/5

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

The tool has zero parameters, and schema coverage is 100% (vacuously). The description adds no param information because none is needed. Per guidelines, 0 parameters earns a baseline of 4.

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

Purpose5/5

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

The description clearly states the tool's purpose: retrieving current pricing for image metadata extraction tiers. It uses a specific verb ('get') and resource ('pricing'), and distinguishes itself from siblings like detect_image_manipulation and extract_image_metadata.

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?

The description does not provide explicit when-to-use or when-not-to-use guidance. While it is clear that the tool is for pricing queries, no alternatives or conditions are mentioned, which is acceptable given the lack of similar sibling tools in this domain.

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

TDQS

A3.6/5.0
Disambiguation4/5

The tools are mostly distinct: detection vs extraction (single/batch) vs pricing. However, the two extract tools could cause minor confusion if descriptions are not carefully read.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., detect_image_manipulation, extract_batch_metadata). The use of 'get_pricing' is consistent with 'get' as a verb.

Tool Count5/5

With 4 tools, the set is well-scoped for an image metadata server: single extraction, batch extraction, manipulation detection, and pricing. No unnecessary tools.

Completeness5/5

The tools cover the core functionalities for image metadata: extracting metadata (single and batch), detecting manipulation, and retrieving pricing. No obvious gaps for the server's purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jicoing/mcp-image-metadata'

If you have feedback or need assistance with the MCP directory API, please join our Discord server