CAPSOLVER
ブログ
Kimi Code CLI Web WorkflowsにおけるCAPTCHAの対処方法

Kimi Code CLI ウェブワークフローにおけるCAPTCHAの処理方法

Logo of CapSolver

Sora Fujimoto

How to use CapSolver

26-Aug-2026

TL;DR

  • Kimi Code CLIのFetchURLはウェブコンテンツを取得できますが、ワークフローはステップが成功とみなされる前に、403エラー、空の出力、チャレンジページ、または期待される証拠が欠如しているコンテンツを拒否する必要があります。
  • モデルの自由な推論からチャレンジの復元を分離してください: まずターゲットを認可し、取得結果を分類し、最大で1回の復元試行を許可し、再取得し、期待されるコンテンツを検証してください。
  • Kimi Codeは汎用的なMCPサーバーからツールを発見できます。CapSolverは、認証されたネイティブなKimi統合を必要としません。ドキュメント化されたMCPサーバーを通じて、標準的なツール境界で制御されたCAPTCHA機能を提供できます。
  • Agentのパスを現在ドキュメント化されているreCAPTCHA v2、reCAPTCHA v3(エンタープライズを含む)、Cloudflare Turnstileの機能に限定し、作業を開始する前に実行時のサポートを確認してください。
  • 認証が欠如している場合、サポートされていないチャレンジ、終端的なツールエラー、試行予算が枯渇した場合、または復元後の検証に失敗した場合、人間へのルーティングを停止してください。ループさせないでください。
  • このガイドの構成と状態マシンのfixtureはローカルでテストされました。実際のCapSolver資格情報と認可されたチャレンジfixtureはデプロイメントの前提条件であるため、ライブCAPTCHAは解決されませんでした。

はじめに: ウェブ取得を証拠生成ステップとして扱う

Kimi Code CLIはファイルの読み込み、シェルコマンドの実行、ウェブページの取得、MCPツールの使用が可能です。これは、公開またはユーザー認可されたウェブコンテンツに依存するコーディングタスクに役立ちます。困難なケースは常にハードネットワークエラーではありません。リクエストが403エラーを返す、ほぼ空の本文を返す、または緩く検証されたエージェントにとってコンテンツのように見えるチャレンジページを返すことがあります。

信頼できるワークフローは、エージェントのコンテキストに入る前に結果を分類する必要があります。失敗が認可された環境でのサポートされているCAPTCHAの場合、CapSolverはMCP境界の後ろに制御された復元機能として配置できます。これは無制限のリトライメカニズムや権限の代用になってはなりません。

Kimi Code CLIにおけるCAPTCHA処理とは何か?

Kimi Code CLIにおけるCAPTCHA処理とは、ウェブ取得が期待される証拠を生成しなかったことを検出すること、認可されサポートされているチャレンジを制御されたツールにルーティングすること、そしてページを再検証することです。これは、すべての取得失敗をCAPTCHAとして扱うことや、モデルがツール呼び出しを繰り返して何かが変わるまで続けることを意味しません。

公式Kimi Codeリポジトリには、ウェブページの取得、MCP、スキル、プラグインがCLIの機能としてリストされています。その組み込みツールリファレンスでは、FetchURLは1つのurl入力を持ち、ページコンテンツが出力として定義されています。HTMLは本文テキストに変換され、プレーンテキストとMarkdownは通過します。

この契約は意図的に小さくされています。返されたテキストが意図されたドキュメントであることを保証していませんし、構造化された{ status, text }応答を定義していません。ホストラッパーがHTTPステータスやトランスポートエラーを公開する場合、アダプターで正規化してください。その後、エージェントが結果を消費する前にトランスポート証拠とコンテンツセマンティクスの両方を検証してください。

