画像アップロードを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が作業できるレールを整える。最近はそういう作業が増えている気がする。