Skip to main content
Glama

get_anayasa_document_unified

Retrieve unified Constitutional Court decisions by analyzing URL to distinguish between norm control and individual application cases.

Instructions

Unified document retrieval for Constitutional Court decisions: auto-detects norm control vs individual applications based on URL

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
document_urlYesDocument URL from search results
page_numberNoPage number for paginated content (1-indexed)

Implementation Reference

  • MCP tool registration and handler: @app.tool decorator registers 'get_anayasa_document_unified' which calls the unified client to retrieve and serialize the document as JSON.
    description="Unified document retrieval for Constitutional Court decisions: auto-detects norm control vs individual applications based on URL", annotations={ "readOnlyHint": True, "openWorldHint": False, "idempotentHint": True } ) async def get_anayasa_document_unified( document_url: str = Field(..., description="Document URL from search results"), page_number: int = Field(1, ge=1, description="Page number for paginated content (1-indexed)") ) -> str: logger.info(f"Tool 'get_anayasa_document_unified' called for URL: {document_url}, Page: {page_number}") try: result = await anayasa_unified_client_instance.get_document_unified(document_url, page_number) return json.dumps(result.model_dump(mode='json'), ensure_ascii=False, indent=2) except Exception as e: logger.exception(f"Error in tool 'get_anayasa_document_unified'.") raise
  • Core handler logic in AnayasaUnifiedClient: auto-detects norm denetimi or bireysel başvuru based on URL patterns and delegates to appropriate sub-client for Markdown conversion.
    async def get_document_unified(self, document_url: str, page_number: int = 1) -> AnayasaUnifiedDocumentMarkdown: """Unified document retrieval that auto-detects the appropriate client.""" # Auto-detect decision type based on URL parsed_url = urlparse(document_url) if "normkararlarbilgibankasi" in parsed_url.netloc or "/ND/" in document_url: # Norm Denetimi document result = await self.norm_client.get_decision_document_as_markdown(document_url, page_number) return AnayasaUnifiedDocumentMarkdown( decision_type="norm_denetimi", source_url=result.source_url, document_data=result.model_dump(), markdown_chunk=result.markdown_chunk, current_page=result.current_page, total_pages=result.total_pages, is_paginated=result.is_paginated ) elif "kararlarbilgibankasi" in parsed_url.netloc or "/BB/" in document_url: # Bireysel Başvuru document result = await self.bireysel_client.get_decision_document_as_markdown(document_url, page_number) return AnayasaUnifiedDocumentMarkdown( decision_type="bireysel_basvuru", source_url=result.source_url, document_data=result.model_dump(), markdown_chunk=result.markdown_chunk, current_page=result.current_page, total_pages=result.total_pages, is_paginated=result.is_paginated ) else: raise ValueError(f"Cannot determine document type from URL: {document_url}")
  • Pydantic schema defining the unified output structure for Anayasa Mahkemesi documents from both subsystems.
    class AnayasaUnifiedDocumentMarkdown(BaseModel): """Unified document model for both Norm Denetimi and Bireysel Başvuru.""" decision_type: Literal["norm_denetimi", "bireysel_basvuru"] = Field(..., description="Type of document") source_url: HttpUrl = Field(..., description="Source URL of the document") document_data: Dict[str, Any] = Field(default_factory=dict, description="Document content and metadata") markdown_chunk: Optional[str] = Field(None, description="Markdown content chunk") current_page: int = Field(1, description="Current page number") total_pages: int = Field(1, description="Total number of pages") is_paginated: bool = Field(False, description="Whether document is paginated")
  • Global singleton instance of AnayasaUnifiedClient used by the MCP tool handlers.
    anayasa_unified_client_instance = AnayasaUnifiedClient()
  • AnayasaUnifiedClient class: initializes sub-clients and provides unified interface for search and document retrieval.
    class AnayasaUnifiedClient: """Unified client that handles both Norm Denetimi and Bireysel Başvuru searches.""" def __init__(self, request_timeout: float = 60.0): self.norm_client = AnayasaMahkemesiApiClient(request_timeout) self.bireysel_client = AnayasaBireyselBasvuruApiClient(request_timeout) async def search_unified(self, params: AnayasaUnifiedSearchRequest) -> AnayasaUnifiedSearchResult: """Unified search that routes to appropriate client based on decision_type.""" if params.decision_type == "norm_denetimi": # Convert to norm denetimi request norm_params = AnayasaNormDenetimiSearchRequest( keywords_all=params.keywords_all or params.keywords, keywords_any=params.keywords_any, application_type=params.decision_type_norm, page_to_fetch=params.page_to_fetch, results_per_page=params.results_per_page ) result = await self.norm_client.search_norm_denetimi_decisions(norm_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return AnayasaUnifiedSearchResult( decision_type="norm_denetimi", decisions=decisions_list, total_records_found=result.total_records_found, retrieved_page_number=result.retrieved_page_number ) elif params.decision_type == "bireysel_basvuru": # Convert to bireysel başvuru request bireysel_params = AnayasaBireyselReportSearchRequest( keywords=params.keywords, decision_start_date=params.decision_start_date, decision_end_date=params.decision_end_date, norm_type=params.norm_type, subject_category=params.subject_category, page_to_fetch=params.page_to_fetch, results_per_page=params.results_per_page ) result = await self.bireysel_client.search_bireysel_basvuru_report(bireysel_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return AnayasaUnifiedSearchResult( decision_type="bireysel_basvuru", decisions=decisions_list, total_records_found=result.total_records_found, retrieved_page_number=result.retrieved_page_number ) else: raise ValueError(f"Unsupported decision type: {params.decision_type}")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/saidsurucu/yargi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server