MCP: pass protocol cancellation through to Sentry API requests

Offen
#2,275 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
65/100
Issue-Typ
Feature
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
typescript
Bereich
tooling

Rechercherichtung

Start at handleToolCall in packages/mcp-core/src/server.ts (around line 410) and trace how the tool context is built, then follow how the API client is constructed from it. The reference behavior is the shared transport in @sentry/api (transport.ts, test/cancellation.test.ts), which already honors per-request signals and stops retry backoff. Thread extra.signal through the context and every API call including polling and retry waits, recognizing cancellation by signal.aborted/abort reason. Done when a new test cancels an in-flight call, asserts no further API requests, and concurrent calls still complete.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

When an MCP client cancels a tool call, the work keeps running. handleToolCall in packages/mcp-core/src/server.ts only takes params, so the SDK's extra.signal never reaches the tool context, the API client or its polling and retry waits.

The transport side is already done in @sentry/api. Its shared transport, which MCP uses since getsentry/toolkit#1722, honors per-request signals and stops retry backoff on abort (transport.ts, covered by test/cancellation.test.ts, from getsentry/sentry-api-schema#105).

What's left:

  • Thread extra.signal from the tool handler into the invocation context and every API call the tool makes, including polling and retry waits.
  • Keep cancellation scoped to the one invocation, so concurrent calls on the same server keep running.
  • Recognize cancellation by signal.aborted and the abort reason, not only error.name === "AbortError", since MCP reasons can be strings.
  • Add a test that cancels an in-flight tool call and checks that no further API requests go out.

Split out of getsentry/sentry-api-schema#95.

via @BYK.

--

View Session [Sentry]

Vorherrschende Sprache
TypeScript
Sterne
961
Forks
179
Ø Merge
15 Std. 33 Min.
Gemergte PRs (30 T.)
476

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus getsentry/toolkit

Alle Issues in getsentry/toolkit

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.