◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-07-14上級

設定したはずのMCPタイムアウトが効かず、毎回きっかり60秒で切れていた — request_timeout_ms をサーバー単位で取り戻す

長めのMCPツール呼び出しが、設定した待ち時間を無視してきっかり60秒で切れていました。原因は .mcp.json のサーバー単位 request_timeout_ms が読まれず既定へ落ちていたこと。修正後の正しい置き方と、値をツールの性質から逆算する設計、切れ際を自分で確かめる手順を実装込みで整理しました。

claude-code132mcp20timeout8configurationreliability15

✦ プレミアム記事

深夜の定期実行が、ある工程でだけ判で押したように失敗していました。ログの経過時間を並べてみると、59.8秒、60.1秒、59.9秒。呼び出しの中身は毎回違うのに、切れる瞬間だけがきっかり60秒に張り付いている。私はそのMCPサーバーに、もっと長い待ち時間を設定していたはずでした。手元の設定ファイルを何度見直しても数字は正しい。けれど実際に効いているのは、私が書いた値ではなく、どこかにある既定の60秒でした。

この違和感の正体は、7月14日の更新で明かされました。--mcp-config や .mcp.json に書いたサーバー単位の request_timeout_ms が読み込まれず、グローバルの既定へ静かに落ちていたのです。修正は入りました。ただ、修正が返してくれるのは「書いた値がようやく効く」という前提までで、「どの値をどこに置くか」「それが本当に効いているか」までは決めてくれません。今日はそこを、個人開発の夜間運用に引きつけて設計し直した記録です。

長時間の応答をそもそも待たせない考え方は応答が返らないMCP呼び出しに無人実行が飲み込まれた話で扱いました。本稿はその手前、待ち時間の値そのものが設定通りに効くかという設定層の話に絞ります。

きっかり60秒は「設定した値」ではなく「拾われた既定」だった

タイムアウトの事故がやっかいなのは、切れること自体は正常な挙動に見えてしまう点です。ツールが重ければ待ち時間を超えることはあり、そのとき打ち切られるのは設計通りとも言えます。だから「たまたま今日は重かったのだろう」と流してしまいがちでした。

けれど、切れる時刻が毎回ほぼ同じ値に集まるなら、話は変わります。ツールの負荷は日によってばらつくのに、打ち切りだけが一定なら、それは負荷ではなく上限が固定されている証拠です。私の場合はその上限が、自分で書いた値ではなく既定の60秒でした。

背景を整理します。MCPツール呼び出しの待ち時間には、いくつかの層があります。ひとつはサーバーの起動を待つ時間、もうひとつは個々のツール実行を待つ時間です。後者にはグローバルな既定があり、環境変数 MCP_TOOL_TIMEOUT で全体を、.mcp.json のサーバー定義に置く request_timeout_ms で個別に上書きできる建て付けになっています。今回の不具合は、この個別指定が読み飛ばされ、常にグローバル既定へ落ちていた、というものでした。

「無言で既定に落ちる」がいちばん検知しにくい

もし設定ミスがエラーとして表に出るなら、まだ楽でした。起動時に「その値は無効です」と言ってくれれば、その場で気づけます。今回が厄介だったのは、指定が無視されても警告ひとつ出ず、動作としては何事もなく既定値で走り続けたことです。

無人実行では、この静けさが特に効いてきます。対話中なら「あれ、思ったより早く切れたな」と体感で気づけますが、定期実行のログはあとから読むもので、切れた事実だけが淡々と残ります。経過時間を意識して記録していなければ、それが設定通りの打ち切りなのか、拾われなかった既定なのか、区別がつきません。

だから最初にやるべきは、値を直すことではなく、切れ際の分布を見えるようにすることでした。同じ工程の打ち切り時刻を何回分か並べ、値が一点に集まっているかを見る。集まっていれば、負荷ではなく上限が支配しているサインです。この一手間があるかないかで、設定が効いているかどうかの自己診断が段違いに速くなります。本番運用でこの落とし穴に何度か当たった経験から、まず分布を疑い、設定値と実測を突き合わせて対処することを私は推奨します。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦サーバー単位の request_timeout_ms が無視されて既定の60秒に落ちる不具合の見分け方がわかり、設定値が本当に効いているかをログの分布から自分で確認できるようになる
✦.mcp.json にサーバーごとのタイムアウトを正しく置く書き方と、MCP_TOOL_TIMEOUT などのグローバル既定との優先順位を整理して、長時間ツール呼び出しを安定させられる
✦タイムアウト値をツールの応答特性から逆算する判断表と、切れ際が既定値に張り付いていないか検証する軽量スクリプトを、そのまま夜間の自動運用に組み込める
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-03-24
Claude Code × unity-mcp でゲーム開発を自動化する方法 — 企画から公開までの完全ワークフロー
Claude Code と unity-mcp を組み合わせて Unity ゲーム開発を自動化する方法を解説。hcg-workflows スキルによる8フェーズワークフローで企画から公開まで効率化できます。
⟐ Claude Code2026-08-28
名前に混ざった見えない文字を、プラグインを入れる前に洗い出す小さなスクリプト
プラグインやスキルの名前に不可視文字や制御文字が混ざっていても、ターミナルの一覧では見分けがつきません。実際に6つの紛らわしい名前を並べて ls の出力を比べ、導入前に走らせる点検スクリプトと、その点検が拾えない範囲までを整理しました。
⟐ Claude Code2026-08-26
キャッシュのTTLを1時間に延ばすかは、離席の長さではなく戻る場所で決めています
Claude Code v2.1.242 で promptCacheTtl と subagentPromptCacheTtl が追加されました。1時間キャッシュが効く条件は離席時間ではなく、同じ作業ディレクトリと同じ git 状態へ戻るかどうかです。判断の順番と、効いているかを確かめる手順を書き残します。