Summary
Enhance the Python SDK's dynamic tool management capabilities to match the TypeScript SDK by adding:
- Automatic
tools/list_changed notifications when tools are added/removed
- Tool enable/disable functionality (temporary hiding without removal)
Background
The Python SDK currently supports adding and removing tools dynamically (see #1322), but lacks two key features present in the TypeScript SDK:
1. List Changed Notifications
The TypeScript SDK automatically sends notifications/tools/list_changed when tools are modified. This allows clients to know when they should refresh their tool list.
Python SDK gap: Currently, when calling add_tool() or remove_tool(), clients are not notified of the change and may show stale tool lists.
2. Enable/Disable Tools
The TypeScript SDK provides enable() and disable() methods on tools:
const tool = server.tool("myTool", ..., async () => { ... });
tool.disable() // Hides from list_tools, blocks calls
tool.enable() // Re-enables the tool
tool.remove() // Permanently removes
Benefits:
- Temporarily hide tools without losing registration
- Re-enable tools without re-registering
- Useful for permission-based or state-based tool visibility
Python SDK gap: Only permanent removal via remove_tool() is supported. No way to temporarily disable/re-enable tools.
References
Summary
Enhance the Python SDK's dynamic tool management capabilities to match the TypeScript SDK by adding:
tools/list_changednotifications when tools are added/removedBackground
The Python SDK currently supports adding and removing tools dynamically (see #1322), but lacks two key features present in the TypeScript SDK:
1. List Changed Notifications
The TypeScript SDK automatically sends
notifications/tools/list_changedwhen tools are modified. This allows clients to know when they should refresh their tool list.Python SDK gap: Currently, when calling
add_tool()orremove_tool(), clients are not notified of the change and may show stale tool lists.2. Enable/Disable Tools
The TypeScript SDK provides
enable()anddisable()methods on tools:Benefits:
Python SDK gap: Only permanent removal via
remove_tool()is supported. No way to temporarily disable/re-enable tools.References
remove_toolmethod)notifications/tools/list_changed