diff --git a/README.md b/README.md index 8b6d776..997084f 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,13 @@ Bu proje, çeşitli Türk hukuk kaynaklarına (Yargıtay, Danıştay, Emsal Kara * Çeşitli Türk hukuk veritabanlarına programatik erişim için standart bir MCP arayüzü. * **Kapsamlı Mahkeme Daire/Kurul Filtreleme:** 79 farklı daire/kurul filtreleme seçeneği * **Dual/Triple API Desteği:** Her mahkeme için birden fazla API kaynağı ile maksimum kapsama +* **Kapsamlı Tarih Filtreleme:** Tüm Bedesten API araçlarında ISO 8601 formatında tarih aralığı filtreleme * Aşağıdaki kurumların kararlarını arama ve getirme yeteneği: - * **Yargıtay:** Detaylı kriterlerle karar arama ve karar metinlerini Markdown formatında getirme. **Dual API** (Ana + Bedesten) + **52 Daire/Kurul Filtreleme** (Hukuk/Ceza Daireleri, Genel Kurullar) - * **Danıştay:** Anahtar kelime bazlı ve detaylı kriterlerle karar arama; karar metinlerini Markdown formatında getirme. **Triple API** (Keyword + Detailed + Bedesten) + **27 Daire/Kurul Filtreleme** (İdari Daireler, Vergi/İdare Kurulları, Askeri Yüksek İdare Mahkemesi) - * **Yerel Hukuk Mahkemeleri:** Bedesten API ile yerel hukuk mahkemesi kararlarına erişim - * **İstinaf Hukuk Mahkemeleri:** Bedesten API ile istinaf mahkemesi kararlarına erişim - * **Kanun Yararına Bozma (KYB):** Bedesten API ile olağanüstü kanun yoluna erişim + * **Yargıtay:** Detaylı kriterlerle karar arama ve karar metinlerini Markdown formatında getirme. **Dual API** (Ana + Bedesten) + **52 Daire/Kurul Filtreleme** + **Tarih Filtreleme** (Hukuk/Ceza Daireleri, Genel Kurullar) + * **Danıştay:** Anahtar kelime bazlı ve detaylı kriterlerle karar arama; karar metinlerini Markdown formatında getirme. **Triple API** (Keyword + Detailed + Bedesten) + **27 Daire/Kurul Filtreleme** + **Tarih Filtreleme** (İdari Daireler, Vergi/İdare Kurulları, Askeri Yüksek İdare Mahkemesi) + * **Yerel Hukuk Mahkemeleri:** Bedesten API ile yerel hukuk mahkemesi kararlarına erişim + **Tarih Filtreleme** + * **İstinaf Hukuk Mahkemeleri:** Bedesten API ile istinaf mahkemesi kararlarına erişim + **Tarih Filtreleme** + * **Kanun Yararına Bozma (KYB):** Bedesten API ile olağanüstü kanun yoluna erişim + **Tarih Filtreleme** * **Emsal (UYAP):** Detaylı kriterlerle emsal karar arama ve karar metinlerini Markdown formatında getirme. * **Uyuşmazlık Mahkemesi:** Form tabanlı kriterlerle karar arama ve karar metinlerini (URL ile erişilen) Markdown formatında getirme. * **Anayasa Mahkemesi (Norm Denetimi):** Kapsamlı kriterlerle norm denetimi kararlarını arama; uzun karar metinlerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme. @@ -85,7 +86,7 @@ Bu FastMCP sunucusu aşağıdaki temel araçları sunar: * `search_yargitay_detailed(arananKelime, birimYrgKurulDaire, ...)`: Yargıtay kararlarını detaylı kriterlerle arar. **52 daire/kurul seçeneği** (Hukuk/Ceza Daireleri 1-23, Genel Kurullar, Başkanlar Kurulu) * `get_yargitay_document_markdown(id: str)`: Belirli bir Yargıtay kararının metnini Markdown formatında getirir. * **Bedesten API (Alternatif):** - * `search_yargitay_bedesten(phrase, birimAdi, ...)`: Bedesten API ile Yargıtay kararlarını arar. **Aynı 52 daire filtreleme** + * `search_yargitay_bedesten(phrase, birimAdi, kararTarihiStart, kararTarihiEnd, ...)`: Bedesten API ile Yargıtay kararlarını arar. **Aynı 52 daire filtreleme** + **Tarih Filtreleme** * `get_yargitay_bedesten_document_markdown(documentId: str)`: Bedesten'den karar metni (HTML/PDF → Markdown) ### **Danıştay Araçları (Triple API + 27 Daire Filtreleme)** @@ -94,18 +95,18 @@ Bu FastMCP sunucusu aşağıdaki temel araçları sunar: * `search_danistay_detailed(daire, esasYil, ...)`: Danıştay kararlarını detaylı kriterlerle arar. * `get_danistay_document_markdown(id: str)`: Belirli bir Danıştay kararının metnini Markdown formatında getirir. * **Bedesten API (Alternatif):** - * `search_danistay_bedesten(phrase, birimAdi, ...)`: Bedesten API ile Danıştay kararlarını arar. **27 daire/kurul seçeneği** (1-17. Daireler, Vergi/İdare Kurulları, Askeri Mahkemeler) + * `search_danistay_bedesten(phrase, birimAdi, kararTarihiStart, kararTarihiEnd, ...)`: Bedesten API ile Danıştay kararlarını arar. **27 daire/kurul seçeneği** + **Tarih Filtreleme** (1-17. Daireler, Vergi/İdare Kurulları, Askeri Mahkemeler) * `get_danistay_bedesten_document_markdown(documentId: str)`: Bedesten'den karar metni -### **Diğer Mahkemeler (Bedesten API)** +### **Diğer Mahkemeler (Bedesten API + Tarih Filtreleme)** * **Yerel Hukuk Mahkemeleri:** - * `search_yerel_hukuk_bedesten(phrase, pageSize, ...)`: Yerel hukuk mahkemesi kararlarını arar + * `search_yerel_hukuk_bedesten(phrase, kararTarihiStart, kararTarihiEnd, ...)`: Yerel hukuk mahkemesi kararlarını arar + **Tarih Filtreleme** * `get_yerel_hukuk_bedesten_document_markdown(documentId: str)`: Karar metni * **İstinaf Hukuk Mahkemeleri:** - * `search_istinaf_hukuk_bedesten(phrase, pageSize, ...)`: İstinaf mahkemesi kararlarını arar + * `search_istinaf_hukuk_bedesten(phrase, kararTarihiStart, kararTarihiEnd, ...)`: İstinaf mahkemesi kararlarını arar + **Tarih Filtreleme** * `get_istinaf_hukuk_bedesten_document_markdown(documentId: str)`: Karar metni * **Kanun Yararına Bozma (KYB):** - * `search_kyb_bedesten(phrase, pageSize, ...)`: Olağanüstü kanun yolu kararlarını arar + * `search_kyb_bedesten(phrase, kararTarihiStart, kararTarihiEnd, ...)`: Olağanüstü kanun yolu kararlarını arar + **Tarih Filtreleme** * `get_kyb_bedesten_document_markdown(documentId: str)`: Karar metni * **Emsal Karar Araçları:** @@ -138,6 +139,7 @@ Bu FastMCP sunucusu aşağıdaki temel araçları sunar: - **Toplam Mahkeme/Kurum:** 11 farklı hukuki kurum - **Toplam MCP Tool:** 30+ arama ve belge getirme aracı - **Daire/Kurul Filtreleme:** 79 farklı seçenek (52 Yargıtay + 27 Danıştay) +- **Tarih Filtreleme:** 5 Bedesten API aracında ISO 8601 formatında tam tarih aralığı desteği - **API Kaynağı:** Dual/Triple API desteği ile maksimum kapsama - **Tam Türk Adalet Sistemi:** Yerel mahkemelerden en yüksek mahkemelere kadar @@ -146,12 +148,17 @@ Bu FastMCP sunucusu aşağıdaki temel araçları sunar: Yerel Mahkemeler → İstinaf → Yargıtay/Danıştay → Anayasa Mahkemesi ↓ ↓ ↓ ↓ Bedesten API Bedesten API Dual/Triple API Norm+Bireysel API + + Tarih + Tarih + Daire + Tarih + Gelişmiş + Filtreleme Filtreleme Filtreleme Arama ``` -**⚖️ Kapsamlı Daire Filtreleme:** -- **Yargıtay:** 52 seçenek (1-23 Hukuk, 1-23 Ceza, Genel Kurullar, Başkanlar Kurulu) -- **Danıştay:** 27 seçenek (1-17 Daireler, İdare/Vergi Kurulları, Askeri Mahkemeler) -- **Toplam:** 79 farklı mahkeme dairesi/kurulu +**⚖️ Kapsamlı Filtreleme Özellikleri:** +- **Daire Filtreleme:** 79 seçenek (52 Yargıtay + 27 Danıştay) + - **Yargıtay:** 52 seçenek (1-23 Hukuk, 1-23 Ceza, Genel Kurullar, Başkanlar Kurulu) + - **Danıştay:** 27 seçenek (1-17 Daireler, İdare/Vergi Kurulları, Askeri Mahkemeler) +- **Tarih Filtreleme:** 5 Bedesten API aracında ISO 8601 formatı (YYYY-MM-DDTHH:MM:SS.000Z) + - Tek tarih, tarih aralığı, tek taraflı filtreleme desteği + - Yargıtay, Danıştay, Yerel Hukuk, İstinaf Hukuk, KYB kararları 📜 **Lisans** diff --git a/bedesten_mcp_module/models.py b/bedesten_mcp_module/models.py index 5fe7d90..a9a4145 100644 --- a/bedesten_mcp_module/models.py +++ b/bedesten_mcp_module/models.py @@ -2,6 +2,7 @@ from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any, Literal, Union +from datetime import datetime # Import YargitayBirimEnum for chamber filtering from yargitay_mcp_module.models import YargitayBirimEnum @@ -53,6 +54,16 @@ class BedestenSearchData(BaseModel): - 'İçtihatları Birleştirme Kurulu', 'İdari İşler Kurulu', 'Başkanlar Kurulu' - Military courts: 'Askeri Yüksek İdare Mahkemesi' variants """) + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" + Use with kararTarihiEnd for date range filtering + """) + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" + Use with kararTarihiStart for date range filtering + """) sortFields: List[str] = ["KARAR_TARIHI"] sortDirection: str = "desc" diff --git a/mcp_server_main.py b/mcp_server_main.py index 4e61d46..df6f9d8 100644 --- a/mcp_server_main.py +++ b/mcp_server_main.py @@ -791,6 +791,16 @@ async def search_yargitay_bedesten( • 'Ceza Daireleri Başkanlar Kurulu' (Criminal Chambers Presidents Board) • 'Büyük Genel Kurulu' (Grand General Assembly) Total: 49 chamber options + """), + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" for decisions from Jan 1, 2024 + Use with kararTarihiEnd for date range filtering + """), + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" for decisions until Dec 31, 2024 + Use with kararTarihiStart for date range filtering """) ) -> dict: """ @@ -805,12 +815,14 @@ async def search_yargitay_bedesten( pageNumber=pageNumber, itemTypeList=["YARGITAYKARARI"], # Only Yargıtay decisions phrase=phrase, - birimAdi=birimAdi + birimAdi=birimAdi, + kararTarihiStart=kararTarihiStart, + kararTarihiEnd=kararTarihiEnd ) search_request = BedestenSearchRequest(data=search_data) - logger.info(f"Tool 'search_yargitay_bedesten' called: phrase='{phrase}', birimAdi='{birimAdi}', page={pageNumber}") + logger.info(f"Tool 'search_yargitay_bedesten' called: phrase='{phrase}', birimAdi='{birimAdi}', dateRange='{kararTarihiStart}' to '{kararTarihiEnd}', page={pageNumber}") try: response = await bedesten_client_instance.search_documents(search_request) @@ -860,6 +872,16 @@ async def search_danistay_bedesten( • Special Councils: 'İçtihatları Birleştirme Kurulu', 'İdari İşler Kurulu', 'Başkanlar Kurulu' • Military: 'Askeri Yüksek İdare Mahkemesi' and its chambers/councils Total: 27 chamber options + """), + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" for decisions from Jan 1, 2024 + Use with kararTarihiEnd for date range filtering + """), + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" for decisions until Dec 31, 2024 + Use with kararTarihiStart for date range filtering """) ) -> dict: """ @@ -874,12 +896,14 @@ async def search_danistay_bedesten( pageNumber=pageNumber, itemTypeList=["DANISTAYKARAR"], # Only Danıştay decisions phrase=phrase, - birimAdi=birimAdi + birimAdi=birimAdi, + kararTarihiStart=kararTarihiStart, + kararTarihiEnd=kararTarihiEnd ) search_request = BedestenSearchRequest(data=search_data) - logger.info(f"Tool 'search_danistay_bedesten' called: phrase='{phrase}', birimAdi='{birimAdi}', page={pageNumber}") + logger.info(f"Tool 'search_danistay_bedesten' called: phrase='{phrase}', birimAdi='{birimAdi}', dateRange='{kararTarihiStart}' to '{kararTarihiEnd}', page={pageNumber}") try: response = await bedesten_client_instance.search_documents(search_request) @@ -920,7 +944,17 @@ async def get_danistay_bedesten_document_markdown( async def search_yerel_hukuk_bedesten( phrase: str = Field(..., description="Aranacak kavram/kelime"), pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), - pageNumber: int = Field(1, ge=1, description="Sayfa numarası") + pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" for decisions from Jan 1, 2024 + Use with kararTarihiEnd for date range filtering + """), + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" for decisions until Dec 31, 2024 + Use with kararTarihiStart for date range filtering + """) ) -> dict: """ Searches Yerel Hukuk Mahkemesi (Local Civil Court) decisions using Bedesten API. @@ -933,12 +967,14 @@ async def search_yerel_hukuk_bedesten( pageSize=pageSize, pageNumber=pageNumber, itemTypeList=["YERELHUKUK"], # Local Civil Court decisions - phrase=phrase + phrase=phrase, + kararTarihiStart=kararTarihiStart, + kararTarihiEnd=kararTarihiEnd ) search_request = BedestenSearchRequest(data=search_data) - logger.info(f"Tool 'search_yerel_hukuk_bedesten' called: phrase='{phrase}', page={pageNumber}") + logger.info(f"Tool 'search_yerel_hukuk_bedesten' called: phrase='{phrase}', dateRange='{kararTarihiStart}' to '{kararTarihiEnd}', page={pageNumber}") try: response = await bedesten_client_instance.search_documents(search_request) @@ -979,7 +1015,17 @@ async def get_yerel_hukuk_bedesten_document_markdown( async def search_istinaf_hukuk_bedesten( phrase: str = Field(..., description="Aranacak kavram/kelime"), pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), - pageNumber: int = Field(1, ge=1, description="Sayfa numarası") + pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" for decisions from Jan 1, 2024 + Use with kararTarihiEnd for date range filtering + """), + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" for decisions until Dec 31, 2024 + Use with kararTarihiStart for date range filtering + """) ) -> dict: """ Searches İstinaf Hukuk Mahkemesi (Civil Court of Appeals) decisions using Bedesten API. @@ -995,12 +1041,14 @@ async def search_istinaf_hukuk_bedesten( pageSize=pageSize, pageNumber=pageNumber, itemTypeList=["ISTINAFHUKUK"], # Civil Court of Appeals decisions - phrase=phrase + phrase=phrase, + kararTarihiStart=kararTarihiStart, + kararTarihiEnd=kararTarihiEnd ) search_request = BedestenSearchRequest(data=search_data) - logger.info(f"Tool 'search_istinaf_hukuk_bedesten' called: phrase='{phrase}', page={pageNumber}") + logger.info(f"Tool 'search_istinaf_hukuk_bedesten' called: phrase='{phrase}', dateRange='{kararTarihiStart}' to '{kararTarihiEnd}', page={pageNumber}") try: response = await bedesten_client_instance.search_documents(search_request) @@ -1041,7 +1089,17 @@ async def get_istinaf_hukuk_bedesten_document_markdown( async def search_kyb_bedesten( phrase: str = Field(..., description="Aranacak kavram/kelime"), pageSize: int = Field(10, ge=1, le=100, description="Sayfa başına sonuç sayısı"), - pageNumber: int = Field(1, ge=1, description="Sayfa numarası") + pageNumber: int = Field(1, ge=1, description="Sayfa numarası"), + kararTarihiStart: Optional[str] = Field(None, description=""" + Decision start date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-01-01T00:00:00.000Z" for decisions from Jan 1, 2024 + Use with kararTarihiEnd for date range filtering + """), + kararTarihiEnd: Optional[str] = Field(None, description=""" + Decision end date filter (optional). Format: YYYY-MM-DDTHH:MM:SS.000Z + Example: "2024-12-31T23:59:59.999Z" for decisions until Dec 31, 2024 + Use with kararTarihiStart for date range filtering + """) ) -> dict: """ Searches Kanun Yararına Bozma (KYB - Extraordinary Appeal) decisions using Bedesten API. @@ -1058,12 +1116,14 @@ async def search_kyb_bedesten( pageSize=pageSize, pageNumber=pageNumber, itemTypeList=["KYB"], # Kanun Yararına Bozma decisions - phrase=phrase + phrase=phrase, + kararTarihiStart=kararTarihiStart, + kararTarihiEnd=kararTarihiEnd ) search_request = BedestenSearchRequest(data=search_data) - logger.info(f"Tool 'search_kyb_bedesten' called: phrase='{phrase}', page={pageNumber}") + logger.info(f"Tool 'search_kyb_bedesten' called: phrase='{phrase}', dateRange='{kararTarihiStart}' to '{kararTarihiEnd}', page={pageNumber}") try: response = await bedesten_client_instance.search_documents(search_request)