バウンダリー 入力 出力 ストップ条件
フェッチアダプター URLと期待される証拠 正規化されたステータス、テキスト、エラー 無効なURL、終端HTTPステータス、ポリシー拒否
結果検証者 正規化されたフェッチ結果 acceptedrecoverable、またはterminal サポートされていないまたは曖昧な失敗
MCP復元 認可されたURL、チャレンジ証拠、試行回数 構造化された復元結果 権限不足、サポートされていないチャレンジ、終端ツールエラー、またはタイムアウト
検証フェッチ 同じURLと証拠ルール 検証されたコンテンツまたは失敗証拠 1回の試行後に期待されるコンテンツがまだ存在しない場合

この分離により、モデルは狭い決定空間を持ちます。検証者が回復可能な状態を生成した後のみ、復元を要求する必要があります。予算はモデルではなくコントローラーが強制します。

前提条件と信頼境界

このパターンは、あなたが所有しているまたは自動化に認可されたページとテスト環境でのみ使用してください。技術的なアクセスは、プライベート、制限付き、機密、または認可されていないデータを読み取る権限を提供しません。任意の復元パスを有効にする前に、ターゲットの利用規約、適用可能なポリシー、データ処理ルール、およびレートリミットを確認してください。

必要なもの:

  • 信頼できるプロジェクトを持つKimi Code CLIと、意図されたMCPサーバーをロードする権限。
  • 現在のcapsolver-coreパッケージでPython 3.10以上。
  • CapSolver MCPサービスガイドから公式capsolver-coreおよびcapsolver-mcpパッケージ。
  • プロセス環境またはシークレットマネージャーに保存されたCapSolver APIキー、.kimi-code/mcp.jsonにコミットしないでください。
  • 最終的な統合テスト用の制御されたページfixtureまたは明示的に認可されたワークフロー。
  • 期待されるコンテンツルール、例えばページタイトル、安定したヘッディング、または必要なJSONフィールドなど、チャレンジやシェルページから意図された結果を区別するもの。

Kimiの公式MCP構成ガイドは、ユーザーレベルおよびプロジェクトレベルのmcp.jsonファイルをサポートしています。プロジェクト構成には信頼が必要であり、個々のMCPツール呼び出しは承認を必要とする場合があります。その承認境界を保持してください: 幅広いワイルドカードルールを避けて、サーバーコマンドをレビューし、ワークフローが必要とするツールのみを許可してください。

検証環境からの依存関係互換性の注意

この記事の隔離された検証では、Kimi Code CLI 0.38.0、capsolver-core 0.1.0、capsolver-mcp 0.1.0をPython 3.12で使用しました。2026年8月26日、制限のないインストールはMCP 2.1.1を選択しましたが、現在のCapSolver MCPパッケージはMCP 1.x FastMCPモジュールをインポートしています。mcp<2をピン留めするとMCP 1.29.1が生成され、この隔離されたfixtureのドキュメント化されたコマンドが復元されました。

このピン留めを永続的な要件ではなく、日付付きの互換性のワークアラウンドとして扱ってください。現在の公式パッケージを確認し、依存関係の範囲がMCP 2.xをサポートするようになったら、それを削除してください。

Kimi Code CLI用にCapSolver MCPを構成する

CapSolverは、Kimi Codeの標準的なMCP構成を通じて接続できます。これはネイティブなKimi統合の主張ではなく、汎用的なMCP接続です。隔離された環境を作成し、ドキュメント化されたパッケージをインストールしてください:

bash Copy
python3.12 -m venv .venv-capsolver-mcp
.venv-capsolver-mcp/bin/python -m pip install \
  "mcp<2" \
  "capsolver-core @ git+https://github.com/capsolver/capsolver-core-python.git" \
  "capsolver-mcp @ git+https://github.com/capsolver/capsolver-mcp.git"
.venv-capsolver-mcp/bin/capsolver-mcp --help

CIシークレットストアまたはローカルプロセス環境を通じてCAPSOLVER_API_KEYを設定してください。その後、プロジェクトの.kimi-code/mcp.jsonのようなものを使用してください:

