記事の後半が消えた——MCPの限界と迂回路の話
このサイトの記事は、AIに「投稿して」と言うだけで公開される。
SanityというヘッドレスCMSと、Claude Code(AIのターミナルツール)がつながっていて、管理画面をポチポチしなくても、裏側で一気にやってくれる。最初にこの仕組みが動いたときは、ちょっと感動した。
その橋渡しをしているのが、MCPという仕組みだ。「Model Context Protocol」の略で、AIと外部サービスをつなぐ共通規格。USBみたいなもので、いろんなサービスをAIから同じ方法で操作できるようにする。
私の環境では、Claude CodeとSanity(このサイトのCMS)がMCPでつながっている。他にもいくつかのサービスを接続していて、AIに「これやっておいて」と言えば、だいたいやってくれる。便利だ。めちゃくちゃ便利だ。
で、その便利な仕組みが、ある日突然うまくいかなくなった。
記事の後半が消えていることがめっちゃ多い
何回も起きてる現象だが、投稿した記事をサイトで確認すると、後半がまるごとないことが多い。
途中までは普通に表示されている。でも、ある段落から先がバッサリ消えている。最初は自分の操作ミスかと思った。でも、何度やっても同じ。長めの記事を投稿すると、途中で切れる。でも何回か繰り返しのやり取りをすると全部投稿される。
短い記事は大丈夫。長い記事だけ、後半が消える。これが地味にストレスだった。
原因を調べた
AIに「なんで切れるの?」と聞いて、一緒に調べてもらった。
記事が投稿されるまでの流れはこうだ。
私 → Claude Code → MCP → Sanity API → 記事が保存される
このリレーのどこかで、データが途中で落ちている。
調べてみたら、原因はClaude CodeとMCPの間にあった。
Claude Codeには、MCPを通してやりとりできるデータ量に制限がある。記事のテキストは、Sanityが理解できるデータ構造(Portable Textという形式)に変換されてから送られるのだけど、この形式は1つの段落ごとにブロックの種類やスタイル情報を持つので、変換後のデータは見た目の文字数よりずっと大きくなる。その結果、長い記事だとデータが途中で打ち切られてしまう。
実際にテストもした。前回書いた美容院の記事(34段落)をMCPで投稿しようとしたら、小さいテスト記事は通るのに、全文だと投稿自体ができなかった。
MCPの仕組み自体が悪いわけじゃない。Sanity側にも問題はない。Claude CodeがMCPにデータを渡すとき、大きすぎるデータだと途中で打ち切ってしまうという制限だった。
APIを直接叩いたら、通った
じゃあどうするか。MCPを通さず、Sanityに直接データを送ればいい。
MCPは便利な仲介役だけど、仲介役を通さなくてもSanityと話すことはできる。APIを直接叩く、という方法だ。
私 → Claude Code → スクリプト → Sanity API → 記事が保存される
MCPという仲介役をスキップして、自分用の投稿スクリプトを一本作った。Markdownで書いた下書きを渡すと、Sanityのデータ形式に変換して、APIに直接送る。
結果、全文が通った。34段落、一文字も欠けずに。
同じことが画像でも起きていた
思い返すと、数日前にも似たことがあった。
記事に画像を入れたかったのだけど、Sanity用のMCPサーバーが画像のアップロードに対応していなかった。テキストの操作はできる。でも画像のようなファイルを送る機能は、そのMCPサーバーには用意されていない。
そのときも、APIを直接叩いて解決した。Sanityの管理画面からAPIトークンを発行して、curlコマンドで画像をアップロードした。「トークン」とか「認証」とか、言葉としては前から知っていたけど、自分の手でやったのは初めてだった。
画像アップロードと、長文記事の投稿。別々の問題だと思っていたけど、構造は同じだった。
MCPでできないことは、APIで直接やる。
「便利な仕組み」の限界
MCPは本当に便利だ。AIに「この記事を投稿して」「このデータを更新して」と言うだけで、裏側でやってくれる。いちいちAPIの仕様を調べなくていい。
でも万能じゃなかった。
大きなデータを送ると途中で打ち切られる。MCPサーバーの実装によっては、ファイルのアップロードに対応していないこともある。仲介役が増えるぶん、どこで問題が起きているのか見えにくくなる。
これは、たぶんMCPに限った話じゃない。
便利な仕組みは、使えるうちは最高だ。でもどこかで限界にぶつかる。そのとき「仕組みの裏側」を少しだけ理解していると、迂回路が見える。
MCPが使えないならAPIを直接叩く。管理画面で設定できないならターミナルからコマンドを打つ。やっていることは同じで、通るルートが違うだけ。
交通整理の仕事
こういうことを、日々AIと一緒にやっている。
でも、「MCPで記事が切れた」→「原因を調べた」→「APIで迂回した」という判断は、自分でやっている。どこに問題があるのか切り分けて、どのルートなら通るかを選ぶ。
これは、エンジニアリングというより、交通整理に近い。
道が渋滞していたら、別の道を探す。地図は読めなくても、「この道は詰まってるから、あっちから回ろう」という判断はできる。AIはカーナビで、運転しているのは自分だ。
MCPもAPIもターミナルも、全部「道」でしかない。大事なのは、目的地にたどり着くこと。そのために、どの道が通れてどの道が詰まっているかを把握しておくこと。
たぶん、これが「AIを使いこなす」ということの、わりとリアルな姿だと思う。
日々精進あるのみ。