Skip to main content
Glama

search_sayistay_unified

Search and retrieve audit decisions from the Turkish Court of Accounts (Sayıştay) across General Assembly, Appeals Board, and Chamber decisions with filtering by date, administration type, subject, and other criteria.

Instructions

Use this when searching Turkish Court of Accounts (Sayıştay) audit decisions. Supports Genel Kurul, Temyiz Kurulu, and Daire decisions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
decision_typeYesDecision type: genel_kurul, temyiz_kurulu, or daire
startNoStarting record for pagination (0-based)
lengthNoNumber of records per page (1-100)
karar_tarih_baslangicNoStart date (DD.MM.YYYY format)
karar_tarih_bitisNoEnd date (DD.MM.YYYY format)
kamu_idaresi_turuNoPublic administration type filterALL
ilam_noNoAudit report number (İlam No, max 50 chars)
web_karar_konusuNoDecision subject category filterALL
karar_noNoDecision number (genel_kurul only)
karar_ekNoDecision appendix number (genel_kurul only)
karar_tamamiNoFull text search (genel_kurul only)
ilam_dairesiNoAudit chamber selection (temyiz_kurulu only)ALL
yiliNoYear (YYYY format, temyiz_kurulu only)
dosya_noNoFile number (temyiz_kurulu only)
temyiz_tutanak_noNoAppeals board meeting minutes number (temyiz_kurulu only)
temyiz_kararNoAppeals decision text search (temyiz_kurulu only)
yargilama_dairesiNoChamber selection (daire only)ALL
hesap_yiliNoAccount year (daire only)
web_karar_metniNoDecision text search (daire only)

