Claude Code MCPの起動待機を制御する方法

Claude Code MCPの初回起動待機をCLAUDE_CODE_MCP_STARTUP_WAIT_MSで制御する方法を解説。0の意味、MCP_TIMEOUTとの違い、4つの時計を分ける設計、CIで必須サーバーの接続状態を判定する手順と検証結果まで、無人ジョブを安全に運用する要点が分かります。

Thursday, September 17, 2026Omid Saffari
Tools
Claude Code MCPの起動待機を制御する方法

Claude Code MCPの初回起動待機を制御するには、CLAUDE_CODE_MCP_STARTUP_WAIT_MSに、非対話モードの最初のターンでMCPサーバーを待つ最長時間をミリ秒単位で指定します。待たずに進める場合は0です。これでスケジュールジョブの準備待ちに明確な上限を設けられますが、MCPの接続タイムアウト、MCPツールのタイムアウト、ジョブ全体の期限は変わりません。

まず結論:設定はこの1行

最初のターンでMCPの起動を最大5秒待つなら、CLAUDE_CODE_MCP_STARTUP_WAIT_MS=5000 claude -p "Run the scheduled check"を使います。MCPサーバーの準備を待たずにジョブを始められる場合は、CLAUDE_CODE_MCP_STARTUP_WAIT_MS=0を指定します。

Claude Code 2.1.274では、2026年9月17日にこの環境変数が導入されました。リリースノートで明記されているのは2点です。値は最初の非対話ターンにおける待機時間の上限をミリ秒で表し、0なら待機しません。一方、新しい変数のデフォルト値は公開されていません。将来デフォルトが変わったり、マシン側の環境変数に影響されたりしても起動ポリシーが変化しないよう、無人ジョブでは値を明示してください。

ここでいう非対話モードとは、-pまたは--printで起動する実行です。CIチェック、cronジョブ、SDKから開始するタスクなどが該当します。対話型のターミナルセッションを対象にした設定ではありません。

実務上の目安は次のとおりです。

ジョブ内でのMCPの役割初期値の目安運用方針
有用な処理を始める前に必須5,000〜15,000 ms短時間だけ待ち、利用できなければ準備完了ゲートで失敗させる
あると便利だが必須ではない0〜2,000 msすぐに開始し、サーバーをpendingとして記録する
仕様上は遅いが必須実測したコールドスタート時間+余裕先にコールドスタートを改善し、そのうえで実態に合う最小の待機時間を設定する

この範囲は運用上の推奨値であり、Anthropicのデフォルト値ではありません。標準化する前に、自分の環境でサーバーを計測してください。

Claude Code MCPの起動待機が実際に制御する範囲

最初のターンを列車の出発、各MCPサーバーを乗り換えホームに置き換えると理解しやすくなります。CLAUDE_CODE_MCP_STARTUP_WAIT_MSが決めるのは、乗り換え客を待って列車が駅にとどまる時間です。各乗客が駅への到着を試み続けられる時間でも、乗車後の作業時間でも、旅全体の終了時刻でもありません。

制御範囲が狭いこと自体に意味があります。2.1.274より前は、運用担当者が別の時間枠を制御するMCP_TIMEOUTに頼りがちでした。今はスケジュールジョブ側で、すべてのサーバー接続や後続のツール呼び出しに同じ期限を課すことなく、最初のターンだけ短い準備待ちを選べます。

最初の待機、接続、ツール実行、ジョブ全体という4つの制限を比較する建築的なタイミング区画
新しい初回ターン待機は4つの時計のうちの1つであり、残り3つを置き換えるものではありません。

4つの時計を、4種類の失敗判断に分ける

安全に運用するには、各時計に名前を付け、役割を1つずつ割り当てます。

