Koskamo

theluckystrike McpStamp Image Tools MCP

An MCP server providing image manipulation capabilities including resizing, converting formats, compressing, cropping, generating thumbnails, stripping EXIF/GPS metadata, and adding watermarks. It supports both local installation via npm and hosted access via a token-based URL, operating without requiring account creation or email for the free tier.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

theluckystrike McpStamp Image Tools MCP logo, by theluckystrikeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by theluckystrike
MCP endpoint (Streamable HTTP)
https://mcp.zovo.one/mcp/image
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

15 of 15 have a description · 15 of 15 declare behavior hints · 12 of 13 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Resize product photos to specific dimensions for online shops
  • Compress and convert images to JPEG to reduce file size
  • Strip GPS and camera metadata from images before posting
  • Generate thumbnails for web-ready image batches

Source and maintenance

Community listingRegistry 0.23.0
Maintenance checked

Protocol and capabilities

Server
mcp-image 0.22.6
MCP protocol negotiated in check
2025-11-25
Tools
15 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Image editing for PNG, JPEG, BMP, GIF and TIFF files. It covers size and format details, resizing single images or batches, format conversion, compression, cropping, thumbnails, stripping EXIF, GPS and other metadata, and dominant colours. McpStamp's hosted service has no file system, so images arrive as base64 uploads or public URLs, are kept per user account, and results come back as one-hour download links; text watermarks are not available here. The free tier handles sources up to 4 megapixels and 5 files per batch. One lifetime key unlocks this server and all 58 others: https://mcp.zovo.one/buy/bundle?src=instr.image

Tools

15 advertised

image_info — Inspect an image
Advertised by the server during the last successful anonymous check.

Call this tool to inspect an image: format, pixel dimensions, megapixels, file size in bytes, and whether it carries an alpha channel. Read-only, never modifies the file. Free tier: unlimited, any size.

image_info input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    }
  }
}
image_info annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_resize — Resize an image
Advertised by the server during the last successful anonymous check.

Call this tool to write a resized copy. fit inside keeps aspect; cover fills and crops; exact stretches. One of width/height alone keeps aspect. Input untouched. Free: sources up to 4 MP.

image_resize input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "out_path"
  ],
  "properties": {
    "fit": {
      "enum": [
        "inside",
        "cover",
        "exact"
      ],
      "type": "string",
      "default": "inside",
      "description": "inside = fit within the box, cover = fill and crop, exact = stretch"
    },
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "width": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Target width in pixels"
    },
    "height": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Target height in pixels"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_resize annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_convert — Convert an image to another format
Advertised by the server during the last successful anonymous check.

Call this tool to re-encode an image as PNG, JPEG, BMP, GIF or TIFF. quality is JPEG-only. Transparency converted to JPEG flattens onto white; the answer says so. Free tier: sources up to 4 MP.

image_convert input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "format",
    "out_path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "format": {
      "enum": [
        "png",
        "jpeg",
        "bmp",
        "gif",
        "tiff"
      ],
      "type": "string",
      "description": "The output format"
    },
    "quality": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "JPEG quality 1-100, default 80. Ignored for the other formats"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_convert annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_compress — Compress an image
Advertised by the server during the last successful anonymous check.

Call this tool to re-encode an image smaller and report byte counts before/after. quality (default 80) applies to JPEG; for PNG only max_width shrinks it, and the answer names which one worked. Free: sources up to 4 MP.

image_compress input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "out_path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "quality": {
      "type": "integer",
      "default": 80,
      "maximum": 100,
      "minimum": 1,
      "description": "JPEG quality 1-100, default 80"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "max_bytes": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1024,
      "description": "Largest the output may be, in bytes. The server searches JPEG quality down from `quality` until it fits and reports the quality it used. JPEG output only"
    },
    "max_width": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Scale down so the width is at most this, keeping the aspect ratio. Never scales up"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_compress annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_crop — Crop an image
Advertised by the server during the last successful anonymous check.

Call this tool to cut a rectangle out of an image. x, y are the top-left corner in pixels from the image's top-left. A rectangle past an edge is refused with the image's real size, not clamped. Free: sources up to 4 MP.