json Copy
{
  "mcpServers": {
    "capsolver": {
      "command": "/absolute/path/to/.venv-capsolver-mcp/bin/python",
      "args": ["-m", "capsolver_mcp"],
      "startupTimeoutMs": 10000,
      "toolTimeoutMs": 30000,
      "enabledTools": [
        "detect_captchas",
        "solve_captcha",
        "solve_on_page",
        "get_balance",
        "get_supported_captchas"
      ]
    }
  }
}

シークレットマネージャーがすでにCAPSOLVER_API_KEYを提供しているプロセスからKimiを起動してください。MCPサブプロセスはその環境を継承します。KimiはMCPサーバー用のenvオブジェクトもサポートしていますが、プロジェクトファイルに実際のキーを記述するとソース制御への暴露のリスクがあります。デプロイがプロセスシークレットを継承できない場合、保護されたランタイム構成を使用してください。

Kimiは発見されたツールにサーバー名を接頭辞として付与するため、モデルはmcp__capsolver__detect_captchasなどの名前を見ます。このガイドのローカルハンドシェイクは、すべての5つのドキュメント化されたツールの発見を確認しました。実際の資格情報または認可されたチャレンジfixtureが提供されていないため、1つも呼び出しませんでした。

ワークフローが開始する前に、get_supported_captchasを呼び出すか、コントローラーでバージョン化された許可リストを強制してください。このエージェントワークフローでは、reCAPTCHA v2、reCAPTCHA v3およびそのエンタープライズバージョン、Cloudflare Turnstileに許可リストを限定してください。検出がそれ以外を生成した場合、人間によるレビューのために停止してください。

CapSolverボーナスコードを取得してください

自動化予算を即座に増やしてください!
CapSolverアカウントにチャージする際にボーナスコードCAP26を使用すると、すべてのチャージで5%のボーナスが追加されます—制限なし。
今すぐCapSolverダッシュボードで取得してください
ボーナスコード

403、空のコンテンツ、チャレンジページの偽成功を検出する

取得結果を検証メモリ、要約者、またはコード決定に到達する前に検証してください。信頼できる分類器はいくつかの独立したシグナルをチェックします:

  1. トランスポート失敗: ホストアダプターが403または他の非成功ステータスを報告します。
  2. 薄い出力: 返されたテキストが空または期待されるドキュメントを含むには短すぎます。
  3. チャレンジの意味: ボディに要求されたコンテンツではなく安定したチャレンジマーカーが含まれています。
  4. 証拠の欠如: 応答は説得力があるように見えますが、必要なヘッディング、フィールド、または識別子がありません。

以下のテスト済みJavaScriptはアダプターレベルの例です。その{ status, text }オブジェクトは、元のFetchURLスキーマではなく、正規化されたアプリケーション契約です:

js Copy
const CHALLENGE_MARKERS = [
  /verify you are human/i,
  /captcha/i,
  /cf-chl-/i,
  /g-recaptcha/i,
  /cf-turnstile/i,
];

export function classifyFetchResult(result, expectedTerms = []) {
  const status = Number(result?.status ?? 0);
  const text = String(result?.text ?? "").trim();

  if (status === 403) {
    return { kind: "recoverable", reason: "http_403", status };
  }
  if (status < 200 || status >= 400) {
    return { kind: "terminal", reason: "unexpected_http_status", status };
  }
  if (text.length < 80) {
    return { kind: "recoverable", reason: "empty_or_thin_content", status };
  }
  if (CHALLENGE_MARKERS.some((marker) => marker.test(text))) {
    return { kind: "recoverable", reason: "challenge_page", status };
  }

  const missingTerms = expectedTerms.filter(
    (term) => !text.toLowerCase().includes(term.toLowerCase()),
  );
  if (missingTerms.length > 0) {
    return { kind: "recoverable", reason: "expected_content_missing", status, missingTerms };
  }

  return { kind: "accepted", reason: "expected_content_present", status };
}

