thumbnails について
thumbnails は、画像のリサイズ、切り抜き、形式変換、圧縮のほか、サムネイル作成やメタデータ削除を行うローカル実行の MCP サーバーです。チャットで Web 用画像や写真を整える用途に向き、入力ファイルを変更せず、新しいファイルとして出力します。
主な機能
- 01画像のリサイズ、切り抜き、形式変換
- 02圧縮と前後のバイト数表示
- 03複数画像のサムネイル作成
- 04テキストの透かしを追加
- 05EXIF、GPS などのメタデータ削除
- 06画像の主要色を分析
活用シーン
- 01Web サイト用に画像サイズを調整
- 02フォルダー内の画像からサムネイルを作成
- 03容量の条件に合わせて画像を圧縮
- 04写真を共有する前に GPS 情報を削除
MCP 対応
MCP サーバーとして、画像の確認、編集、一括処理、主要色分析のツールを MCP クライアントに提供します。最近の操作を返すリソースと、Web 用画像の準備プロンプトも備えています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-image
「この5枚の写真の幅を1200ピクセルにして」や「このスクリーンショットを縮小して、GPS情報を削除して」と伝えれば、あなたのマシン上で1秒以内に処理できます。この MCP サーバーは、普段ならウェブ上のアップローダーを使うような、ちょっとした画像処理を行います。リサイズ、PNG、JPEG、BMP、GIF、TIFF 間の形式変換、処理前後のバイト数を表示する圧縮、トリミング、フォルダー内の画像のサムネイル作成、ビジネス名の透かし追加、スマートフォンのカメラが各写真に書き込む EXIF ブロックの削除に対応しています。アップロードも、アカウント登録も、ネイティブ依存関係も、画像編集ソフトも不要です。
公式 MCP レジストリに登録されています(io.github.theluckystrike/image-resize-convert-compress-watermark)。
AI Product Indexにも掲載されています。無料プランがあり、登録不要で利用できるライブのリモートエンドポイントは mcp.zovo.one/s/image です。

