Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/mcp/server/mcpserver/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ class ResourceError(MCPServerError):
"""Error in resource operations."""


class PromptError(MCPServerError):
"""Error in prompt operations."""


class ToolError(MCPServerError):
"""Error in tool operations."""

Expand Down
14 changes: 14 additions & 0 deletions src/mcp/server/mcpserver/prompts/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from typing import TYPE_CHECKING, Any

from mcp.server.mcpserver.exceptions import PromptError
from mcp.server.mcpserver.prompts.base import Message, Prompt
from mcp.server.mcpserver.utilities.logging import get_logger

Expand Down Expand Up @@ -45,6 +46,19 @@ def add_prompt(
self._prompts[prompt.name] = prompt
return prompt

def remove_prompt(self, name: str) -> None:
"""Remove a prompt by name.

Args:
name: The name of the prompt to remove

Raises:
PromptError: If the prompt does not exist
"""
if name not in self._prompts:
raise PromptError(f"Unknown prompt: {name}")
del self._prompts[name]

async def render_prompt(
self,
name: str,
Expand Down
27 changes: 27 additions & 0 deletions src/mcp/server/mcpserver/resources/resource_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from pydantic import AnyUrl

from mcp.server.mcpserver.exceptions import ResourceError
from mcp.server.mcpserver.resources.base import Resource
from mcp.server.mcpserver.resources.templates import ResourceTemplate
from mcp.server.mcpserver.utilities.logging import get_logger
Expand Down Expand Up @@ -108,3 +109,29 @@ def list_templates(self) -> list[ResourceTemplate]:
"""List all registered templates."""
logger.debug("Listing templates", extra={"count": len(self._templates)})
return list(self._templates.values())

def remove_resource(self, uri: str) -> None:
"""Remove a resource by URI.

Args:
uri: The URI of the resource to remove

Raises:
ResourceError: If the resource does not exist
"""
if uri not in self._resources:
raise ResourceError(f"Unknown resource: {uri}")
del self._resources[uri]

def remove_template(self, uri_template: str) -> None:
"""Remove a resource template by URI template.

Args:
uri_template: The URI template of the template to remove

Raises:
ResourceError: If the template does not exist
"""
if uri_template not in self._templates:
raise ResourceError(f"Unknown template: {uri_template}")
del self._templates[uri_template]
33 changes: 33 additions & 0 deletions src/mcp/server/mcpserver/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,39 @@ def remove_tool(self, name: str) -> None:
"""
self._tool_manager.remove_tool(name)

def remove_prompt(self, name: str) -> None:
"""Remove a prompt from the server by name.

Args:
name: The name of the prompt to remove

Raises:
PromptError: If the prompt does not exist
"""
self._prompt_manager.remove_prompt(name)

def remove_resource(self, uri: str) -> None:
"""Remove a resource from the server by URI.

Args:
uri: The URI of the resource to remove

Raises:
ResourceError: If the resource does not exist
"""
self._resource_manager.remove_resource(uri)

def remove_resource_template(self, uri_template: str) -> None:
"""Remove a resource template from the server by URI template.

Args:
uri_template: The URI template of the template to remove

Raises:
ResourceError: If the template does not exist
"""
self._resource_manager.remove_template(uri_template)

def tool(
self,
name: str | None = None,
Expand Down
Loading