Exception type raised when an error arrives over an MCP connection.
| 17 | |
| 18 | |
| 19 | class MCPError(Exception): |
| 20 | """Exception type raised when an error arrives over an MCP connection.""" |
| 21 | |
| 22 | error: ErrorData |
| 23 | |
| 24 | def __init__(self, code: int, message: str, data: Any = None): |
| 25 | super().__init__(code, message, data) |
| 26 | if data is not None: |
| 27 | self.error = ErrorData(code=code, message=message, data=data) |
| 28 | else: |
| 29 | self.error = ErrorData(code=code, message=message) |
| 30 | |
| 31 | @property |
| 32 | def code(self) -> int: |
| 33 | return self.error.code |
| 34 | |
| 35 | @property |
| 36 | def message(self) -> str: |
| 37 | return self.error.message |
| 38 | |
| 39 | @property |
| 40 | def data(self) -> Any: |
| 41 | return self.error.data # pragma: no cover |
| 42 | |
| 43 | @classmethod |
| 44 | def from_jsonrpc_error(cls, error: JSONRPCError) -> MCPError: |
| 45 | return cls.from_error_data(error.error) |
| 46 | |
| 47 | @classmethod |
| 48 | def from_error_data(cls, error: ErrorData) -> MCPError: |
| 49 | return cls(code=error.code, message=error.message, data=error.data) |
| 50 | |
| 51 | def __str__(self) -> str: |
| 52 | return self.message |
| 53 | |
| 54 | |
| 55 | class NoBackChannelError(MCPError): |
no outgoing calls