クライアントに写真を渡したくないブラウザーのタブを開かずに、フリーランスの仕事で発生する画像処理をチャットから行えます。
60秒でインストール
@theluckystrike/mcp-image の npm 公開は保留中です。それまでは、ワンクリックで使える .mcpb バンドル、またはクローンしてビルドする方法をご利用ください。以下の両方の方法で動作を確認済みです。
ワンクリック(.mcpb):最新リリースから image.mcpb をダウンロードし、Claude Desktop でダブルクリックします:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"image": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-image"]
}
}
}
Claude Code:
claude mcp add image -- npx -y @theluckystrike/mcp-image
(.cursor/mcp.json):
{
"mcpServers": {
"image": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-image"]
}
}
}
上記の npx 形式は、パッケージが公開され次第利用できるようになります。それまでは、上記の .mcpb バンドルを使うか、
次の3つのコマンドをそのまま使ってソースからビルドしてください:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/image
次に、クライアントの command を node に設定し、引数として servers/image/dist/index.js の絶対パスを指定します。
Pro モードで実行するには、同じ設定ブロック内で MCP_LICENSE_KEY を設定するか、キーを指定して license_activate を1回呼び出します。
ツール
| ツール | 機能 |
|---|---|
image_info | 形式、ピクセル寸法、メガピクセル数、縦横比、バイト単位のファイルサイズ、画像にアルファチャンネルが含まれているか、ピクセルあたりに使用されるバイト数 |
image_resize | サイズ変更したコピーを作成します。inside は縦横比を維持してボックス内に収め、cover はボックス全体を埋めてはみ出した部分を切り抜き、exact は引き伸ばします。幅か高さのどちらか一方を指定すると、もう一方は自動的に決まります |
image_convert | PNG、JPEG、BMP、GIF、TIFF に再エンコードします。透明部分を JPEG に変換すると白で塗りつぶされ、その旨が結果に表示されます |
image_compress | バイト数を削減し、圧縮前後のサイズと削減率を表示します。quality(デフォルトは80)、max_width、max_bytes を指定すると、1回の呼び出しでサイズ目標を達成できます |
image_crop | 矩形領域を切り抜きます。左上からの x、y、width、height を指定します。端を越える矩形は実際のサイズとともに拒否され、範囲内に収める処理は行われません |
image_thumbnails | 各ファイルにつき1つのサムネイルを out_dir に作成します。縦横比を維持したまま、size × size に収めます |
image_watermark | 画像の隅に、指定した不透明度で、半透明のプレート上に白いテキストを重ねます。テキストを指定しない場合は、共有プロフィールに登録されている会社名(mcp-invoice と mcp-docx で使用)が入ります |
image_strip_metadata | ピクセルデータだけを残したコピーを作成します。EXIF、GPS、カメラ情報、撮影時刻、XMP、カラープロファイルは引き継がれません |
image_batch_resize | 一連のファイルをそれぞれの縦横比を維持して out_dir にサイズ変更して保存し、<name>-<W>x<H>.<ext> という名前を付けます |
image_dominant_colors | 画像の大部分を占める色を、各色が占めるピクセルの割合とともに16進数コードで表示します。無料版:3色、Pro:最大16色 |
license_status | 無料版またはProモードを表示します |
license_activate | Proキーを有効化します(オフラインで検証) |
リソース:image://recent は、直近25件の操作を新しい順に返します。入力、書き込まれたファイル、実行時刻が含まれます。
プロンプト:prepare_for_web は、カメラサイズの画像をウェブページ用サイズのJPEGに縮小し、付属していたメタデータを削除して、削減したバイト数を報告します。
できること
| こんなときは | ツール |
|---|---|
| 「この画像のサイズはどれくらいですか? 透明部分はありますか?」 | image_info |
| 「これを幅1200ピクセルにしてください。」 | image_resize |
| 「このPNGをJPEGに変換してください。」 | image_convert |
| 「この写真は8 MBあります。1 MB未満にしてください。」 | image_compress |
| 「このスクリーンショットから上部のバナーを切り抜いてください。」 | image_crop |
| 「このフォルダー内の画像をすべてサムネイルにしてください。」 | image_thumbnails |
| 「この写真の隅に会社名を入れてください。」 | image_watermark |
| 「送信する前にGPS座標を削除してください。」 | image_strip_metadata |
| 「これらをすべて幅1600にしてください。」 | image_batch_resize |
| 「このロゴにはどんな色が使われていますか?」 | image_dominant_colors |
| 「この画像をウェブサイト用にしてください。」 | prepare_for_web プロンプト |
実行例
You: This photo is too big for the site. Get it to 1600 wide and drop the metadata.
image_info { path: "~/photos/DSC_0491.jpg" }
-> 6000x4000, 24 MP, JPEG, 8.4 MB, no alpha
image_compress {
path: "~/photos/DSC_0491.jpg",
max_width: 1600,
quality: 80,
max_bytes: 256000,
out_path: "~/photos/DSC_0491-web.jpg"
}
-> 8.4 MB -> 243.7 KB (8809124 -> 249556 bytes, -97.2%)
-> Method: JPEG quality 62 (searched down from 80 in 5 encodes to fit 250.0 KB)
and a resize to 1600 px wide
-> ~/photos/DSC_0491-web.jpg, 1600x1067, JPEG
JPEGへの再エンコードでは、カメラが記録したEXIFブロックも削除され、GPS座標も含まれません。元のファイルはバイト単位で変更されません。
無料版とPro
| 無料版 | Pro | |
|---|---|---|
image_info | サイズを問わず無制限 | 無制限 |
image_resize、image_convert、image_compress、image_crop | 入力元を問わず、書き込まれる出力は最大4 MP(2000x2000と少し) | 入力上限50 MB/10,000 pxの範囲でサイズ無制限 |
image_strip_metadata | サイズを問わず利用可能 | サイズを問わず利用可能 |
image_thumbnails、image_batch_resize | 1回の呼び出しにつき最大5ファイル、各出力は最大4 MP | ファイル数・サイズともに無制限 |
image_watermark | 共有プロフィールに登録されている会社名 | 指定した任意のテキスト |
image_dominant_colors | 上位3色 | 最大16色 |
無料版の上限は読み込む画像ではなく、書き込む画像に適用されます。12 MPのスマートフォン写真を幅1600 pxに縮小する場合は、処理内容に沿っているため無料で利用できます。12 MPの画像として再度書き出す場合はProが必要です。
プランの上限に達した場合はエラーではなく、その旨が回答として返されます。呼び出しが拒否された場合、ファイルは書き込まれません。
Proは買い切りで19ドル、またはコレクション内のすべてのサーバーで利用できる39ドルの買い切りです。
quality は JPEG のパラメーターであり、JPEG だけのパラメーターです
画像圧縮について、人々が驚くのはこの点です。そのため、このサーバーは数値を受け取って何もせずに処理を続けるのではなく、回答の中で明示しています。JPEG はサイズを小さくするためにディテールを捨てます。quality は、その度合いを調整するつまみです。PNG は可逆圧縮なので、そのようなつまみはありません。PNG 出力に quality: 40 を指定しても、PNG が 60%小さくなるわけではなく、まったく同じ PNG が出力されます。
そのため、出力形式は out_path の拡張子に従います。これが調整の鍵です。
out_path: "shot-small.jpg"の場合、qualityが適用され、写真なら通常 80〜95%小さくなります。out_path: "shot-small.png"の場合、qualityは適用対象外と報告され、バイト数を減らすのはmax_widthだけです。
PNG の代替手段としてパレット量子化を測定しましたが、採用しませんでした。ノイズの多い 300x220 の PNG を 16 色の量子化器で再エンコードしたところ、ファイルサイズは小さくなるどころか大きくなりました(39,262 バイトに対して 115,451 バイト)。このエンコーダーはどちらの場合も RGBA で書き込み、量子化によって deflate の処理が活用していた行ごとの類似性だけが失われるためです。圧縮すると称してファイルサイズを大きくするツールは、利用できる調整項目を明示するツールよりも劣ります。
そのため、image_compress は常に処理前後のバイト数、圧縮率、処理に使った方式を報告します。また、出力サイズが大きくなった場合は、そのことを伝え、元のファイルを使うよう案内します。
解凍爆弾はデコード前にヘッダーから検出して拒否します
4 KB の PNG が、サイズを 20,000 x 20,000 ピクセルと宣言していることがあります。これをデコードすると RGBA で 1.6 GB が割り当てられ、デコード後に実行するサイズチェックは間に合わず、プロセスが停止してしまいます。そのため、コンテナーヘッダーから宣言された寸法を読み取ります。PNG の IHDR、JPEG の SOF セグメント、GIF の論理画面記述子、BMP の情報ヘッダー、最初の TIFF IFD から読み取り、一辺が 10,000 px を超えるファイルは、その場合に必要となるメモリー量をメッセージに示して拒否します。
Error: /path/bomb.png declares 20000x20000 pixels in its PNG header and was refused before decoding:
this server caps a side at 10000 px. A small file that declares an enormous canvas is a decompression
bomb - decoding it would allocate 1526 MB of RGBA. Nothing was decoded.
ヘッダーの検査で、まれな TIFF の情報を取得できない場合もあるため、デコード後にもサイズを再確認します。ときどきしか実行されないガードは、ガードとは言えません。
既存のファイルは上書きせず、入力も変更しません
すべてのツールは新しいファイルを書き込み、入力はバイト単位でそのまま保持します。意図的に、インプレースモードはありません。すでに存在する out_path は拒否されます。
Error: /path/shot-small.png already exists and nothing was written.
Pass overwrite: true to replace it, or give a different out_path.
パスは存在チェックではなく、排他的作成によって確保します。そのため、2 つのプロセスが同じ out_path に同時に書き込もうとしても、競合して互いのファイルを上書きすることはありません。一方が確保に成功し、もう一方は拒否されて何も書き込みません。image_thumbnails と image_batch_resize は、書き込みを始める前にすべての出力パスを確保します。そのため、3 番目のファイルで競合が起きても、バッチ処理が途中で終わって 1 番目と 2 番目のファイルだけが残ることはありません。また、確保は解除されるため、空のファイルがディスクに残ることもありません。
ファイルを置き換えたい場合は、overwrite: true を指定してください。
overwrite: true を指定しても、出力先を入力ファイルにすることはできません。結果を元ファイルに書き戻すと、そのファイルが破壊されます。ピクセルはすでにメモリー上にデコードされており、読み込み元のファイルに上書きされるため、4000 px の元画像が 512 px のサムネイルになり、そのパスを後から読み込むと、気付かないまま誤った結果が返されます。そのため、out_path が同じ呼び出しのいずれかの入力ファイルと同じパスに解決される場合、またはいずれかの入力ファイルと同じ inode を共有する場合は、処理を始める前に拒否されます。
「メタデータを除去する」とは
image_strip_metadata は画像をデコードし、元のピクセルデータから再エンコードします。EXIF、GPS 座標、カメラとレンズ、撮影時刻、XMP パケット、埋め込みカラープロファイルを個別に取り除くのではなく、最初からエンコーダーに渡さないため、出力に含まれることはありません。知っておくべき点が 2 つあります。
- ピクセルは同じですが、バイト列は異なります。JPEG はエンコーダーをもう一度通るため、見た目は同じでもコピーは元画像とビット単位で同一ではありません。それが問題になる場合は、元画像を保管してください。
- ここにあるほかの書き込みツールにも、同じ副作用があります。写真のサイズを変更すると、EXIF も削除されます。
制限事項
- 50 MB を超える入力は拒否されます。画像はディスク上でどれほど圧縮されていても、デコードすると幅 × 高さ × 4 バイトの RGBA データになります。
- 1 辺あたり 10,000 px までです。まずヘッダーで確認し、その後デコード時にも確認します。
- 読み書きに対応する形式は PNG、JPEG、BMP、GIF、TIFF です。ファイル拡張子ではなくマジックバイトで形式を判定します。WebP、AVIF、HEIC、SVG には対応していません。これらに対応する出荷に値する純粋な JavaScript デコーダーがなく、このサーバーはネイティブ依存関係を持たないためです。
- アニメーション GIF は最初のフレームだけを読み込みます。このサーバーはアニメーションを扱いません。
- 透かしテキストは、同梱の Open Sans ビットマップフォント(8、16、32、64、128 px)で描画し、画像に収まる最大サイズのフォントを選びます。フォントにない文字は描画されないため、CJK の透かしには対応していません。
- 回転、フィルター、色補正、OCR、背景除去には対応していません。このサーバーはサイズと形式を扱うものであり、画像エディターではありません。
データの保存方法
保存するのは処理内容の記録だけです。${XDG_DATA_HOME:-~/.local/share}/mcp-servers/image/operations.json に、直近 500 件の操作をプレーンな JSON として保存します。画像は指定した場所に置かれたままです。記録への書き込みはすべて .../image/.lock のアドバイザリロック内で実行されるため、同じデータディレクトリを使う 2 つのクライアントが記録を失うことはありません。保存時には一時ファイルに書き込み、所定の場所にリネームします。
記録が読み取り不能または無効な JSON の場合、「空」として扱うことはありません。バイト単位でそのまま operations.json.corrupt-<timestamp> に移動し、その隣にマーカーを作成します。要求された画像は引き続き書き込まれ、記録に触れる前にファイルがディスクに保存されます。履歴を更新できなかったことは、応答で通知されます。
透かしは、スイート全体で共有する次のプロフィールを読み込みます。
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json。これは mcp-invoice または mcp-docx の business_set によって書き込まれます。情報を作り出すことはありません。名前が保存されておらず、テキストも渡されていない場合、image_watermark は拒否し、実行すべきツールを案内します。
プライバシー
すべてのデータはローカルに保管されます。このサーバーはお使いのマシン上のファイルを読み書きし、いかなる種類のネットワークリクエストも行いません。ライセンス認証(キーはオフラインで検証されます)、フォント、テレメトリーのための通信もありません。サイズを変更したクライアントの写真がどこかにアップロードされることはありません。それが、このサーバーが存在する理由そのものです。
連携先
- mcp-docx:ここでロゴのサイズを調整してから、レターヘッドに追加します。
image_resizeでヘッダーの高さに合わせると、.docxライターがディスク上のファイルを取り込みます。 - mcp-pdf:スキャン画像を結合する前に縮小し、結合後の PDF が 40 MB にならないようにします。
- mcp-resume:履歴書と応募フォームに、適切なサイズでメタデータのない顔写真を 1 枚使えます。
- office-suite:1 回のインストールで複数のサーバーを利用でき、設定エントリーも 1 つです。
トラブルシューティング
npxが停止する、またはパッケージが見つからない:このパッケージの npm 公開は保留中です。公開されるまでは、上記の.mcpbバンドルか、クローンしてビルドする方法を使用してください。- 「quality does not apply to a PNG output」:
.jpgのout_pathに書き込むか、max_widthを渡してください。上記のセクションを参照してください。 - 「declares NxN pixels ... and was refused before decoding」:ファイルが、1 辺 10,000 px を超えるキャンバスを申告しています。実際にそれほど大きい場合は、タイルをストリーミングするツールでサイズを変更してください。このサーバーは画像全体をデコードします。
- 「does not start with the magic bytes」:ファイルは PNG、JPEG、BMP、GIF、TIFF のいずれでもありません。WebP ファイルに
.pngという名前が付いているのが、よくある原因です。まず変換してください。 - 「already exists and nothing was written」:
overwrite: trueを渡すか、別のout_pathを指定してください。 - 透かしが小さい:バンドルされている顔画像の最大サイズは 128 px で、画像の幅の 80% 以内に収まるように選択されます。非常に大きな写真では、先にサイズを変更してから透かしを入れてください。
- Node のバージョン:Node >= 18 が必要です。
node -vで確認してください。
MIT ライセンスです。サポート:[email protected]
theluckystrike が作成しました。
これらのドキュメントを MCP サーバーとして使用する
任意の MCP クライアント(Claude、Cursor、Windsurf、VS Code)は、インストール不要で GitMCP 経由でこのリポジトリのドキュメントを直接読み取れます:
- ドキュメント MCP URL:https://gitmcp.io/theluckystrike/mcp-image
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。