handleAutomaticTaskPolling ignores AbortSignal; cancelled requests poll indefinitely
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
Direzione di ricerca
Inizia in packages/server/src/server/mcp.ts, in handleAutomaticTaskPolling, e confronta il relativo ciclo di polling con il controllo del segnale in taskManager.ts intorno alla riga 856. Conferma che un ctx.mcpReq.signal interrotto arresti il polling con l’errore di annullamento indicato e verifica che il polling delle attività non annullate raggiunga comunque il completamento o il fallimento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Initial Checks
- Using the latest version of MCP TypeScript SDK
- Searched existing issues
Description
In packages/server/src/server/mcp.ts, handleAutomaticTaskPolling contains a while loop (lines 328-335) that polls a task store until completion. The loop never checks ctx.mcpReq.signal.aborted. If the client cancels the request, the poll loop continues consuming server resources indefinitely.
while (task.status !== 'completed' && task.status !== 'failed' && task.status !== 'cancelled') {
await new Promise(resolve => setTimeout(resolve, pollInterval));
const updatedTask = await ctx.task.store.getTask(taskId);
// ...
}
The taskManager.ts implementation of the same pattern correctly checks the signal (line 856):
if (signal.aborted) {
resolver(new ProtocolError(ProtocolErrorCode.InternalError, 'Task cancelled or completed'));
break;
}
Impact
On multi-tenant servers, a single cancelled long-running tool leaks a polling loop per cancelled request. Over time this accumulates.
Suggested fix
while (task.status !== 'completed' && task.status !== 'failed' && task.status !== 'cancelled') {
if (ctx.mcpReq.signal.aborted) {
throw new ProtocolError(ProtocolErrorCode.RequestCancelled, 'Request cancelled during task polling');
}
await new Promise(resolve => setTimeout(resolve, pollInterval));
// ...
}
- Lingua principale
- TypeScript
- Stelle
- 13.4k
- Fork
- 2.2k
- Merge medio
- 4g 18h
- PR unite (30g)
- 6
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/typescript-sdk
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Auth metadata discovery: fallback URL built on resource host instead of authorization-server host Apertav1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
modelcontextprotocol/typescript-sdk#2783 · 1 commento ·
-
v1 v2
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
modelcontextprotocol/typescript-sdk#2773 · 1 commento ·
Tutte le issue di modelcontextprotocol/typescript-sdk
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
mksglu/context-mode#1200 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
anthropics/claude-code#96687 ·
-
good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
AOSSIE-Org/DebateAI#582 · 2 commenti ·
-
📕documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
db-ux-design-system/core-web#8239 ·