時計制御手段制限する範囲公開されている挙動
初回ターンの準備待ちCLAUDE_CODE_MCP_STARTUP_WAIT_MS最初の-pターンが接続中のMCPサーバーを待つ時間0で待機をスキップ。2.1.274のノートではデフォルト値は示されていない
サーバー起動MCP_TIMEOUT個々のMCPサーバーの起動試行デフォルトは30,000 ms
ツール実行MCP_TOOL_TIMEOUT後続のMCPツール呼び出しデフォルトは100,000,000 ms(約28時間)
ジョブ全体CI、スケジューラ、プロセスの期限Claude Codeプロセス全体Claude Codeの起動制御の対象外

このほか、起動時に接続をブロックする一括処理には、デフォルト5,000 msのMCP_CONNECT_TIMEOUT_MSがあります。MCP_CONNECTION_NONBLOCKING=0を指定した場合や、サーバーにalwaysLoad: trueを設定した場合などが対象です。Anthropicの環境変数リファレンスでも、MCP_TIMEOUTとは明確に区別されています。

ツール呼び出しについては、.mcp.jsonで特定サーバーにtimeoutフィールドを設定すると、そのサーバーではMCP_TOOL_TIMEOUTより優先されます。データウェアハウスのクエリにはチケット検索より長い時間が妥当、といったケースに有効です。ただし、新しい初回ターン待機の値は変わりません。

この違いを押さえると、0があらゆる処理を高速化するスイッチではない理由も見えてきます。ツール検索が有効な場合、プロンプトが後から接続中のサーバーを必要とすれば、Claude CodeはToolSearch内で待機します。ツール検索が無効ならWaitForMcpServersが使われます。入口の待機を省略しても、ジョブの後段へ待ち時間が移る可能性があります。

遅いサーバーを再現するテスト

MCPの初期化レスポンスだけを遅らせるローカルstdioサーバーを使えば、この境界を再現できます。次の内容をslow-mcp.mjsとして保存します。

JavaScript
import readline from "node:readline";

const delay = Number(process.env.SLOW_MCP_DELAY_MS || 5000);
const lines = readline.createInterface({ input: process.stdin });
const send = message => process.stdout.write(JSON.stringify(message) + "\n");

lines.on("line", line => {
  const request = JSON.parse(line);
  if (request.method === "initialize") {
    setTimeout(() => send({
      jsonrpc: "2.0",
      id: request.id,
      result: {
        protocolVersion: request.params.protocolVersion,
        capabilities: { tools: {} },
        serverInfo: { name: "slow-ready", version: "1.0.0" }
      }
    }), delay);
  } else if (request.method === "tools/list") {
    send({ jsonrpc: "2.0", id: request.id, result: { tools: [] } });
  }
});

続いて、slow-mcp.jsonでClaude Codeからこのサーバーを参照します。

JSON
{
  "mcpServers": {
    "slow-ready": {
      "type": "stdio",
      "command": "node",
      "args": ["./slow-mcp.mjs"],
      "env": { "SLOW_MCP_DELAY_MS": "5000" }
    }
  }
}

実行コマンドはCLAUDE_CODE_MCP_STARTUP_WAIT_MS=1000 MCP_TIMEOUT=10000 claude -p "Reply with OK." --mcp-config ./slow-mcp.json --strict-mcp-config --output-format stream-json --verboseです。

--strict-mcp-configを付けると、テストに関係のないユーザー設定やプロジェクト設定のサーバーを除外できます。ストリーム形式では、各MCPサーバーの名前と状態を含む初期のsystem/initイベントを確認できます。渡した設定が不正な場合は、mcp_server_errorsも出力されます。

ローカル検証で確認できたこと

Claude Code 2.1.274で、5,000 ms待機するサーバーを使い、認証前の起動を確認しました。環境にログインしていなかったため、実行は認証段階で停止しています。計測対象は起動部分だけであり、まさに今回検証したい境界です。

待機設定認証エラーまでの実時間system/init時点のslow-ready
0 ms1.20 spending
1,000 ms2.30 spending
7,000 ms6.21 sconnected
5秒かかる遅いMCPサーバーについてpendingとconnectedの状態を示す3本の建築的なタイミングレーン
準備待ちに長めの時間を割り当てると、5秒かかるサーバーはconnectedに到達しました。短い設定ではpendingのままです。

