legal-ai-assistant/backend/tools/mcp/server.py

75 lines
4.4 KiB
Python

from fastmcp import FastMCP
from backend.tools.mcp.factory import create_tool
from backend.tools.api.schemas import (
CourtSearch, CourtByID, CourtAutocomplete,
JudgeSearch, JudgeByID, JudgeAutocomplete,
DecisionSearch, DecisionByID, DecisionAutocomplete,
ContractSearch, ContractByID, ContractAutocomplete,
CivilProceedingsSearch, CivilProceedingsByID, CivilProceedingsAutocomplete,
AdminProceedingsSearch, AdminProceedingsByID, AdminProceedingsAutocomplete,
ExecutorSearch, ExecutorByID, ExecutorByECE, ExecutorAutocomplete,
)
TOOLS = [
# .../v1/sud — Courts
{"name": "court_search", "route": "/sud", "schema": CourtSearch, "remove_keys": None},
{"name": "court_id", "route": "/sud/{id}", "schema": CourtByID, "remove_keys": ["foto"]},
{"name": "court_autocomplete", "route": "/sud/autocomplete", "schema": CourtAutocomplete, "remove_keys": None},
# .../v1/sudca — Judges
{"name": "judge_search", "route": "/sudca", "schema": JudgeSearch, "remove_keys": ["sudcaMapList"]},
{"name": "judge_id", "route": "/sudca/{id}", "schema": JudgeByID, "remove_keys": None},
{"name": "judge_autocomplete", "route": "/sudca/autocomplete", "schema": JudgeAutocomplete, "remove_keys": None},
# .../v1/rozhodnutie — Decisions
{"name": "decision_search", "route": "/rozhodnutie", "schema": DecisionSearch, "remove_keys": None},
{"name": "decision_id", "route": "/rozhodnutie/{id}", "schema": DecisionByID, "remove_keys": None},
{"name": "decision_autocomplete", "route": "/rozhodnutie/autocomplete","schema": DecisionAutocomplete, "remove_keys": None},
# .../v1/zmluvy — Contracts
{"name": "contract_search", "route": "/zmluvy", "schema": ContractSearch, "remove_keys": None},
{"name": "contract_id", "route": "/zmluvy/{idZmluvy}", "schema": ContractByID, "remove_keys": None},
{"name": "contract_autocomplete", "route": "/zmluvy/autocomplete", "schema": ContractAutocomplete, "remove_keys": None},
# .../v1/obcianPojednavania — Civil Proceedings
{"name": "civil_proceedings_search", "route": "/obcianPojednavania", "schema": CivilProceedingsSearch, "remove_keys": None},
{"name": "civil_proceedings_id", "route": "/obcianPojednavania/{id}", "schema": CivilProceedingsByID, "remove_keys": None},
{"name": "civil_proceedings_autocomplete", "route": "/obcianPojednavania/autocomplete","schema": CivilProceedingsAutocomplete, "remove_keys": None},
# .../v1/spravneKonanie — Administrative Proceedings
{"name": "admin_proceedings_search", "route": "/spravneKonanie", "schema": AdminProceedingsSearch, "remove_keys": None},
{"name": "admin_proceedings_id", "route": "/spravneKonanie/{id}", "schema": AdminProceedingsByID, "remove_keys": None},
{"name": "admin_proceedings_autocomplete", "route": "/spravneKonanie/autocomplete","schema": AdminProceedingsAutocomplete, "remove_keys": None},
# .../v1/exekutor — Executor
{"name": "executor_search", "route": "/exekutor", "schema": ExecutorSearch, "remove_keys": None},
{"name": "executor_ece", "route": "/exekutor/ec/{ece}", "schema": ExecutorByECE, "remove_keys": None},
{"name": "executor_id", "route": "/exekutor/{id}", "schema": ExecutorByID, "remove_keys": None},
{"name": "executor_autocomplete", "route": "/exekutor/autocomplete","schema": ExecutorAutocomplete, "remove_keys": None},
]
mcp = FastMCP(
name="Slovak Justice API",
instructions="""
This MCP server provides access to public APIs of the
Ministry of Justice of the Slovak Republic.
It contains tools for searching for courts, judges,
decisions, contracts and proceedings.
"""
)
def register_tools():
for tool in TOOLS:
tool_function = create_tool(
route=tool["route"],
schema=tool["schema"],
remove_keys=tool.get("remove_keys")
)
mcp.tool(name=tool["name"])(tool_function)
register_tools()
if __name__ == "__main__":
mcp.run(transport="streamable-http", host="0.0.0.0", port=8002)