Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

After a subscriptions/listen reconnect, how does a client learn about transitions it missed?

未关闭
#24 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
typescript

调研方向

Start with the cited task subscription requirements in specification/2026-07-28/tasks.md, then read the reconnection behavior in basic/patterns/subscriptions.mdx and the SSE note in changelog.mdx. Compare the server-side and client-side proposals, resolve which requirement the specification should adopt, and update the relevant task subscription text so missed transitions are handled after reconnecting.

由索引模型根据 Issue 内容生成。

描述

question
Context
  • notifications/tasks carries a complete DetailedTask, "identical to what tasks/get would have returned at that moment" (specification/2026-07-28/tasks.md:477). Clients "MAY continue polling tasks/get in addition to subscribing … but need not do so" (:505).
  • In core MCP 2026-07-28, an abrupt transport drop ends a subscription (basic/patterns/subscriptions.mdx:125). The client "MAY treat [it] as a trigger to reconnect" (:157-158). On stdio it "MUST re-send subscriptions/listen", and the server "holds no subscription state across reconnections" (:160-162).
  • SSE resumability was removed on purpose in this revision (SEP-2575, changelog.mdx:28). This issue doesn't ask to bring it back. Snapshot notifications make it unnecessary for tasks, with one exception, below.
The gap

A client that follows :505 and relies on notifications alone can do this:

  1. subscriptions/listen with taskIds: [T], and the ack confirms T.
  2. The transport drops.
  3. T moves working → completed (or → input_required) while no stream exists. The notification has nowhere to go.
  4. The client reconnects and re-sends subscriptions/listen for T, and the server acks.
  5. T is terminal, so nothing further ever changes. The client never receives a notification and waits until ttlMs expires.

For input_required, the task also stalls server-side, because the client never sees inputRequests.

Proposal (either line settles it)
  • Server side: "After acknowledging a subscriptions/listen that includes taskIds, the server SHOULD send one notifications/tasks carrying the current DetailedTask for each acknowledged task ID." This is snapshot-on-subscribe, the same shape A2A's SubscribeToTask uses.
  • Client side: "A client that (re-)establishes a subscription MUST call tasks/get once for each task ID in the acknowledgement before relying on notifications alone." This needs no server change and fits the "need not poll" text as long as that text gets this qualifier.

lastUpdatedAt (tasks.md:133) already lets a client discard a stale snapshot if both a poll and a notification arrive, so either option is safe to combine with polling.

主要语言
TypeScript
星标
52
派生
12
平均合并
4 天 23 小时
30 天内合并 PR
4

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

modelcontextprotocol/ext-tasks 的其他 Issue

查看 modelcontextprotocol/ext-tasks 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。