
Emma Foster
Machine Learning Engineer

FetchURL Kimi Code CLI dapat mengambil konten web, tetapi alur kerja tetap perlu menolak kesalahan 403, output kosong, halaman tantangan, atau konten yang tidak memiliki bukti yang diharapkan sebelum memanggil langkah sebagai sukses.CLI Kimi Code dapat membaca file, menjalankan perintah shell, mengambil halaman web, dan menggunakan alat MCP. Hal ini membuatnya berguna untuk tugas pemrograman yang bergantung pada konten web publik atau yang diotorisasi pengguna. Kasus yang sulit bukan selalu kegagalan jaringan yang keras. Permintaan dapat mengembalikan kesalahan yang berisi 403, tubuh kosong hampir sama sekali, atau halaman tantangan yang tampak seperti konten bagi agen yang validasi lemah.
Alur kerja yang andal harus mengklasifikasikan hasil tersebut sebelum memasukkannya ke konteks agen. Ketika kegagalan adalah CAPTCHA yang didukung di lingkungan yang diotorisasi, CapSolver dapat berada di balik batas MCP sebagai satu kemampuan pemulihan yang terkontrol. Ia tidak boleh menjadi mekanisme ulang tak terbatas atau pengganti izin.
Penanganan CAPTCHA dalam Kimi Code CLI berarti mendeteksi bahwa pengambilan web tidak menghasilkan bukti yang diharapkan, mengarahkan tantangan yang diotorisasi dan didukung ke alat yang terkontrol, lalu memverifikasi halaman kembali. Ini tidak berarti menganggap setiap kegagalan pengambilan sebagai CAPTCHA atau membiarkan model mengulang pemanggilan alat hingga sesuatu berubah.
Repositori Kimi Code resmi mendaftar pengambilan halaman web, MCP, Keterampilan, dan Plugin sebagai kemampuan CLI-nya. Referensi alat bawaan mendefinisikan FetchURL dengan satu input url dan konten halaman sebagai outputnya. HTML dikonversi menjadi teks tubuh, sementara teks biasa dan Markdown dilewatkan.
Kontrak ini sengaja kecil. Ia tidak menjamin bahwa teks yang dikembalikan adalah dokumen yang dimaksud, juga tidak mendefinisikan respons berstruktur { status, text }. Jika wrapper host mengekspos status HTTP atau kesalahan transportasi, normalisasi mereka dalam adapter. Lalu validasi bukti transportasi dan semantik konten sebelum agen mengonsumsi hasilnya.
| Batas | Input | Output | Kondisi berhenti |
|---|---|---|---|
| Adapter pengambilan | URL dan bukti yang diharapkan | Status yang dinormalisasi, teks, dan kesalahan | URL tidak valid, status HTTP terminal, atau penolakan kebijakan |
| Validator hasil | Hasil pengambilan yang dinormalisasi | accepted, recoverable, atau terminal |
Kegagalan yang tidak didukung atau ambigu |
| Pemulihan MCP | URL yang diotorisasi, bukti tantangan, jumlah upaya | Hasil pemulihan berstruktur | Izin hilang, tantangan tidak didukung, kesalahan alat terminal, atau timeout |
| Pengambilan verifikasi | Aturan URL dan bukti yang sama | Konten yang diverifikasi atau bukti kegagalan | Konten yang diharapkan masih hilang setelah satu upaya |
Pemisahan ini memberi model ruang keputusan yang sempit. Ia mungkin meminta pemulihan hanya setelah validator menghasilkan keadaan yang dapat dipulihkan; kontroler, bukan model, menerapkan anggaran.
Gunakan pola ini hanya untuk halaman dan lingkungan pengujian yang Anda miliki atau diotorisasi untuk otomasi. Akses teknis tidak memberikan izin untuk membaca data pribadi, terbatas, sensitif, atau tidak diotorisasi. Tinjau ketentuan target, kebijakan yang berlaku, aturan penanganan data, dan batas kecepatan sebelum mengaktifkan jalur pemulihan apa pun.
Anda membutuhkan:
capsolver-core saat ini.capsolver-core dan capsolver-mcp dari Guia Layanan MCP CapSolver..kimi-code/mcp.json.Panduan konfigurasi MCP resmi Kimi mendukung file mcp.json tingkat pengguna dan proyek. Konfigurasi proyek memerlukan kepercayaan, dan pemanggilan alat MCP individu dapat memerlukan persetujuan. Pertahankan batas persetujuan ini: hindari aturan wildcard luas, tinjau perintah server, dan izinkan hanya alat yang dibutuhkan oleh alur kerja.
Validasi terisolasi untuk artikel ini menggunakan Kimi Code CLI 0.38.0, capsolver-core 0.1.0, dan capsolver-mcp 0.1.0 pada Python 3.12. Pada 26 Agustus 2026, instalasi yang tidak terbatas memilih MCP 2.1.1, sementara paket MCP CapSolver saat ini mengimpor modul MCP 1.x FastMCP. Menetapkan mcp<2 menghasilkan MCP 1.29.1 dan memulihkan perintah yang didokumentasikan dalam fixture terisolasi ini.
Anggap penetapan ini sebagai solusi kompatibilitas yang berlaku pada tanggal tertentu, bukan kebutuhan permanen. Periksa paket resmi saat ini dan hapusnya ketika batas dependensi mereka mendukung MCP 2.x.
CapSolver dapat dihubungkan melalui konfigurasi MCP standar Kimi Code; ini adalah koneksi MCP umum, bukan klaim integrasi native Kimi. Buat lingkungan terisolasi dan instal paket yang didokumentasikan:
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
Atur CAPSOLVER_API_KEY melalui penyimpanan rahasia CI atau lingkungan proses lokal. Kemudian gunakan file .kimi-code/mcp.json proyek seperti:
{
"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"
]
}
}
}
Jalankan Kimi dari proses di mana penyimpanan rahasia Anda telah menyediakan CAPSOLVER_API_KEY; proses MCP turunan mewarisi lingkungan tersebut. Kimi juga mendukung objek env untuk server MCP, tetapi menulis kunci nyata ke file proyek berisiko paparan sumber kontrol. Gunakan konfigurasi runtime yang dilindungi jika pengembangan Anda tidak dapat mewarisi rahasia proses.
Kimi menambahkan nama server ke alat yang ditemukan, sehingga model melihat nama seperti mcp__capsolver__detect_captchas. Handshake lokal untuk panduan ini memastikan penemuan semua lima alat yang didokumentasikan. Ia secara sengaja berhenti sebelum memanggil satu karena tidak ada kredensial nyata atau fixture tantangan yang diotorisasi yang disediakan.
Sebelum alur kerja dimulai, panggil get_supported_captchas atau terapkan daftar izin versi di kontroler Anda. Untuk alur kerja Agent ini, batasi daftar izin hanya pada reCAPTCHA v2, reCAPTCHA v3 dan variasi Enterprise-nya, serta Cloudflare Turnstile. Jika deteksi menghasilkan apa pun selain itu, hentikan untuk tinjauan manusia.
Klaim Kode Bonus Anda dari CapSolver
Tingkatkan anggaran otomatisasi Anda secara instan!
Gunakan kode bonus CAP26 saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan tambahan 5% bonus pada setiap penambahan — tanpa batas.
Klaim sekarang di Dasbor CapSolver Anda
Validasi hasil pengambilan sebelum mencapai memori pengambilan, penyederhana, atau keputusan pemrograman. Klasifikator yang andal memeriksa beberapa sinyal independen:
Berikut adalah contoh JavaScript yang telah diuji. Objek { status, text }-nya adalah kontrak aplikasi yang dinormalisasi, bukan skema mentah 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 };
}
Tune ambang batas dan penanda terhadap fixture yang dimiliki, bukan halaman pihak ketiga arbitrer. Kesesuaian penanda adalah bukti untuk diperiksa, bukan izin untuk melanjutkan. Catat asal URL, kelas status, hash konten, aturan yang cocok, dan ID jejak, tetapi redaksi data halaman dan kredensial dari log.
Untuk diagnosis yang lebih luas, Panduan Kesalahan CAPTCHA MCP menjelaskan cara memisahkan kegagalan transportasi, deteksi, penyelesaian, dan injeksi. Batas MCP Kimi seharusnya menerima klasifikasi yang terstruktur alih-alih instruksi alami tanpa batas seperti "terus mencoba."
Seorang kontroler yang terbatas seharusnya hanya memiliki empat hasil terminal: diterima, dipulihkan dan diverifikasi, dihentikan, atau memerlukan manusia. Ia tidak boleh mengasumsikan keberhasilan hanya karena panggilan MCP mengembalikan tanpa melempar.
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,
};
}
Adapter recoverThroughMcp adalah tempat lapisan orkestrasi yang disetujui memanggil alat CapSolver yang didokumentasikan. Inputnya harus mencakup URL yang diotorisasi, bukti tantangan yang terdeteksi, dan jumlah upaya. Outputnya harus normalisasi keberhasilan, kode kesalahan yang telah direduksi, dan kemampuan untuk diulang. Pertahankan tugas spesifik layanan di dalam adapter ini dan verifikasi mereka terhadap dokumen resmi saat ini alih-alih meminta model untuk menciptakan bidang.
Pengambilan kedua kontroler wajib. Validasi dengan aturan konten dan istilah yang sama seperti permintaan pertama. Token atau respons alat adalah hasil sementara; konten halaman adalah bukti penerimaan.
Berhenti tanpa panggilan alat ketika otorisasi tidak ada, URL keluar dari himpunan asal yang disetujui, atau validator mengembalikan kesalahan transportasi terminal. Berhenti setelah panggilan alat ketika tantangan tidak didukung, layanan melaporkan kesalahan yang tidak dapat diulang, anggaran waktu habis, atau pengecekan saldo gagal. Butuh manusia setelah upaya pemulihan tunggal jika pengambilan verifikasi masih tipis, ditantang, atau kehilangan konten yang diharapkan.
Aturan ini juga mencegah pencemaran konteks. Hanya konten halaman yang diterima yang harus masuk ke riwayat tugas Kimi atau penyimpanan pengambilan lanjutan. Simpan tubuh yang gagal dalam catatan bukti yang dikarantina dengan retensi singkat dan redaksi.
Observabilitas harus menjelaskan mengapa suatu langkah berubah status tanpa mengekspos rahasia atau tubuh halaman penuh. Emit satu peristiwa terstruktur per transisi:
{
"traceId": "retrieval-7f2c",
"stage": "pemeriksaan_pengambilan",
"origin": "authorized.example",
"classification": "konten_yang_diharapkan_hilang",
"recoveryAttempts": 1,
"finalState": "dibutuhkan_manusia"
}
Bidang yang berguna mencakup kelas status yang dinormalisasi, aturan validasi, panjang konten, hash konten yang dihapus, nama alat MCP, waktu yang berlalu, jumlah percobaan, dan status akhir. Jangan pernah mencatat kunci API, token tantangan lengkap, data halaman sensitif, atau konfigurasi MCP yang membawa rahasia.
Atur peringatan pada tingkat yang memerlukan manusia, tingkat kegagalan pemeriksaan, dan waktu habis alat. Kenaikan tingkat 403 mungkin menunjukkan kebijakan akses yang berubah, adapter pengambilan yang rusak, atau tantangan; ini bukan bukti yang cukup sendirian untuk mengklasifikasikan penyebabnya. Untuk konteks protokol umum, lihat apa yang dimaksud MCP dalam sistem AI.
Gunakan desain ini untuk otomasi publik, milik, atau yang secara eksplisit diizinkan. Hormati ketentuan, kontrol akses, arahan robot, batas laju, minimisasi data, dan persyaratan penyimpanan. Jangan gunakan alat CAPTCHA untuk mengakses konten pribadi atau terbatas atau melanjutkan setelah situs jelas menarik izin.
Jaga daftar izin target, pemilik untuk setiap catatan izin, tanggal kedaluwarsa, dan saklar pembunuh. Terapkan laju permintaan rendah dan simpan cache konten publik yang diterima ketika diizinkan. Membutuhkan persetujuan baru ketika alur kerja berubah asal, tujuan, kategori data, atau frekuensi eksekusi.
Lapisan MCP harus menggunakan set alat minimum dan persetujuan dengan hak minimum. Panduan CapSolver untuk agen AI menjelaskan alur kerja Agens yang didukung; pengontrol Anda tetap bertanggung jawab atas izin, batas percobaan, validasi output, dan menghentikan.
Penanganan CAPTCHA Kimi Code CLI yang andal dimulai dengan menolak keberhasilan palsu. Normalisasi bukti FetchURL, uji konten yang diharapkan, otorisasi target, izinkan satu pemulihan yang didukung, lalu ambil dan verifikasi lagi. Apa pun yang ambigu atau masih ditantang harus berhenti untuk tinjauan manusia.
Batas MCP umum menjaga alur kerja web Kimi terpisah dari detail layanan, sementara mesin keadaan mengontrol ulang dan mencatat bukti. Jika alur kerja Agens yang diizinkan membutuhkan lapisan pemulihan CAPTCHA yang didokumentasikan, evaluasi CapSolver dengan fixture yang dimiliki sebelum mengaktifkannya di produksi.
P: Apakah Kimi Code CLI memiliki integrasi CapSolver bawaan?
Tidak. Panduan ini menggunakan konfigurasi MCP umum yang didokumentasikan untuk terhubung ke server MCP CapSolver; tidak mengklaim integrasi bawaan atau kemitraan resmi.
P: Apakah FetchURL mengembalikan objek status HTTP dan tubuh?
Tidak menurut kontrak alat bawaan yang didokumentasikan. FetchURL menerima URL dan mengembalikan konten halaman; adapter host harus menormalkan kesalahan transportasi atau informasi status sebelum menerapkan klasifikator contoh.
P: Haruskah setiap 403 FetchURL Kimi Code memicu pemulihan CAPTCHA?
Tidak. 403 bisa memiliki beberapa penyebab, termasuk kegagalan kebijakan atau otorisasi. Klasifikasikan respons, konfirmasi izin, deteksi tantangan yang didukung, dan berhenti ketika penyebabnya ambigu.
P: Jenis tantangan apa yang termasuk dalam alur kerja Agens ini?
Jaga daftar izin hanya untuk kemampuan reCAPTCHA v2, reCAPTCHA v3 termasuk Enterprise, dan Cloudflare Turnstile yang saat ini didokumentasikan. Konfirmasi dukungan runtime dan berhenti pada jenis apa pun yang tidak dikenal.
P: Berapa banyak percobaan pemulihan CAPTCHA yang harus dilakukan agen?
Pola ini memungkinkan satu percobaan pemulihan diikuti oleh satu pengambilan verifikasi. Jika verifikasi gagal, alur kerja berhenti dan meminta tinjauan manusia alih-alih mengulang panggilan alat.
P: Dapatkah model memutuskan bahwa pemulihan berhasil dari respons MCP sendiri?
Tidak. Anggap respons MCP sebagai hasil sementara; ulangi pengambilan yang diizinkan dan validasi bukti halaman yang diharapkan sebelum menerima konten.
Pelajari cara menyelesaikan reCAPTCHA dalam agen LangGraph dengan alat CapSolver, pemrosesan ToolNode, parameter aman, pengulangan, dan desain alur kerja yang dapat dilanjutkan.

Pelajari cara menyelesaikan Cloudflare Turnstile dengan agen AutoGen menggunakan CapSolver, pendaftaran alat berjenis, penanganan token, pengulangan, dan desain alur kerja yang aman.