Implementation Reference

  • Core handler logic for search_sayistay_unified tool: routes unified search requests to specific Sayistay decision type searches (genel_kurul, temyiz_kurulu, daire) and normalizes responses.
    async def search_unified(self, params: SayistayUnifiedSearchRequest) -> SayistayUnifiedSearchResult: """Unified search that routes to appropriate search method based on decision_type.""" if params.decision_type == "genel_kurul": # Convert to genel kurul request genel_kurul_params = GenelKurulSearchRequest( karar_no=params.karar_no, karar_ek=params.karar_ek, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, karar_tamami=params.karar_tamami, start=params.start, length=params.length ) result = await self.client.search_genel_kurul_decisions(genel_kurul_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="genel_kurul", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) elif params.decision_type == "temyiz_kurulu": # Convert to temyiz kurulu request temyiz_params = TemyizKuruluSearchRequest( ilam_dairesi=params.ilam_dairesi, yili=params.yili, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, kamu_idaresi_turu=params.kamu_idaresi_turu, ilam_no=params.ilam_no, dosya_no=params.dosya_no, temyiz_tutanak_no=params.temyiz_tutanak_no, temyiz_karar=params.temyiz_karar, web_karar_konusu=params.web_karar_konusu, start=params.start, length=params.length ) result = await self.client.search_temyiz_kurulu_decisions(temyiz_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="temyiz_kurulu", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) elif params.decision_type == "daire": # Convert to daire request daire_params = DaireSearchRequest( yargilama_dairesi=params.yargilama_dairesi, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, ilam_no=params.ilam_no, kamu_idaresi_turu=params.kamu_idaresi_turu, hesap_yili=params.hesap_yili, web_karar_konusu=params.web_karar_konusu, web_karar_metni=params.web_karar_metni, start=params.start, length=params.length ) result = await self.client.search_daire_decisions(daire_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="daire", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) else: raise ValueError(f"Unsupported decision type: {params.decision_type}")
  • Pydantic schemas for tool input (SayistayUnifiedSearchRequest) and output (SayistayUnifiedSearchResult), defining parameters for all Sayistay decision types with unified interface.
    class SayistayUnifiedSearchRequest(BaseModel): """Unified search request for all Sayıştay decision types.""" decision_type: Literal["genel_kurul", "temyiz_kurulu", "daire"] = Field(..., description="Decision type: genel_kurul, temyiz_kurulu, or daire") # Common pagination parameters start: int = Field(0, ge=0, description="Starting record for pagination (0-based)") length: int = Field(10, ge=1, le=100, description="Number of records per page (1-100)") # Common search parameters karar_tarih_baslangic: str = Field("", description="Start date (DD.MM.YYYY format)") karar_tarih_bitis: str = Field("", description="End date (DD.MM.YYYY format)") kamu_idaresi_turu: KamuIdaresiTuruEnum = Field("ALL", description="Public administration type filter") ilam_no: str = Field("", description="Audit report number (İlam No, max 50 chars)") web_karar_konusu: WebKararKonusuEnum = Field("ALL", description="Decision subject category filter") # Genel Kurul specific parameters (ignored for other types) karar_no: str = Field("", description="Decision number (genel_kurul only)") karar_ek: str = Field("", description="Decision appendix number (genel_kurul only)") karar_tamami: str = Field("", description="Full text search (genel_kurul only)") # Temyiz Kurulu specific parameters (ignored for other types) ilam_dairesi: DaireEnum = Field("ALL", description="Audit chamber selection (temyiz_kurulu only)") yili: str = Field("", description="Year (YYYY format, temyiz_kurulu only)") dosya_no: str = Field("", description="File number (temyiz_kurulu only)") temyiz_tutanak_no: str = Field("", description="Appeals board meeting minutes number (temyiz_kurulu only)") temyiz_karar: str = Field("", description="Appeals decision text search (temyiz_kurulu only)") # Daire specific parameters (ignored for other types) yargilama_dairesi: DaireEnum = Field("ALL", description="Chamber selection (daire only)") hesap_yili: str = Field("", description="Account year (daire only)") web_karar_metni: str = Field("", description="Decision text search (daire only)") class SayistayUnifiedSearchResult(BaseModel): """Unified search result containing decisions from any Sayıştay decision type.""" decision_type: Literal["genel_kurul", "temyiz_kurulu", "daire"] = Field(..., description="Type of decisions returned") decisions: List[Dict[str, Any]] = Field(default_factory=list, description="Decision list (structure varies by type)") total_records: int = Field(0, description="Total number of records found") total_filtered: int = Field(0, description="Number of records after filtering") draw: int = Field(1, description="DataTables draw counter")
  • SayistayUnifiedClient class providing unified interface over SayistayApiClient, used by the tool handler.
    class SayistayUnifiedClient: """Unified client that handles all three Sayıştay decision types.""" def __init__(self, request_timeout: float = 60.0): self.client = SayistayApiClient(request_timeout) async def search_unified(self, params: SayistayUnifiedSearchRequest) -> SayistayUnifiedSearchResult: """Unified search that routes to appropriate search method based on decision_type.""" if params.decision_type == "genel_kurul": # Convert to genel kurul request genel_kurul_params = GenelKurulSearchRequest( karar_no=params.karar_no, karar_ek=params.karar_ek, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, karar_tamami=params.karar_tamami, start=params.start, length=params.length ) result = await self.client.search_genel_kurul_decisions(genel_kurul_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="genel_kurul", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) elif params.decision_type == "temyiz_kurulu": # Convert to temyiz kurulu request temyiz_params = TemyizKuruluSearchRequest( ilam_dairesi=params.ilam_dairesi, yili=params.yili, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, kamu_idaresi_turu=params.kamu_idaresi_turu, ilam_no=params.ilam_no, dosya_no=params.dosya_no, temyiz_tutanak_no=params.temyiz_tutanak_no, temyiz_karar=params.temyiz_karar, web_karar_konusu=params.web_karar_konusu, start=params.start, length=params.length ) result = await self.client.search_temyiz_kurulu_decisions(temyiz_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="temyiz_kurulu", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) elif params.decision_type == "daire": # Convert to daire request daire_params = DaireSearchRequest( yargilama_dairesi=params.yargilama_dairesi, karar_tarih_baslangic=params.karar_tarih_baslangic, karar_tarih_bitis=params.karar_tarih_bitis, ilam_no=params.ilam_no, kamu_idaresi_turu=params.kamu_idaresi_turu, hesap_yili=params.hesap_yili, web_karar_konusu=params.web_karar_konusu, web_karar_metni=params.web_karar_metni, start=params.start, length=params.length ) result = await self.client.search_daire_decisions(daire_params) # Convert to unified format decisions_list = [decision.model_dump() for decision in result.decisions] return SayistayUnifiedSearchResult( decision_type="daire", decisions=decisions_list, total_records=result.total_records, total_filtered=result.total_filtered, draw=result.draw ) else: raise ValueError(f"Unsupported decision type: {params.decision_type}") async def get_document_unified(self, decision_id: str, decision_type: str) -> SayistayUnifiedDocumentMarkdown: """Unified document retrieval for all Sayıştay decision types.""" # Use existing client method (decision_type is already a string) result = await self.client.get_document_as_markdown(decision_id, decision_type) return SayistayUnifiedDocumentMarkdown( decision_type=decision_type, decision_id=result.decision_id, source_url=result.source_url, document_data=result.model_dump(), markdown_content=result.markdown_content, error_message=result.error_message ) async def close_client_session(self):
  • Underlying SayistayApiClient class implementing low-level HTTP API calls to Sayistay website for each decision type search and document retrieval.
    class SayistayApiClient:
  • Authorization policy registration for search_sayistay tools, confirming the tool name pattern used in the MCP server.
    engine.add_tool_scope_policy("search_sayistay.*", ["mcp:tools:read"])

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