diff --git a/src/mcp/server/__init__.py b/src/mcp/server/__init__.py index ae78f367c..de155ac81 100644 --- a/src/mcp/server/__init__.py +++ b/src/mcp/server/__init__.py @@ -12,6 +12,7 @@ from mcp.server.session import ServerSession from mcp.server.stdio import stdio_server as stdio_server from mcp.shared.context import RequestContext +from mcp.shared.exceptions import McpError from mcp.shared.session import RequestResponder logger = logging.getLogger(__name__) @@ -331,8 +332,8 @@ async def run( read_stream: MemoryObjectReceiveStream[types.JSONRPCMessage | Exception], write_stream: MemoryObjectSendStream[types.JSONRPCMessage], initialization_options: InitializationOptions, - # When True, exceptions are returned as messages to the client. - # When False, exceptions are raised, which will cause the server to shut down + # When False, exceptions are returned as messages to the client. + # When True, exceptions are raised, which will cause the server to shut down # but also make tracing exceptions much easier during testing and when using # in-process servers. raise_exceptions: bool = False, @@ -367,6 +368,8 @@ async def run( ) ) response = await handler(req) + except McpError as err: + response = err.error except Exception as err: if raise_exceptions: raise err