{"name":"io.github.theluckystrike/image-resize-convert-compress-watermark","slug":"theluckystrike-image-resize-convert-compress-watermark","title":null,"description":"Resize, convert, compress, crop, thumbnail and watermark images from your AI chat.","url":"https://mcp.market/server/theluckystrike-image-resize-convert-compress-watermark","grade":"C","score":64,"certified":false,"status":"active","category":"media","tags":["media"],"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/theluckystrike/mcp-servers","website":"https://mcp.zovo.one/s/image","version":"0.22.0","remotes":[{"type":"streamable-http","url":"https://mcp.zovo.one/mcp/image","headers":[{"description":"Bearer <Pro license key or anonymous token from GET https://mcp.zovo.one/mcp/token>","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"mcpb","identifier":"https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/image.mcpb","version":"0.22.0","fileSha256":"bc0a76bc704744670d67d6ede14c83c84c2dae5a90215e0f87fbd473b77dd03e","transport":{"type":"stdio"},"environmentVariables":[{"description":"Optional Pro license key (MCPL1....). Verified offline.","isSecret":true,"name":"MCP_LICENSE_KEY"}]}],"tools":[{"name":"image_batch_resize","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of images uploaded with image_upload"},"width":{"type":"integer","minimum":1,"maximum":10000,"description":"Target width in pixels"},"height":{"type":"integer","minimum":1,"maximum":10000,"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"}},"required":["paths","out_dir"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_compress","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"},"quality":{"type":"integer","minimum":1,"maximum":100,"default":80,"description":"JPEG quality 1-100, default 80"},"max_width":{"type":"integer","minimum":1,"maximum":10000,"description":"Scale down so the width is at most this, keeping the aspect ratio. Never scales up"},"max_bytes":{"type":"integer","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"},"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"}},"required":["path","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_convert","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"},"format":{"type":"string","enum":["png","jpeg","bmp","gif","tiff"],"description":"The output format"},"quality":{"type":"integer","minimum":1,"maximum":100,"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"}},"required":["path","format","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_crop","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"},"x":{"type":"integer","minimum":0,"description":"Left edge of the crop, in pixels from the left of the image"},"y":{"type":"integer","minimum":0,"description":"Top edge of the crop, in pixels from the top of the image"},"width":{"type":"integer","minimum":1,"description":"Width of the crop in pixels"},"height":{"type":"integer","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"}},"required":["path","x","y","width","height","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_delete_upload","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":70}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_dominant_colors","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"},"count":{"type":"integer","minimum":1,"maximum":16,"default":5,"description":"How many colours to report, default 5"}},"required":["path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_files","description":"List the images stored for your token: what you uploaded, and what this server has written, with their sizes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_info","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"}},"required":["path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_resize","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string","description":"Name of an image uploaded with image_upload, or one this server wrote earlier"},"width":{"type":"integer","minimum":1,"maximum":10000,"description":"Target width in pixels"},"height":{"type":"integer","minimum":1,"maximum":10000,"description":"Target height in pixels"},"fit":{"type":"string","enum":["inside","cover","exact"],"default":"inside","description":"inside = fit within the box, cover = fill and crop, exact = stretch"},"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"}},"required":["path","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_strip_metadata","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","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"}},"required":["path","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_thumbnails","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of images uploaded with image_upload"},"size":{"type":"integer","minimum":8,"maximum":10000,"default":256,"description":"Longest side of the thumbnail in pixels, default 256"},"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"}},"required":["paths","out_dir"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_upload","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":70,"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"},"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"}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"image_watermark","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"},"position":{"type":"string","enum":["bottom-right","bottom-left","bottom-center","top-right","top-left","top-center","center"],"default":"bottom-right","description":"Where to draw it"},"opacity":{"type":"number","minimum":0.05,"maximum":1,"default":0.5,"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"},"overwrite":{"type":"boolean","description":"Replace out_path if it already exists. Default false. Never allows an output to be one of the inputs"}},"required":["path","out_path"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"license_activate","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"type":"string","description":"License key from checkout, MCPL1.<payload>.<signature>"}},"required":["key"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"license_status","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":64,"grade":"C","scanned_at":"2026-09-17T16:31:55.576Z","report":{"scannerVersion":"0.1.2","scannedAt":"2026-09-17T16:31:55.459Z","components":{"code":{"score":-1,"max":25,"notes":["package could not be scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 280ms"]},"poisoning":{"score":15,"max":15,"notes":["15 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: github 401"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.zovo.one/mcp/image","reachable":true,"authRequired":false,"latencyMs":280,"serverInfo":{"name":"mcp-image","version":"0.22.0"}}],"packages":[],"repo":{"found":false,"owner":"theluckystrike","repo":"mcp-servers","error":"github 401"}}}},"grade_history":[]}