|
31 | 31 | from mcp.server.lowlevel.server import LifespanResultT, Server |
32 | 32 | from mcp.server.lowlevel.server import lifespan as default_lifespan |
33 | 33 | from mcp.server.mcpserver.context import Context |
34 | | -from mcp.server.mcpserver.exceptions import ResourceError |
| 34 | +from mcp.server.mcpserver.exceptions import ResourceError, ResourceNotFoundError |
35 | 35 | from mcp.server.mcpserver.prompts import Prompt, PromptManager |
36 | 36 | from mcp.server.mcpserver.resources import FunctionResource, Resource, ResourceManager |
37 | 37 | from mcp.server.mcpserver.tools import Tool, ToolManager |
|
44 | 44 | from mcp.server.transport_security import TransportSecuritySettings |
45 | 45 | from mcp.shared.exceptions import MCPError |
46 | 46 | from mcp.types import ( |
| 47 | + RESOURCE_NOT_FOUND, |
47 | 48 | Annotations, |
48 | 49 | BlobResourceContents, |
49 | 50 | CallToolRequestParams, |
@@ -341,7 +342,10 @@ async def _handle_read_resource( |
341 | 342 | self, ctx: ServerRequestContext[LifespanResultT], params: ReadResourceRequestParams |
342 | 343 | ) -> ReadResourceResult: |
343 | 344 | context = Context(request_context=ctx, mcp_server=self) |
344 | | - results = await self.read_resource(params.uri, context) |
| 345 | + try: |
| 346 | + results = await self.read_resource(params.uri, context) |
| 347 | + except ResourceNotFoundError as exc: |
| 348 | + raise MCPError(RESOURCE_NOT_FOUND, str(exc)) from exc |
345 | 349 | contents: list[TextResourceContents | BlobResourceContents] = [] |
346 | 350 | for item in results: |
347 | 351 | if isinstance(item.content, bytes): |
@@ -448,7 +452,7 @@ async def read_resource( |
448 | 452 | try: |
449 | 453 | resource = await self._resource_manager.get_resource(uri, context) |
450 | 454 | except ValueError as exc: |
451 | | - raise ResourceError(f"Unknown resource: {uri}") from exc |
| 455 | + raise ResourceNotFoundError(f"Unknown resource: {uri}") from exc |
452 | 456 |
|
453 | 457 | try: |
454 | 458 | content = await resource.read() |
|
0 commit comments