Skip to content

v1.2.1 - Custom Handler Preservation Fix

Choose a tag to compare

@aatchison aatchison released this 09 Jun 02:06
· 2 commits to main since this release
b306edc

🔧 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, and resources/list handlers
  • 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

  1. ✅ Preserves Custom Handlers - Servers can register custom handlers before calling Start()
  2. ✅ Backward Compatible - Servers not using custom handlers continue to work unchanged
  3. ✅ Follows Best Practices - Custom implementations take precedence over defaults
  4. ✅ 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