Jawaban singkat
Saat panggilan tool MCP timeout, Anda tidak bisa memastikan apakah perubahannya terjadi. AI Anda mungkin kehilangan balasannya, bukan pekerjaannya. Periksa dulu sebelum mencoba lagi: lihat di tool apa yang coba dibuat. Coba lagi hanya jika perubahannya tidak ada. Jangan pernah mencoba lagi sebuah pengiriman dengan sendirinya.
Dalam panduan ini
Mengapa timeout tidak memberi tahu apakah perubahannya terjadi?
AI Anda meminta sebuah tool membuat perubahan, lalu menunggu. Tidak ada balasan, jadi aplikasi AI Anda berhenti menunggu dan melaporkan kegagalan. Label itu menggambarkan waktu tunggunya, bukan perubahannya. Jika Anda mencoba lagi perubahan yang sudah terjadi, Anda mendapat dua tiket, dua halaman, atau dua pesan.
Developer menyebut perubahan semacam itu operasi write. Ada tiga kemungkinan yang bisa terjadi.
| Yang terjadi | Apakah perubahannya ada di tool? | Jika Anda mencoba lagi |
|---|---|---|
| Permintaannya tidak pernah sampai. | Tidak. | Langkah yang benar: perubahannya dibuat sekali. |
| Tool masih bekerja. | Belum. Ia muncul setelah AI Anda menyerah. | Perubahannya dibuat dua kali, kecuali mengulanginya tidak berbahaya. |
| Tool selesai, tetapi balasannya hilang. | Ya. | Perubahannya dibuat dua kali, kecuali mengulanginya tidak berbahaya. |
Spesifikasi MCP memang mengantisipasi hal ini. Klien sebaiknya memasang timeout pada setiap permintaan dan, saat waktunya habis, membatalkan permintaan itu dan berhenti menunggu. Pembatalan bukan jaminan. Server bisa mengabaikannya saat pekerjaannya sudah selesai atau tidak bisa dihentikan. Pembatalan juga bisa sampai setelah balasan terkirim.
Panduan API Stripe mengatakan hal yang sama: setelah koneksi gagal, Anda mungkin tidak tahu apakah permintaannya dijalankan. Panduan itu juga meminta Anda memperlakukan kesalahan server sebagai hasil yang tidak diketahui.
Apa yang sebaiknya Anda lakukan setelah timeout, berurutan?
Kerjakan berurutan. Dua langkah pertama memakan waktu satu menit.
- Hentikan coba lagiSekarang
Beri tahu AI Anda untuk tidak mengulang panggilan: “Jangan coba lagi. Periksa dulu apakah sudah dibuat.” Coba lagi begitu saja adalah cara sebuah perubahan terbuat dua kali.
- Periksa di tool-nya, bukan di chat1 menit
Buka tool-nya langsung: halaman Notion, issue GitHub, folder itu. Cari judul atau ID yang Anda minta. Chat hanya tahu bahwa panggilannya gagal.
- Baca apa yang Anda temukan2 menit
Ditemukan dan lengkap: perubahannya sudah dibuat. Lanjutkan dan jangan mengulanginya.
Ditemukan, setengah jadi: selesaikan bagian yang kurang dengan update, bukan create baru.
Tidak ditemukan: permintaannya tidak pernah sampai, atau masih berjalan. Tunggu semenit dan periksa lagi. - Coba lagi sekali, dan hanya untuk panggilan yang amanKemudian
Jika masih tidak ada, coba lagi sekali. Tabel di bawah menunjukkan panggilan mana yang aman diulang. Sebelum pengiriman, lihat ke mana ia sampai.
- Jika terus timeout, perbaiki penyebabnyaSetelahnya
Panggilan yang selalu timeout punya batas yang terlalu pendek atau pekerjaan yang terlalu besar. Naikkan batas untuk server itu, atau minta lebih sedikit per panggilan.
Panggilan mana yang aman dicoba lagi?
Sebuah panggilan aman dicoba lagi jika melakukannya dua kali menghasilkan hasil yang sama seperti sekali. Membaca termasuk. Banyak perubahan tidak. Standar HTTP menganggap PUT (mengatur sebuah nilai) dan DELETE aman diulang, dan baris-baris di bawah mengikutinya. Petunjuk idempotentHint atau deskripsi tool itu sendiri lebih utama daripada tabel ini.
| Panggilan | Coba lagi apa adanya? | Periksa dulu dengan |
|---|---|---|
| Baca: cari, daftar, buka | Ya. Tidak mengubah apa pun. | Tidak ada yang perlu diperiksa. |
| Atur sebuah nilai: status, judul, label | Biasanya. Mengatur nilai yang sama dua kali menghasilkan hasil yang sama, seperti HTTP PUT. | Membaca kolom itu. Jika seseorang mengubahnya sejak itu, coba lagi akan menimpa suntingannya. |
| Tambahkan ke sesuatu: komentar, baris, baris teks | Tidak. Dua kali berarti ditambahkan dua kali. | Membuka item itu dan mencari tambahan Anda. |
| Buat: halaman, issue, file | Tidak. Coba lagi membuat yang kedua. | Mencari berdasarkan judul atau ID yang Anda berikan. Coba lagi hanya jika tidak ada yang cocok. |
| Hapus | Biasanya, jika ia menyebut satu item yang pasti, seperti HTTP DELETE. Bukan “yang terbaru”: panggilan kedua mengenai item lain. | Mencari item itu. Hilang berarti selesai. |
| Kirim: pesan, email, notifikasi | Tidak pernah dengan sendirinya. Pengiriman tidak bisa ditarik kembali. | Memeriksa ke mana ia sampai: daftar terkirim, channel, pihak di seberang. Jika Anda tidak bisa memastikan, tanyakan dulu sebelum mengirim lagi. |
Bisakah idempotency key mencegah duplikat?
Kadang bisa. Idempotency key adalah label unik yang dikirim bersama sebuah permintaan. Jika label yang sama datang dua kali, layanan itu mengerjakannya sekali dan mengulang jawaban pertamanya. Ia dibuat untuk permintaan yang tidak mendapat balasan.
- Cara kerja key di Stripe. API v1-nya menerima key pada permintaan
POST. Ia menyimpan hasil pertama, bahkan jika itu error, dan mengembalikannya lagi untuk coba lagi dengan key yang sama. Key disimpan minimal 24 jam. Key yang sama dengan parameter lain ditolak. - Apa yang harus dilakukan saat coba lagi. Kirim key yang sama dan parameter yang sama. Stripe menyarankan agar tidak mencoba lagi dengan key baru sebelum Anda tahu hasil yang pertama. Key baru di tiap usaha tidak memberi perlindungan.
- Yang diberikan MCP. Permintaan
tools/callmembawa nama tool dan argumennya. Skema spesifikasi tidak mendefinisikan idempotency key untuknya. Sebuah tool tetap bisa menerimanya sebagai argumen tersendiri, jadi baca argumennya. - Apa yang boleh dinyatakan tool.
idempotentHintmenyatakan bahwa memanggil tool lagi dengan argumen yang sama tidak punya efek tambahan. Ia hanya petunjuk. Spesifikasi menyebut klien sebaiknya tidak pernah mendasarkan keputusan pada petunjuk dari server yang tidak mereka percaya.
Jadi key adalah bonus, bukan rencana. Jika tool tidak menawarkannya, pemeriksaan di atas yang melindungi Anda.
Bagaimana cara mengubah timeout MCP?
Batas yang terlalu pendek memotong pekerjaan yang jujur. Batas yang terlalu panjang membuat Anda menunggu. Di mana Anda mengaturnya bergantung pada aplikasi AI Anda. Berikut pengaturan Claude Code.
| Pengaturan | Yang dibatasi | Bawaan |
|---|---|---|
MCP_TOOL_TIMEOUT | Berapa lama satu panggilan tool boleh berjalan, dalam milidetik. | 100000000 ms, sekitar 28 jam |
timeout di .mcp.json | Sama, untuk satu server. Ia menimpa variabel itu untuk server tersebut. Batas keras: notifikasi kemajuan tidak memperpanjangnya. | Nilai variabelnya |
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT | Berapa lama sebuah panggilan boleh diam, tanpa balasan dan tanpa kemajuan, sebelum dihentikan. 0 mematikan pemeriksaan. | 5 menit untuk server jaringan, 30 menit untuk stdio |
MCP_TIMEOUT | Saat memulai sebuah server. Untuk server jarak jauh, ia juga dihitung dalam pengatur waktu per permintaan di bawah. | 30000 ms, 30 detik |
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS | Saat panggilan yang masih berjalan di percakapan utama dipindahkan ke tugas latar belakang. 0 mematikannya. Versi 2.1.212 atau lebih baru. | 120000 ms, 2 menit |
Bawaan 60 detik untuk server jarak jauh. Server yang dihubungi lewat HTTP, SSE, atau sebagai konektor claude.ai punya pengatur waktu kedua. Ia berjalan di setiap permintaan sampai byte respons pertama dari server. Ia berlangsung 60 detik, kecuali MCP_TOOL_TIMEOUT, timeout server, atau MCP_TIMEOUT diatur lebih tinggi. Server stdio lokal tidak punya pengatur waktu per permintaan.
Untuk mengaturnya untuk satu server, tambahkan "timeout": 600000 ke entrinya di .mcp.json. Itu sepuluh menit.
Panggilan yang lambat tidak selalu gagal. Mulai versi 2.1.212, Claude Code memindahkan panggilan MCP di percakapan utama Anda ke tugas latar belakang setelah dua menit. Hasilnya dikirim saat panggilan selesai.
Dokumentasi MCP Cursor tidak menjelaskan pengaturan timeout. Spesifikasi MCP tidak menyebut angka apa pun. Spesifikasi menyatakan SDK sebaiknya memungkinkan Anda mengatur timeout per permintaan, dan klien sebaiknya selalu menyimpan batas maksimum.
Untuk pekerjaan yang memakan menit, server bisa memakai MCP Tasks. Ia langsung mengembalikan handle, dan klien melakukan polling untuk hasilnya, bahkan setelah tersambung ulang. Kedua sisi harus mendukungnya, dan dukungan klien berbeda-beda.
Apa yang dilakukan Delta MCP saat balasan hilang?
Delta MCP adalah aplikasi gratis di komputer Anda, di antara AI Anda dan tool-nya. Saat sebuah perubahan tidak mendapat balasan, ia tidak menebak dan tidak sekadar mencoba lagi. Ia membaca tool-nya.
Sebelum perubahan keluar, Delta MCP memilih satu pembacaan yang bisa menunjukkan apakah perubahan itu terjadi. Pembacaan itu adalah membaca ulang objeknya, atau membaca ulang daftarnya. Jika tidak ada balasan, ia langsung menjalankan pembacaan itu. Apa yang ditampilkan pembacaan itu yang menentukan:
| Pembacaan menampilkan | Delta MCP |
|---|---|
| Perubahannya sudah dibuat. | Tugas dilanjutkan, dan balasannya menyatakan bahwa ia sudah diperiksa. |
| Perubahannya belum dibuat. | Ia mengirim perubahan itu sekali lagi, dengan argumen yang sama. Ia tidak pernah melakukannya dengan sendirinya untuk pesan atau pengiriman lain. Untuk itu, balasannya menyatakan bahwa ia belum terlihat, mungkin masih akan muncul, dan tugasnya berhenti. |
| Tidak jelas, atau tidak ada yang bisa dibaca untuk memastikannya. | Balasannya menyatakan “outcome unknown”, beserta alasannya. Tugasnya berhenti. Periksa tool-nya sebelum perubahan itu dibuat ulang. |
Panggilan tool yang dijalankan apa adanya tidak bisa diurungkan oleh Delta MCP. Jika panggilan sebelumnya berhasil, ia tetap terjadi, dan balasannya mencatatnya agar AI Anda tidak mengulanginya. Tiap tugas yang mengubah sesuatu disimpan di Activity, dengan setiap perubahan sebelum dan sesudahnya.
Cara sebuah tugas diperiksa dan diterapkan
Pertanyaan
Apakah aman mencoba lagi panggilan tool MCP setelah timeout?
Membaca aman. Perubahan tidak, sampai Anda memeriksanya. Timeout hanya berarti tidak ada balasan: tool mungkin tetap membuat perubahannya. Cari di tool, dan coba lagi hanya jika perubahannya tidak ada. Jangan pernah mencoba lagi sebuah pengiriman dengan sendirinya.
Apakah operasi write MCP saya berhasil jika permintaannya timeout?
Anda tidak bisa memastikannya dari timeout. Permintaannya mungkin tidak pernah sampai, tool mungkin masih bekerja, atau ia selesai dan balasannya hilang. Buka tool dan cari perubahannya.
Bagaimana cara menaikkan timeout tool MCP di Claude Code?
Atur MCP_TOOL_TIMEOUT dalam milidetik, atau tambahkan kolom timeout ke entri server di .mcp.json. Untuk server jarak jauh, atur di atas 60000 untuk mencabut pengatur waktu 60 detik per permintaan. MCP_TIMEOUT adalah waktu tunggu saat memulai, bukan batas panggilan tool.
Bagaimana cara mengubah timeout MCP di Cursor?
Dokumentasi MCP Cursor tidak menjelaskan pengaturan timeout. Dokumentasi itu menyebut panggilan yang gagal ditandai gagal di chat, dan Anda bisa mencoba lagi atau memeriksa log. Periksa dulu apa yang sudah ada di tool.
Apakah MCP punya idempotency key?
Tidak. Panggilan tool membawa nama tool dan argumen, dan skema spesifikasi tidak mendefinisikan idempotency key untuknya. Sebuah tool bisa menerima key sendiri sebagai argumen. Ia juga bisa mengatur idempotentHint, yang hanya petunjuk.
Apa yang dilakukan Delta MCP saat panggilan tool tidak mendapat balasan?
Ia langsung membaca tool untuk melihat apakah perubahannya terjadi. Sudah dibuat: tugas dilanjutkan. Belum dibuat: ia mengirim perubahan itu sekali lagi. Pesan atau pengiriman lain tidak pernah dikirim ulang dengan sendirinya. Tidak jelas: balasannya menyatakan “outcome unknown” dan tugasnya berhenti.
Sumber
- Model Context Protocol, Cancellation Klien sebaiknya mengatur timeout, membatalkan, dan berhenti menunggu; pembatalan bisa sampai setelah pekerjaan selesai (revisi 2026-07-28).
- Model Context Protocol, Schema Reference Panggilan tool membawa nama dan argumen, tanpa idempotency key; anotasi idempotentHint, dan anotasi hanya petunjuk (revisi 2026-07-28).
- Model Context Protocol, Tasks Handle tahan lama untuk operasi panjang, dibaca berkala (polling) dan diambil setelah tersambung ulang; kedua sisi harus ikut serta.
- Claude Code, Connect Claude Code to tools via MCP Timeout per server, pengatur waktu 60 detik per permintaan untuk server jarak jauh, jendela idle, dan pemindahan ke latar belakang setelah dua menit.
- Claude Code, Environment variables MCP_TOOL_TIMEOUT, MCP_TIMEOUT, CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT, dan CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS, beserta nilai bawaannya.
- Cursor, Model Context Protocol (MCP) Panggilan MCP yang gagal ditandai gagal di chat; coba lagi atau periksa log; tidak ada pengaturan timeout yang dijelaskan.
- Stripe, Idempotent requests Cara kerja idempotency key: hasil pertama disimpan dan dikembalikan lagi; key bertahan minimal 24 jam; parameter lain ditolak.
- Stripe, Advanced error handling Setelah koneksi gagal, Anda mungkin tidak tahu apakah permintaannya dijalankan; kesalahan server adalah hasil yang tidak diketahui; tidak ada key baru sebelum hasilnya diketahui.
- IETF, RFC 9110: HTTP Semantics Metode idempoten (metode aman, PUT, dan DELETE), dan tidak mengulang permintaan non-idempoten kecuali Anda yakin yang pertama belum pernah diterapkan.
- Delta MCP, Writing a task Apa yang dilakukan Delta MCP saat perubahan tidak mendapat balasan: dibuat, belum dibuat, atau hasil tidak diketahui; pengiriman tidak dikirim ulang dengan sendirinya.
- Delta MCP, Activity and Undo Tiap tugas yang mengubah sesuatu disimpan di Activity, dengan setiap perubahan sebelum dan sesudahnya.
Lanjut membaca
- Cara mengurungkan perubahan AI di Notion, GitHub, dan fileAgen AI mengubah atau menghapus sesuatu? Lihat apa yang berubah, urungkan di Notion, GitHub, atau file Anda, dan ketahui apa yang tidak bisa dikembalikan.
- MCP vs CLI untuk agen AI: dari mana tagihan token berasalMCP atau CLI untuk agen AI Anda? Biaya token masing-masing, hasil pengukuran, kapan CLI menang, kapan MCP menang, dan di mana kode mengalahkan keduanya.