geminiの画像生成mcpを作ってみる

geminiの画像生成mcpを作ってみた話です

作る理由?

  • roo_codeで何かしてる時で、ちょっとした仮画像とかを用意するのがめんどくさいときに使いたい
  • ちょっと勉強がてらに作ってみようと思った
  • 生成画像を圧縮したい。
    • geminiで生成する画像はそのままだと1Mぐらいの場合が多い
  • 複数画像入力させたい
    • 作った複数画像から派生したものを作れるようにしてみたい

もうあるのでは?

作ったもの

主な特徴

画像圧縮でサイズ縮小

  • 生成した画像はjpgに変換して圧縮すれば、1M -> 100K以下にすることが可能

  • パラメーター
{
  "prompt": "A cute cat in realistic style.",
  "force_jpeg_conversion": true
}
  • 結果
Image successfully converted to JPEG and compressed at output/images/generated_image.jpg.
Original size: 1085.16KB, Final size: 34.21KB
Loading...

複数画像入力

  • 複数画像入力で複数の画像を使った新たな画像生成が可能

  • パラメーター
    • 2つの女の子の画像を入力として、2人が渋谷で談笑しながらショッピングしている画像を作らせたい
{
  "prompt": "The two girls from the input images are chatting and shopping in Shibuya.",
  "input_image_paths": [
    "output/images/generated_image (2).jpg",
    "output/images/generated_image (3).jpg"
  ],
  "force_jpeg_conversion": true
}
Loading...
Loading...
  • 結果
    • 何かが若干違うのは気にしない。
Image successfully converted to JPEG and compressed at output/images/generated_image (4).jpg.
Original size: 1491.59KB, Final size: 57.01KB
Loading...

Tips

  • @google/genaiと@modelcontextprotocol/sdkを使用
  • 画像生成API(ai.models.generateImages)は有料枠でないと使えない
    • これを使って画像生成リクエストすると、「Imagen APIは現在、課金ユーザーのみがアクセスできます。」というメッセージが表示される
    • ai.models.generateContentを使った場合は無課金API KEYでも画像生成できる。
      • モデルはgemini-2.0-flash-exp-image-generationを使って、responseModalitiesにModality.IMAGEを指定する感じ

終わりに

  • ほとんどAI任せで作ったが、なんとなくMCPの仕組みを知ることができた。
  • 今後はストリーミング処理にして、画像を複数出力できるように対応するかも。
    • 生成に時間がかかりそうなのでやっぱりしないかも。
公開日: 2025/6/24

もし感想とかありましたら、 #何作猫 ハッシュタグでツイートしてもらえると、たぶんたまに見てます。
このエントリーをはてなブックマークに追加