Summary
The listChanged sidebar indicator badge is hardcoded false for every screen — Tools, Apps, Prompts, and Resources — in clients/web/src/components/views/InspectorView/InspectorView.tsx. It is never wired to a real notifications/*/list_changed signal, so the indicator can never light up.
Note this is the indicator badge only: the lists themselves already refresh live. For example, the managed-tools layer (core/react/useManagedTools.ts) updates the tools array on its toolsChange event, so the Apps/Tools sidebar contents stay current. What's missing is the visual "the server changed its list since you last looked" affordance.
This was split out of #1370 (render MCP Apps end-to-end), which deliberately kept scope to the apps render path.
Proposed work
- Surface a per-primitive "list changed since last refresh" boolean from the managed-state layer (tools/prompts/resources) up through
App.tsx → InspectorView → each screen's listChanged prop.
- Decide the reset semantics (e.g. clear the flag when the user refreshes that list, or when the list is viewed).
- Apply consistently to all four screens so behavior is uniform.
Acceptance criteria
Summary
The
listChangedsidebar indicator badge is hardcodedfalsefor every screen — Tools, Apps, Prompts, and Resources — inclients/web/src/components/views/InspectorView/InspectorView.tsx. It is never wired to a realnotifications/*/list_changedsignal, so the indicator can never light up.Note this is the indicator badge only: the lists themselves already refresh live. For example, the managed-tools layer (
core/react/useManagedTools.ts) updates thetoolsarray on itstoolsChangeevent, so the Apps/Tools sidebar contents stay current. What's missing is the visual "the server changed its list since you last looked" affordance.This was split out of #1370 (render MCP Apps end-to-end), which deliberately kept scope to the apps render path.
Proposed work
App.tsx→InspectorView→ each screen'slistChangedprop.Acceptance criteria
notifications/tools/list_changed(and prompts/resources equivalents) sets the corresponding screen'slistChangedindicator.false.