この実時間にはClaude Codeとnpxの起動オーバーヘッドも含まれるため、そのままサービス目標に転用できる値ではありません。重要なのは状態の違いです。0と1,000 msではサーバーがpendingの間に最初のターンのゲートが開き、7,000 msでは同じサーバーがconnectedになりました。モデルのレイテンシーやジョブ全体の所要時間を測った結果ではありません。

本処理の前に準備完了を明示的に判定する

タイムアウトで答えられるのは「いつまで待つか」だけです。本番ジョブでは「どのツールが必須か」も決めなければなりません。

次の2段階でゲートを設けます。

  1. 本処理を開始する前に、必須のリモートエンドポイントまたはローカルサーバーコマンドを1つずつヘルスチェックします。設定・承認済みのサーバーなら、claude mcp listでconnected、needs authentication、failed to connectなどの状態を確認できます。
  2. Claude Codeのストリームでsystem/init.mcp_serversを調べます。必須サーバーがstatus: "connected"であることを条件とし、そのサーバーに関するmcp_server_errorsが空でなければ拒否します。キャッシュ済みサーバーや任意サーバーは、明示した許可リストに従って扱います。

必須サーバーがpendingなら、業務上の結果を受け入れる前に実行を終了します。任意サーバーなら、縮退モードを記録して続行します。こうすることで、待機時間の設定はポリシーそのものではなく、ポリシーへの入力になります。

検出結果のキャッシュには注意が必要です。ツール一覧がキャッシュされたリモートサーバーは、初期化時にpendingと表示され、最初のツール呼び出しで接続する場合があります。任意ツールには便利な挙動ですが、厳格な準備完了の保証にはなりません。必須ツールのゲートでは、実際の接続を要求するか、独自にヘルスチェックしてください。

設定と起動から、接続済みなら処理へ進み、pendingなら停止する分岐を示す建築的な準備完了フロー
必須ツールのポリシーが接続状態を明確な進行・停止の判断に変え、結果を信頼する前に判定できます。

最後に、プロセス全体をスケジューラ側の期限で囲みます。起動待機だけでは、モデルリクエスト、Bashコマンド、フック、後続のMCPツール呼び出しが残りの実行枠を使い切るのを防げません。

ビジネス上の価値は、主に失敗を早く確定できること

コンピューティング時間は確かに節約できますが、効果を大きく見積もるべきではありません。月間10,000件のジョブが本来30秒間待つところ、最初のターンの上限を3秒にしたとします。回収できる最大の実行容量は4,500 runner minutesです。

GitHubが現在掲載している料金では、標準的な2コアLinuxホステッドランナーは1分あたり$0.006、macOSランナーは1分あたり$0.062です。この単価なら、4,500分は無料枠を考慮する前でLinux時間$27、macOS時間$279に相当します。またGitHubでは各ジョブの使用時間を1分単位に切り上げるため、27秒短縮しても、ジョブ全体が同じ課金枠に収まるなら請求額は変わらないことがあります。

より大きな効果は運用面にあります。準備完了チェックに3秒で失敗すれば、スケジューラには再試行、適切な担当者への通知、フォールバックへの切り替えを行う余裕が生まれます。逆に、データベースや課題管理システムがないまま静かに始まったジョブは、もっともらしい一方で不完全な結果を生成しかねません。後からそれを見つけて巻き戻すコストは、ランナー時間より高くつきます。

大きなレスポンスも制御する場合は、Claude Codeのツール出力上限ガイドでワークフローの出力側を別途確認できます。無人インストールやネットワークポリシーも扱うなら、この準備完了ゲートとコマンド単位のネットワークアクセスを組み合わせてください。

効果が大きい7つのワークフロー

1. 財務・業務レポートの定期実行

財務担当者が午前6時にレポートを実行し、ウェアハウスのMCPサーバーを利用するとします。そのサーバーを必須に指定し、実測したコールドスタートへ少し余裕を加え、接続できなければ停止します。価値は単なる高速化ではありません。最新の数値を取得できないまま、リポジトリ内のファイルだけで整ったレポートが作られるのを防げます。

