77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
# 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) |