Files
windmill/backend/windmill-common
Ruben FiszelandClaude Opus 5.5 0bac766756 feat: refresh MCP tools when scripts and flows change (#11337)
* feat: notify MCP clients when a workspace's scripts or flows change

Advertise tools.listChanged and implement subscriptions/listen, so a
2026-07-28 client refreshes its tool list when scripts or flows are
deployed, archived, renamed or deleted. Changes reach every replica via
new statement-level notify_event triggers; MCP-originated changes also
signal the serving replica inline.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: signal each workspace once per notify-event poll batch

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: signal script/flow path moves, keep unrelated updates trigger-free

Row-level UPDATE OF archived/deleted/path triggers with a WHEN guard
replace the statement-level ones, which built transition tables for
every UPDATE on script and flow. Path moves from username changes and
offboarding are now signalled. subscriptions/listen is refused when the
client asks for nothing this server sends.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: signal path moves only for unarchived versions

A username change or offboarding rewrites the path of every version,
archived ones included, which would queue one notify_event per version.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor: detect MCP tool-list changes by polling a workspace fingerprint

Replace the notify_event triggers and poller hook with a per-process,
per-workspace poll of a hash over the live scripts and flows, run only
while a subscriptions/listen stream watches that workspace. Every write
path (UI, CLI, git sync, user renames, workspace moves) is covered with
no migration; an MCP-originated change polls at once.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: announce the first fingerprint so a change before the baseline is not lost

Also poll immediately after a script/flow mutation through a
multi-workspace token, and pin the fingerprint test on a lock update,
which is the unrelated write that actually happens.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: open every tool-list subscription with one notification

A subscriber joining an existing watcher missed a change the watcher
recorded before it subscribed. Also move the fingerprint query to a
runnables module, since it spans scripts and flows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-25 09:38:41 +00:00
..