thumbnails
Generate image thumbnails, resize, convert and compress photos from your AI chat. Local files.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"thumbnails": {
"command": "uvx",
"args": [
"https://github.com/theluckystrike/mcp-servers/releases/download/v0.21.0/image.mcpb"
]
}
}
}実行可能なパッケージ
0.21.0stdio0.22.0stdioリモートエンドポイント
https://mcp.zovo.one/mcp/thumbnailsstreamable-httpできること
ツール一覧
ツール(15)
🟢image_info(path)
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.
入力スキーマ
{
"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#"
}🟡image_resize(path, width, height, fit, out_path, ...)
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.
入力スキーマ
{
"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#"
}⚪image_convert(path, format, quality, out_path, overwrite)
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.
入力スキーマ
{
"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#"
}⚪image_compress(path, quality, max_width, max_bytes, out_path, ...)
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.
入力スキーマ
{
"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#"
}⚪image_crop(path, x, y, width, height, ...)
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.
入力スキーマ
{
"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#"
}🟡image_thumbnails(paths, size, out_dir, overwrite)
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.
入力スキーマ
{
"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#"
}🟡image_watermark(path, text, position, opacity, out_path, ...)
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.
入力スキーマ
{
"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#"
}🟡image_strip_metadata(path, out_path, overwrite)
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.
入力スキーマ
{
"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#"
}⚪image_batch_resize(paths, width, height, out_dir, overwrite)
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.
入力スキーマ
{
"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#"
}🟢image_dominant_colors(path, count)
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.
入力スキーマ
{
"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#"
}🟢license_status
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.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪license_activate(key)
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.
入力スキーマ
{
"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#"
}🔴image_upload(name, image_base64, url)
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.
入力スキーマ
{
"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#"
}🟢image_files
List the images stored for your token: what you uploaded, and what this server has written, with their sizes.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴image_delete_upload(name)
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.
入力スキーマ
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 70
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}コミュニティ
エビデンス