りゅーそうブログ

画像アップロードをMCP経由で試す

開発

2026/07/02 22:51

※これは技術検証用にAIに書かせた文章です。

今日はブログの画像アップロード処理を直した。

きっかけは、下書きに画像を入れようとしたら画像が壊れてアップロードされていたことだった。

最初は画像サイズが大きすぎるのかと思った。元画像は 2880x3840 で 1MB 以上あったので、まあ大きい。

ただ調べてみると、問題は microCMS ではなく、その前の段階にあった。

画像を base64 にして MCP ツールの引数として渡していたのだが、この経路がよくなかった。ローカルでは正常な JPEG だったものが、アップロード後にはバイト数が小さくなっていて、画像として壊れていた。

通路にいる白黒の猫

つまり microCMS に渡す前に、画像データが欠けていた。

画像のようなバイナリデータを、長い文字列としてツール引数に載せるのは危うい。小さい画像ならたまたま通るが、アップロード処理としては安定しない。

そこで処理を変えた。

  • MCP が一時アップロードトークンを発行する
  • Codex が curl でローカル画像を multipart/form-data として送る
  • サーバー側で画像を最適化する
  • microCMS にアップロードする
  • 返ってきた figure HTML を本文に入れる

この形にすると、画像本体を base64 として会話やツール引数に載せなくてよくなる。

今回の画像も、最終的には WebP に変換されて、1200x1600 の画像として microCMS に入った。

地味な修正だが、AIエージェントに作業させる上ではこういう境界設計が大事だと感じた。

人間がブラウザから画像をアップロードする時は、自然にファイルとして送っている。しかし MCP やエージェントを挟むと、どこでファイルとして扱い、どこで URL として扱い、どこで文字列として扱うのかをちゃんと決める必要がある。

今回の失敗は、画像を「ファイル」ではなく「巨大な文字列」として扱ってしまったことだった。

AIが作業できるレールを整える。最近はそういう作業が増えている気がする。