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)