Skip to main content
Glama

search_anayasa_unified

Search Turkish Constitutional Court decisions for norm control (legislation review) or individual applications (rights violations) using keywords, dates, and filters.

Instructions

Use this when searching Turkish Constitutional Court decisions. Supports both norm control (legislation review) and individual applications (rights violations).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
decision_typeYesDecision type: norm_denetimi (norm control) or bireysel_basvuru (individual applications)
keywordsNoKeywords to search for (common parameter)
page_to_fetchNoPage number to fetch (1-100)
keywords_allNoAll keywords must be present (norm_denetimi only)
keywords_anyNoAny of these keywords (norm_denetimi only)
decision_type_normNoDecision type for norm denetimiALL
application_date_startNoApplication start date (norm_denetimi only)
application_date_endNoApplication end date (norm_denetimi only)
decision_start_dateNoDecision start date (bireysel_basvuru only)
decision_end_dateNoDecision end date (bireysel_basvuru only)
norm_typeNoNorm type (bireysel_basvuru only)ALL
subject_categoryNoSubject category (bireysel_basvuru only)

Implementation Reference

  • Core tool handler: Unified search function that routes to norm denetimi or bireysel basvuru clients based on decision_type parameter. Implements the main search logic for the tool.
    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}")
  • Input schema for the unified Anayasa search tool, defining parameters like decision_type, keywords, pagination, etc.
    class AnayasaUnifiedSearchRequest(BaseModel): """Unified search request for both Norm Denetimi and Bireysel Başvuru.""" decision_type: Literal["norm_denetimi", "bireysel_basvuru"] = Field(..., description="Decision type: norm_denetimi or bireysel_basvuru") # Common parameters keywords: List[str] = Field(default_factory=list, description="Keywords to search for") page_to_fetch: int = Field(1, ge=1, le=100, description="Page number to fetch (1-100)") results_per_page: int = Field(10, ge=1, le=100, description="Results per page (1-100)") # Norm Denetimi specific parameters (ignored for bireysel_basvuru) keywords_all: List[str] = Field(default_factory=list, description="All keywords must be present (norm_denetimi only)") keywords_any: List[str] = Field(default_factory=list, description="Any of these keywords (norm_denetimi only)") decision_type_norm: Literal["ALL", "1", "2", "3"] = Field("ALL", description="Decision type for norm denetimi") application_date_start: str = Field("", description="Application start date (norm_denetimi only)") application_date_end: str = Field("", description="Application end date (norm_denetimi only)") # Bireysel Başvuru specific parameters (ignored for norm_denetimi) decision_start_date: str = Field("", description="Decision start date (bireysel_basvuru only)") decision_end_date: str = Field("", description="Decision end date (bireysel_basvuru only)") norm_type: Literal["ALL", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "0"] = Field("ALL", description="Norm type (bireysel_basvuru only)") subject_category: str = Field("", description="Subject category (bireysel_basvuru only)")
  • Output schema for the unified Anayasa search tool, containing decision_type, decisions list, total_records_found, etc.
    class AnayasaUnifiedSearchResult(BaseModel): """Unified search result containing decisions from either system.""" decision_type: Literal["norm_denetimi", "bireysel_basvuru"] = Field(..., description="Type of decisions returned") decisions: List[Dict[str, Any]] = Field(default_factory=list, description="Decision list (structure varies by type)") total_records_found: int = Field(0, description="Total number of records found") retrieved_page_number: int = Field(1, description="Page number that was retrieved")
  • Helper class providing the unified client instance used by the tool handler, initializes norm and bireysel clients.
    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}") 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}") async def close_client_session(self): """Close both client sessions.""" if hasattr(self.norm_client, 'close_client_session'): await self.norm_client.close_client_session() if hasattr(self.bireysel_client, 'close_client_session'): await self.bireysel_client.close_client_session()
  • Client initialization for underlying norm_denetimi and bireysel_basvuru API clients.
    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