image_crop input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "x",
    "y",
    "width",
    "height",
    "out_path"
  ],
  "properties": {
    "x": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Left edge of the crop, in pixels from the left of the image"
    },
    "y": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Top edge of the crop, in pixels from the top of the image"
    },
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "width": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Width of the crop in pixels"
    },
    "height": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Height of the crop in pixels"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_crop annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_thumbnails — Make thumbnails
Advertised by the server during the last successful anonymous check.

Call this tool to write one thumbnail per input into out_dir as <name>-thumb.<ext>, fit inside size by size, aspect kept. Paths are reserved before writing, so a collision leaves nothing half-done. Free: 5/call, 4 MP.

image_thumbnails input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "paths",
    "out_dir"
  ],
  "properties": {
    "size": {
      "type": "integer",
      "default": 256,
      "maximum": 10000,
      "minimum": 8,
      "description": "Longest side of the thumbnail in pixels, default 256"
    },
    "paths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Names of images uploaded with image_upload"
    },
    "out_dir": {
      "type": "string",
      "description": "Not a directory here: every output comes back as its own download link valid for one hour. Any value is accepted and ignored"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_thumbnails annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_watermark — Watermark an image with text
Advertised by the server during the last successful anonymous check.

Not available on this hosted endpoint: the watermark is drawn with bitmap font files loaded from a filesystem, which this endpoint does not have. Watermark on a local install instead - download image.mcpb from https://github.com/theluckystrike/mcp-servers/releases/latest and open it in Claude Desktop - or upload an image you have already watermarked.

image_watermark input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "out_path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "text": {
      "type": "string",
      "description": "The watermark text. Default: the business name from the shared profile. Custom text is Pro"
    },
    "opacity": {
      "type": "number",
      "default": 0.5,
      "maximum": 1,
      "minimum": 0.05,
      "description": "0.05 to 1, default 0.5"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "position": {
      "enum": [
        "bottom-right",
        "bottom-left",
        "bottom-center",
        "top-right",
        "top-left",
        "top-center",
        "center"
      ],
      "type": "string",
      "default": "bottom-right",
      "description": "Where to draw it"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_watermark annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_strip_metadata — Strip metadata from an image
Advertised by the server during the last successful anonymous check.

Call this tool to write a copy carrying pixels and nothing else: it decodes and re-encodes from raw pixels, so EXIF, GPS, camera, capture time, XMP and colour-profile data are dropped. Free tier: sources up to 4 MP.

image_strip_metadata input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path",
    "out_path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "out_path": {
      "type": "string",
      "description": "Name for the file to write; it comes back as a download link valid for one hour. The extension decides the output format; without a known one the input's format is kept"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_strip_metadata annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_batch_resize — Resize several images at once
Advertised by the server during the last successful anonymous check.

Call this tool to resize every image in paths at once, keeping aspect ratio, each named <name>-<W>x<H>.<ext>. One of width/height lets the other follow; with both, each fits inside the box. Free: 5 files a call, 4 MP.

image_batch_resize input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "paths",
    "out_dir"
  ],
  "properties": {
    "paths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Names of images uploaded with image_upload"
    },
    "width": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Target width in pixels"
    },
    "height": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Target height in pixels"
    },
    "out_dir": {
      "type": "string",
      "description": "Not a directory here: every output comes back as its own download link valid for one hour. Any value is accepted and ignored"
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"
    }
  }
}
image_batch_resize annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_dominant_colors — Read the dominant colours of an image
Advertised by the server during the last successful anonymous check.

Call this tool to read the colours covering most of an image, as hex codes with each one's pixel share. Sampled from a 200 px copy, so cost is fixed. Read-only. Free gives the top 3; Pro up to 16.

image_dominant_colors input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "path"
  ],
  "properties": {
    "path": {
      "type": "string",
      "description": "Name of an image uploaded with image_upload, or one this server wrote earlier"
    },
    "count": {
      "type": "integer",
      "default": 5,
      "maximum": 16,
      "minimum": 1,
      "description": "How many colours to report, default 5"
    }
  }
}
image_dominant_colors annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
license_status — License status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.

