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
|
|
@ -67,6 +67,16 @@ export class ManagedToolsState extends TypedEventTarget<ManagedToolsStateEventMa
|
|||
if (!client || client.getStatus() !== "connected") {
|
||||
return this.getTools();
|
||||
}
|
||||
// Gate on the server's `tools` capability — calling tools/list against a
|
||||
// server that doesn't advertise it returns -32601 "Method not found",
|
||||
// which then surfaces in the console for every connect against a
|
||||
// tools-less server. Empty list is the right semantics for "this server
|
||||
// doesn't support tools."
|
||||
if (!client.getCapabilities()?.tools) {
|
||||
this.tools = [];
|
||||
this.dispatchTypedEvent("toolsChange", this.tools);
|
||||
return this.getTools();
|
||||
}
|
||||
const effectiveMetadata = metadata ?? this._metadata;
|
||||
this.tools = [];
|
||||
let cursor: string | undefined;
|
||||
|
|
|
|||
Loading…
Reference in a new issue