"""MCP server instance for RegisterUZ."""
from __future__ import annotations
import inspect
from typing import Any, Dict
from fastmcp import FastMCP
from fastmcp.tools.tool import FunctionTool
from .prompts import register_prompts
from .resources import register_resources
from .tools import register_all_tools
# Monkey-patch FunctionTool.run to ignore extra parameters
_original_run = FunctionTool.run
async def _run_with_arg_sanitizer(
self: FunctionTool, arguments: Dict[str, Any]
) -> Any:
"""
Sanitize tool arguments before FastMCP does its strict parameter validation.
Drops keys that are not in the underlying function's signature
(e.g., sessionId, toolCallId, chatInput, action).
"""
# if not a dict, just pass through
if not isinstance(arguments, dict):
return await _original_run(self, arguments)
# Cache allowed parameter names per tool
if not hasattr(self, "_allowed_parameter_names"):
signature = inspect.signature(self.fn)
self._allowed_parameter_names = tuple(signature.parameters.keys())
allowed = getattr(self, "_allowed_parameter_names")
sanitized = {k: v for k, v in arguments.items() if k in allowed}
# Call the original FastMCP logic with the cleaned args
return await _original_run(self, sanitized)
FunctionTool.run = _run_with_arg_sanitizer # type: ignore[method-assign]
# Create the MCP server instance
mcp = FastMCP(
name="RegisterUZ",
instructions="""
MCP server for the Slovak Registry of Financial Statements (Register účtovných závierok).
This server provides access to public accounting data from Slovak companies and organizations,
including financial statements, annual reports, and accounting closures.
Data sources include: Statistical Office (ŠÚSR), State Treasury (SP), DataCentrum (DC),
Financial Administration (FRSR), Unified State Accounting (JUS), Commercial Register (OVSR),
Central Consolidation System (CKS), and Municipal Budget System (SAM).
All dates use ISO 8601 format (YYYY-MM-DD), periods as (YYYY-MM).
Data is licensed under CC0 (Public Domain).
API documentation: https://www.registeruz.sk/cruz-public/home/api
""",
)
# Register all components
register_all_tools(mcp)
register_resources(mcp)
register_prompts(mcp)