modelcontextprotocol / modelcontextprotocol/python-sdk
Add remove_prompt() and remove_resource() for parity with remove_tool()
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 24.3k
- Fork
- 4k
- Merge medio
- 1g 1h
- PR unite (30g)
- 31
Descrizione
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 https://github.com/modelcontextprotocol/python-sdk/issues/711#issuecomment-2790042502 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)— raisesPromptErrorif not foundResourceManager.remove_resource(uri: str)— raisesResourceErrorif not foundResourceManager.remove_template(uri_template: str)— raisesResourceErrorif not foundMCPServer.remove_prompt(name)— thin wrapper delegating to the managerMCPServer.remove_resource(uri)— thin wrapper delegating to the managerMCPServer.remove_resource_template(uri_template)— thin wrapper delegating to the managerPromptErrorexception class inexceptions.py(for symmetry withToolErrorandResourceError)
This is ~15 lines of implementation across 4 source files, plus tests. Purely additive, no breaking changes.
References
- #711 — Original issue requesting dynamic tool/resource removal (closed, only tools were addressed)
- #1322 — PR that added
remove_tool()(the pattern this proposal follows)
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia leggendo l’implementazione esistente di remove_tool() e i relativi test, quindi esamina PromptManager, ResourceManager, MCPServer ed exceptions.py. Aggiungi i metodi di rimozione corrispondenti e PromptError come descritto, con test che coprano la rimozione riuscita e i nomi o URI mancanti. Il lavoro è completo quando prompt, risorse e template delle risorse possono essere rimossi tramite l’API pubblica di MCPServer senza accedere ai manager privati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- backend-api-design
- Tipo di issue
- Funzionalità
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 72/100