mcpField
I
image-resize-convert-compress-watermark

image-resize-convert-compress-watermark

リモート
mcp.zovo.oneメディア・デザイン21 日前に更新
リポジトリ公式サイト

image-resize-convert-compress-watermark について

チャットから写真や画像を扱うための MCP サーバーです。ローカルファイルの形式変換、サイズ変更、圧縮、切り抜き、透かし、メタデータ処理を行い、入力ファイルは変更しません。

主な機能

  1. 01画像の単体・一括リサイズ
  2. 02PNG、JPEG、BMP、GIF、TIFFの変換
  3. 03削減バイト数を示す圧縮
  4. 04切り抜き、サムネイル、透かし追加
  5. 05メタデータ削除と主要色の確認
  6. 06入力を保持して別ファイルに出力

活用シーン

  1. 01ウェブ掲載用の写真リサイズ
  2. 02容量制限に合わせた画像圧縮
  3. 03共有前のGPS・カメラ情報削除
  4. 04フォルダーのサムネイルやブランド画像の作成

MCP 対応

画像情報と処理ツール、最近の操作を返すリソース、prepare_for_web プロンプトを MCP クライアントに公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.zovo.one/mcp/image
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.zovo.one/mcp/image認証が必要
パッケージ
mcpbimage.mcpb0.22.5

ツール

15
パラメーター型必須説明
pathstringはいimage_upload でアップロードした画像の名前、またはこのサーバーが以前に書き込んだ画像の名前

詳細

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_convertPNG、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_activateProキーを有効化します(オフラインで検証)

リソース: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_resize1回の呼び出しにつき最大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 は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。