
Sora Fujimoto
AI Solutions Architect

FetchURLはウェブコンテンツを取得できますが、ワークフローはステップが成功とみなされる前に、403エラー、空の出力、チャレンジページ、または期待される証拠が欠如しているコンテンツを拒否する必要があります。Kimi Code CLIはファイルの読み込み、シェルコマンドの実行、ウェブページの取得、MCPツールの使用が可能です。これは、公開またはユーザー認可されたウェブコンテンツに依存するコーディングタスクに役立ちます。困難なケースは常にハードネットワークエラーではありません。リクエストが403エラーを返す、ほぼ空の本文を返す、または緩く検証されたエージェントにとってコンテンツのように見えるチャレンジページを返すことがあります。
信頼できるワークフローは、エージェントのコンテキストに入る前に結果を分類する必要があります。失敗が認可された環境でのサポートされているCAPTCHAの場合、CapSolverはMCP境界の後ろに制御された復元機能として配置できます。これは無制限のリトライメカニズムや権限の代用になってはなりません。
Kimi Code CLIにおけるCAPTCHA処理とは、ウェブ取得が期待される証拠を生成しなかったことを検出すること、認可されサポートされているチャレンジを制御されたツールにルーティングすること、そしてページを再検証することです。これは、すべての取得失敗をCAPTCHAとして扱うことや、モデルがツール呼び出しを繰り返して何かが変わるまで続けることを意味しません。
公式Kimi Codeリポジトリには、ウェブページの取得、MCP、スキル、プラグインがCLIの機能としてリストされています。その組み込みツールリファレンスでは、FetchURLは1つのurl入力を持ち、ページコンテンツが出力として定義されています。HTMLは本文テキストに変換され、プレーンテキストとMarkdownは通過します。
この契約は意図的に小さくされています。返されたテキストが意図されたドキュメントであることを保証していませんし、構造化された{ status, text }応答を定義していません。ホストラッパーがHTTPステータスやトランスポートエラーを公開する場合、アダプターで正規化してください。その後、エージェントが結果を消費する前にトランスポート証拠とコンテンツセマンティクスの両方を検証してください。
| バウンダリー | 入力 | 出力 | ストップ条件 |
|---|---|---|---|
| フェッチアダプター | URLと期待される証拠 | 正規化されたステータス、テキスト、エラー | 無効なURL、終端HTTPステータス、ポリシー拒否 |
| 結果検証者 | 正規化されたフェッチ結果 | accepted、recoverable、またはterminal |
サポートされていないまたは曖昧な失敗 |
| MCP復元 | 認可されたURL、チャレンジ証拠、試行回数 | 構造化された復元結果 | 権限不足、サポートされていないチャレンジ、終端ツールエラー、またはタイムアウト |
| 検証フェッチ | 同じURLと証拠ルール | 検証されたコンテンツまたは失敗証拠 | 1回の試行後に期待されるコンテンツがまだ存在しない場合 |
この分離により、モデルは狭い決定空間を持ちます。検証者が回復可能な状態を生成した後のみ、復元を要求する必要があります。予算はモデルではなくコントローラーが強制します。
このパターンは、あなたが所有しているまたは自動化に認可されたページとテスト環境でのみ使用してください。技術的なアクセスは、プライベート、制限付き、機密、または認可されていないデータを読み取る権限を提供しません。任意の復元パスを有効にする前に、ターゲットの利用規約、適用可能なポリシー、データ処理ルール、およびレートリミットを確認してください。
必要なもの:
capsolver-coreパッケージでPython 3.10以上。capsolver-coreおよびcapsolver-mcpパッケージ。.kimi-code/mcp.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をサポートするようになったら、それを削除してください。
CapSolverは、Kimi Codeの標準的なMCP構成を通じて接続できます。これはネイティブなKimi統合の主張ではなく、汎用的なMCP接続です。隔離された環境を作成し、ドキュメント化されたパッケージをインストールしてください:
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のようなものを使用してください:
{
"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ダッシュボードで取得してください
取得結果を検証メモリ、要約者、またはコード決定に到達する前に検証してください。信頼できる分類器はいくつかの独立したシグナルをチェックします:
以下のテスト済みJavaScriptはアダプターレベルの例です。その{ status, text }オブジェクトは、元のFetchURLスキーマではなく、正規化されたアプリケーション契約です:
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境界は、無制限の自然言語指示ではなく、構造化された分類を受け取るべきです。
制限されたコントローラーは、受け入れられた、復元され検証された、停止された、または人間が必要な4つの終端結果のみを持つべきです。MCPコールがエラーなく返されたからといって、成功と推測してはいけません。
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タスク履歴や下流の取得ストアに含まれるべきです。失敗したボディは、短期間の保持と非表示を伴う隔離された証拠記録に保持してください。
観測性は、ステップが状態を変更した理由を説明する必要がありますが、シークレットや完全なページボディを暴露してはいけません。1つのトランジションごとに1つの構造化イベントを発行してください:
{
"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を評価してください。
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応答を中間結果として扱い、コンテンツを受容する前に、認証されたフェッチを繰り返し、期待されるページ証拠を検証してください。
LangGraphエージェントでreCAPTCHAを解く方法を学びましょう。CapSolverツール、ToolNodeルーティング、安全なパラメータ、リトライ、および再開可能なワークフロー設計を使用して。

Cloudflare TurnstileをAutoGenエージェントで解決する方法を学び、CapSolver、型付きツール登録、トークンの処理、リトライ、およびセキュアなワークフロー設計を行います。
