[Bug] MCP resource templates display static title instead of individual resource names in Claude Desktop
Bug Description
Bug: Claude Desktop shows template title instead of individual resource names for MCP resource templates
Summary
When using MCP resource templates, Claude Desktop displays the template's static title for all resources instead of the individual name field returned by the template's list callback.
Expected behavior
Each resource should display its own name (e.g., "my-document-title", "another-doc") as returned in the list callback's resources[].name field.
Actual behavior
All resources from the template display the same name - the template's registration title (e.g., "Operator Documents" for every document).
Works correctly in
- Claude Code
- MCP Inspector
Code example
// Template list callback returns unique names per resource:
list: async () => ({
resources: docs.map(doc => ({
uri: `operator://documents/${doc.id}`,
name: doc.title || '(Untitled)', // ← This is ignored by Claude Desktop
// ...
}))
})
// But template registration has static title:
server.registerResource('documents-template', docTemplate, {
title: 'Operator Documents', // ← Claude Desktop uses this for ALL resources
// ...
})
Impact
Users cannot distinguish between resources when selecting them via the + icon in Claude Desktop - they all appear with the same name.
Environment Info
- Platform: darwin
- Terminal: zed
- Version: 2.0.60
- Claude 1.0.1768 (67d013) 2025-12-05T23:47:07.000Z
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