Η σύντομη απάντηση
Όταν μια κλήση εργαλείου MCP λήγει με timeout, δεν μπορείτε να ξέρετε αν έγινε η αλλαγή. Το AI σας μπορεί να έχει χάσει την απάντηση, όχι τη δουλειά. Ελέγξτε πριν ξαναδοκιμάσετε: κοιτάξτε στο εργαλείο τι προσπάθησε να φτιάξει. Ξαναδοκιμάστε μόνο αν λείπει. Μην ξαναστέλνετε ποτέ μια αποστολή μόνοι σας.
Σε αυτόν τον οδηγό
Γιατί ένα timeout δεν σας λέει αν έγινε η αλλαγή;
Το AI σας ζήτησε από ένα εργαλείο να κάνει μια αλλαγή, και μετά περίμενε. Δεν ήρθε καμία απάντηση, οπότε η εφαρμογή AI σας σταμάτησε να περιμένει και ανέφερε αποτυχία. Αυτή η ετικέτα περιγράφει την αναμονή, όχι την αλλαγή. Αν ξαναδοκιμάσετε μια αλλαγή που έχει ήδη γίνει, θα έχετε δύο tickets, δύο σελίδες ή δύο μηνύματα.
Οι developers λένε εγγραφή μια τέτοια αλλαγή. Τρία πράγματα μπορεί να έχουν συμβεί.
| Τι συνέβη | Είναι η αλλαγή στο εργαλείο; | Αν ξαναδοκιμάσετε |
|---|---|---|
| Το αίτημα δεν έφτασε ποτέ. | Όχι. | Σωστή επιλογή: η αλλαγή γίνεται μία φορά. |
| Το εργαλείο εξακολουθεί να δουλεύει. | Όχι ακόμη. Εμφανίζεται αφού το AI σας σταματήσει να περιμένει. | Η αλλαγή γίνεται δύο φορές, εκτός αν η επανάληψη είναι αβλαβής. |
| Το εργαλείο τελείωσε, και η απάντηση χάθηκε. | Ναι. | Η αλλαγή γίνεται δύο φορές, εκτός αν η επανάληψη είναι αβλαβής. |
Η προδιαγραφή του MCP το προβλέπει. Ένας client πρέπει να ορίζει timeout σε κάθε αίτημα και, όταν λήξει, να ακυρώνει το αίτημα και να σταματά να περιμένει. Η ακύρωση δεν είναι εγγύηση. Ο server μπορεί να την αγνοήσει, όταν η δουλειά έχει ολοκληρωθεί ή δεν μπορεί να σταματήσει. Μπορεί επίσης να φτάσει αφού έχει σταλεί η απάντηση.
Ο οδηγός API του Stripe λέει το ίδιο: αφού αποτύχει μια σύνδεση, μπορεί να μην ξέρετε αν εκτελέστηκε το αίτημα. Σας λέει να αντιμετωπίζετε και ένα σφάλμα server ως άγνωστο αποτέλεσμα.
Τι να κάνετε μετά από timeout, με τη σειρά;
Κάντε αυτά με τη σειρά. Τα πρώτα δύο θέλουν ένα λεπτό.
- Σταματήστε τη νέα δοκιμήΤώρα
Πείτε στο AI σας να μην επαναλάβει την κλήση: «Μην ξαναδοκιμάσετε. Ελέγξτε πρώτα αν έγινε.» Μια ξαναδοκιμή από μόνη της είναι ο τρόπος να γίνει μια αλλαγή δύο φορές.
- Κοιτάξτε στο εργαλείο, όχι στη συνομιλία1 λεπτό
Ανοίξτε το ίδιο το εργαλείο: τη σελίδα του Notion, τα issues του GitHub, τον φάκελο. Ψάξτε τον τίτλο ή το id που ζητήσατε. Η συνομιλία ξέρει μόνο ότι η κλήση απέτυχε.
- Διαβάστε τι βρίσκετε2 λεπτά
Βρέθηκε και είναι πλήρης: η αλλαγή έγινε. Συνεχίστε και μην την επαναλάβετε.
Βρέθηκε, ημιτελής: συμπληρώστε το κομμάτι που λείπει με μια ενημέρωση, όχι με νέα δημιουργία.
Δεν βρέθηκε: δεν έφτασε ποτέ, ή εξακολουθεί να τρέχει. Περιμένετε ένα λεπτό και κοιτάξτε ξανά. - Ξαναδοκιμάστε μία φορά, και μόνο μια ασφαλή κλήσηΈπειτα
Αν λείπει ακόμη, ξαναδοκιμάστε μία φορά. Ο πίνακας παρακάτω λέει ποιες κλήσεις είναι ασφαλείς για επανάληψη. Πριν από μια αποστολή, δείτε πού καταλήγει.
- Αν συνεχίζει να λήγει, διορθώστε την αιτίαΜετά
Μια κλήση που λήγει πάντα έχει όριο πολύ μικρό ή δουλειά πολύ μεγάλη. Αυξήστε το όριο για αυτόν τον server, ή ζητήστε λιγότερα ανά κλήση.
Ποιες κλήσεις είναι ασφαλείς για επανάληψη;
Μια κλήση είναι ασφαλής για επανάληψη όταν, αν γίνει δύο φορές, το αποτέλεσμα είναι ίδιο με μία φορά. Οι αναγνώσεις πληρούν αυτή τη συνθήκη. Πολλές αλλαγές δεν την πληρούν. Το πρότυπο HTTP θεωρεί το PUT (ορισμός τιμής) και το DELETE ασφαλή για επανάληψη, και οι γραμμές παρακάτω το ακολουθούν. Το idempotentHint ή η περιγραφή ενός εργαλείου υπερισχύει αυτών.
| Η κλήση | Επανάληψη όπως είναι; | Έλεγχος πρώτα με |
|---|---|---|
| Ανάγνωση: αναζήτηση, λίστα, άνοιγμα | Ναι. Δεν αλλάζει τίποτα. | Τίποτα να ελέγξετε. |
| Ορισμός τιμής: κατάσταση, τίτλος, ετικέτα | Συνήθως. Ο ορισμός της ίδιας τιμής δύο φορές δίνει το ίδιο αποτέλεσμα, όπως ένα HTTP PUT. | Διαβάζοντας το πεδίο. Αν κάποιος το άλλαξε στο μεταξύ, η ξαναδοκιμή αντικαθιστά την επεξεργασία του. |
| Προσθήκη σε κάτι: ένα σχόλιο, μια σειρά πίνακα, μια γραμμή | Όχι. Δύο φορές το προσθέτει δύο φορές. | Ανοίγοντας το στοιχείο και ψάχνοντας την προσθήκη σας. |
| Δημιουργία: μια σελίδα, ένα issue, ένα αρχείο | Όχι. Μια ξαναδοκιμή φτιάχνει δεύτερο. | Ψάχνοντας με τον τίτλο ή το id που δώσατε. Ξαναδοκιμάστε μόνο αν δεν ταιριάζει τίποτα. |
| Διαγραφή | Συνήθως, όταν ορίζει ένα συγκεκριμένο στοιχείο, όπως ένα HTTP DELETE. Όχι «το τελευταίο»: η δεύτερη κλήση αφορά άλλο στοιχείο. | Ψάχνοντας το στοιχείο. Αν έχει φύγει, έχει γίνει. |
| Αποστολή: ένα μήνυμα, ένα email, μια ειδοποίηση | Ποτέ μόνοι σας. Μια αποστολή δεν μπορεί να αναιρεθεί. | Ψάχνοντας πού κατέληξε: τη λίστα με τα απεσταλμένα, το κανάλι, την άλλη πλευρά. Αν δεν μπορείτε να το διαπιστώσετε, ρωτήστε πριν στείλετε ξανά. |
Μπορεί ένα idempotency key να σταματήσει τη διπλή εκτέλεση;
Μερικές φορές. Ένα idempotency key είναι μια μοναδική ετικέτα που στέλνεται μαζί με ένα αίτημα. Αν η ίδια ετικέτα φτάσει δύο φορές, η υπηρεσία κάνει τη δουλειά μία φορά και επαναλαμβάνει την πρώτη της απάντηση. Είναι φτιαγμένο για αίτημα που δεν πήρε απάντηση.
- Πώς λειτουργεί ένα key στο Stripe. Το API v1 του δέχεται key σε αιτήματα
POST. Αποθηκεύει το πρώτο αποτέλεσμα, ακόμη κι αν είναι σφάλμα, και το επιστρέφει ξανά σε μια ξαναδοκιμή με το ίδιο key. Κρατά τα keys τουλάχιστον 24 ώρες. Το ίδιο key με άλλες παραμέτρους απορρίπτεται. - Τι πρέπει να κάνει μια ξαναδοκιμή. Στείλτε το ίδιο key και τις ίδιες παραμέτρους. Το Stripe λέει να μην ξαναδοκιμάζετε με νέο key, μέχρι να ξέρετε το πρώτο αποτέλεσμα. Ένα νέο key σε κάθε προσπάθεια δεν προσφέρει καμία προστασία.
- Τι σας δίνει το MCP. Ένα αίτημα
tools/callφέρνει το όνομα ενός εργαλείου και τα ορίσματά του. Το σχήμα της προδιαγραφής δεν ορίζει idempotency key γι’ αυτό. Ένα εργαλείο μπορεί παρ’ όλα αυτά να δεχτεί ένα ως δικό του όρισμα, γι’ αυτό διαβάστε τα ορίσματά του. - Τι μπορεί να δηλώσει ένα εργαλείο. Το
idempotentHintλέει ότι η νέα κλήση του εργαλείου με τα ίδια ορίσματα δεν έχει επιπλέον επίδραση. Είναι μόνο μια ένδειξη. Η προδιαγραφή λέει ότι οι clients δεν πρέπει ποτέ να βασίζουν αποφάσεις σε ενδείξεις από servers που δεν εμπιστεύονται.
Άρα το key είναι επιπλέον προστασία, όχι σχέδιο. Όταν το εργαλείο δεν προσφέρει κανένα, ο παραπάνω έλεγχος σας προστατεύει.
Πώς αλλάζετε το timeout του MCP;
Ένα όριο πολύ μικρό κόβει δουλειά που θα ολοκληρωνόταν κανονικά. Ένα πολύ μεγάλο σας αφήνει να περιμένετε. Πού το ορίζετε εξαρτάται από την εφαρμογή AI σας. Εδώ είναι οι ρυθμίσεις του Claude Code.
| Ρύθμιση | Τι περιορίζει | Προεπιλογή |
|---|---|---|
MCP_TOOL_TIMEOUT | Πόση ώρα μπορεί να τρέχει μία κλήση εργαλείου, σε χιλιοστά του δευτερολέπτου. | 100.000.000 ms, περίπου 28 ώρες |
timeout στο .mcp.json | Το ίδιο, για έναν server. Παρακάμπτει τη μεταβλητή για αυτόν τον server. Σκληρό όριο: οι ειδοποιήσεις προόδου δεν το επεκτείνουν. | Η τιμή της μεταβλητής |
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT | Πόση ώρα μπορεί μια κλήση να μένει σιωπηλή, χωρίς απάντηση και χωρίς πρόοδο, πριν διακοπεί. Το 0 απενεργοποιεί τον έλεγχο. | 5 λεπτά για servers δικτύου, 30 λεπτά για stdio |
MCP_TIMEOUT | Η εκκίνηση ενός server. Για απομακρυσμένο server, μετράει και στο χρονόμετρο ανά αίτημα που ακολουθεί. | 30.000 ms, 30 δευτερόλεπτα |
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS | Πότε μια κλήση που τρέχει ακόμη στην κύρια συνομιλία μεταφέρεται σε εργασία στο παρασκήνιο. Το 0 την απενεργοποιεί. Έκδοση 2.1.212 ή νεότερη. | 120.000 ms, 2 λεπτά |
Η προεπιλογή των 60 δευτερολέπτων για απομακρυσμένους servers. Ένας server που προσεγγίζεται μέσω HTTP, SSE ή ως connector του claude.ai έχει δεύτερο χρονόμετρο. Τρέχει σε κάθε αίτημα μέχρι το πρώτο byte της απάντησης του server. Διαρκεί 60 δευτερόλεπτα, εκτός αν έχουν οριστεί υψηλότερα το MCP_TOOL_TIMEOUT, το timeout του server ή το MCP_TIMEOUT. Οι τοπικοί servers stdio δεν έχουν χρονόμετρο ανά αίτημα.
Για να το ορίσετε για έναν server, προσθέστε "timeout": 600000 στην καταχώρισή του στο .mcp.json. Είναι δέκα λεπτά.
Μια αργή κλήση δεν είναι πάντα αποτυχημένη. Από την έκδοση 2.1.212, το Claude Code μεταφέρει μια κλήση MCP στην κύρια συνομιλία σε εργασία στο παρασκήνιο μετά από δύο λεπτά. Παραδίδει το αποτέλεσμα όταν τελειώσει η κλήση.
Η τεκμηρίωση MCP του Cursor δεν περιγράφει καμία ρύθμιση timeout. Η προδιαγραφή του MCP δεν ορίζει αριθμό. Λέει ότι τα SDK πρέπει να σας επιτρέπουν να ρυθμίζετε timeouts ανά αίτημα, και ότι ένας client πρέπει πάντα να κρατά ένα μέγιστο όριο.
Για δουλειά που παίρνει λεπτά, ένας server μπορεί να χρησιμοποιήσει τα MCP Tasks. Επιστρέφει αμέσως ένα αναγνωριστικό, και ο client ελέγχει επανειλημμένα για το αποτέλεσμα, ακόμη κι αφού ξανασυνδεθεί. Και οι δύο πλευρές πρέπει να το υποστηρίζουν, και η υποστήριξη από τους clients ποικίλλει.
Τι κάνει το Delta MCP όταν χάνεται μια απάντηση;
Το Delta MCP είναι μια δωρεάν εφαρμογή στον υπολογιστή σας, ανάμεσα στο AI σας και στα εργαλεία του. Όταν μια αλλαγή δεν παίρνει απάντηση, δεν μαντεύει και δεν ξαναδοκιμάζει απλώς. Διαβάζει το εργαλείο.
Πριν φύγει μια αλλαγή, το Delta MCP διαλέγει μια ανάγνωση που μπορεί να δείξει αν έγινε. Αυτή η ανάγνωση είναι το αντικείμενο διαβασμένο ξανά, ή μια λίστα διαβασμένη ξανά. Όταν δεν έρχεται απάντηση, την τρέχει αμέσως. Αυτό που δείχνει η ανάγνωση αποφασίζει:
| Η ανάγνωση δείχνει | Το Delta MCP |
|---|---|
| Η αλλαγή έγινε. | Η εργασία συνεχίζει, και η απάντηση λέει ότι ελέγχθηκε. |
| Η αλλαγή δεν έγινε. | Στέλνει ξανά την αλλαγή μία φορά, με τα ίδια ορίσματα. Ποτέ δεν το κάνει μόνο του για μήνυμα ή άλλη αποστολή. Γι’ αυτές, η απάντηση λέει not seen, ότι μπορεί ακόμη να εμφανιστεί, και η εργασία σταματά. |
| Δεν είναι σαφές, ή δεν μπορεί να διαβαστεί τίποτα για να το δείξει. | Η απάντηση λέει outcome unknown, και γιατί. Η εργασία σταματά. Κοιτάξτε το εργαλείο πριν κάνετε ξανά την αλλαγή. |
Μια κλήση εργαλείου όπως έγινε δεν μπορεί να αναιρεθεί από το Delta MCP. Αν μια προηγούμενη κλήση πέτυχε, μένει γίνει, και η απάντηση την αναφέρει ώστε το AI σας να μην την επαναλάβει. Κάθε εργασία που αλλάζει κάτι καταγράφεται στο Activity, με κάθε αλλαγή πριν και μετά.
Πώς ελέγχεται και εφαρμόζεται μια εργασία
Ερωτήσεις
Είναι ασφαλές να ξαναδοκιμάσω μια κλήση εργαλείου MCP μετά από timeout;
Μια ανάγνωση είναι. Μια αλλαγή δεν είναι, μέχρι να ελέγξετε. Το timeout λέει μόνο ότι δεν ήρθε απάντηση· το εργαλείο μπορεί να έκανε την αλλαγή παρ’ όλα αυτά. Κοιτάξτε το εργαλείο, και ξαναδοκιμάστε μόνο αν λείπει. Μην ξαναστέλνετε ποτέ μια αποστολή μόνοι σας.
Έγινε τελικά η εγγραφή MCP μου αν έληξε το αίτημα;
Από το timeout δεν μπορείτε να το διακρίνετε. Το αίτημα μπορεί να μην έφτασε ποτέ, το εργαλείο μπορεί να δουλεύει ακόμη, ή μπορεί να τελείωσε και η απάντηση να χάθηκε. Ανοίξτε το εργαλείο και ψάξτε την αλλαγή.
Πώς αυξάνω το timeout του εργαλείου MCP στο Claude Code;
Ορίστε το MCP_TOOL_TIMEOUT σε χιλιοστά του δευτερολέπτου, ή προσθέστε ένα πεδίο timeout στην καταχώριση του server στο .mcp.json. Για απομακρυσμένο server, ορίστε το πάνω από 60000 για να αρθεί το χρονόμετρο ανά αίτημα των 60 δευτερολέπτων. Το MCP_TIMEOUT είναι η αναμονή εκκίνησης, όχι το όριο κλήσης εργαλείου.
Πώς αλλάζω το timeout του MCP στο Cursor;
Η τεκμηρίωση MCP του Cursor δεν περιγράφει καμία ρύθμιση timeout. Λέει ότι μια αποτυχημένη κλήση σημειώνεται ως αποτυχημένη στη συνομιλία, και ότι μπορείτε να ξαναδοκιμάσετε ή να δείτε τα αρχεία καταγραφής. Ελέγξτε πρώτα τι έχει αποθηκεύσει το εργαλείο.
Έχει το MCP idempotency keys;
Όχι. Μια κλήση εργαλείου φέρνει όνομα εργαλείου και ορίσματα, και το σχήμα της προδιαγραφής δεν ορίζει idempotency key γι’ αυτή. Ένα εργαλείο μπορεί να δεχτεί δικό του key ως όρισμα. Μπορεί επίσης να ορίσει το idempotentHint, που είναι μόνο μια ένδειξη.
Τι κάνει το Delta MCP όταν μια κλήση εργαλείου δεν παίρνει απάντηση;
Διαβάζει αμέσως το εργαλείο για να δει αν έγινε η αλλαγή. Έγινε: η εργασία συνεχίζει. Δεν έγινε: στέλνει ξανά την αλλαγή. Ένα μήνυμα ή άλλη αποστολή δεν ξαναστέλνεται ποτέ μόνη της. Δεν είναι σαφές: η απάντηση λέει outcome unknown, και η εργασία σταματά.
Πηγές
- Model Context Protocol, Cancellation Οι clients πρέπει να ορίζουν timeouts, να ακυρώνουν και να σταματούν να περιμένουν· μια ακύρωση μπορεί να φτάσει αφού τελειώσει η δουλειά (αναθεώρηση 2026-07-28).
- Model Context Protocol, Schema Reference Μια κλήση εργαλείου φέρνει όνομα και ορίσματα, χωρίς idempotency key· η ετικέτα idempotentHint, και οι ετικέτες είναι μόνο ενδείξεις (αναθεώρηση 2026-07-28).
- Model Context Protocol, Tasks Ένα σταθερό αναγνωριστικό για μακρές λειτουργίες, που ελέγχεται και ανακτάται μετά από νέα σύνδεση· και οι δύο πλευρές πρέπει να το επιλέξουν.
- Claude Code, Connect Claude Code to tools via MCP Το timeout ανά server, το χρονόμετρο των 60 δευτερολέπτων ανά αίτημα για απομακρυσμένους servers, το παράθυρο αδράνειας, η μεταφορά στο παρασκήνιο μετά από δύο λεπτά.
- Claude Code, Environment variables MCP_TOOL_TIMEOUT, MCP_TIMEOUT, CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT και CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS, με τις προεπιλογές τους.
- Cursor, Model Context Protocol (MCP) Μια αποτυχημένη κλήση MCP σημειώνεται ως αποτυχημένη στη συνομιλία· ξαναδοκιμάστε ή δείτε τα αρχεία καταγραφής· καμία ρύθμιση timeout δεν περιγράφεται.
- Stripe, Idempotent requests Πώς λειτουργεί ένα idempotency key: το πρώτο αποτέλεσμα αποθηκεύεται και επιστρέφεται ξανά· τα keys διαρκούν τουλάχιστον 24 ώρες· άλλες παράμετροι απορρίπτονται.
- Stripe, Advanced error handling Μετά από αποτυχία σύνδεσης μπορεί να μην ξέρετε αν εκτελέστηκε το αίτημα· ένα σφάλμα server είναι άγνωστο αποτέλεσμα· κανένα νέο key πριν γίνει γνωστό το αποτέλεσμα.
- IETF, RFC 9110: HTTP Semantics Οι idempotent μέθοδοι (ασφαλείς μέθοδοι, PUT και DELETE), και να μην ξαναδοκιμάζετε ένα μη idempotent αίτημα, εκτός αν μπορείτε να διαπιστώσετε ότι το πρώτο δεν εφαρμόστηκε ποτέ.
- Delta MCP, Writing a task Τι κάνει το Delta MCP όταν μια αλλαγή δεν παίρνει απάντηση: έγινε, δεν έγινε ή outcome unknown· μια αποστολή δεν ξαναστέλνεται μόνη της.
- Delta MCP, Activity and Undo Κάθε εργασία που άλλαξε κάτι καταγράφεται στο Activity, με κάθε αλλαγή πριν και μετά.
Συνεχίστε το διάβασμα
- Πώς να αναιρέσετε τις αλλαγές ενός AI agentΤο AI agent σας άλλαξε ή διέγραψε κάτι; Δείτε τι άλλαξε, αναιρέστε το στο Notion, στο GitHub ή στα αρχεία σας, και μάθετε τι δεν μπορεί ποτέ να αναιρεθεί.
- MCP vs CLI για AI agents: από πού έρχεται το κόστος tokensMCP ή CLI για τον AI agent σας; Τι κοστίζει το καθένα σε tokens, τι δείχνουν οι μετρήσεις, πότε κερδίζει το CLI, πότε το MCP και πού τα ξεπερνά ο κώδικας.