# mcp_server/tools/judges.py import httpx import json from fastmcp import FastMCP from typing import Optional from pydantic import Field JUSTICE_API = "https://obcan.justice.sk/pilot/api/ress-isu-service" HEADERS = { "User-Agent": "Mozilla/5.0", "Accept": "application/json", "Accept-Language": "sk-SK,sk;q=0.9", } async def _get(path: str, params: dict) -> dict: clean = {k: v for k, v in params.items() if v is not None} async with httpx.AsyncClient(timeout=10.0) as client: r = await client.get( f"{JUSTICE_API}{path}", params=clean, headers=HEADERS ) r.raise_for_status() return r.json() def register_judge_tools(mcp: FastMCP): @mcp.tool() async def judge_autocomplete( query: str, court_id: Optional[str] = None, limit: int = Field(default=10, description="Maximálny počet výsledkov"), ) -> str: """ Autocomplete pre mená sudcov — použiť AKO PRVÝ krok pri hľadaní sudcu podľa mena. """ result = await _get("/v1/sudca/autocomplete", { "query": query, "guidSud": court_id, "limit": limit, }) return json.dumps(result, ensure_ascii=False) @mcp.tool() async def judge_search( query: Optional[str] = None, kraj: Optional[str] = None, court_id: Optional[str] = None, status: Optional[str] = None, page: int = Field(default=0, description="Číslo stránky (začína od 0)"), size: int = Field(default=20, description="Počet výsledkov na stránku"), ) -> str: """ Vyhľadávanie sudcov s filtrami. Používať ak autocomplete nevráti výsledky. """ result = await _get("/v1/sudca", { "query": query, "krajFacetFilter": kraj, "guidSud": court_id, "stavZapisuFacetFilter": status, "page": page, "size": size, }) return json.dumps(result, ensure_ascii=False) @mcp.tool() async def judge_by_id(judge_id: str) -> str: """ Detailné informácie o konkrétnom sudcovi podľa ID. judge_id: ID sudcu (napr. "sudca_42") """ if judge_id.isdigit(): judge_id = f"sudca_{judge_id}" result = await _get(f"/v1/sudca/{judge_id}", {}) return json.dumps(result, ensure_ascii=False)