Coverage for src/data_api/mcp/errors.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-11-13 19:28 +0000

1"""Safe tool errors for live integrations.""" 

2 

3import logging 

4from collections.abc import Iterator 

5from contextlib import contextmanager 

6 

7from fastmcp.exceptions import ToolError 

8 

9from data_api.core.exceptions import INTERNAL_ERROR_DETAIL, UpstreamException 

10 

11logger = logging.getLogger(__name__) 

12 

13 

14@contextmanager 

15def live_tool_errors() -> Iterator[None]: 

16 try: 

17 yield 

18 except UpstreamException as exc: 

19 logger.warning("Live MCP upstream request failed", exc_info=exc) 

20 raise ToolError(exc.detail) from exc 

21 except Exception as exc: 

22 logger.error("Unexpected live MCP tool failure", exc_info=exc) 

23 raise ToolError(INTERNAL_ERROR_DETAIL) from exc