2. プルリクエストのリスク自動チェック

プラットフォームチームが、リスクの高いプルリクエストごとにClaude Codeを実行し、GitHub、課題管理、セキュリティスキャナーのツールを使うケースです。スキャナーとGitHubを必須、課題管理を任意にできます。最重要の証拠が抜けたままレビューが進むのではなく、理由の明確なエラーを開発者へすぐ返せます。

3. リリース調整ジョブ

リリース担当者が定期エージェントを使い、マージ済みの変更、進行中のインシデント、デプロイ状況を照合するとします。各情報源に準備完了ルールを設定できます。デプロイ用MCPサーバーが停止していれば、安全であるかのようなリリースノートを下書きする前にジョブを止められます。

4. 夜間のサポート振り分け

サポートチームがジョブにチケットの分類、アカウント履歴の確認、返信文案の作成を任せるケースです。ヘルプデスクと顧客データのサーバーは必須、Slackは任意にできます。待機時間に上限を設ければキューを滞らせず、準備完了ルールによって、情報源がないときに非公開の顧客情報を推測する事態も防げます。

5. インシデント対応アシスタント

オンコール担当者がアラートから非対話の診断を開始します。短い起動待機を設けると、ログとメトリクスに本当にアクセスできるかが明確になります。どちらかの必須サーバーが利用できなければ、不完全な診断に対応時間を費やすことなく、ラッパーから手動のランブックへ直ちに切り替えられます。

6. オートスケールする一時ランナー

チームがエージェントジョブごとに新しいコンテナを立ち上げる場合、ローカルstdioサーバーでは、パッケージの読み込み、認証ヘルパー、スキーマ検出などのコールドスタートが発生します。起動時間を測れば、妥当な7秒の準備待ちと、不調なサーバーを恒久的にごまかす回避策を区別できます。

7. マルチテナント型エージェント製品

顧客ごとに異なるMCP接続を提供する製品では、あるテナントはSalesforce、別のテナントはLinearを必須とし、外部ツールが不要なテナントもいます。実行単位の必須サーバー一覧があれば、同じオーケストレーション層からテナントごとに短い待機時間を選べます。最も遅い連携を全員のデフォルトにする必要はありません。

構築する価値がある3つのプロダクト

1. Claude Code CI向けMCP準備完了ゲート

最も有望なのはこれです。必須サーバーのポリシーを読み込み、待機時間を明示してClaude Codeを起動し、system/initを記録したうえで、エージェントの結果を受け入れる前に機械可読な準備未完了エラーを返す、小さなランナーラッパーです。

需要は限定的ですが、事業として検討できる水準です。claude code automationは米国で月間約140回検索され、サジェストデータでは前年比200%増、CPCは$10.88です。Claude Codeを自動実行する方法や、Claude CodeでMCPを設定する方法も検索されています。いずれも、このセットアップ課題が実在することを直接示しています。

販売可能な最小構成は、ポリシーファイル、GitHub Actionsのアノテーション、実行ごとのJSON証跡を備えたCLIです。課題は流通です。Anthropicがより高度な準備完了ポリシーをネイティブに追加する可能性があるため、複数のエージェントランタイムにまたがる履歴、アラート、対応力が持続的な価値になります。

2. タイムアウトポリシーのリンター

シェルスクリプト、CIファイル、設定、.mcp.jsonを走査し、時計の取り違えを検出するツールです。必須ツールがあるのに起動待機が0、ジョブ全体の期限は短いのにツールタイムアウトが28時間、任意の連携に上限がない、といった設定を警告します。

完全一致のキーワードmcp server timeoutは、米国で月間約10回検索され、報告されている前年比トレンドは-67%です。関連語にはMCP_TOOL_TIMEOUTがあり、Claude Codeのタイムアウトを延ばす方法も検索されています。準備完了ゲートの一機能としては十分な需要ですが、単独の事業を成立させるほどではありません。