所有しているfixtureに対してしきい値とマーカーを調整してください。任意のサードパーティページではなく。マーカーの一致は検証の証拠であり、進むための許可ではありません。URLのオリジン、ステータスクラス、コンテンツハッシュ、マッチしたルール、トレースIDを記録してください。ただし、ページデータと資格情報をログから非表示にしてください。

より広範な診断のために、MCP CAPTCHAエラーのガイドは、トランスポート、検出、解決、および注入の失敗を分離する方法を説明しています。KimiのMCP境界は、無制限の自然言語指示ではなく、構造化された分類を受け取るべきです。

1つの制御された復元を実行し、結果を検証する

制限されたコントローラーは、受け入れられた、復元され検証された、停止された、または人間が必要な4つの終端結果のみを持つべきです。MCPコールがエラーなく返されたからといって、成功と推測してはいけません。

js Copy
export async function runBoundedRecovery({
  fetchPage,
  recoverThroughMcp,
  url,
  expectedTerms,
  authorized,
  maxRecoveryAttempts = 1,
}) {
  const evidence = [];
  let recoveryAttempts = 0;

  const first = await fetchPage(url);
  const firstCheck = classifyFetchResult(first, expectedTerms);
  evidence.push({ stage: "initial_fetch", check: firstCheck });

  if (firstCheck.kind === "accepted") {
    return { state: "accepted", recoveryAttempts, evidence };
  }
  if (firstCheck.kind === "terminal") {
    return { state: "stopped", stopReason: firstCheck.reason, recoveryAttempts, evidence };
  }
  if (!authorized) {
    return { state: "human_required", stopReason: "authorization_required", recoveryAttempts, evidence };
  }
  if (maxRecoveryAttempts < 1) {
    return { state: "stopped", stopReason: "recovery_budget_exhausted", recoveryAttempts, evidence };
  }

  recoveryAttempts += 1;
  const recovery = await recoverThroughMcp({
    url,
    reason: firstCheck.reason,
    attempt: recoveryAttempts,
  });
  evidence.push({ stage: "mcp_recovery", result: recovery });

  if (recovery?.status !== "recovered") {
    return {
      state: recovery?.retryable ? "human_required" : "stopped",
      stopReason: recovery?.errorCode ?? "recovery_failed",
      recoveryAttempts,
      evidence,
    };
  }

  const second = await fetchPage(url);
  const secondCheck = classifyFetchResult(second, expectedTerms);
  evidence.push({ stage: "verification_fetch", check: secondCheck });

  if (secondCheck.kind === "accepted") {
    return { state: "recovered_and_verified", recoveryAttempts, evidence };
  }

  return {
    state: "human_required",
    stopReason: "verification_failed_after_recovery",
    recoveryAttempts,
    evidence,
  };
}

recoverThroughMcpアダプターは、承認されたオーケストレーションレイヤーがドキュメント化されたCapSolverツールを呼び出す場所です。その入力には、認可されたURL、検出されたチャレンジ証拠、および試行回数が含まれるべきです。その出力は、成功、非表示のエラーコード、およびリトライの可否を正規化する必要があります。サービス固有のタスク入力をこのアダプター内に保持し、現在の公式ドキュメントと比較して検証してください。モデルにフィールドを発明させるのではなく。

コントローラーの2番目のフェッチは必須です。最初のリクエストと同じ予期される用語とコンテンツルールで検証してください。トークンやツールの応答は中間結果であり、ページコンテンツが受け入れの証拠です。

実用的な停止ルール

認証が欠如している場合、URLが承認されたオリジンセットから外れている場合、または検証者が終端的なトランスポートエラーを返した場合、ツール呼び出しなしで停止してください。チャレンジがサポートされていない場合、サービスがリトライ不可能なエラーを報告した場合、時間予算が期限切れになった場合、または残高チェックに失敗した場合、ツール呼び出し後に停止してください。単一の復元試行後に検証フェッチがまだ薄い、チャレンジされている、または予期されるコンテンツが欠如している場合、人間による要請を要求してください。

