GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — [v2] ClientSession runs on JSONRPCDispatcher; BaseSession removed by maxisbey · Pull Request #2838 · modelcontextprotocol/python-sdk

Conversation

@maxisbey

@maxisbey maxisbey commented Jun 11, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

V2 client receive path: Transport -> JSONRPCDispatcher -> ClientSession callbacks, replacing the BaseSession receive loop. Companion to #2710, which did the same for the server seat; BaseSession is now deleted.

Motivation and Context

ClientSession was the last consumer of the v1 BaseSession engine. Moving it onto the dispatcher unifies both seats on one receive path and fixes the v1 client's structural problems: server-initiated requests were handled inline in the receive loop (a slow sampling callback blocked everything, a callback that sent a request deadlocked, and peer cancellation was unactionable), and a raising notification handler could take down the connection.

ClientSession's public surface is unchanged: same constructor, same typed methods, manual initialize(), same context-manager lifecycle. A new keyword-only dispatcher= constructor argument accepts a pre-built dispatcher instead of the stream pair (e.g. DirectDispatcher for in-process embedding).

What changed

  • CallOptions.cancel_on_abandon + suppression: abandoning a request (timeout or caller cancellation) sends a courtesy notifications/cancelled, unless the caller opted out (initialize, which the spec forbids cancelling) or the request carries resumption hints (the peer's work must survive for the resume)
  • The two shielded cancellation-path writes are bounded (5s), so a wedged transport write can no longer hang shutdown or a cancelled caller
  • Spawned notification handlers and the new on_stream_exception observer are contained at the dispatcher: a raising handler costs itself, never the connection (matching the TypeScript/C#/Go engines)
  • ClientSession internals rewritten over the dispatcher; mcp.shared.session shrinks to a compatibility module (ProgressFnT re-export, typing-only RequestResponder stub for MessageHandlerFnT annotations)
  • The dispatcher constructor overloads collapsed via a defaulted TypeVar (PEP 696)
  • Drive-by fix: the standalone SSE writer no longer logs an ERROR traceback when transport teardown closes its stream mid-listen

Parity bar

The transport-parametrized interaction suite passes. Three recorded divergences are now resolved and deleted from the requirements manifest (protocol:timeout:sends-cancellation, protocol:cancel:late-response-ignored, protocol:cancel:server-to-client), and the server-to-client cancellation requirement is pinned by a new test passing over all three transports.

Breaking Changes

Documented in docs/migration.md (one grouped entry):

  • Request ids count from 1 (previously 0); progress tokens follow
  • Timeout error text is now Request 'tools/call' timed out, and a timed-out or abandoned request sends notifications/cancelled, interrupting the server handler
  • Server-initiated requests run concurrently; a server's cancellation now actually interrupts the client callback
  • Notification callbacks are concurrent (no completion-before-response guarantee)
  • Responses with unknown ids are ignored per spec instead of surfacing a RuntimeError to message_handler
  • Unknown inbound methods are answered with METHOD_NOT_FOUND (carrying the method in data), completing Fix unknown-method error code and add a protocol version registry #2836's contract on the client seat
  • A raising request callback is answered with code=0 and the exception text (previously flattened to INVALID_PARAMS)
  • send_request before entering the context manager raises RuntimeError immediately

Fixes #2489. Fixes #2507. Supersedes #2490.

Related, not closed here: #2673 (a raising request callback now answers the server with code=0 and the exception text instead of INVALID_PARAMS; the opt-in propagation of the exception to the local call_tool awaiter that the issue requests stays open as a separate decision) and #2610 (server-seat bug on a code path that no longer exists on main after #2710; still open for v1.x triage — not addressed here).

How Has This Been Tested?

Full suite (1741 tests) including the interaction suite over in-memory, SSE, and streamable HTTP; 100% branch coverage held on all changed files. New tests: courtesy-cancel wire pins and suppression, wedged-transport shutdown bound (trio virtual clock), notification-handler containment, stream-exception observer, the dispatcher= constructor over direct dispatch, server-seat timeout cancellation, abandoned-server-request cancellation, standalone-stream teardown ordering.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • 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

AI Disclaimer

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@maxisbey
maxisbey force-pushed the maxisbey/v2-client-dispatcher-swap branch from aec8155 to a51357c Compare June 11, 2026 17:13
@maxisbey maxisbey mentioned this pull request Jun 11, 2026
Flush the stdio subprocess's coverage data before the clean-exit line #2840
Merged
6 tasks done
@maxisbey
maxisbey marked this pull request as ready for review June 12, 2026 14:29
maxisbey added 20 commits June 12, 2026 15:04
@maxisbey
Add courtesy-cancel controls and bound shielded dispatcher writes
35a3722
- New CallOptions key cancel_on_abandon (default true): abandoning a request
  (timeout or caller cancellation) sends notifications/cancelled unless the
  caller opted out or the request carries resumption hints
- Bound the two shielded cancellation-path writes with a 5s deadline so a
  wedged transport write cannot hang shutdown or a cancelled caller
- Capitalize the connection-closed fan-out message ("Connection closed")
- Pin the server-seat timeout contract in the interaction suite: a timed-out
  server-initiated request is followed by notifications/cancelled
@maxisbey
Contain notification-handler exceptions in the dispatcher
0ac7937
A raising notification handler ran as a bare task in the dispatcher's task
group, so its exception cancelled the read loop and every in-flight request.
Wrap spawned handlers in the same containment boundary progress callbacks
already have: log the failure and keep the connection serving.
@maxisbey
Add an on_stream_exception observer to the dispatcher
aaacafc
Transports yield Exception items on the read stream for connection faults
and parse errors; the dispatcher debug-logged and dropped them. An optional
observer now receives them (awaited in the read loop, contained so a raising
observer costs the item, not the connection). Unset keeps the old behavior.
@maxisbey
Collapse the dispatcher constructor overloads with a defaulted TypeVar
83c4ba7
TransportT now defaults to TransportContext (PEP 696, same pattern as
shared/context.py), so omitting transport_builder no longer needs a
dedicated overload to pin the type parameter.
@maxisbey
Move ClientSession onto JSONRPCDispatcher and delete BaseSession
12c8ef3
ClientSession keeps its public surface (constructor, typed methods, manual
initialize, context-manager lifecycle) but now owns a JSONRPCDispatcher
instead of inheriting the v1 BaseSession receive loop. Server-initiated
requests are answered through the existing callbacks via the closed-union
parse; notifications validate-or-drop and tee to message_handler; transport
exceptions reach message_handler through the dispatcher's stream-exception
observer. A from_dispatcher constructor accepts a pre-built dispatcher for
in-process embedding.

mcp.shared.session shrinks to the surviving names: the ProgressFnT re-export
and a typing-only RequestResponder stub for MessageHandlerFnT annotations.

Behavior changes (deliberate, to be covered in the migration guide):
- request ids count from 1; the progress token follows
- timeouts use the dispatcher error text and send notifications/cancelled,
  so a timed-out server handler is interrupted instead of running on
- responses with unknown ids are ignored per spec instead of surfacing a
  RuntimeError to message_handler
- a raising request callback is answered with code 0 and the exception text
- notification callbacks run concurrently (no completion-before-response)

Three interaction-suite divergence entries are resolved and deleted, and the
server-to-client cancellation requirement is now pinned by a passing test.
@maxisbey
Cover the remaining client-session branches and document the migration
ad471be
Adds tests for ServerMessageMetadata routing, related-request-id
notifications, and params-absent inbound requests over direct dispatch,
plus the migration-guide entry for the ClientSession dispatcher swap.
@maxisbey
Stop logging an error when the standalone SSE stream closes mid-listen
2d4c5cd
Transport teardown closes the standalone stream's send side first, so a
writer parked in receive() ends on a clean end-of-stream; but when teardown
lands while the writer is between dequeues, the next receive() raises
ClosedResourceError, which fell into the catch-all and logged a traceback
at ERROR level for a routine disconnect. Catch it and end quietly. A new
test pins the close ordering that keeps the parked path clean.
@maxisbey
Accept a pre-built dispatcher via a constructor keyword
36a091d
Replaces the from_dispatcher classmethod: read_stream/write_stream become
optional and dispatcher is a keyword-only alternative, with mutual
exclusion validated at construction. Drops the __new__-based alternate
constructor and its shared state-init helper.
@maxisbey
Restore full coverage after the BaseSession deletion
dbd1693
Covers MCPError.from_jsonrpc_error and the context-stream sync close()
methods, whose only exercisers died with BaseSession and its tests, and
restructures three test handler arms that could never take their false
branch.
@maxisbey
Tighten dispatcher abandon-path writes and response invariants
c4720d3
- Bound the timeout-path courtesy cancel like the other abandon writes and
  extract a single _final_write policy: 5s for courtesy cancels, 1s for
  shutdown responses so closing a session stays fast on a wedged transport
- Answer shutdown-interrupted requests with CONNECTION_CLOSED and retire the
  REQUEST_CANCELLED constant (-32002 collides with resource-not-found)
- Key the peer-cancel error response on cancelled_caught so a cancel landing
  after the handler finished cannot produce a second answer for the same id
- Decide outbound metadata and cancel-on-abandon suppression in one place:
  only resumption hints that actually reach the transport suppress the
  courtesy cancel
- Never send notifications/cancelled for a request whose write never completed
- Identity-guard the in-flight pop so a finished handler cannot evict a newer
  entry that reused its request id
- Map request-write stream failures to MCPError(CONNECTION_CLOSED); warn when
  a bounded final write gives up; mark the Dispatcher lifecycle provisional
@maxisbey
Harden ClientSession enter/exit and fault delivery
c67b8d1
- Unwind the entered task group when __aenter__ is cancelled while the
  dispatcher is starting, instead of abandoning its cancel scope
- Deliver transport-level exceptions to message_handler concurrently and
  contained, like notifications, so a handler that awaits session I/O no
  longer deadlocks the read loop
- Route related_request_id=0 correctly in send_notification (ids are opaque)
- Document the dispatcher= constructor path in send_request's contract
@maxisbey
Pin initialize-abandon suppression and tidy the interaction suite
33a5482
- Add an interaction test proving a timed-out initialize sends no
  notifications/cancelled, and drop the stale deferred rationale for the
  initialize-not-cancellable requirement
- Record null-id error-response drops in the requirements manifest and
  describe the cancelled-request error response as applying to both seats
- Record wire messages only after the inner send succeeds, so a failed or
  cancelled write is not logged as sent
- Bound the remaining indefinite waits, refresh comments stale since the
  courtesy-cancel change, and assert the issue-88 timeout by error code
- Rewrite the suite README's concurrency section for the dispatcher model
@maxisbey
Exercise the standalone SSE teardown window deterministically
8786a52
Drive the between-dequeues teardown path directly through the transport's
ASGI entry point with a gated send, so the ClosedResourceError arm is
covered by a real test and no longer needs its coverage pragma. The e2e
teardown test's docstring now claims only what its assertion proves.
@maxisbey
Document the dispatcher behavior changes in the migration guide
0d4762f
@maxisbey
Tighten comments and docstrings across the dispatcher swap
9d4e02e
Cut the comment and docstring volume roughly in half: single-sentence
docstring summaries, Raises sections kept but shortened, inline narration
replaced by one-line statements of the non-inferable constraint, and
development-artifact comments removed. No code changes.
@maxisbey
Remove the client-side related_request_id surface
07f1b6d
ServerMessageMetadata.related_request_id exists for the server's
streamable-HTTP transport to route outbound messages onto the originating
request's SSE stream. No client transport has ever serialized it, so
ClientSession's related_request_id parameter and ServerMessageMetadata
acceptance were dead inheritance from the shared v1 BaseSession.

- send_notification loses its related_request_id parameter
- send_request's metadata narrows to ClientMessageMetadata | None
  (resumption hints, the live part)
- the isinstance(dispatcher) downcasts those parameters forced are gone

Progress and response correlation (progressToken in params, JSON-RPC id)
are payload-level mechanisms and are unaffected.
@maxisbey
Make ClientRequestContext a concrete class
48f2b01
RequestContext[ClientSession] was the only instantiation of the generic
left in the tree (the server seat has ServerRequestContext), so the
public ClientRequestContext alias becomes the real dataclass and the
private mcp.shared._context module is deleted. request_id is now always
populated: the client only builds a context for inbound requests, and
ping is answered before any context exists.
@maxisbey
Synthesize request ids in DirectDispatcher
421e65b
Server-initiated sampling/elicitation/roots requests over a ClientSession
built with dispatcher=DirectDispatcher failed before the callback ran:
the session requires a populated request id and direct dispatch carried
none. DirectDispatcher now assigns per-instance monotonic ids to inbound
requests (notifications keep None, which is how middleware distinguishes
them). Adds a non-ping direct-dispatch test and bounds the indefinite
awaits in the existing dispatcher= tests.
@maxisbey
Raise CONNECTION_CLOSED for requests sent after the connection closed
2d33ade
send_raw_request raised RuntimeError both before run() and after the
transport closed, contradicting the documented contract that connection
loss surfaces as MCPError(CONNECTION_CLOSED). A closed flag now separates
the two states: RuntimeError remains for use before run(), and a request
after EOF gets the same CONNECTION_CLOSED error the in-flight waiters
receive.
@maxisbey
Make the late-response-ignored pin falsifiable
1703d42
The previous canary (a raising message_handler) could never fire: correct
code drops unknown-id responses before any handler, and regressed code's
delivery paths contain handler exceptions. Collect surfaced messages
instead and assert only a control notification arrives; verified against
a simulation of the v1 surface-as-RuntimeError behavior.
@maxisbey
maxisbey force-pushed the maxisbey/v2-client-dispatcher-swap branch from ac209ab to 1703d42 Compare June 12, 2026 15:16
maxisbey added 6 commits June 12, 2026 15:52
@maxisbey
Trim the dispatcher-swap migration notes
1672788
Cut the ClientSession section by about a third: merged single-concern
bullets (stray responses; the timeout exemptions), dropped rationale
padding, reframed the shutdown bullet as new-versus-v1 (v1 never answered
at shutdown), and removed the REQUEST_CANCELLED bullet entirely - the
constant never existed in v1, so it has no place in a v1-to-v2 guide.
@maxisbey
Close the write stream only after the task-group join
47616ac
run() entered both streams inside its own task group, so at teardown the
write stream closed before in-flight handlers sent their final answers:
the shutdown CONNECTION_CLOSED response was deterministically dropped on
the EOF path and raced the close on the cancel path. The write stream's
scope now wraps the task group, so scope exits order the join strictly
before the close and teardown writes always land. The shutdown-delivery
test becomes a real memory-stream pin, and the wedged-shutdown test's
synthetic stream is replaced by a plain unread one.
@maxisbey
Pin client request concurrency in both directions
04778b6
Two rendezvous tests: three concurrent outbound tool calls proven
simultaneously in flight and resolved out of order to their own callers,
and two overlapping server-initiated sampling requests serviced
concurrently by the client's callbacks (the v1 receive loop serialized
these). Also note in the migration guide that delivery concurrency is
unbounded.
@maxisbey
Tidy naming and doc nits from review
0a54692
- Rename _SHIELDED_WRITE_TIMEOUT to _ABANDON_WRITE_TIMEOUT; the
  timed-out arm passes it unshielded, so the old name lied there
- Document that on_stream_exception is awaited inline in the read loop
- Note in run()'s docstring that the dispatcher is single-shot
- Import ProgressFnT from mcp.shared.dispatcher (its home) instead of
  the mcp.shared.session compat shim
- Migration guide: scope the optional-fields section to
  ServerRequestContext, and correct the null-id bullet (v1 surfaced
  the transport's ValidationError, not an MCPError)
@maxisbey
Trim the ClientSession migration section to behavior-relevant changes
32b76cf
Collapse 12 dense bullets to 6: keep BaseSession removal, the new
concurrency model, pre-enter/post-close error contracts, the raising-
callback code change, the removed metadata kwargs, and the
ClientRequestContext rename. Drop ids-from-1, the courtesy-cancel
exemption taxonomy, the (incorrect) resumption-hints-from-callbacks
bullet, the shutdown-CONNECTION_CLOSED detail, and the stray-response
handling - these are feature/internals trivia, not migration steps.

Also correct the protocol:error:null-id divergence note in the
requirements manifest: v1.x had a non-nullable JSONRPCError.id, so a
null-id error response failed transport validation and the
ValidationError reached message_handler as an exception. The note
previously described the v2-prerelease BaseSession's MCPError path
(PR #2056) as v1 behavior.
@maxisbey
Harden ClientSession/dispatcher lifecycle and error handling
a27bca7
DirectDispatcher now mirrors JSONRPCDispatcher's lifecycle so the
public ClientSession(dispatcher=...) path honors the documented
contracts: send_raw_request raises RuntimeError before run() and
MCPError(CONNECTION_CLOSED) after close, inbound dispatch to a closed
side fails the peer's request instead of serving the exited session's
callbacks, and the ready-wait sits inside fail_after so a request
timeout bounds waiting on a peer whose run() never started.

ClientSession._on_notify self-contains a raising logging_callback /
message_handler (matching ServerRunner._on_notify) so a callback that
throws over DirectDispatcher costs only that delivery instead of
failing the in-process peer's notify() call.

JSONRPCDispatcher.notify is now fire-and-forget all the way: a post-
close send or a write onto a torn-down transport drops the
notification with a debug log instead of leaking raw anyio
ClosedResourceError/BrokenResourceError. DirectDispatcher.notify
matches.

JSONRPCDispatcher.send_raw_request: a builtin TimeoutError raised by a
custom transport's bounded send() now propagates raw instead of being
mislabelled REQUEST_TIMEOUT (the timeout-conversion arm only fires
once the response fail_after has armed). request_write_started is set
before the write so a delivered-but-cancelled request still triggers
the courtesy notifications/cancelled, and _handle_request skips the
shutdown CONNECTION_CLOSED answer once an answer write has started,
preferring possibly-zero responses over possibly-two for one id.

request_read_timeout_seconds=0.0 is now honored as fail-immediately on
both ClientSession.send_request and ServerSession.send_request (was
silently treated as unset via or-fallback). None remains the only
sentinel that defers to the session-level timeout.
maxisbey added 2 commits June 15, 2026 12:21
@maxisbey
Heal 3.11 coverage tracing in the new dispatcher tests
9dedb40
The new post-close DirectDispatcher test asserts after running_pair's
cancelled task-group join, and several of the new jsonrpc_dispatcher
race tests have a 1-tick join fast path - both shapes hit
python/cpython#106749 on 3.11 (coro.throw() drops the outer-frame
'call' trace events and desyncs CTracer until the next normal resume,
roaming onto unrelated tests on the same xdist worker). Add the
established resync_tracer() heal at each new cancel site.
@maxisbey
Heal 3.11 coverage tracing at JSONRPCDispatcher.run() exit
ea52a87
run() ends via its own internal cancelled task-group join; on 3.11 a
direct `await dispatcher.run(...)` (not via tg.start) loses tracing
on the lines that follow. Heal at the exit, matching the pattern in
ClientSession.__aexit__.
felixweinberger
felixweinberger reviewed Jun 15, 2026
View reviewed changes
Comment thread src/mcp/client/session.py
Comment on lines -108 to -115
BaseSession[
types.ClientRequest,
types.ClientNotification,
types.ClientResult,
types.ServerRequest,
types.ServerNotification,
]
):

@felixweinberger felixweinberger Jun 15, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

🥳

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

maxisbey reacted with hooray emoji
All reactions
  • 🎉 1 reaction
felixweinberger
felixweinberger approved these changes Jun 15, 2026
View reviewed changes

@felixweinberger felixweinberger left a comment •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

LGTM. Just a few migration.md nits from a consumer's perspective, none blocking:

  • request_read_timeout_seconds=0 flipped from "no timeout" (v1 treated 0 as falsy and fell through to the session timeout) to a real fail_after(0) that fails immediately. It's tested on both seats but isn't in the guide, worth a line in the Timeouts bullet, since anyone passing 0 to mean "no timeout" now gets instant failures.
  • Unknown/null-id responses: an error or response whose id matches no in-flight request (including a server's null-id parse error) is now dropped with a debug log, where v1 surfaced it to message_handler. Could we add a migration bullet? Ideally with a client-level test that message_handler isn't called. The surviving test_jsonrpc_error_response_with_null_id_is_dropped only proves the read loop survives.
  • nit: the ### RequestContext type parameters simplified heading now contradicts its body (this PR updated the body to say the 3-param generic no longer exists) — maybe rename to "split into ClientRequestContext and ServerRequestContext".
  • nit: the dispatcher= section names DirectDispatcher but not where to import it from (mcp.shared.direct_dispatcher — it's not in the top-level __all__).

Otherwise this looks good, not blocking on any of these.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@maxisbey
maxisbey merged commit 1012d60 into main Jun 15, 2026
33 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@maxisbey
maxisbey deleted the maxisbey/v2-client-dispatcher-swap branch June 15, 2026 13:46
@maxisbey maxisbey mentioned this pull request Jun 15, 2026
ci(conformance): run server --suite draft and baseline the 2026-07-28 scenarios #2878
Merged
6 of 9 tasks
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This pull request is included in pre-release v2.0.0a2

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@coderabbitai coderabbitai Bot mentioned this pull request Jul 2, 2026
feat(layer-3): behavioral probes + LLM semantic judge Mhemd139/Covenant#2
Merged
@STiFLeR7 STiFLeR7 mentioned this pull request Jul 14, 2026
BaseSession.send_request fails when forwarding a request received via ServerSession (envelope-fields collision) #2548
Closed
@coderabbitai coderabbitai Bot mentioned this pull request Jul 14, 2026
Refactor/server stdio split Lyellr88/marm-memory#88
Merged
This was referenced Jul 29, 2026
simple-streamablehttp-stateless example will not return data if id=0 #1218
Closed
Fix: Raise RuntimeError when ClientSession is used without context manager to prevent hangs #1849
Closed
Pluggable Transport Abstractions for Client and Shared sessions #2117
Closed
@maxisbey maxisbey mentioned this pull request Aug 10, 2026
No way to get request_id for a tool call to cancel it #230
Closed
@coderabbitai coderabbitai Bot mentioned this pull request Aug 24, 2026
build(scripts): package PDBs as a single FOMOD archive alandtse/CrashLoggerSSE#43
Merged
3 tasks done
@UgaTheDev UgaTheDev mentioned this pull request Aug 25, 2026
ClientSession receive loop swallows callback exceptions, replying "Invalid request parameters" to the server instead of propagating to the call_tool awaiter #2673
Open
2 tasks done
This was referenced Oct 5, 2026
fix: send notifications/cancelled on request timeout and caller cancellation #2514
Closed
fix: fail fast when session is not started #2631
Closed
@iret77 iret77 mentioned this pull request Nov 3, 2026
fix(v3): an ended MCP session leaves no error in the hub's log byte5ai/palaia#629
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@felixweinberger felixweinberger felixweinberger approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

ClientSession never sends notifications/cancelled when call_tool is cancelled — server-side coroutines leak Concurrent server-side requests are serialized end-to-end by BaseSession

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@maxisbey @felixweinberger
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.