MVPには、GitHub Actions、一般的なシェル構文、Claude CodeのMCP設定に対応するパーサーと、判断の明確な修正案が必要です。課題は過信を招くことです。実行時に測定しなければ、静的な設定だけでサーバーの実際のコールドスタート分布は分かりません。

3. 定期エージェントの起動テレメトリ

system/initイベントを、接続レイテンシー、pending状態、不正な設定、縮退実行のタイムラインへ変換するプロダクトです。プラットフォームチームにとって、多数のリポジトリにまたがる傾向やアラートは、JSONLファイルを手作業で読むより価値があります。

この案も、月間140回のclaude code automation検索を需要として共有します。さらにclaude code browser automationが月間40回あり、サジェストデータではこちらも前年比200%増です。より大きな潮流として、Claude Codeを反復可能なジョブへ組み込むチームが増え、起動証跡が運用課題になりつつあることを示しています。

MVPはイベントコレクター、必須・任意サーバーの対応表、準備状態がサービス目標を外れたときのアラートで構成できます。課題はデータの機密性です。MCP名とツールのメタデータから社内システムが推測される可能性があるため、秘匿化とセルフホストは後から加えるエンタープライズ向け機能ではなく、製品の中核要件です。

制約を踏まえた率直な結論

この設定が解決するのは、信頼できる自動化を構成する小さいながらも重要な一部分です。壊れたMCPサーバーを修復することも、期限切れのコネクターを再認証することも、後続のツール呼び出しを短縮することも、Claude Codeプロセス全体を止めることもできません。

最初の有用な処理にMCPが必要なジョブでは、0を使わないでください。初期化時にpendingとなり、ツールを検索する段階で再び待つ可能性があります。また、不安定なサーバーが正常に見えるまで値を引き上げるのも避けるべきです。HTTPサーバーとSSEサーバーは最初の接続で一時的に失敗すると再試行しますが、認証エラーやnot-foundエラーには設定変更が必要です。待機時間を延ばしても、事実が判明する時点が遅れるだけです。

stdioサーバーは、セッション途中で接続が切れても自動的には再接続しません。起動待機を長くしても、10分後の正常性は保証されません。

最善のポリシーは厳格で、単純です。最初のターンには短く明示的な待機時間を設定し、必須サーバーを名前で指定し、状態ゲートを設け、ツール用タイムアウトを分離し、ジョブ全体を外側の期限で囲みます。この構成なら、不可解な遅延ではなく、対処可能な失敗を得られます。

Claude Codeのタイムアウトを延ばすには?

遅い処理段階に対応するタイムアウトを選びます。最初の非対話ターンでMCPの準備を待つ時間にはCLAUDE_CODE_MCP_STARTUP_WAIT_MS、サーバー起動にはMCP_TIMEOUT、ツール実行にはMCP_TOOL_TIMEOUTまたはサーバー単位のtimeout、ジョブ全体にはランナー側の制限を使います。

Claude Codeを自動実行するには?

-pまたは--printでClaude Codeを非対話モードで実行し、無人で使うツールの権限動作を定義し、スケジューラ側でジョブ全体の期限を設定したうえで、MCPの準備状態を明示的に確認します。起動待機を設定するだけでは、自動ジョブを安全にはできません。

Claude Codeが繰り返しタイムアウトするのはなぜ?

まずログから遅延が起きている段階を特定します。system/initより前の遅延なら、起動または接続準備が原因と考えられます。MCPツールの呼び出し中に失敗するなら、ツール、アイドル、ネットワークリクエストの各制限を確認します。CIによってプロセスが強制終了された場合は、ジョブ全体の期限が原因です。

Claude CodeでMCPを設定するには?

プロジェクトまたはユーザーのMCP設定を追加するか、--mcp-configでファイルを渡します。反復実行するジョブでは--strict-mcp-configを加え、最初のターンの待機時間を明示し、「設定済みだから接続済み」と想定せずにsystem/initで必須サーバーを確認します。

月曜日に、定期実行しているClaude Codeジョブを1つ選び、必須MCPのコールドスタートを測定してください。実態に合う最小の待機時間を設定し、必須サーバーがpendingなら結果を信頼する前に失敗させます。エージェントワークフロー全体にこの信頼性レイヤーを構築したい場合は、本番システムの構築を支援できます