これらのルールはコンテキストの汚染を防ぎます。受け入れられたページコンテンツのみがKimiタスク履歴や下流の取得ストアに含まれるべきです。失敗したボディは、短期間の保持と非表示を伴う隔離された証拠記録に保持してください。

Kimi Codeウェブワークフローの観測性

観測性は、ステップが状態を変更した理由を説明する必要がありますが、シークレットや完全なページボディを暴露してはいけません。1つのトランジションごとに1つの構造化イベントを発行してください:

json Copy
{
"traceId": "retrieval-7f2c",
  "stage": "verification_fetch",
  "origin": "authorized.example",
  "classification": "expected_content_missing",
  "recoveryAttempts": 1,
  "finalState": "human_required"
}

「有用なフィールドには、正規化されたステータスクラス、検証ルール、コンテンツ長、赤カットされたコンテンツハッシュ、MCPツール名、経過時間、試行回数、および最終状態が含まれます。APIキー、完全なチャレンジトークン、センシティブなページデータ、または秘密を保持するMCP構成をログに記録してはなりません。」

人間が必要な割合、検証失敗率、およびツールのタイムアウトに対してアラートを設定してください。増加する403の割合は、アクセスポリシーの変更、破損したフェッチアダプタ、またはチャレンジを示している可能性がありますが、原因を分類するための十分な証拠ではありません。一般的なプロトコルの文脈については、AIシステムにおけるMCPの意味を参照してください。

「このデザインを、公開されている、所有されている、または明示的に承認された自動化に使用してください。適用可能な場合は、利用規約、アクセス制御、ロボットの指示、レートリミット、データ最小化、および保持要件を尊重してください。プライベートまたは制限されたコンテンツにアクセスするためにCAPTCHAツールを使用したり、サイトが明確に許可を撤回した後に続けたりしないでください。」

ターゲットの許可リストを保持し、各認証記録の所有者、有効期限、およびキルスイッチを確保してください。許可された場合、低いリクエストレートで公開コンテンツをキャッシュしてください。ワークフローが元の場所、目的、データカテゴリ、または実行頻度を変更するたびに、新しい承認を必要とします。

MCPレイヤーは、最小限のツールセットと最小権限の承認を使用する必要があります。CapSolverのAIエージェントガイドは、サポートされているエージェントワークフローを説明しており、コントローラーは許可、試行制限、出力検証、および停止の責任を保持します。

結論: 回復を測定可能で限定的にする

信頼性のあるKimi Code CLI CAPTCHA処理は、誤った成功を拒否することから始まります。FetchURLの証拠を正規化し、期待されるコンテンツをテストし、ターゲットを認証し、サポートされている回復を1回許可した後、再度フェッチおよび検証してください。曖昧または依然としてチャレンジされているものは、人間のレビューのために停止する必要があります。

一般的なMCP境界は、Kimiのウェブワークフローをサービスの詳細から分離し、ステートマシンはリトライを制御し、証拠を記録します。認証されたエージェントワークフローに文書化されたCAPTCHA回復レイヤーが必要な場合、本番環境で有効にする前に、所有されたfixtureでCapSolverを評価してください。

FAQ

Q: Kimi Code CLIにはネイティブなCapSolverの統合がありますか?

A: いいえ。このガイドでは、Kimi Codeのドキュメントに記載されている一般的なMCP構成を使用して、CapSolver MCPサーバーに接続しています。ネイティブな統合や公式パートナーシップを主張するものではありません。

Q: FetchURLはHTTPステータスとボディオブジェクトを返しますか?

A: ドキュメントに記載された組み込みツール契約によるとそうではありません。FetchURLはURLを受け取り、ページコンテンツを返します。ホストアダプタは、例の分類器を適用する前に、利用可能なトランスポートエラーまたはステータス情報を正規化する必要があります。

Q: Kimi Code FetchURLの403がすべてCAPTCHA回復をトリガーする必要がありますか?