license_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
license_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
license_activate — Activate license
Advertised by the server during the last successful anonymous check.

Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.

license_activate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "License key from checkout, MCPL1.<payload>.<signature>"
    }
  }
}
license_activate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
image_upload — Upload an image to work on
Advertised by the server during the last successful anonymous check.
Advertised destructive

Send an image to this hosted endpoint. There is no filesystem here, so instead of a path you upload the file once with image_upload and then pass its name as `path` (or inside `paths`) to image_info, image_resize, image_convert, image_compress, image_crop, image_thumbnails, image_batch_resize and image_dominant_colors. PNG, JPEG, BMP, GIF and TIFF are accepted and the format is read from the file's magic bytes, not from the name. Give exactly one of image_base64 or url. url: fetch a public file instead of pasting base64 (recommended above about 10 KB): writing out a real photo as base64 is a long tool call and 50 KB or more can stall the turn before the upload is sent, while a url costs one line and the fetch happens here (10 second timeout, at most 3 redirects, public http(s) hosts only, 2 MB cap). Uploads are kept for your token between calls; image_files lists them and image_delete_upload removes one. A file this server writes is named the same way and comes back as a download link valid for one hour, served with the real image content type. The request body cap is 256 KB, which is about 190 KB of image once base64-encoded.

image_upload input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "url: fetch a public file instead of pasting base64 (recommended above about 10 KB). Public http(s) only; private, link-local and this endpoint's own zone are refused"
    },
    "name": {
      "type": "string",
      "maxLength": 70,
      "minLength": 1,
      "description": "Name to refer to this image by: 1-64 characters of letters, digits, underscore or dash, e.g. \"shot\""
    },
    "image_base64": {
      "type": "string",
      "description": "The image file, base64-encoded"
    }
  }
}
image_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
image_files — List uploaded and generated images
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the images stored for your token: what you uploaded, and what this server has written, with their sizes.

image_files input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
image_files annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
image_delete_upload — Delete a stored image
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete one image stored for your token, uploaded or generated: name is the name it is stored under. image_files lists them. A name nothing is stored under is refused and nothing is deleted.

image_delete_upload input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 70,
      "minLength": 1
    }
  }
}
image_delete_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}

Prompts

2 advertised

prepare_for_web — Prepare an image for the web

Advertised by the server during the last successful anonymous check.

Take a camera-sized image down to a page-sized JPEG, drop the metadata that came with it, and report the bytes saved.

path
The image to prepare (required)
max_width
Longest width to allow, default 1600
upgrade_to_pro — Explain the upgrade

Advertised by the server during the last successful anonymous check.

Explain what Pro on the image server costs and exactly what the user has to do, without leaving the conversation.

feature
The capped feature that prompted this, if there was one

Resources

2 advertised

recent-operations — Recent image operations

Advertised by the server during the last successful anonymous check.

What this server has done, newest first: the operation, the input files, the files written and when.

recent-operations URI
image://recent

MIME type: application/json

pricing — Pricing and upgrade

Advertised by the server during the last successful anonymous check.

What image costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.

pricing URI
pricing://image

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1914 ms
95th percentile latency
1914 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1914 ms · metadata changed · 15 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mcpstamp-image-tools-mcp https://mcp.zovo.one/mcp/image

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mcpstamp-image-tools-mcp --url https://mcp.zovo.one/mcp/image

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mcpstamp-image-tools-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mcpstamp-image-tools-mcp": {
      "url": "https://mcp.zovo.one/mcp/image"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mcpstamp-image-tools-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.zovo.one/mcp/image",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mcpstamp-image-tools-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "mcpstamp-image-tools-mcp": {
      "type": "http",
      "url": "https://mcp.zovo.one/mcp/image"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mcpstamp-image-tools-mcp https://mcp.zovo.one/mcp/image

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.zovo.one/mcp/image

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mcpstamp-image-tools-mcp": {
      "serverUrl": "https://mcp.zovo.one/mcp/image"
    }
  }
}

Let your agent find its tools

Find servers like theluckystrike McpStamp Image Tools MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.