Inspector Version
v0.21.2
Describe the bug
After the server emits notifications/tools/list_changed, the Tools panel
in the UI does not refresh. Manually refreshing is also impossible because
the "List Tools" button becomes disabled once the list has been loaded
(isButtonDisabled={!nextCursor && tools.length > 0} in ToolsTab).
The same issue affects the Resources and Prompts tabs by the same patterns.
Root cause (verified in source)
-
In client/src/App.tsx, the onNotification callback in the
useConnection hook only handles notifications/tasks/list_changed
and notifications/tasks/status. There are no handlers for
tools/, resources/, or prompts/ list_changed, so these
notifications are received but ignored for refresh purposes.
-
In client/src/components/ToolsTab.tsx (and similarly in
ResourcesTab.tsx, PromptsTab.tsx), the <ListPane> is rendered
with isButtonDisabled={!nextCursor && items.length > 0}. Once
pagination is exhausted, the List button is disabled, so users
cannot trigger a manual refresh either.
To Reproduce
- Connect to an MCP server that declares
tools.listChanged: true.
- Click "List Tools" — N tools shown.
- On the server, dynamically add or remove a tool. Server emits
notifications/tools/list_changed (visible in Inspector's
Notifications panel, confirming the wire-level delivery).
- The Tools panel still shows the stale list.
- The "List Tools" button is greyed out — manual refresh impossible.
- The only workaround is to disconnect and reconnect.
Expected behavior
- The Tools panel auto-refreshes (re-issues
tools/list) on
notifications/tools/list_changed.
- The List button stays usable as a manual refresh fallback (perhaps
showing "Refresh Tools" instead of being disabled when fully loaded).
- Same applies to Resources and Prompts.
Server side
Verified the server is correctly compliant: a raw GET stream shows the
notifications/tools/list_changed event arriving for every server-side
toggle, and a fresh tools/list after the change returns the updated
list. Tested with the official Go SDK
(github.com/modelcontextprotocol/go-sdk v1.4.0) over Streamable HTTP.
Willing to submit a PR
Yes, happy to submit a PR if this is welcome. Could limit it to the
tools tab first, or cover all three (tools / resources / prompts) in
one go — let me know your preference.
Inspector Version
v0.21.2
Describe the bug
After the server emits
notifications/tools/list_changed, the Tools panelin the UI does not refresh. Manually refreshing is also impossible because
the "List Tools" button becomes disabled once the list has been loaded
(
isButtonDisabled={!nextCursor && tools.length > 0}in ToolsTab).The same issue affects the Resources and Prompts tabs by the same patterns.
Root cause (verified in source)
In
client/src/App.tsx, theonNotificationcallback in theuseConnectionhook only handlesnotifications/tasks/list_changedand
notifications/tasks/status. There are no handlers fortools/,resources/, orprompts/list_changed, so thesenotifications are received but ignored for refresh purposes.
In
client/src/components/ToolsTab.tsx(and similarly inResourcesTab.tsx,PromptsTab.tsx), the<ListPane>is renderedwith
isButtonDisabled={!nextCursor && items.length > 0}. Oncepagination is exhausted, the List button is disabled, so users
cannot trigger a manual refresh either.
To Reproduce
tools.listChanged: true.notifications/tools/list_changed(visible in Inspector'sNotifications panel, confirming the wire-level delivery).
Expected behavior
tools/list) onnotifications/tools/list_changed.showing "Refresh Tools" instead of being disabled when fully loaded).
Server side
Verified the server is correctly compliant: a raw GET stream shows the
notifications/tools/list_changedevent arriving for every server-sidetoggle, and a fresh
tools/listafter the change returns the updatedlist. Tested with the official Go SDK
(
github.com/modelcontextprotocol/go-sdkv1.4.0) over Streamable HTTP.Willing to submit a PR
Yes, happy to submit a PR if this is welcome. Could limit it to the
tools tab first, or cover all three (tools / resources / prompts) in
one go — let me know your preference.