Coverage for src/qdrant_loader_mcp_server/fastmcp_tools/_common.py: 45%

11 statements  

« prev     ^ index     » next       coverage.py v7.15.0, created at 2026-07-20 10:15 +0000

1"""Shared helpers for FastMCP tool modules that delegate to legacy handlers.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7from fastmcp.exceptions import ToolError 

8 

9# Sentinel id for delegated legacy-handler calls. The handler uses it only to 

10# build a JSON-RPC envelope we immediately unwrap; any non-None value works. 

11REQUEST_ID = "fastmcp" 

12 

13 

14def unwrap(response: dict[str, Any]) -> dict[str, Any]: 

15 """Return structuredContent from a legacy handler response, or raise.""" 

16 if "error" in response: 

17 err = response.get("error") or {} 

18 msg = err.get("message", "Tool error") 

19 data = err.get("data") 

20 raise ToolError(f"{msg}: {data}" if data else msg) 

21 return response.get("result", {}).get("structuredContent", {})