Skip to content

Conversation

@LucaButBoring
Copy link
Contributor

@LucaButBoring LucaButBoring commented Oct 23, 2025

This PR implements the required changes for modelcontextprotocol/modelcontextprotocol#1686, which adds task augmentation to requests.

Motivation and Context

The current MCP specification supports tool calls that execute a request and eventually receive a response, and tool calls can be passed a progress token to integrate with MCP’s progress-tracking functionality, enabling host applications to receive status updates for a tool call via notifications. However, there is no way for a client to explicitly request the status of a tool call, resulting in states where it is possible for a tool call to have been dropped on the server, and it is unknown if a response or a notification may ever arrive. Similarly, there is no way for a client to explicitly retrieve the result of a tool call after it has completed — if the result was dropped, clients must call the tool again, which is undesirable for tools expected to take minutes or more. This is particularly relevant for MCP servers abstracting existing workflow-based APIs, such as AWS Step Functions, Workflows for Google Cloud, or APIs representing CI/CD pipelines, among other applications.

This proposal (and implementation) solves this by introducing the concept of Tasks, which are pending work objects that can augment any other request. Clients generate a task ID and augment their request with it — that task ID is both a reference to the request and an idempotency token. If the server accepts the task augmentation request, clients can then poll for the status and eventual result of the task with the tasks/get and tasks/result operations.

How Has This Been Tested?

Unit tests and updated sHTTP example.

Breaking Changes

None.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Copy link

@halter73 halter73 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SEP-1686 currently states that it "introduces a mechanism for requestors (which can be either clients or servers, depending on the direction of communication) to augment their requests with tasks." Is this still the case?

I don't see any tests or examples demonstrating using a TaskStore with an McpClient (it's all McpServer or the Protocol base type), although I suppose it should work considering its shared code. It still might be nice to have an end-to-end test demonstrating that client-side support for stuff like elicitations works using the public APIs.

* Note: This is not suitable for production use as all data is lost on restart.
* For production, consider implementing TaskStore with a database or distributed cache.
*/
export class InMemoryTaskStore implements TaskStore {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason we cannot create a default in-memory task store with settable max limits on the total number of tasks?

I like that this PR adds the TaskStore abstraction which opens the door for a distributed implementation and doesn't require the application developer to manually handle tasks/get, tasks/list, etc., but it feels weird to me to not have a production-ready in-memory solution provided by the SDK.

It should still be off by default to make sure people are explicit about any maxTrackedTask limits and the like, but it should be built in and not left to an example that is "not suitable for production." This will prove it's possible to implement a production-quality TaskStore in the easiest case where everything is tracked in-memory and lost on process restart.

  • Note: This is not suitable for production use as all data is lost on restart.
  • For production, consider implementing TaskStore with a database or distributed cache.

This is true, but I think the impact is overstated. The logic in protocol.ts that calls _taskStore.updateTaskStatus(taskMetadata.taskId, 'input_required'); and then sets the task back to 'working' when the a request completes also breaks if the server restarts. If the process exits before the client provides a response, the task will be permanently left in an 'input_required' state indefinitely without some manual intervention outside of the SDK.

In most cases supported by the SDK, when tasks cannot outlive the MCP server process, an in-memory TaskStore would be better than a distributed one because the client will be informed that the Task is no longer being tracked by the server after it restarts automatically.

Copy link
Contributor Author

@LucaButBoring LucaButBoring Oct 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't disagree, but precedence was the main reason for leaving this as an example and leaving out any limits, really - it's the same case with InMemoryEventStore and InMemoryOAuthClientProvider. @ihrpr @felixweinberger any input here?

Copy link
Contributor Author

@LucaButBoring LucaButBoring Oct 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the SDK is going to provide a production-grade implementation, it needs to have limits and some form of logging extension points, but if it is not going to provide a production-grade implementation, I don't want to misrepresent this example as one.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can never implement a production-ready service implementation, because that will always require some additional resources

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems right to me to have this as an interface - it seems hard to provide a generic "production-ready" approach here; I guess we could use sqlite? But I think the argument witht he InMemoryEventStore and InMemoryOAuthClientProvider are convincing. If we wanted to create production ready examples, we can do that as follow-ups.

However, it's important this is documented clearly, which it is in the README.

@LucaButBoring
Copy link
Contributor Author

LucaButBoring commented Oct 31, 2025

It still might be nice to have an end-to-end test demonstrating that client-side support for stuff like elicitations works using the public APIs.

Agreed, will add this.

edit: Done

@felixweinberger
Copy link
Contributor

felixweinberger commented Nov 25, 2025

@maxisbey @LucaButBoring I tested TS <> Py. The following worked:

