The four list-fetching state managers fired their list RPC against every server on connect regardless of advertised capabilities, so a server that doesn't implement a given primitive replied -32601 "Method not found", surfacing in the console on every connect. Mirrors the `tasks`-capability gate added for ManagedRequestorTasksState in #1349. - managedToolsState → gate on capabilities.tools - managedPromptsState → gate on capabilities.prompts - managedResourcesState → gate on capabilities.resources - managedResourceTemplatesState → gate on capabilities.resources (the spec defines no separate resourceTemplates capability; resources/templates/list is part of the resources surface) When the capability is absent each manager sets an empty list, dispatches its change event, and returns — the right semantics for "this server doesn't support X." Tests: existing flow tests now construct their FakeInspectorClient with the relevant capability so the live list path is still exercised; added a "refresh skips listX when capability absent" and a "connect against an X-less server doesn't fire listX" test per manager. Updated the useManagedX peers and resourceSubscriptionsState (which drives a ManagedResourcesState refresh) to advertise the capability too. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
905b80a88c
commit
9e494544e7
1 changed files with 206 additions and 9 deletions
|
|
@ -76,6 +76,21 @@ export class ManagedResourceTemplatesState extends TypedEventTarget<ManagedResou
|
|||
if (!client || client.getStatus() !== "connected") {
|
||||
return this.getResourceTemplates();
|
||||
}
|
||||
// Gate on the server's `resources` capability — the MCP spec doesn't define
|
||||
// a separate `resourceTemplates` capability; resources/templates/list is
|
||||
// part of the resources surface. Calling it against a server that doesn't
|
||||
// advertise resources returns -32601 "Method not found", which then
|
||||
// surfaces in the console for every connect against a resources-less
|
||||
// server. Empty list is the right semantics for "this server doesn't
|
||||
// support resources."
|
||||
if (!client.getCapabilities()?.resources) {
|
||||
this.resourceTemplates = [];
|
||||
this.dispatchTypedEvent(
|
||||
"resourceTemplatesChange",
|
||||
this.resourceTemplates,
|
||||
);
|
||||
return this.getResourceTemplates();
|
||||
}
|
||||
const effectiveMetadata = metadata ?? this._metadata;
|
||||
this.resourceTemplates = [];
|
||||
let cursor: string | undefined;
|
||||
|
|
|
|||
Loading…
Reference in a new issue