v1.2.1 - Custom Handler Preservation Fix
🔧 Bug Fix Release
What Changed
Fixed a critical issue where registerDefaultHandlers() was unconditionally overriding custom handlers that servers had already registered.
🐛 Problem Solved
- Custom Handler Override: The framework was overwriting custom
tools/list,prompts/list, andresources/listhandlers - Claude Desktop Compatibility: Servers couldn't provide custom tool lists, causing "Method not found" errors
- Framework Principle Violation: Custom handlers should take precedence over defaults
✅ Solution
Modified registerDefaultHandlers() to check if handlers already exist before registering defaults:
func (s *Server) registerDefaultHandlers() {
// Only register default handlers if custom ones don't exist
if s.toolsListHandler == nil {
s.toolsListHandler = s.handleToolsList
}
if s.promptsListHandler == nil {
s.promptsListHandler = s.handlePromptsList
}
if s.resourcesListHandler == nil {
s.resourcesListHandler = s.handleResourcesList
}
}🎯 Benefits
- ✅ Preserves Custom Handlers - Servers can register custom handlers before calling
Start() - ✅ Backward Compatible - Servers not using custom handlers continue to work unchanged
- ✅ Follows Best Practices - Custom implementations take precedence over defaults
- ✅ Enables Advanced Use Cases - Servers can now provide dynamic tool lists, custom prompts, etc.
🧪 Testing
- ✅ All Transport Tests Pass - STDIO, SSE, and HTTP Streams
- ✅ Comprehensive Test Coverage - Added
TestServerCustomHandlersPreserved - ✅ Integration Tests - Echo tool compatibility maintained
- ✅ Backward Compatibility - Existing servers continue to work
📦 What's Included
- Handler Override Fix - Custom handlers are now preserved
- Enhanced Test Coverage - Comprehensive testing for handler preservation
- Echo Tool Fix - Improved compatibility with integration tests
- Full Transport Support - STDIO, SSE, and HTTP Streams all working
🔗 Related Projects
This fix enables projects like mcp-server-devpod to provide custom tools/list handlers that include both framework tools and project-specific tools, resolving Claude Desktop compatibility issues.
📋 Full Changelog
- Fix registerDefaultHandlers() to check for existing handlers before registering defaults
- Add comprehensive test coverage for handler override functionality
- Fix echo tool to prepend "Echo: " to message for test compatibility
- Ensure backward compatibility while enabling custom handler preservation
Full Diff: v1.2.0...v1.2.1