  1. TS Client -> TS Server
  2. Py Client -> Py Server
  3. TS Client -> Py Server

But this didn't work:

  1. Py Server -> TS Client

To make this work cleanly I had to make 2 small changes:

Then I get this:

CleanShot 2025-11-25 at 18 33 18

@LucaButBoring
Copy link
Contributor Author

TS SDK fix is in: 681cf0d

@felixweinberger
Copy link
Contributor

TS SDK fix is in: 681cf0d

Gonna test elicitation examples as well, assuming that works fine I think we should get this landed.

LucaButBoring and others added 5 commits November 26, 2025 10:18
Responses and errors were incorrectly going through the original stream path instead of being queued. Also, extra.sendRequest was not setting the input_required status. These issues have been fixed and tests have been added/updated for them.

Sequence diagram of the intended flow:

```mermaid
sequenceDiagram
    participant C as Client Protocol
    participant CT as Client Transport
    participant ST as Server Transport
    participant S as Server Protocol
    participant TQ as TaskMessageQueue
    participant TS as TaskStore
    participant H as Async Handler

    Note over C,H: Phase 1: Task Creation
    activate C
    C->>CT: tools/call { task: { ttl: 60000 } }
    activate CT
    CT->>ST: HTTP POST
    activate ST
    ST->>S: _onrequest()
    activate S
    S->>TS: createTask()
    activate TS
    TS-->>S: Task { taskId, status: 'working' }
    deactivate TS
    S--)H: Start async handler (non-blocking)
    activate H
    S-->>ST: CreateTaskResult { task }
    deactivate S
    ST-->>CT: HTTP Response
    deactivate ST
    CT-->>C: CreateTaskResult
    deactivate CT
    deactivate C

    Note over C,H: Phase 2: Server Queues Elicitation Request
    H->>S: extra.sendRequest(elicitation, { relatedTask })
    activate S
    S->>TQ: enqueue({ type: 'request', message: elicitation })
    activate TQ
    TQ-->>S: OK
    deactivate TQ
    S->>S: Store resolver in _requestResolvers
    Note over S: Promise waiting...
    deactivate S
    H->>TS: updateTaskStatus('input_required')
    activate TS
    TS-->>H: OK
    deactivate TS
    Note over H: Blocked awaiting elicitation response

    Note over C,H: Phase 3: Client Polls Status
    activate C
    C->>CT: tasks/get { taskId }
    activate CT
    CT->>ST: HTTP POST
    activate ST
    ST->>S: _onrequest(GetTask)
    activate S
    S->>TS: getTask(taskId)
    activate TS
    TS-->>S: Task { status: 'input_required' }
    deactivate TS
    S-->>ST: Task
    deactivate S
    ST-->>CT: HTTP Response
    deactivate ST
    CT-->>C: Task { status: 'input_required' }
    deactivate CT
    deactivate C

    Note over C,H: Phase 4: Client Fetches Queued Messages
    activate C
    C->>CT: tasks/result { taskId }
    activate CT
    CT->>ST: HTTP POST
    activate ST
    ST->>S: _onrequest(GetTaskPayload)
    activate S
    S->>TQ: dequeue(taskId)
    activate TQ
    TQ-->>S: { type: 'request', message: elicitation }
    deactivate TQ
    S->>ST: send(elicitation, { relatedRequestId })
    ST-->>CT: SSE Event: elicitation request
    Note over S: Handler blocks (task not terminal)

    Note over C,H: Phase 5: Client Handles & Responds
    CT->>C: _onrequest(elicitation)
    activate C
    Note over C: Extract relatedTaskId from _meta
    C->>C: Call ElicitRequestSchema handler
    C->>C: Check: relatedTaskId && _taskMessageQueue
    Note over C: _taskMessageQueue is undefined
    C->>CT: transport.send(response)
    CT->>ST: HTTP POST (elicitation response)
    deactivate C

    Note over C,H: Phase 6: Server Receives Response, Resolves Promise
    ST->>S: _onresponse(elicitation response)
    S->>S: Lookup resolver in _requestResolvers
    S->>S: resolver(response)
    Note over S: Promise resolves
    S-->>H: Elicitation result { action: 'accept', content }
    Note over H: Resumes execution

    Note over C,H: Phase 7: Task Completes
    H->>TS: storeTaskResult('completed', finalResult)
    activate TS
    TS-->>H: OK
    deactivate TS
    deactivate H
    Note over S: GetTaskPayload handler wakes up
    S->>TS: getTask(taskId)
    activate TS
    TS-->>S: Task { status: 'completed' }
    deactivate TS
    S->>TS: getTaskResult(taskId)
    activate TS
    TS-->>S: CallToolResult
    deactivate TS
    S-->>ST: Return final result
    deactivate S
    ST-->>CT: SSE Event: CallToolResult
    deactivate ST
    CT-->>C: CallToolResult { content: [...] }
    deactivate CT
    deactivate C
```
felixweinberger and others added 4 commits November 27, 2025 09:04
Phase 1-2 of tasks experimental isolation:
- Create src/experimental/tasks/ directory structure
- Move TaskStore, TaskMessageQueue, and related interfaces to experimental/tasks/interfaces.ts
- Add experimental/tasks/types.ts for re-exporting spec types
- Update shared/task.ts to re-export from experimental for backward compatibility
- Add barrel exports for experimental module

All tests pass (1399 tests).
Restore callTool() to its original implementation instead of delegating
to experimental.tasks.callToolStream(). This aligns with Python SDK's
approach where call_tool() is task-unaware and call_tool_as_task() is
the explicit experimental method.

Changes:
- Add guard for taskSupport: 'required' tools with clear error message
- Restore original output schema validation logic
- Add _cachedRequiredTaskTools to track required-only task tools
- Remove unused takeResult import

Tools with taskSupport: 'optional' work normally with callTool() since
the server returns CallToolResult. Only 'required' tools need the
experimental API.
@LucaButBoring
Copy link
Contributor Author

@felixweinberger Merged and synced with main

@felixweinberger felixweinberger dismissed maxisbey’s stale review November 27, 2025 20:10

Dismissing for merge

@felixweinberger felixweinberger merged commit b9538a2 into modelcontextprotocol:main Nov 27, 2025
6 checks passed
@He-Pin
Copy link

He-Pin commented Nov 27, 2025

nice to see this got merged

MightyPrytanis added a commit to MightyPrytanis/codebase that referenced this pull request Jan 3, 2026
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)


