fix: make resources and prompts optional features
- Wrap resources/list and prompts/list calls in try-catch blocks - Continue with connection even if server doesn't support these methods - Update logging to only show counts for features that are supported - Fix TypeScript types for optional responses This allows the hook to work with servers that only implement the core tools functionality without resources or prompts support. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7a923c3509
commit
d4220ec5f2
1 changed files with 29 additions and 8 deletions
|
|
@ -307,11 +307,21 @@ export function useMcp(options: UseMcpOptions): UseMcpResult {
|
|||
|
||||
const toolsResponse = await clientRef.current!.request({ method: 'tools/list' }, ListToolsResultSchema)
|
||||
|
||||
// Load resources after tools
|
||||
const resourcesResponse = await clientRef.current!.request({ method: 'resources/list' }, ListResourcesResultSchema)
|
||||
// Load resources after tools (optional - not all servers support resources)
|
||||
let resourcesResponse: { resources: Resource[]; resourceTemplates?: ResourceTemplate[] } = { resources: [], resourceTemplates: [] }
|
||||
try {
|
||||
resourcesResponse = await clientRef.current!.request({ method: 'resources/list' }, ListResourcesResultSchema)
|
||||
} catch (err) {
|
||||
addLog('debug', 'Server does not support resources/list method', err)
|
||||
}
|
||||
|
||||
// Load prompts after resources
|
||||
const promptsResponse = await clientRef.current!.request({ method: 'prompts/list' }, ListPromptsResultSchema)
|
||||
// Load prompts after resources (optional - not all servers support prompts)
|
||||
let promptsResponse: { prompts: Prompt[] } = { prompts: [] }
|
||||
try {
|
||||
promptsResponse = await clientRef.current!.request({ method: 'prompts/list' }, ListPromptsResultSchema)
|
||||
} catch (err) {
|
||||
addLog('debug', 'Server does not support prompts/list method', err)
|
||||
}
|
||||
|
||||
if (isMountedRef.current) {
|
||||
// Check mount before final state updates
|
||||
|
|
@ -319,10 +329,21 @@ export function useMcp(options: UseMcpOptions): UseMcpResult {
|
|||
setResources(resourcesResponse.resources)
|
||||
setResourceTemplates(Array.isArray(resourcesResponse.resourceTemplates) ? resourcesResponse.resourceTemplates : [])
|
||||
setPrompts(promptsResponse.prompts)
|
||||
addLog(
|
||||
'info',
|
||||
`Loaded ${toolsResponse.tools.length} tools, ${resourcesResponse.resources.length} resources, ${Array.isArray(resourcesResponse.resourceTemplates) ? resourcesResponse.resourceTemplates.length : 0} resource templates, ${promptsResponse.prompts.length} prompts.`,
|
||||
)
|
||||
const summary = [`Loaded ${toolsResponse.tools.length} tools`]
|
||||
if (
|
||||
resourcesResponse.resources.length > 0 ||
|
||||
(resourcesResponse.resourceTemplates && resourcesResponse.resourceTemplates.length > 0)
|
||||
) {
|
||||
summary.push(`${resourcesResponse.resources.length} resources`)
|
||||
if (Array.isArray(resourcesResponse.resourceTemplates) && resourcesResponse.resourceTemplates.length > 0) {
|
||||
summary.push(`${resourcesResponse.resourceTemplates.length} resource templates`)
|
||||
}
|
||||
}
|
||||
if (promptsResponse.prompts.length > 0) {
|
||||
summary.push(`${promptsResponse.prompts.length} prompts`)
|
||||
}
|
||||
|
||||
addLog('info', summary.join(', ') + '.')
|
||||
setState('ready') // Final success state
|
||||
// connectingRef will be set to false after orchestration logic
|
||||
connectAttemptRef.current = 0 // Reset on success
|
||||
|
|
|
|||
Loading…
Reference in a new issue