diff --git a/anayasa_mcp_module/models.py b/anayasa_mcp_module/models.py index dde3e06..d9bdd77 100644 --- a/anayasa_mcp_module/models.py +++ b/anayasa_mcp_module/models.py @@ -114,7 +114,7 @@ class AnayasaNormDenetimiSearchRequest(BaseModel): review_outcomes: Optional[List[AnayasaIncelemeSonucuEnum]] = Field(default_factory=list, description="List of review types and outcomes (IncelemeTuruKararSonuclar_id[]).") reason_for_final_outcome: Optional[AnayasaSonucGerekcesiEnum] = Field(default=AnayasaSonucGerekcesiEnum.TUMU, description="Main reason for the decision outcome (KararSonucununGerekcesi).") basis_constitution_article_numbers: Optional[List[str]] = Field(default_factory=list, description="List of supporting Constitution article numbers (DayanakHukmu[]).") - results_per_page: Optional[int] = Field(10, description="Number of results per page. Options: 10, 20, 30, 40, 50.") + results_per_page: Optional[int] = Field(10, ge=1, le=10, description="Results per page.") page_to_fetch: Optional[int] = Field(1, ge=1, description="Page number to fetch for results list.") sort_by_criteria: Optional[str] = Field("KararTarihi", description="Sort criteria. Options: 'KararTarihi', 'YayinTarihi', 'Toplam' (keyword count).") diff --git a/bedesten_mcp_module/models.py b/bedesten_mcp_module/models.py index c5edbc3..2ca6a0d 100644 --- a/bedesten_mcp_module/models.py +++ b/bedesten_mcp_module/models.py @@ -33,65 +33,15 @@ DanistayBirimEnum = Literal[ # Search Request Models class BedestenSearchData(BaseModel): - pageSize: int = Field(..., description="""Number of results per page. - Range: 1-100 results per page - Recommended: 10-50 for balanced performance - Higher values for comprehensive analysis""") - pageNumber: int = Field(..., description="""Page number to retrieve (1-indexed). - Start with 1 for first page - Calculate total pages from response.data.total / pageSize - Navigate: pageNumber=2 gets next set of results""") - itemTypeList: List[str] = Field(..., description="""Court type filter - determines which court decisions to search: - • ["YARGITAYKARARI"]: Court of Cassation (Yargıtay) - supreme court civil/criminal decisions - • ["DANISTAYKARAR"]: Council of State (Danıştay) - administrative court decisions - • ["YERELHUKUK"]: Local Civil Courts (Yerel Hukuk Mahkemeleri) - first instance civil decisions - • ["ISTINAFHUKUK"]: Civil Courts of Appeals (İstinaf Hukuk Mahkemeleri) - appellate court decisions - • ["KYB"]: Extraordinary Appeal (Kanun Yararına Bozma) - extraordinary appeal decisions - Note: Use single-item list for specific court type targeting""") - phrase: str = Field(..., description="""Search phrase/keyword with advanced search support: - • Regular search: "mülkiyet kararı" - searches words separately - • Exact phrase: "\"mülkiyet kararı\"" - searches exact phrase (more precise) - • Legal concepts: "\"idari işlem\"", "\"sözleşme ihlali\"", "\"tazminat davası\"" - • Empty string: searches all documents (use with filters) - Exact phrases significantly reduce false positives for precise legal research""") - birimAdi: Optional[Union[YargitayBirimEnum, DanistayBirimEnum]] = Field(None, description=""" - Chamber/Department (Daire) filter (optional). Available options depend on itemTypeList: - - For YARGITAYKARARI - Court of Cassation (52 options): - - None/null for ALL chambers - - 'Civil General Assembly (Hukuk Genel Kurulu)', '1st Civil Chamber (1. Hukuk Dairesi)' through '23rd Civil Chamber (23. Hukuk Dairesi)' - - 'Criminal General Assembly (Ceza Genel Kurulu)', '1st Criminal Chamber (1. Ceza Dairesi)' through '23rd Criminal Chamber (23. Ceza Dairesi)' - - 'Civil Chambers Presidents Board (Hukuk Daireleri Başkanlar Kurulu)', 'Criminal Chambers Presidents Board (Ceza Daireleri Başkanlar Kurulu)' - - 'Grand General Assembly (Büyük Genel Kurulu)' - - For DANISTAYKARAR - Council of State (27 options): - - None/null for ALL chambers - - 'Grand General Assembly (Büyük Gen.Kur.)', 'Administrative Cases Chambers Council (İdare Dava Daireleri Kurulu)', 'Tax Cases Chambers Council (Vergi Dava Daireleri Kurulu)' - - '1st Chamber (1. Daire)' through '17th Chamber (17. Daire)' - - 'Precedents Unification Council (İçtihatları Birleştirme Kurulu)', 'Administrative Affairs Council (İdari İşler Kurulu)', 'Presidents Council (Başkanlar Kurulu)' - - Military courts: 'Military High Administrative Court (Askeri Yüksek İdare Mahkemesi)' variants - """) - kararTarihiStart: Optional[str] = Field(None, description="""Decision start date (Karar Tarihi Başlangıç) filter (optional). - Format: YYYY-MM-DDTHH:MM:SS.000Z (ISO 8601 with Z timezone) - Examples: - • "2024-01-01T00:00:00.000Z" - from beginning of 2024 - • "2023-06-15T00:00:00.000Z" - from June 15, 2023 - • "2024-03-01T00:00:00.000Z" - from March 1, 2024 - Use with kararTarihiEnd for date range, or alone for "from date" filtering""") - kararTarihiEnd: Optional[str] = Field(None, description="""Decision end date (Karar Tarihi Bitiş) filter (optional). - Format: YYYY-MM-DDTHH:MM:SS.000Z (ISO 8601 with Z timezone) - Examples: - • "2024-12-31T23:59:59.999Z" - until end of 2024 - • "2023-12-31T23:59:59.999Z" - until end of 2023 - • "2024-06-30T23:59:59.999Z" - until end of June 2024 - Use with kararTarihiStart for date range, or alone for "until date" filtering""") - sortFields: List[str] = Field(default=["KARAR_TARIHI"], description="""Sorting field (Sıralama Alanı) specification. - ["KARAR_TARIHI"]: Sort by decision date (Karar Tarihi) [DEFAULT] - Most common use case for chronological ordering""") - sortDirection: str = Field(default="desc", description="""Sort direction (Sıralama Yönü) for results. - "desc": Descending order - newest decisions first [DEFAULT] - "asc": Ascending order - oldest decisions first - Recommended: "desc" for latest legal developments""") + pageSize: int = Field(..., description="Results per page (1-10)") + pageNumber: int = Field(..., description="Page number (1-indexed)") + itemTypeList: List[str] = Field(..., description="Court type filter (YARGITAYKARARI/DANISTAYKARAR/YERELHUKUK/ISTINAFHUKUK/KYB)") + phrase: str = Field(..., description="Search phrase (use \"exact phrase\" for precise matching)") + birimAdi: Optional[Union[YargitayBirimEnum, DanistayBirimEnum]] = Field(None, description="Chamber filter (optional)") + kararTarihiStart: Optional[str] = Field(None, description="Start date (ISO 8601 format)") + kararTarihiEnd: Optional[str] = Field(None, description="End date (ISO 8601 format)") + sortFields: List[str] = Field(default=["KARAR_TARIHI"], description="Sort fields") + sortDirection: str = Field(default="desc", description="Sort direction (asc/desc)") class BedestenSearchRequest(BaseModel): data: BedestenSearchData diff --git a/danistay_mcp_module/models.py b/danistay_mcp_module/models.py index 40280d4..0529aaa 100644 --- a/danistay_mcp_module/models.py +++ b/danistay_mcp_module/models.py @@ -5,7 +5,7 @@ from typing import List, Optional, Dict, Any class DanistayBaseSearchRequest(BaseModel): """Base model for common search parameters for Danistay.""" - pageSize: int = Field(default=10, ge=1, le=100) + pageSize: int = Field(default=10, ge=1, le=10) pageNumber: int = Field(default=1, ge=1) # siralama and siralamaDirection are part of detailed search, not necessarily keyword search # as per user's provided payloads. @@ -21,11 +21,11 @@ class DanistayKeywordSearchRequestData(BaseModel): class DanistayKeywordSearchRequest(BaseModel): # This is the model the MCP tool will accept """Model for keyword-based search request for Danistay.""" - andKelimeler: List[str] = Field(default_factory=list, description="Keywords for AND logic (VE Mantığı), e.g., ['word1', 'word2']") - orKelimeler: List[str] = Field(default_factory=list, description="Keywords for OR logic (VEYA Mantığı).") - notAndKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT AND logic (VE DEĞİL Mantığı).") - notOrKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT OR logic (VEYA DEĞİL Mantığı).") - pageSize: int = Field(default=10, ge=1, le=100) + andKelimeler: List[str] = Field(default_factory=list, description="AND keywords") + orKelimeler: List[str] = Field(default_factory=list, description="OR keywords") + notAndKelimeler: List[str] = Field(default_factory=list, description="NOT AND keywords") + notOrKelimeler: List[str] = Field(default_factory=list, description="NOT OR keywords") + pageSize: int = Field(default=10, ge=1, le=10) pageNumber: int = Field(default=1, ge=1) class DanistayDetailedSearchRequestData(BaseModel): # Internal data model for detailed search payload @@ -51,20 +51,20 @@ class DanistayDetailedSearchRequestData(BaseModel): # Internal data model for de class DanistayDetailedSearchRequest(DanistayBaseSearchRequest): # MCP tool will accept this """Model for detailed search request for Danistay.""" - daire: Optional[str] = Field(None, description="Chamber/Department name (e.g., '1. Daire').") - esasYil: Optional[str] = Field(None, description="Case year for 'Esas No'.") - esasIlkSiraNo: Optional[str] = Field(None, description="Starting sequence for 'Esas No'.") - esasSonSiraNo: Optional[str] = Field(None, description="Ending sequence for 'Esas No'.") - kararYil: Optional[str] = Field(None, description="Decision year for 'Karar No'.") - kararIlkSiraNo: Optional[str] = Field(None, description="Starting sequence for 'Karar No'.") - kararSonSiraNo: Optional[str] = Field(None, description="Ending sequence for 'Karar No'.") - baslangicTarihi: Optional[str] = Field(None, description="Start date for decision (DD.MM.YYYY).") - bitisTarihi: Optional[str] = Field(None, description="End date for decision (DD.MM.YYYY).") - mevzuatNumarasi: Optional[str] = Field(None, description="Legislation number.") - mevzuatAdi: Optional[str] = Field(None, description="Legislation name.") - madde: Optional[str] = Field(None, description="Article number.") - siralama: str = Field("1", description="Sorting criteria (e.g., 1: Esas No, 3: Karar Tarihi).") - siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc').") + daire: Optional[str] = Field(None, description="Chamber") + esasYil: Optional[str] = Field(None, description="Case year") + esasIlkSiraNo: Optional[str] = Field(None, description="Start case no") + esasSonSiraNo: Optional[str] = Field(None, description="End case no") + kararYil: Optional[str] = Field(None, description="Decision year") + kararIlkSiraNo: Optional[str] = Field(None, description="Start decision no") + kararSonSiraNo: Optional[str] = Field(None, description="End decision no") + baslangicTarihi: Optional[str] = Field(None, description="Start date") + bitisTarihi: Optional[str] = Field(None, description="End date") + mevzuatNumarasi: Optional[str] = Field(None, description="Law number") + mevzuatAdi: Optional[str] = Field(None, description="Law name") + madde: Optional[str] = Field(None, description="Article") + siralama: str = Field("1", description="Sort by") + siralamaDirection: str = Field("desc", description="Direction") # Add a general keyword field if detailed search also supports it # arananKelime: Optional[str] = Field(None, description="General keyword for detailed search.") @@ -76,15 +76,15 @@ class DanistayApiDecisionEntry(BaseModel): id: str # The API response for keyword search uses "daireKurul", detailed search example uses "daire". # We use an alias to handle both and map to a consistent field name "chamber". - chamber: Optional[str] = Field(None, alias="daire", description="The chamber or board.") + chamber: Optional[str] = Field(None, alias="daire", description="Chamber") esasNo: Optional[str] = Field(None) kararNo: Optional[str] = Field(None) kararTarihi: Optional[str] = Field(None) - arananKelime: Optional[str] = Field(None, description="Matched keyword (Aranan Kelime) if provided in response.") + arananKelime: Optional[str] = Field(None, description="Keyword") # index: Optional[int] = None # Present in response, can be added if needed by MCP tool # siraNo: Optional[int] = None # Present in detailed response, can be added - document_url: Optional[HttpUrl] = Field(None, description="URL (Belge URL) to the full document, constructed by the client.") + document_url: Optional[HttpUrl] = Field(None, description="Document URL") model_config = ConfigDict(populate_by_name=True, extra='ignore') # Important for alias to work and ignore extra fields @@ -93,7 +93,7 @@ class DanistayApiResponseInnerData(BaseModel): data: List[DanistayApiDecisionEntry] recordsTotal: int recordsFiltered: int - draw: Optional[int] = Field(None, description="Draw counter (Çizim Sayıcısı) from API, usually for DataTables.") + draw: Optional[int] = Field(None, description="Draw counter") class DanistayApiResponse(BaseModel): """Model for the complete search response from the Danistay API.""" diff --git a/emsal_mcp_module/models.py b/emsal_mcp_module/models.py index 216cc2c..fc54d49 100644 --- a/emsal_mcp_module/models.py +++ b/emsal_mcp_module/models.py @@ -17,7 +17,7 @@ class EmsalDetailedSearchRequestData(BaseModel): # Add other specific court type fields from the form if they are separate keys in payload # E.g., "Ceza Mahkemeleri", "İdari Mahkemeler" etc. - birimHukukMah: Optional[str] = Field("", description="List of selected Regional Civil Chambers (Bölge Hukuk Mahkemeleri), '+' separated.") + birimHukukMah: Optional[str] = Field("", description="Regional chambers (+ separated)") esasYil: Optional[str] = "" esasIlkSiraNo: Optional[str] = "" @@ -36,42 +36,42 @@ class EmsalDetailedSearchRequestData(BaseModel): class EmsalSearchRequest(BaseModel): # This is the model the MCP tool will accept """Model for Emsal detailed search request, with user-friendly field names.""" - keyword: Optional[str] = Field(None, description="Keyword (Anahtar Kelime) to search.") + keyword: Optional[str] = Field(None, description="Keyword") - selected_bam_civil_court: Optional[str] = Field(None, description="Selected BAM Civil Court (Seçilen BAM Hukuk Mahkemesi) (maps to 'Bam Hukuk Mahkemeleri' payload key).") - selected_civil_court: Optional[str] = Field(None, description="Selected Civil Court (Seçilen Hukuk Mahkemesi) (maps to 'Hukuk Mahkemeleri' payload key).") - selected_regional_civil_chambers: Optional[List[str]] = Field(default_factory=list, description="Selected Regional Civil Chambers (Seçilen Bölge Hukuk Daireleri) (for 'birimHukukMah', joined by '+').") + selected_bam_civil_court: Optional[str] = Field(None, description="BAM Civil Court") + selected_civil_court: Optional[str] = Field(None, description="Civil Court") + selected_regional_civil_chambers: Optional[List[str]] = Field(default_factory=list, description="Regional chambers") - case_year_esas: Optional[str] = Field(None, description="Case year (Dava Yılı) for 'Esas No'.") - case_start_seq_esas: Optional[str] = Field(None, description="Starting sequence (Başlangıç Sırası) for 'Esas No'.") - case_end_seq_esas: Optional[str] = Field(None, description="Ending sequence (Bitiş Sırası) for 'Esas No'.") + case_year_esas: Optional[str] = Field(None, description="Case year") + case_start_seq_esas: Optional[str] = Field(None, description="Start case no") + case_end_seq_esas: Optional[str] = Field(None, description="End case no") - decision_year_karar: Optional[str] = Field(None, description="Decision year (Karar Yılı) for 'Karar No'.") - decision_start_seq_karar: Optional[str] = Field(None, description="Starting sequence (Başlangıç Sırası) for 'Karar No'.") - decision_end_seq_karar: Optional[str] = Field(None, description="Ending sequence (Bitiş Sırası) for 'Karar No'.") + decision_year_karar: Optional[str] = Field(None, description="Decision year") + decision_start_seq_karar: Optional[str] = Field(None, description="Start decision no") + decision_end_seq_karar: Optional[str] = Field(None, description="End decision no") - start_date: Optional[str] = Field(None, description="Start date (Başlangıç Tarihi) for decision (DD.MM.YYYY).") - end_date: Optional[str] = Field(None, description="End date (Bitiş Tarihi) for decision (DD.MM.YYYY).") + start_date: Optional[str] = Field(None, description="Start date (DD.MM.YYYY)") + end_date: Optional[str] = Field(None, description="End date (DD.MM.YYYY)") - sort_criteria: str = Field("1", description="Sorting criteria (Sıralama Kriteri) (e.g., 1: Esas No).") - sort_direction: str = Field("desc", description="Sorting direction (Sıralama Yönü) ('asc' or 'desc').") + sort_criteria: str = Field("1", description="Sort by") + sort_direction: str = Field("desc", description="Direction") page_number: int = Field(default=1, ge=1) - page_size: int = Field(default=10, ge=1, le=100) + page_size: int = Field(default=10, ge=1, le=10) class EmsalApiDecisionEntry(BaseModel): """Model for an individual decision entry from the Emsal API search response.""" id: str - daire: Optional[str] = Field(None, description="The chamber/court (Daire/Mahkeme) that made the decision.") + daire: Optional[str] = Field(None, description="Chamber") esasNo: Optional[str] = Field(None) kararNo: Optional[str] = Field(None) kararTarihi: Optional[str] = Field(None) - arananKelime: Optional[str] = Field(None, description="Matched keyword (Aranan Kelime) from the search.") - durum: Optional[str] = Field(None, description="Status (Durum) of the decision (e.g., 'KESİNLEŞMEDİ').") + arananKelime: Optional[str] = Field(None, description="Keyword") + durum: Optional[str] = Field(None, description="Status") # index: Optional[int] = None # Present in Emsal response, can be added if tool needs it - document_url: Optional[HttpUrl] = Field(None, description="URL (Belge URL) to the full document, constructed by the client.") + document_url: Optional[HttpUrl] = Field(None, description="Document URL") model_config = ConfigDict(extra='ignore') diff --git a/kik_mcp_module/models.py b/kik_mcp_module/models.py index 75ffed3..395f84a 100644 --- a/kik_mcp_module/models.py +++ b/kik_mcp_module/models.py @@ -13,28 +13,28 @@ class KikKararTipi(str, Enum): class KikSearchRequest(BaseModel): """Model for KIK Decision search criteria.""" karar_tipi: KikKararTipi = Field(KikKararTipi.UYUSMAZLIK, description="Type") - karar_no: Optional[str] = Field(None, description="Number") - karar_tarihi_baslangic: Optional[str] = Field(None, description="Start date", pattern=r"^\d{2}\.\d{2}\.\d{4}$") - karar_tarihi_bitis: Optional[str] = Field(None, description="End date", pattern=r"^\d{2}\.\d{2}\.\d{4}$") - resmi_gazete_sayisi: Optional[str] = Field(None, description="Gazette no") - resmi_gazete_tarihi: Optional[str] = Field(None, description="Gazette date", pattern=r"^\d{2}\.\d{2}\.\d{4}$") - basvuru_konusu_ihale: Optional[str] = Field(None, description="Tender subject") + karar_no: Optional[str] = Field(None, description="No") + karar_tarihi_baslangic: Optional[str] = Field(None, description="Start", pattern=r"^\d{2}\.\d{2}\.\d{4}$") + karar_tarihi_bitis: Optional[str] = Field(None, description="End", pattern=r"^\d{2}\.\d{2}\.\d{4}$") + resmi_gazete_sayisi: Optional[str] = Field(None, description="Gazette") + resmi_gazete_tarihi: Optional[str] = Field(None, description="Date", pattern=r"^\d{2}\.\d{2}\.\d{4}$") + basvuru_konusu_ihale: Optional[str] = Field(None, description="Subject") basvuru_sahibi: Optional[str] = Field(None, description="Applicant") ihaleyi_yapan_idare: Optional[str] = Field(None, description="Entity") yil: Optional[str] = Field(None, description="Year") - karar_metni: Optional[str] = Field(None, description="Text search") + karar_metni: Optional[str] = Field(None, description="Text") page: int = Field(1, ge=1, description="Page") class KikDecisionEntry(BaseModel): """Represents a single decision entry from KIK search results.""" - preview_event_target: str = Field(..., description="Internal event target for fetching details.") - karar_no_str: str = Field(..., alias="kararNo", description="Raw decision number as extracted from KIK (e.g., '2024/UH.II-1766').") - karar_tipi: KikKararTipi = Field(..., description="The type of decision this entry belongs to.") + preview_event_target: str = Field(..., description="Event target") + karar_no_str: str = Field(..., alias="kararNo", description="Decision number") + karar_tipi: KikKararTipi = Field(..., description="Decision type") - karar_tarihi_str: str = Field(..., alias="kararTarihi", description="Decision date.") - idare_str: Optional[str] = Field(None, alias="idare", description="Procuring entity.") - basvuru_sahibi_str: Optional[str] = Field(None, alias="basvuruSahibi", description="Applicant.") - ihale_konusu_str: Optional[str] = Field(None, alias="ihaleKonusu", description="Tender subject.") + karar_tarihi_str: str = Field(..., alias="kararTarihi", description="Date") + idare_str: Optional[str] = Field(None, alias="idare", description="Entity") + basvuru_sahibi_str: Optional[str] = Field(None, alias="basvuruSahibi", description="Applicant") + ihale_konusu_str: Optional[str] = Field(None, alias="ihaleKonusu", description="Subject") @computed_field @property @@ -58,18 +58,17 @@ class KikDocumentMarkdown(BaseModel): """ KIK decision document, with Markdown content potentially paginated. """ - retrieved_with_karar_id: Optional[str] = Field(None, description="The Base64 encoded karar_id that was used to request this document.") - # Decode edilmiş karar no ve tipini de yanıt olarak ekleyelim, Claude için faydalı olabilir. - retrieved_karar_no: Optional[str] = Field(None, description="The raw KIK Decision Number (e.g., '2024/UH.II-1766') this document pertains to.") - retrieved_karar_tipi: Optional[KikKararTipi] = Field(None, description="The KIK Decision Type this document pertains to.") + retrieved_with_karar_id: Optional[str] = Field(None, description="Request ID") + retrieved_karar_no: Optional[str] = Field(None, description="Decision number") + retrieved_karar_tipi: Optional[KikKararTipi] = Field(None, description="Decision type") - karar_id_param_from_url: Optional[str] = Field(None, alias="kararIdParam", description="The KIK system's internal KararId parameter from the document's display URL (KurulKararGoster.aspx).") - markdown_chunk: Optional[str] = Field(None, description="The requested chunk of the decision content converted to Markdown.") - source_url: Optional[str] = Field(None, description="The source URL of the original document (KurulKararGoster.aspx).") - error_message: Optional[str] = Field(None, description="Error message if document retrieval or processing failed.") - current_page: int = Field(1, description="The current page number of the markdown chunk being returned.") - total_pages: int = Field(1, description="The total number of pages the full markdown content is divided into.") - is_paginated: bool = Field(False, description="True if the full markdown content is split into multiple pages.") - full_content_char_count: Optional[int] = Field(None, description="Total character count of the full markdown content before chunking.") + karar_id_param_from_url: Optional[str] = Field(None, alias="kararIdParam", description="Internal ID") + markdown_chunk: Optional[str] = Field(None, description="Content") + source_url: Optional[str] = Field(None, description="Source URL") + error_message: Optional[str] = Field(None, description="Error") + current_page: int = Field(1, description="Page") + total_pages: int = Field(1, description="Total pages") + is_paginated: bool = Field(False, description="Paginated") + full_content_char_count: Optional[int] = Field(None, description="Char count") model_config = ConfigDict(populate_by_name=True) \ No newline at end of file diff --git a/kvkk_mcp_module/models.py b/kvkk_mcp_module/models.py index 8c36e12..7db1c3c 100644 --- a/kvkk_mcp_module/models.py +++ b/kvkk_mcp_module/models.py @@ -11,21 +11,21 @@ class KvkkSearchRequest(BaseModel): Examples: "açık rıza", "veri güvenliği", "kişisel veri işleme" """) page: int = Field(1, ge=1, le=50, description="Page number for search results (1-50).") - pageSize: int = Field(10, ge=1, le=20, description="Number of results per page (1-20).") + pageSize: int = Field(10, ge=1, le=10, description="Number of results per page (1-10).") class KvkkDecisionSummary(BaseModel): """Model for a single KVKK decision summary from Brave search results.""" title: Optional[str] = Field(None, description="Decision title from search results.") url: Optional[HttpUrl] = Field(None, description="URL to the KVKK decision page.") description: Optional[str] = Field(None, description="Brief description or snippet from search results.") - decision_id: Optional[str] = Field(None, description="Extracted decision ID from URL (e.g., Icerik/7288/2021-1303).") - publication_date: Optional[str] = Field(None, description="Publication date if extractable from title or description.") - decision_number: Optional[str] = Field(None, description="Decision number if extractable from title or description.") + decision_id: Optional[str] = Field(None, description="Value") + publication_date: Optional[str] = Field(None, description="Value") + decision_number: Optional[str] = Field(None, description="Value") class KvkkSearchResult(BaseModel): """Model for the overall search result for KVKK decisions.""" decisions: List[KvkkDecisionSummary] = Field(default_factory=list, description="List of KVKK decisions found.") - total_results: Optional[int] = Field(None, description="Total number of results available (if provided by Brave API).") + total_results: Optional[int] = Field(None, description="Value") page: int = Field(1, description="Current page number of results.") pageSize: int = Field(10, description="Number of results per page.") query: Optional[str] = Field(None, description="The actual search query sent to Brave API.") @@ -41,7 +41,7 @@ class KvkkDocumentMarkdown(BaseModel): current_page: int = Field(description="The current page number of the markdown chunk (1-indexed).") total_pages: int = Field(description="Total number of pages for the full markdown content.") is_paginated: bool = Field(description="True if the full markdown content is split into multiple pages.") - error_message: Optional[str] = Field(None, description="Error message if document retrieval or conversion failed.") + error_message: Optional[str] = Field(None, description="Value") class Config: json_encoders = { diff --git a/mcp_server_main.py b/mcp_server_main.py index ad242e2..b6347cc 100644 --- a/mcp_server_main.py +++ b/mcp_server_main.py @@ -972,7 +972,7 @@ async def search_yargitay_detailed( bitisTarihi: str = Field("", description="End date for decision search (DD.MM.YYYY)."), siralama: str = Field("3", description="Sorting criteria (1: Esas No, 2: Karar No, 3: Karar Tarihi)."), siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc')."), - pageSize: int = Field(10, ge=1, le=100, description="Number of results per page."), + pageSize: int = Field(10, ge=1, le=10, description="Number of results per page."), pageNumber: int = Field(1, ge=1, description="Page number to retrieve.") ) -> CompactYargitaySearchResult: """Search Yargıtay decisions using primary API with 52 chamber filtering and advanced operators.""" @@ -1047,7 +1047,7 @@ async def search_danistay_by_keyword( notAndKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT AND logic."), notOrKelimeler: List[str] = Field(default_factory=list, description="Keywords for NOT OR logic."), pageNumber: int = Field(1, ge=1, description="Page number."), - pageSize: int = Field(10, ge=1, le=100, description="Results per page.") + pageSize: int = Field(10, ge=1, le=10, description="Results per page.") ) -> CompactDanistaySearchResult: """Search Danıştay decisions with keyword logic.""" @@ -1099,7 +1099,7 @@ async def search_danistay_detailed( siralama: str = Field("1", description="Sorting criteria (e.g., 1: Esas No, 3: Karar Tarihi)."), siralamaDirection: str = Field("desc", description="Sorting direction ('asc' or 'desc')."), pageNumber: int = Field(1, ge=1, description="Page number."), - pageSize: int = Field(10, ge=1, le=100, description="Results per page.") + pageSize: int = Field(10, ge=1, le=10, description="Results per page.") ) -> CompactDanistaySearchResult: """Search Danıştay decisions with detailed filtering.""" @@ -1179,7 +1179,7 @@ async def search_emsal_detailed_decisions( sort_criteria: str = Field("1", description="Sorting criteria (e.g., 1: Esas No)."), sort_direction: str = Field("desc", description="Sorting direction ('asc' or 'desc')."), page_number: int = Field(1, ge=1, description="Page number (accepts int)."), - page_size: int = Field(10, ge=1, le=100, description="Results per page.") + page_size: int = Field(10, ge=1, le=10, description="Results per page.") ) -> CompactEmsalSearchResult: """Search Emsal precedent decisions with detailed criteria.""" @@ -1690,7 +1690,7 @@ async def get_rekabet_kurumu_document( ) async def search_yargitay_bedesten( phrase: str = Field(..., description="Search phrase with advanced operators"), - pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), + pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"), pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), birimAdi: Optional[YargitayBirimEnum] = Field(None, description="See docs for details"), kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"), @@ -1769,7 +1769,7 @@ async def get_yargitay_bedesten_document_markdown( ) async def search_danistay_bedesten( phrase: str = Field(..., description="Search phrase with advanced operators"), - pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), + pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"), pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), birimAdi: Optional[DanistayBirimEnum] = Field(None, description="See docs for details"), kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"), @@ -1848,7 +1848,7 @@ async def get_danistay_bedesten_document_markdown( ) async def search_yerel_hukuk_bedesten( phrase: str = Field(..., description="Search phrase with advanced operators"), - pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), + pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"), pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"), kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)") @@ -1925,7 +1925,7 @@ async def get_yerel_hukuk_bedesten_document_markdown( ) async def search_istinaf_hukuk_bedesten( phrase: str = Field(..., description="Search phrase with advanced operators"), - pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), + pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"), pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"), kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)") @@ -2001,7 +2001,7 @@ async def get_istinaf_hukuk_bedesten_document_markdown( ) async def search_kyb_bedesten( phrase: str = Field(..., description="Search phrase with advanced operators"), - pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), + pageSize: int = Field(10, ge=1, le=10, description="Sayfa başına sonuç sayısı"), pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), kararTarihiStart: Optional[str] = Field(None, description="Start date for filtering (ISO 8601 format)"), kararTarihiEnd: Optional[str] = Field(None, description="End date for filtering (ISO 8601 format)") diff --git a/rekabet_mcp_module/models.py b/rekabet_mcp_module/models.py index 99174c0..576d33a 100644 --- a/rekabet_mcp_module/models.py +++ b/rekabet_mcp_module/models.py @@ -26,31 +26,30 @@ class RekabetKararTuruAdiEnum(str, Enum): class RekabetKurumuSearchRequest(BaseModel): """Model for Rekabet Kurumu (Turkish Competition Authority) search request.""" sayfaAdi: Optional[str] = Field(None, description="Title") - YayinlanmaTarihi: Optional[str] = Field(None, description="Pub date") - PdfText: Optional[str] = Field(None, description="Search text") - # This field uses the GUID enum as it's used by the client to make the actual web request. + YayinlanmaTarihi: Optional[str] = Field(None, description="Date") + PdfText: Optional[str] = Field(None, description="Text") KararTuruID: Optional[RekabetKararTuruGuidEnum] = Field(RekabetKararTuruGuidEnum.TUMU, description="Type") - KararSayisi: Optional[str] = Field(None, description="Number") + KararSayisi: Optional[str] = Field(None, description="No") KararTarihi: Optional[str] = Field(None, description="Date") page: int = Field(1, ge=1, description="Page") class RekabetDecisionSummary(BaseModel): """Model for a single Rekabet Kurumu decision summary from search results.""" - publication_date: Optional[str] = Field(None, description="Publication Date (Yayımlanma Tarihi).") - decision_number: Optional[str] = Field(None, description="Decision Number (Karar Sayısı).") - decision_date: Optional[str] = Field(None, description="Decision Date (Karar Tarihi).") - decision_type_text: Optional[str] = Field(None, description="Decision Type as text (Karar Türü - metin olarak).") - title: Optional[str] = Field(None, description="Decision title or summary text.") - decision_url: Optional[HttpUrl] = Field(None, description="URL to the decision's landing page (e.g., /Karar?kararId=...).") - karar_id: Optional[str] = Field(None, description="GUID of the decision, extracted from its URL.") - related_cases_url: Optional[HttpUrl] = Field(None, description="URL to related court cases page, if available.") + publication_date: Optional[str] = Field(None, description="Pub date") + decision_number: Optional[str] = Field(None, description="Number") + decision_date: Optional[str] = Field(None, description="Date") + decision_type_text: Optional[str] = Field(None, description="Type") + title: Optional[str] = Field(None, description="Title") + decision_url: Optional[HttpUrl] = Field(None, description="URL") + karar_id: Optional[str] = Field(None, description="ID") + related_cases_url: Optional[HttpUrl] = Field(None, description="Cases URL") class RekabetSearchResult(BaseModel): """Model for the overall search result for Rekabet Kurumu decisions.""" decisions: List[RekabetDecisionSummary] - total_records_found: Optional[int] = Field(None, description="Total number of records found matching the query.") - retrieved_page_number: int = Field(description="The page number of the results that were retrieved.") - total_pages: Optional[int] = Field(None, description="Total number of pages available for the query.") + total_records_found: Optional[int] = Field(None, description="Total") + retrieved_page_number: int = Field(description="Page") + total_pages: Optional[int] = Field(None, description="Pages") class RekabetDocument(BaseModel): """ @@ -58,16 +57,15 @@ class RekabetDocument(BaseModel): Contains metadata from the landing page, a link to the PDF, and the PDF's content converted to paginated Markdown. """ - source_landing_page_url: HttpUrl = Field(description="The URL of the decision's landing page from which the PDF was identified.") - karar_id: str = Field(description="GUID of the decision.") + source_landing_page_url: HttpUrl = Field(description="Source URL") + karar_id: str = Field(description="ID") - title_on_landing_page: Optional[str] = Field(None, description="Title as found on the landing page (e.g., from