<h3>Snyk has created this PR to upgrade @modelcontextprotocol/sdk from
1.24.0 to 1.24.3.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.

<hr/>


- The recommended version is **3 versions** ahead of your current
version.

- The recommended version was released **a month ago**.



<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>@modelcontextprotocol/sdk</b></summary>
    <ul>
      <li>
<b>1.24.3</b> - <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.24.3">2025-12-04</a></br><h2>What's
Changed</h2>
<ul>
<li>chore: fix dev dependency security vulnerabilities by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3691198208" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1227"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1227/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1227">#1227</a></li>
<li>chore(deps): bump express from 5.0.1 to 5.2.1 in the npm_and_yarn
group across 1 directory by <a class="user-mention notranslate"
data-hovercard-type="organization"
data-hovercard-url="/orgs/dependabot/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/dependabot">@ dependabot</a>[bot] in
<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3691221872" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1228"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1228/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1228">#1228</a></li>
<li>fix: release HTTP connections after POST responses by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3685626979" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1214"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1214/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1214">#1214</a></li>
<li>fix: skip priming events and closeSSEStream for old protocol
versions by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3694335007" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1233"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1233/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1233">#1233</a></li>
<li>chore: bump version for patch release by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3694887719" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1235"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1235/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1235">#1235</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/compare/1.24.2...1.24.3"><tt>1.24.2...1.24.3</tt></a></p>
      </li>
      <li>
