La risposta breve
Quando una chiamata a uno strumento MCP va in timeout, non puoi sapere se la modifica è avvenuta. La tua IA può aver perso la risposta, non il lavoro. Controlla prima di riprovare: cerca nello strumento ciò che tentava di creare. Riprova solo se manca. Non riprovare mai un invio da solo.
In questa guida
Perché un timeout non dice se la modifica è avvenuta?
La tua IA ha chiesto a uno strumento di fare una modifica, poi ha aspettato. Non è arrivata nessuna risposta, quindi l’app di IA ha smesso di aspettare e ha segnalato un errore. Quell’etichetta descrive l’attesa, non la modifica. Riprovare una modifica già fatta significa ritrovarsi con due ticket, due pagine o due messaggi.
Gli sviluppatori la chiamano una scrittura. Possono essere successe tre cose.
| Cosa è successo | La modifica è nello strumento? | Se riprovi |
|---|---|---|
| La richiesta non è mai arrivata. | No. | Scelta giusta: la modifica viene fatta una sola volta. |
| Lo strumento sta ancora lavorando. | Non ancora. Compare dopo che la tua IA ha smesso di aspettare. | La modifica viene fatta due volte, a meno che ripeterla non sia innocuo. |
| Lo strumento ha finito e la risposta si è persa. | Sì. | La modifica viene fatta due volte, a meno che ripeterla non sia innocuo. |
La specifica MCP lo prevede. Un client dovrebbe impostare un timeout su ogni richiesta e, quando scade, interrompere la richiesta e smettere di aspettare. Un’interruzione non è una garanzia. Il server può ignorarla quando il lavoro è già finito o non può essere fermato. Può anche arrivare dopo che la risposta è stata inviata.
La guida API di Stripe dice lo stesso: dopo che una connessione si interrompe, potresti non sapere se la richiesta è stata eseguita. Dice anche di trattare un errore del server come esito sconosciuto.
Cosa fare dopo un timeout, in ordine?
Segui questi passi in ordine. I primi due richiedono un minuto.
- Ferma il nuovo tentativoAdesso
Dì alla tua IA di non ripetere la chiamata: « Non riprovare. Controlla prima se è stata fatta. » Un nuovo tentativo da solo è il modo in cui una modifica viene fatta due volte.
- Guarda nello strumento, non nella chat1 minuto
Apri lo strumento stesso: la pagina di Notion, le issue di GitHub, la cartella. Cerca il titolo o l’id che avevi chiesto. La chat sa solo che la chiamata è fallita.
- Leggi ciò che trovi2 minuti
Trovata e completa: la modifica è stata fatta. Vai avanti e non ripeterla.
Trovata, a metà: completa la parte mancante con un aggiornamento, non con una nuova creazione.
Non trovata: non è mai arrivata, oppure è ancora in corso. Aspetta un minuto e guarda di nuovo. - Riprova una volta sola, e solo una chiamata sicuraPoi
Se manca ancora, riprova una volta sola. La tabella qui sotto dice quali chiamate si possono ripetere. Prima di un invio, guarda dove arriva.
- Se va ancora in timeout, correggi la causaDopo
Una chiamata che va sempre in timeout ha un limite troppo corto o un lavoro troppo grande. Alza il limite per quel server, o chiedi meno per chiamata.
Quali chiamate si possono riprovare in sicurezza?
Una chiamata si può riprovare in sicurezza quando farla due volte dà lo stesso risultato che farla una volta. Le letture rientrano. Molte modifiche no. Lo standard HTTP considera PUT (imposta un valore) e DELETE sicuri da ripetere, e le righe qui sotto lo seguono. L’idempotentHint di uno strumento, o la sua descrizione, prevalgono su di esse.
| La chiamata | Si riprova così com’è? | Controlla prima |
|---|---|---|
| Lettura: cerca, elenca, apri | Sì. Non cambia nulla. | Nulla da controllare. |
| Imposta un valore: uno stato, un titolo, un’etichetta | Di solito sì. Impostare due volte lo stesso valore dà lo stesso risultato, come con un PUT HTTP. | Leggendo il campo. Se una persona l’ha cambiato nel frattempo, un nuovo tentativo sovrascrive la sua modifica. |
| Aggiungi a qualcosa: un commento, una riga, una linea | No. Due volte lo aggiunge due volte. | Aprendo l’elemento e cercando l’aggiunta che hai fatto. |
| Crea: una pagina, un’issue, un file | No. Un nuovo tentativo ne crea un secondo. | Cercando per il titolo o l’id che hai dato. Riprova solo se non trovi nulla. |
| Elimina | Di solito sì, quando indica un elemento preciso, come con un DELETE HTTP. Non « l’ultimo »: la seconda chiamata colpisce un altro elemento. | Cercando l’elemento. Se non c’è più, è fatto. |
| Invia: un messaggio, un’email, una notifica | Mai da solo. Un invio non si può ritirare. | Guardando dove arriva: la lista degli inviati, il canale, l’altra parte. Se non riesci a capirlo, chiedi prima di inviare di nuovo. |
Una chiave di idempotenza può bloccare il doppione?
A volte. Una chiave di idempotenza è un’etichetta unica inviata con una richiesta. Se la stessa etichetta arriva due volte, il servizio fa il lavoro una volta sola e ripete la sua prima risposta. È pensata per una richiesta che non ha avuto risposta.
- Come funziona una chiave in Stripe. La sua API v1 accetta una chiave nelle richieste
POST. Salva il primo risultato, anche un errore, e lo restituisce di nuovo per un nuovo tentativo con la stessa chiave. Conserva le chiavi per almeno 24 ore. La stessa chiave con altri parametri viene rifiutata. - Cosa deve fare un nuovo tentativo. Invia la stessa chiave e gli stessi parametri. Stripe dice di non riprovare con una chiave nuova finché non conosci l’esito del primo tentativo. Una chiave nuova a ogni tentativo non dà alcuna protezione.
- Cosa offre MCP. Una richiesta
tools/callporta il nome di uno strumento e i suoi argomenti. Lo schema della specifica non definisce per essa una chiave di idempotenza. Uno strumento può comunque accettarne una come argomento proprio, quindi leggi i suoi argomenti. - Cosa può dichiarare uno strumento.
idempotentHintdice che richiamare lo strumento con gli stessi argomenti non ha effetti aggiuntivi. È solo un suggerimento. La specifica dice che i client non dovrebbero mai basare le decisioni su suggerimenti di server di cui non si fidano.
Quindi una chiave è un vantaggio in più, non un piano. Quando lo strumento non ne offre nessuna, il controllo qui sopra ti protegge.
Come si cambia il timeout MCP?
Un limite troppo corto interrompe il lavoro legittimo. Uno troppo lungo ti lascia ad aspettare. Dove lo imposti dipende dall’app di IA. Ecco le impostazioni di Claude Code.
| Impostazione | Cosa limita | Predefinito |
|---|---|---|
MCP_TOOL_TIMEOUT | Quanto può durare una chiamata a uno strumento, in millisecondi. | 100.000.000 ms, circa 28 ore |
timeout in .mcp.json | Lo stesso, per un solo server. Sovrascrive la variabile per quel server. È un limite rigido: le notifiche di avanzamento non lo allungano. | Il valore della variabile |
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT | Quanto può restare in silenzio una chiamata, senza risposta e senza avanzamento, prima di interrompersi. 0 disattiva il controllo. | 5 minuti per i server di rete, 30 minuti per stdio |
MCP_TIMEOUT | L’avvio di un server. Per un server remoto, conta anche nel timer per richiesta qui sotto. | 30.000 ms, 30 secondi |
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS | Quando una chiamata ancora in corso nella conversazione principale passa a un’attività in background. 0 la disattiva. Versione 2.1.212 o successiva. | 120.000 ms, 2 minuti |
Il valore predefinito di 60 secondi per i server remoti. Un server raggiunto via HTTP, SSE o come connettore di claude.ai ha un secondo timer. Si applica a ogni richiesta fino al primo byte di risposta del server. Dura 60 secondi, a meno che MCP_TOOL_TIMEOUT, il timeout del server o MCP_TIMEOUT non siano impostati più alti. I server stdio locali non hanno un timer per richiesta.
Per impostarlo per un solo server, aggiungi "timeout": 600000 alla sua voce in .mcp.json. Sono dieci minuti.
Una chiamata lenta non è sempre una chiamata fallita. Dalla versione 2.1.212, Claude Code sposta in un’attività in background una chiamata MCP nella conversazione principale dopo due minuti. Consegna il risultato quando la chiamata finisce.
La documentazione MCP di Cursor non descrive nessuna impostazione di timeout. La specifica MCP non indica alcun numero. Dice che gli SDK dovrebbero permettere di configurare i timeout per richiesta, e che un client dovrebbe sempre mantenere un massimo.
Per il lavoro che richiede minuti, un server può usare MCP Tasks. Restituisce subito un handle, e il client fa polling sul risultato, anche dopo una riconnessione. Devono supportarlo entrambe le parti, e il supporto dei client varia.
Cosa fa Delta MCP quando una risposta si perde?
Delta MCP è un’app gratuita sul tuo computer, tra la tua IA e i suoi strumenti. Quando una modifica non riceve risposta, non indovina e non si limita a riprovare. Legge lo strumento.
Prima che una modifica parta, Delta MCP sceglie una lettura che può mostrare se è avvenuta. Quella lettura è rileggere l’oggetto, o rileggere una lista. Quando non arriva risposta, esegue subito quella lettura. Ciò che mostra la lettura decide:
| La lettura mostra | Delta MCP |
|---|---|
| La modifica è stata fatta. | Il task prosegue, e la risposta la segna come Checked. |
| La modifica non è stata fatta. | Invia la modifica ancora una volta, con gli stessi argomenti. Non lo fa mai da solo per un messaggio o un altro invio. Per quelli, la risposta dice che non è stata vista, che potrebbe comparire ancora, e il task si ferma. |
| Non chiaro, o non si può leggere nulla per capirlo. | La risposta dice outcome unknown, e perché. Il task si ferma. Controlla lo strumento prima di fare di nuovo la modifica. |
Una chiamata a uno strumento fatta così com’è non può essere annullata da Delta MCP. Se una chiamata precedente è riuscita, resta fatta, e la risposta la elenca perché la tua IA non la ripeta. Ogni task che cambia qualcosa viene conservato in Activity, con ogni modifica prima e dopo.
Come viene controllato e applicato un task
Domande
Si può riprovare in sicurezza una chiamata a uno strumento MCP dopo un timeout?
Una lettura sì. Una modifica no, finché non hai controllato. Il timeout dice solo che non è arrivata risposta: lo strumento potrebbe aver fatto la modifica comunque. Cercala nello strumento, e riprova solo se manca. Non riprovare mai un invio da solo.
La mia scrittura MCP è andata a buon fine se la richiesta è andata in timeout?
Dal timeout non lo puoi sapere. La richiesta potrebbe non essere mai arrivata, lo strumento potrebbe lavorare ancora, oppure ha finito e la risposta si è persa. Apri lo strumento e cerca la modifica.
Come aumento il timeout degli strumenti MCP in Claude Code?
Imposta MCP_TOOL_TIMEOUT in millisecondi, oppure aggiungi un campo timeout alla voce del server in .mcp.json. Per un server remoto, impostalo sopra 60.000 per alzare il timer di 60 secondi per richiesta. MCP_TIMEOUT è l’attesa all’avvio, non il limite della chiamata.
Come cambio il timeout MCP in Cursor?
La documentazione MCP di Cursor non descrive nessuna impostazione di timeout. Dice che una chiamata fallita viene segnata come tale nella chat, e che puoi riprovare o controllare i log. Controlla prima cosa contiene lo strumento.
MCP ha chiavi di idempotenza?
No. Una chiamata a uno strumento porta il nome dello strumento e i suoi argomenti, e lo schema della specifica non definisce per essa una chiave di idempotenza. Uno strumento può accettarne una propria come argomento. Può anche impostare idempotentHint, che è solo un suggerimento.
Cosa fa Delta MCP quando una chiamata a uno strumento non riceve risposta?
Legge subito lo strumento per vedere se la modifica è avvenuta. Fatta: il task prosegue. Non fatta: invia di nuovo la modifica. Un messaggio o un altro invio non viene mai inviato di nuovo da solo. Non chiaro: la risposta dice outcome unknown e il task si ferma.
Fonti
- Model Context Protocol, Cancellation I client devono impostare timeout, interrompere la richiesta e smettere di aspettare; un’interruzione può arrivare dopo che il lavoro è finito (revisione 2026-07-28).
- Model Context Protocol, Schema Reference Una chiamata a uno strumento porta un nome e degli argomenti, senza chiave di idempotenza; l’annotazione idempotentHint, e le annotazioni sono solo suggerimenti (revisione 2026-07-28).
- Model Context Protocol, Tasks Un handle durevole per le operazioni lunghe, interrogato e recuperato dopo una riconnessione; devono aderire entrambe le parti.
- Claude Code, Connect Claude Code to tools via MCP Il timeout per server, il timer di 60 secondi per richiesta per i server remoti, la finestra di inattività, lo spostamento in background dopo due minuti.
- Claude Code, Environment variables MCP_TOOL_TIMEOUT, MCP_TIMEOUT, CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT e CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS, con i valori predefiniti.
- Cursor, Model Context Protocol (MCP) Una chiamata MCP fallita viene segnata come tale nella chat; riprova o controlla i log; non viene descritta nessuna impostazione di timeout.
- Stripe, Idempotent requests Come funziona una chiave di idempotenza: il primo risultato viene salvato e restituito di nuovo; le chiavi durano almeno 24 ore; gli altri parametri vengono rifiutati.
- Stripe, Advanced error handling Dopo che una connessione si interrompe, potresti non sapere se la richiesta è stata eseguita; un errore del server è un esito sconosciuto; nessuna chiave nuova prima di conoscere l’esito.
- IETF, RFC 9110: HTTP Semantics I metodi idempotenti (metodi sicuri, PUT e DELETE), e non riprovare una richiesta non idempotente a meno che tu non possa stabilire che la prima non è mai stata applicata.
- Delta MCP, Writing a task Cosa fa Delta MCP quando una modifica non riceve risposta: fatta, non fatta o esito sconosciuto; un invio non viene rinviato da solo.
- Delta MCP, Activity and Undo Ogni task che ha cambiato qualcosa resta in Activity, con ogni modifica prima e dopo.
Continua a leggere
- Come annullare le modifiche dell’IA in Notion, GitHub e fileUn agente IA ha modificato o eliminato qualcosa? Vedi cosa è cambiato, annullalo in Notion, GitHub o nei file e scopri cosa non si può riportare indietro.
- MCP vs CLI per agenti IA: da dove viene il costo in tokenMCP o CLI per il tuo agente IA? Cosa costa ciascuno in token, cosa mostrano le misure, quando vince una CLI, quando vince MCP e dove il codice batte entrambi.