A: いいえ。403は、ポリシーまたは認証の失敗などの複数の原因によるものがあります。応答を分類し、許可を確認し、サポートされているチャレンジを検出し、原因が曖昧な場合は停止してください。

Q: このエージェントワークフローに含まれるチャレンジタイプはどれですか?

A: 現在ドキュメントに記載されているreCAPTCHA v2、reCAPTCHA v3(エンタープライズを含む)、およびCloudflare Turnstileの機能に許可リストを限定してください。実行時のサポートを確認し、認識できないタイプでは停止してください。

Q: エージェントがCAPTCHA回復試行を何回行うべきですか?

A: このパターンでは、1回の回復試行に続いて1回の検証フェッチが許可されます。検証に失敗した場合、ツールコールを繰り返す代わりに、人間のレビューを要求してワークフローを停止します。

Q: モデルがMCP応答だけで回復が成功したと判断できますか?

A: いいえ。MCP応答を中間結果として扱い、コンテンツを受容する前に、認証されたフェッチを繰り返し、期待されるページ証拠を検証してください。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

CapSolver MCP 公式登録 チュートリアルでは、登録記録、uvx コマンド、APIキー変数、およびアクティブな stdio 状態を表示します。
CapSolver MCPの公式MCPレジストリからのインストール方法

オフィシャル MCP レジストリで CapSolver MCP を検索し、uvx または pip を使用してバージョン 0.1.3 をインストールし、ローカルクライアントを設定し、stdio ツールを確認してください。

ai
Logo of CapSolver

Sora Fujimoto

18-Sep-2026

Pydantic AI CAPTCHA ツール: タイプ入力とソルバーの結果
Pydantic AI CAPTCHA ツール: タイプ入力とソルバーの結果

Pydantic AIに公式のCapSolverアダプタを使用してCAPTCHAツールを追加し、ローカルでツールの実行をテストし、タイプされた入力と構造化されたソルバーの結果を処理します。

ai
Logo of CapSolver

Sora Fujimoto

18-Sep-2026

MCPとCLIインターフェースが一つのAIエージェントツールサービスに接続されている
MCP 対 CLI における AIエージェントの コンテキストコストとフェールヤー処理

AIエージェントのMCPとCLIインターフェースを、ツール発見、コンテキストコスト、セキュリティ、デバッグ、フェールチャーアイド、およびハイブリッドアーキテクチャについて比較してください。

ai
Logo of CapSolver

Sora Fujimoto

18-Sep-2026

AIブラウザエージェントは、目的のフォームを選択し、そのCAPTCHAウィジェットをマッチングし、提出結果を確認します。
AIブラウザエージェントにおける複数のCAPTCHAウィジェットの取り扱い方法

1ページに複数のCAPTCHAウィジェットを処理するには、明示的なフォーム所有権、ソルバーのパラメータ、結果のルーティング、および意図されたAIエージェントのアクションの確認を備える。

ai
Logo of CapSolver

Lucas Mitchell

15-Sep-2026

AIエージェント対スクリプト:ウェブオートメーションにおける選択の仕方と主要な意思決定の図付き
AIエージェント対スクリプト:ウェブオートメーションにおける選択の仕方

タスクの不確実性、テスト可能性、コスト、信頼性のある実行に必要な制御を基に、AIエージェント、スクリプト、ハイブリッドWeb自動化のいずれかを選択してください。

ai
Logo of CapSolver

Lucas Mitchell

11-Sep-2026

CapSolver MCP ServerはAIエージェントを5つの自動化ツールに接続します
CapSolver MCP サーバーは現在、AIエージェント向けに利用可能になりました

PyPIからCapSolver MCP Serverをインストールしてください。そして、互換性のあるAIエージェントに、Model Context Protocolを通じて認可されたCAPTCHAの処理のための5つのツールを提供してください。

ai
Logo of CapSolver

Sora Fujimoto

10-Sep-2026