<b>1.24.2</b> - <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.24.2">2025-12-03</a></br><h2>What's
Changed</h2>
<ul>
<li>feat: add optional resource annotations by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/vhorvath2010/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/vhorvath2010">@ vhorvath2010</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3436712736" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#954"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/954/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/954">#954</a></li>
<li>chore: refresh CLAUDE.md by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/LucaButBoring/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/LucaButBoring">@ LucaButBoring</a> in
<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3686867636" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1217"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1217/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1217">#1217</a></li>
<li>refactor: make Server class framework-agnostic by moving express to
separate module by <a class="user-mention notranslate"
data-hovercard-type="user" data-hovercard-url="/users/cytle/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/cytle">@ cytle</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3689485567" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1223"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1223/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1223">#1223</a></li>
<li>chore: bump version to 1.24.2 by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/pcarleton/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/pcarleton">@ pcarleton</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3689937597" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1224"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1224/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1224">#1224</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/vhorvath2010/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/vhorvath2010">@ vhorvath2010</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3436712736"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#954"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/954/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/954">#954</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/cytle/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/cytle">@ cytle</a> made their first
contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3689485567"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1223"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1223/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1223">#1223</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/compare/1.24.1...1.24.2"><tt>1.24.1...1.24.2</tt></a></p>
      </li>
      <li>
<b>1.24.1</b> - <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.24.1">2025-12-02</a></br><h2>What's
Changed</h2>
<ul>
<li>fix(streamableHttp): fix infinite retries when maxRetries is set to
0 by <a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mrorigo/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mrorigo">@ mrorigo</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3686035318" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1216"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1216/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1216">#1216</a></li>
<li>chore: update protocol version to 2025-11-25 by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/dsp-ant/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/dsp-ant">@ dsp-ant</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3687018759" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1218"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1218/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1218">#1218</a></li>
<li>chore: bump version for release by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3687067916" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1219"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1219/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1219">#1219</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mrorigo/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mrorigo">@ mrorigo</a> made their
first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3686035318"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1216"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1216/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1216">#1216</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/compare/1.24.0...1.24.1"><tt>1.24.0...1.24.1</tt></a></p>
      </li>
      <li>
