Description
MCPServer exposes remove_tool(name) (added in #1322) but has no equivalent for prompts or resources. This was part of the original ask in #711 ("removing a tool or resource dynamically"), which was closed when remove_tool() landed — but the resource and prompt sides were never addressed.
Use case
Multi-tenant / multi-instance deployments where the same server image serves different clients. Today users can filter tools per-instance via remove_tool(), but for prompts and resources they're forced to reach into private internals:
# Current workaround — fragile, undocumented
del mcp._prompt_manager._prompts["some_prompt"]
del mcp._resource_manager._resources[str(uri)]
(This is the same pattern @lukehsiao described in #711 (comment) for tools, before remove_tool() existed.)
Current state
| Primitive |
add_* |
remove_* |
| Tool |
add_tool() / @tool() |
remove_tool() ✅ |
| Prompt |
add_prompt() / @prompt() |
missing |
| Resource |
add_resource() / @resource() |
missing |
| Resource Template |
add_template() |
missing |
Proposed API
Add these methods, mirroring the existing remove_tool() pattern exactly:
- PromptManager.remove_prompt(name: str) — raises PromptError if not found
- ResourceManager.remove_resource(uri: str) — raises ResourceError if not found
- ResourceManager.remove_template(uri_template: str) — raises ResourceError if not found
- MCPServer.remove_prompt(name) — thin wrapper delegating to the manager
- MCPServer.remove_resource(uri) — thin wrapper delegating to the manager
- MCPServer.remove_resource_template(uri_template) — thin wrapper delegating to the manager
- PromptError exception class in exceptions.py (for symmetry with ToolError and ResourceError)
This is ~15 lines of implementation across 4 source files, plus tests. Purely additive, no breaking changes.
References
Reactions are currently unavailable
Description
MCPServer exposes remove_tool(name) (added in #1322) but has no equivalent for prompts or resources. This was part of the original ask in #711 ("removing a tool or resource dynamically"), which was closed when remove_tool() landed — but the resource and prompt sides were never addressed.
Use case
Multi-tenant / multi-instance deployments where the same server image serves different clients. Today users can filter tools per-instance via remove_tool(), but for prompts and resources they're forced to reach into private internals:
(This is the same pattern @lukehsiao described in #711 (comment) for tools, before remove_tool() existed.)
Current state
Proposed API
Add these methods, mirroring the existing remove_tool() pattern exactly:
This is ~15 lines of implementation across 4 source files, plus tests. Purely additive, no breaking changes.
References