Skip to content

fix(mcp): wait for client event stream before server->client requests#41559

Merged
pavelfeldman merged 1 commit into
microsoft:mainfrom
pavelfeldman:fix-mcp-wait-event-stream
Jul 1, 2026
Merged

fix(mcp): wait for client event stream before server->client requests#41559
pavelfeldman merged 1 commit into
microsoft:mainfrom
pavelfeldman:fix-mcp-wait-event-stream

Conversation

@pavelfeldman

Copy link
Copy Markdown
Member

Summary

  • Over the Streamable HTTP transport, server->client requests (e.g. listRoots during init) can only be delivered after the client opens its standalone GET SSE event stream.
  • Thread a transportInitialized promise through connect()/createServer() and await it before issuing listRoots.
  • Resolves on the client's GET event-stream request, or after a 5s fallback timeout so clients that never open the stream are not blocked.

Over the Streamable HTTP transport, server->client requests (e.g.
listRoots during initialization) can only be delivered once the client
has opened its standalone GET SSE event stream. Thread a
transportInitialized promise through connect()/createServer() and await
it before issuing listRoots. It resolves when the client issues the GET
event-stream request, or after a 5s fallback timeout so clients that
never open the stream are not blocked.
const capabilities = server.getClientCapabilities();
let clientRoots: Root[] = [];
if (capabilities?.roots) {
await transportInitialized;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should it just resolve to false in this case, so that we don't need to send listRoots at all?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I'm trying to be extra conservative here: wait for up to 5 seconds, relative to what was happening before the change, to not affect customers.

@pavelfeldman pavelfeldman merged commit 39e40ef into microsoft:main Jul 1, 2026
17 checks passed
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Test results for "MCP"

7461 passed, 1132 skipped


Merge workflow run.

yury-s added a commit to microsoft/playwright-mcp that referenced this pull request Jul 9, 2026
## What's New

### New Tools

- **`browser_find`** — Search the accessibility snapshot of the current
page for text or a regular expression. Returns matching snapshot nodes
with a few lines of surrounding context (like search snippets), which is
cheaper than capturing the whole snapshot when you only need to locate
an element and its ref
([#41605](microsoft/playwright#41605),
[#41654](microsoft/playwright#41654))

### Tool Improvements

- **Less verbose snapshots** — Accessibility snapshots are distilled to
reduce noise and token usage
([#41604](microsoft/playwright#41604))
- **Mobile & device emulation** — New `--mobile` flag and `--device`
option to emulate mobile devices from the CLI
([#41657](microsoft/playwright#41657))
- **Navigation status** — `browser_navigate` now surfaces non-2xx
navigation status codes
([#41589](microsoft/playwright#41589))

## Bug Fixes

- Enable the chromium sandbox for the default browser
([#41652](microsoft/playwright#41652))
- Close the isolated HTTP client context on disconnect
([#41560](microsoft/playwright#41560))
- Wait for the client event stream before sending server→client requests
([#41559](microsoft/playwright#41559))
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.

2 participants