Track subscribed resources and show the appropriate subscribe or unsubscribe button on selected resource panel.

If the server does not support resource subscriptions, do not show any subscription buttons.

* In App.tsx
  - useState for resourceSubscriptions, setResourceSubscriptions a Set of type string.
  - in subscribeToResource()
    - only make the request to subscribe if the uri is not in the resourceSubscriptions set
  - in unsubscribeFromResource()
    - only make the request to unsubscribe if the uri is in the resourceSubscriptions set
  - in ResourceTab element,
    - pass a boolean resourceSubscriptionsSupported as serverCapabilities.resources.subscribe
    - pass resourceSubscriptions as a prop
* In ResourcesTab.tsx
  - deconstruct resourceSubscriptions and resourceSubscriptionsSupported from props and add prop type
  - in selected resource panel
    - don't show subscribe or unsubscribe buttons unless resourceSubscriptionsSupported is true
    - only show subscribe button if selected resource uri is not in resourceSubscriptions set
    - only show unsubscribe button if selected resource uri is in resourceSubscriptions set
    - wrap buttons in a flex div that is
      - justified right
      - has a minimal gap between
      - 2/5 wide (just big enough to contain two buttons and leave the h3 text 3/5 of the row to render and not overflow.
This commit is contained in:
cliffhall
2025-03-08 13:40:37 -05:00
parent 747c0154c5
commit a669272fda
4 changed files with 45 additions and 23 deletions

4
package-lock.json generated
View File

@@ -13,8 +13,8 @@
"server"
],
"dependencies": {
"@modelcontextprotocol/inspector-client": "0.4.1",
"@modelcontextprotocol/inspector-server": "0.4.1",
"@modelcontextprotocol/inspector-client": "^0.5.1",
"@modelcontextprotocol/inspector-server": "^0.5.1",
"concurrently": "^9.0.1",
"shell-quote": "^1.8.2",
"spawn-rx": "^5.1.2",