You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
filesystem: tool calls use the old allow-list while a roots refresh is pending #5101
In the filesystem server, tool calls wait for the initial roots load (#3204), and since #5097 for a refresh that overtakes it, but a normal runtime notifications/roots/list_changed does not hold them back. While its roots/list request is pending, tool calls are authorized against the previous allow-list, so a client that has announced that a root is gone can still have it read or modified until the answer arrives.
Reported by Copilot on the v1.0.0 merge PR #5090 (thread r4237017991). Follows #5094 and #5097.
Reproduce
A Roots client exposes one root; list_directory on it succeeds.
The client withdraws the root and sends notifications/roots/list_changed, but answers the server's roots/list slowly.
A list_directory on the root sent during that wait succeeds against the old allow-list.
Expected
Every roots refresh is a barrier: a tool call that arrives while a refresh is pending waits for it (and for any newer one that overtakes it), then runs against the result. If the refresh fails, waiting calls proceed against the current allow-list, as today.
Activity
Merge pull request #5103 from modelcontextprotocol/v2/fix/5101-releas…
cliffhall commentedon Oct 10, 2026
Fixed on
v2/mainby #5102 and on the release branchv2/release/1.0.0by #5103 (ships in v1.0.0).fix(filesystem): hold tool calls while any roots refresh is pending
chore(filesystem): fold the modelcontextprotocol#5101 changeset into …
fix(filesystem): hold tool calls while any roots refresh is pending
chore(changeset): restore the SDK v2 majors, drop fixes shipped in 1.0.0