Repository navigation
Open
Labels
P1Significant bug affecting many users, highly requested featureSignificant bug affecting many users, highly requested featureenhancementRequest for a new feature that's not currently supportedRequest for a new feature that's not currently supportedneeds decisionIssue is actionable, needs maintainer decision on whether to implementIssue is actionable, needs maintainer decision on whether to implementv2Affects the v2 line (2.x on main)Affects the v2 line (2.x on main)
Description
Summary
Enhance the Python SDK's dynamic tool management capabilities to match the TypeScript SDK by adding:
- Automatic
tools/list_changednotifications 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 removesBenefits:
- 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
- Related PR: feat: add ability to remove tools #1322 (adds
remove_toolmethod) - TypeScript SDK Dynamic Servers: https://github.com/modelcontextprotocol/typescript-sdk#dynamic-servers
- MCP spec supports
notifications/tools/list_changed
Reacted by Felix Weinberger and Gregor Betz
Metadata
Metadata
Assignees
Labels
P1Significant bug affecting many users, highly requested featureSignificant bug affecting many users, highly requested featureenhancementRequest for a new feature that's not currently supportedRequest for a new feature that's not currently supportedneeds decisionIssue is actionable, needs maintainer decision on whether to implementIssue is actionable, needs maintainer decision on whether to implementv2Affects the v2 line (2.x on main)Affects the v2 line (2.x on main)
Activity
maxisbey commentedon Oct 6, 2025
I'm not entirely sure how this should be implemented. The Typescript SDK returns an object which can be used for removing/enabling/disabling, but I'm not sure this exact thing would work well for Python given that we use decorators for registering tools. Keen to hear other's thoughts.
beaterblank commentedon Oct 9, 2025
We could add
enable_tool(self, name)anddisable_tool(self, name)methods within theFastMCPclass, which interfaces with the tool manager. These methods could use the existingpython-sdk/src/mcp/server/fastmcp/tools/tool_manager.py
Lines 37 to 39 in 61399b3
function to retrieve the tool instance, and enable or disable it. Each tool instance would include an is_enabled attribute that can be checked before the tool is executed. From there, we could send a notification via the context manager. we should also maybe do this with resources.
kuku929 commentedon Dec 17, 2025
Is there a way to have dynamic tool management? A hacky method should also suffice my use case. But I do think that this is an important feature the SDK should support.
kuku929 commentedon Dec 18, 2025
Found a way around this for now: