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
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""Safe tool errors for live integrations."""
3import logging
4from collections.abc import Iterator
5from contextlib import contextmanager
7from fastmcp.exceptions import ToolError
9from data_api.core.exceptions import INTERNAL_ERROR_DETAIL, UpstreamException
11logger = logging.getLogger(__name__)
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