最終更新
2026年9月17日
カテゴリー
Build

Googleでこのサイトを優先する

omidsaffari.comをGoogle検索の優先ソースに追加

omidsaffari.comを優先ソースに設定すると、GoogleがTop Stories・AI Overviews・AI Modeであなたのために優先表示します。

Cloudflare AIクローラー設定でAI学習を拒否し、検索流入を守る

Cloudflare AIクローラー設定でAI学習を拒否し、検索流入を守る

Cloudflare AIクローラー設定で、検索流入を維持しながらAI学習だけを拒否する方法を解説。Search、Training、Agentの移行結果、robots.txt、Googlebot・Applebot・Bingbotへの影響、変更後に実施すべき4段階の検証手順まで、運用担当者向けに整理します。2026年9月16日Build
音声入力アプリMurmureを検証:オフライン運用の実力

音声入力アプリMurmureを検証:オフライン運用の実力

無料で使えるオフライン音声入力アプリMurmure 1.11.3を、技術用語を含む19.817秒の音声で検証。辞書と整形ルールの精度、ローカル/リモートLLMの違い、Windows・macOS・Linuxの注意点、料金、向いている人、見送る条件までを実測結果から詳しく解説します。2026年9月14日Build
FFmpeg APIの料金を解剖:RenderIOはいつ割安になる?

FFmpeg APIの料金を解剖:RenderIOはいつ割安になる?

RenderIOのFFmpeg API料金を、月額プラン、コマンドクレジット、超過料金、チェーン実行、動画ダウンロードまで検証。Starter・Growth・Businessの損益分岐点と、実行時間・ストレージ・Webhookで上位プランが必要になる条件を、具体的な数字で解説します。2026年9月14日Build
AI 音声入力は本当に無料?Dictareの料金と実質コスト

AI 音声入力は本当に無料?Dictareの料金と実質コスト

AI 音声入力ツールDictareは、ソフトウェア料金が$0で、有料プランや公開された利用上限もありません。ローカル処理に必要なマシン、導入・運用時間、別契約となるコーディングエージェントの費用を切り分け、SpokenlyとWispr Flowの料金も比較。無料運用の条件と選び方を明快に解説します。2026年9月13日Build
Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code 2.1.269で追加されたネイティブplugin evalを使い、プラグインあり・なしの実行を比較する方法を解説します。ケースとgraderの設計、WITH・W/OUT・Δの読み方、意図的な回帰テスト、コスト管理、CIゲートへの組み込みまで、再現可能なリリース判定を具体例とともに整理します。2026年9月12日Build
音声AIエージェントの遅延原因をCloudflareで切り分ける

音声AIエージェントの遅延原因をCloudflareで切り分ける

Cloudflareのturnmetricsを使い、音声AIエージェントの遅延や無音応答をステージ別に切り分ける方法を解説します。7つのoutcome、各タイミングの読み方、3つの制御テストを押さえれば、モデルやTTSを推測で変更する前に、文字起こし・モデル・音声生成・ブラウザ再生のどこを調べるべきか判断できます。2026年9月12日Build
動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

動画に字幕を入れる方法を、Rendiの非同期FFmpeg APIを使った実装例で解説します。SRTの事前確認、字幕スタイルの指定、ジョブ送信と完了確認、出力MP4の品質チェック、料金を左右する容量計算まで、バッチ処理へ進む前に押さえる実務手順と注意点を具体的にわかりやすくまとめました。2026年9月11日Build
OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKとAgents APIのどちらを選ぶべきか。セッション管理、実行環境、データ保持、料金、移行コストを比較し、小規模チームから規制業界まで、開発体制に合う判断基準を具体例と試算で整理します。長時間タスク、ZDR、セルフホスト、運用負荷の違いも分かります。2026年9月11日Build
ニュースレター

毎週日曜、一通の手紙。動くシステムの話。感想戦ではなく。

週刊。スパムなし。いつでも解除できます。