<b>1.24.0</b> - <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.24.0">2025-12-02</a></br><h2>Summary</h2>
<p>This release brings us up to speed with the latest MCP spec
<code>2025-11-25</code>. Take a look at the <a
href="https://modelcontextprotocol.io/specification/2025-11-25"
rel="nofollow">latest spec</a> as well as the release <a
href="https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/"
rel="nofollow">blog post.</a></p>
<h2>What's Changed</h2>
<ul>
<li>fix: update spec links from latest to draft by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/domdomegg/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/domdomegg">@ domdomegg</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3664829218" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1171"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1171/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1171">#1171</a></li>
<li>Make sure to consume HTTP error response bodies by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/GreenStage/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/GreenStage">@ GreenStage</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3666874622" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1173"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1173/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1173">#1173</a></li>
<li>docs: add GET request handling for streamableHttp stateless mode by
<a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/saharis9988/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/saharis9988">@ saharis9988</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3660259155" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1161"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1161/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1161">#1161</a></li>
<li>SEP-1686: Tasks by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/LucaButBoring/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/LucaButBoring">@ LucaButBoring</a> in
<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3546900542" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1041"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1041/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1041">#1041</a></li>
<li>Fix JSON parse error on SSE events with empty data by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3672860656" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1184"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1184/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1184">#1184</a></li>
<li>Fix StreamableHTTPClientTransport instantiation by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/yuwzho/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/yuwzho">@ yuwzho</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3420595607" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#944"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/944/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/944">#944</a></li>
<li>feat: eslint rule to prefer node protocols by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3674518488" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1187"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1187/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1187">#1187</a></li>
<li>fix: call tasks/result to deliver side-channel messages by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3672896336" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1185"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1185/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1185">#1185</a></li>
<li>Add invalid_target oauth error (rfc 8707) by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/GreenStage/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/GreenStage">@ GreenStage</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3672704149" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1183"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1183/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1183">#1183</a></li>
<li>fix(client): use StreamableHTTPError instead of plain Error in
send() by <a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/yamadashy/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/yamadashy">@ yamadashy</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3669612690" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1178"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1178/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1178">#1178</a></li>
<li>coerce 'expires_in' to be a number by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/adam-kuhn/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/adam-kuhn">@ adam-kuhn</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3624481815" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1111"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1111/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1111">#1111</a></li>
<li>Allow HTTP issuer URLs when MCP_DEV_MODE is enabled by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jerome3o-anthropic/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/jerome3o-anthropic">@
jerome3o-anthropic</a> in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3675262314"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1189"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1189/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1189">#1189</a></li>
<li>fix: update registerTool signature for proper typed ToolCallback by
<a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3674832778" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1188"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1188/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1188">#1188</a></li>
<li>SEP-1046: Client credentials flow for M2M without user interaction
by <a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/KKonstantinov/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/KKonstantinov">@ KKonstantinov</a> in
<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3655110317" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1157"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1157/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1157">#1157</a></li>
<li>adds the transitive @ types/express-serve-static-core dependency as
a direct devDependency by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/mgyarmathy/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mgyarmathy">@ mgyarmathy</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3584050696" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1078"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1078/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1078">#1078</a></li>
<li>Fix optional argument handling in prompts for Zod V4 by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/filip-bartuska-ipf/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/filip-bartuska-ipf">@
filip-bartuska-ipf</a> in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3680574535"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1199"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1199/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1199">#1199</a></li>
<li>fix hanging stdio servers by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3680985762" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1200"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1200/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1200">#1200</a></li>
<li>README refactor by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/KKonstantinov/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/KKonstantinov">@ KKonstantinov</a> in
<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3679336733" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1197"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1197/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1197">#1197</a></li>
<li>[Docs] Fix typo by <a class="user-mention notranslate"
data-hovercard-type="user" data-hovercard-url="/users/koic/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/koic">@ koic</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3576912671" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1067"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1067/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1067">#1067</a></li>
<li>feat: add closeSSEStream callback to RequestHandlerExtra by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3663783141" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1166"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1166/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1166">#1166</a></li>
<li>fix: improve SSE reconnection behavior by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3675644114" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1191"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1191/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1191">#1191</a></li>
<li>fix: normalize headers in sse transport by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/marcrasi/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/marcrasi">@ marcrasi</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3301818827" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#856"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/856/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/856">#856</a></li>
<li>feat: add closeStandaloneSSEStream for GET stream polling by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3681592788" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1203"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1203/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1203">#1203</a></li>
<li>fix: normalize null to undefined in ElicitResultSchema content field
by <a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3681871133" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1204"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1204/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1204">#1204</a></li>
<li>Modify Origin header validation in validateRequestHeaders
(streamableHttp.ts and sse.ts) to allow requests without an Origin, as
they are not relevant to server DNS rebinding protection. by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jacopoc/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/jacopoc">@ jacopoc</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3682254908" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1205"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1205/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1205">#1205</a></li>
<li>fix: allow zod 4 transformations by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mattzcarey/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mattzcarey">@ mattzcarey</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3685521543" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1213"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1213/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1213">#1213</a></li>
<li>feat: backwards-compatible createMessage overloads for SEP-1577 by
<a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3685389937" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1212"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1212/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1212">#1212</a></li>
<li>chore: bump version for release by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/felixweinberger/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/felixweinberger">@ felixweinberger</a>
in <a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3685838812" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1215"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1215/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1215">#1215</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/GreenStage/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/GreenStage">@ GreenStage</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3666874622"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1173"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1173/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1173">#1173</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/saharis9988/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/saharis9988">@ saharis9988</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3660259155"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1161"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1161/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1161">#1161</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/yuwzho/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/yuwzho">@ yuwzho</a> made their first
contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3420595607"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#944"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/944/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/944">#944</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/yamadashy/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/yamadashy">@ yamadashy</a> made their
first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3669612690"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1178"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1178/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1178">#1178</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/adam-kuhn/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/adam-kuhn">@ adam-kuhn</a> made their
first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3624481815"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1111"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1111/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1111">#1111</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mgyarmathy/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/mgyarmathy">@ mgyarmathy</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3584050696"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1078"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1078/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1078">#1078</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/filip-bartuska-ipf/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/filip-bartuska-ipf">@
filip-bartuska-ipf</a> made their first contribution in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3680574535" data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1199"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1199/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1199">#1199</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/koic/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/koic">@ koic</a> made their first
contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3576912671"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1067"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1067/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1067">#1067</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/marcrasi/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/marcrasi">@ marcrasi</a> made their
first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3301818827"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#856"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/856/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/856">#856</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/jacopoc/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://redirect.github.com/jacopoc">@ jacopoc</a> made their
first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3682254908"
data-permission-text="Title is private"
data-url="modelcontextprotocol/typescript-sdk#1205"
data-hovercard-type="pull_request"
data-hovercard-url="/modelcontextprotocol/typescript-sdk/pull/1205/hovercard"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1205">#1205</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/compare/1.23.0...1.24.0"><tt>1.23.0...1.24.0</tt></a></p>
      </li>
    </ul>
from <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/releases">@modelcontextprotocol/sdk
GitHub release notes</a>
  </details>
</details>

---

> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with
your project.
> - This PR was automatically created by Snyk using the credentials of a
real user.

---

**Note:** _You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs._

**For more information:** <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhMDljYzIxZS1mZjNiLTQzOTEtOGZlZi04NmE4ODU2MDA2YTgiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImEwOWNjMjFlLWZmM2ItNDM5MS04ZmVmLTg2YTg4NTYwMDZhOCJ9fQ=="
width="0" height="0"/>

> - 🧐 [View latest project
report](https://app.snyk.io/org/mightyprytanis/project/eba72b74-6882-414c-8d80-bbb34df62e40?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR
templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/mightyprytanis/project/eba72b74-6882-414c-8d80-bbb34df62e40/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/mightyprytanis/project/eba72b74-6882-414c-8d80-bbb34df62e40/settings/integration?pkg&#x3D;@modelcontextprotocol/sdk&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

[//]: #
'snyk:metadata:{"breakingChangeRiskLevel":null,"FF_showPullRequestBreakingChanges":false,"FF_showPullRequestBreakingChangesWebSearch":false,"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@modelcontextprotocol/sdk","from":"1.24.0","to":"1.24.3"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"a09cc21e-ff3b-4391-8fef-86a8856006a8","prPublicId":"a09cc21e-ff3b-4391-8fef-86a8856006a8","packageManager":"npm","priorityScoreList":[],"projectPublicId":"eba72b74-6882-414c-8d80-bbb34df62e40","projectUrl":"https://app.snyk.io/org/mightyprytanis/project/eba72b74-6882-414c-8d80-bbb34df62e40?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":3,"publishedDate":"2025-12-04T14:35:52.609Z"},"vulns":[]}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement SEP-1686: Tasks

6 participants