search_kurum_yonetmelik
Search institutional regulations (Kurum Yönetmeliği) by keyword, Boolean operators, and date range. Returns regulation number, title, dates, and Official Gazette info for regulations like Gümrük Yönetmeliği.
Instructions
Search for Institutional/Organizational Regulations (Kurum ve Kuruluş Yönetmeliği) in titles and content.
IMPORTANT: Search is keyword-based, NOT by regulation number. Use descriptive Turkish terms. These are regulations issued by governmental institutions (ministries, agencies, boards). This is the largest dataset with 8686+ regulations. Use for: Gümrük Yönetmeliği, İthalat/İhracat Yönetmeliği, and similar institutional regulations.
Query Syntax: Simple keyword, AND, OR, NOT, +required, (grouping), "exact phrase"
Example queries:
"gümrük" - Customs regulations (e.g., Gümrük Yönetmeliği)
"ithalat" or "ihracat" - Import/export regulations
"nükleer" - Nuclear regulations
"adalet AND akademi" - Justice academy regulations
Leave empty with dates to list all regulations from a period
Returns: Regulation number, title, dates, Official Gazette info.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| aranacak_ifade | No | Search query with Boolean operators and wildcards. Examples: "nükleer" (simple), "ihracat AND kontrol" (AND), "denetim OR teftiş" (OR), "mali NOT ceza" (NOT), "kontrol*" (wildcard), "ithalat ihracat" (exact phrase with quotes). Leave empty to list all regulations in date range. | |
| tam_cumle | No | If True, searches for exact phrase match. If False (default), searches for any word match with Boolean operators. | |
| baslangic_tarihi | No | Start year for filtering results (format: YYYY, e.g., '2020'). Use with bitis_tarihi to define a date range. | |
| bitis_tarihi | No | End year for filtering results (format: YYYY, e.g., '2025'). Use with baslangic_tarihi to define a date range. | |
| page_number | No | Page number of results to retrieve (starts from 1) | |
| aranacak_yer | No | Where to search: 1=Title only, 2=Content only, 3=Both title and content (default) | |
| page_size | No | Number of results per page (1-100, default: 25) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| documents | Yes | ||
| total_results | Yes | ||
| current_page | Yes | ||
| page_size | Yes | ||
| total_pages | Yes | ||
| query_used | Yes | ||
| error_message | No |
Implementation Reference
- mevzuat_mcp_server.py:1483-1567 (handler)Handler function for the 'search_kurum_yonetmelik' MCP tool. Accepts keyword search with Boolean operators, date filters, and pagination. Creates a MevzuatSearchRequestNew with mevzuat_tur='Kurum Yönetmeliği' (mapped to 'KurumVeKurulusYonetmeligi' by the API client), delegates to mevzuat_client.search_documents(), and returns the search results.
@app.tool() async def search_kurum_yonetmelik( aranacak_ifade: Optional[str] = Field( None, description='Search query with Boolean operators and wildcards. Examples: "nükleer" (simple), "ihracat AND kontrol" (AND), "denetim OR teftiş" (OR), "mali NOT ceza" (NOT), "kontrol*" (wildcard), "ithalat ihracat" (exact phrase with quotes). Leave empty to list all regulations in date range.' ), tam_cumle: bool = Field( False, description="If True, searches for exact phrase match. If False (default), searches for any word match with Boolean operators." ), baslangic_tarihi: Optional[str] = Field( None, description="Start year for filtering results (format: YYYY, e.g., '2020'). Use with bitis_tarihi to define a date range." ), bitis_tarihi: Optional[str] = Field( None, description="End year for filtering results (format: YYYY, e.g., '2025'). Use with baslangic_tarihi to define a date range." ), page_number: int = Field( 1, ge=1, description="Page number of results to retrieve (starts from 1)" ), aranacak_yer: int = Field( 3, ge=1, le=3, description="Where to search: 1=Title only, 2=Content only, 3=Both title and content (default)" ), page_size: int = Field( 25, ge=1, le=100, description="Number of results per page (1-100, default: 25)" ) ) -> MevzuatSearchResultNew: """ Search for Institutional/Organizational Regulations (Kurum ve Kuruluş Yönetmeliği) in titles and content. IMPORTANT: Search is keyword-based, NOT by regulation number. Use descriptive Turkish terms. These are regulations issued by governmental institutions (ministries, agencies, boards). This is the largest dataset with 8686+ regulations. Use for: Gümrük Yönetmeliği, İthalat/İhracat Yönetmeliği, and similar institutional regulations. Query Syntax: Simple keyword, AND, OR, NOT, +required, (grouping), "exact phrase" Example queries: - "gümrük" - Customs regulations (e.g., Gümrük Yönetmeliği) - "ithalat" or "ihracat" - Import/export regulations - "nükleer" - Nuclear regulations - "adalet AND akademi" - Justice academy regulations - Leave empty with dates to list all regulations from a period Returns: Regulation number, title, dates, Official Gazette info. """ logger.info(f"Tool 'search_kurum_yonetmelik' called: '{aranacak_ifade}', dates: {baslangic_tarihi}-{bitis_tarihi}") try: search_req = MevzuatSearchRequestNew( mevzuat_tur="Kurum Yönetmeliği", aranacak_ifade=aranacak_ifade or "", aranacak_yer=aranacak_yer, tam_cumle=tam_cumle, mevzuat_no=None, baslangic_tarihi=baslangic_tarihi, bitis_tarihi=bitis_tarihi, page_number=page_number, page_size=page_size ) result = await mevzuat_client.search_documents(search_req) logger.info(f"Found {result.total_results} institutional regulations") return result except Exception as e: logger.exception("Error in tool 'search_kurum_yonetmelik'") return MevzuatSearchResultNew( documents=[], total_results=0, current_page=page_number, page_size=page_size, total_pages=0, query_used={"error": str(e)}, error_message=f"An unexpected error occurred: {str(e)}" ) - mevzuat_models.py:11-30 (schema)Type definition for valid mevzuat types, including 'Kurum Yönetmeliği' used by the search_kurum_yonetmelik tool.
MevzuatTurLiteral = Literal[ "Kanun", "KHK", "Tuzuk", "Kurum Yönetmeliği", "Cumhurbaşkanlığı Kararnamesi", "Cumhurbaşkanı Kararı", "CB Yönetmeliği", "CB Genelgesi", "Tebliğ", "Diğer" ] # Search location options AranacakYerLiteral = Literal[ "1", # Başlık "2", # Madde Başlığı "3", # Tüm Metin ] - mevzuat_mcp_server.py:1483-1567 (registration)Registration of search_kurum_yonetmelik as an MCP tool via the @app.tool() decorator on the FastMCP 'app' instance.
@app.tool() async def search_kurum_yonetmelik( aranacak_ifade: Optional[str] = Field( None, description='Search query with Boolean operators and wildcards. Examples: "nükleer" (simple), "ihracat AND kontrol" (AND), "denetim OR teftiş" (OR), "mali NOT ceza" (NOT), "kontrol*" (wildcard), "ithalat ihracat" (exact phrase with quotes). Leave empty to list all regulations in date range.' ), tam_cumle: bool = Field( False, description="If True, searches for exact phrase match. If False (default), searches for any word match with Boolean operators." ), baslangic_tarihi: Optional[str] = Field( None, description="Start year for filtering results (format: YYYY, e.g., '2020'). Use with bitis_tarihi to define a date range." ), bitis_tarihi: Optional[str] = Field( None, description="End year for filtering results (format: YYYY, e.g., '2025'). Use with baslangic_tarihi to define a date range." ), page_number: int = Field( 1, ge=1, description="Page number of results to retrieve (starts from 1)" ), aranacak_yer: int = Field( 3, ge=1, le=3, description="Where to search: 1=Title only, 2=Content only, 3=Both title and content (default)" ), page_size: int = Field( 25, ge=1, le=100, description="Number of results per page (1-100, default: 25)" ) ) -> MevzuatSearchResultNew: """ Search for Institutional/Organizational Regulations (Kurum ve Kuruluş Yönetmeliği) in titles and content. IMPORTANT: Search is keyword-based, NOT by regulation number. Use descriptive Turkish terms. These are regulations issued by governmental institutions (ministries, agencies, boards). This is the largest dataset with 8686+ regulations. Use for: Gümrük Yönetmeliği, İthalat/İhracat Yönetmeliği, and similar institutional regulations. Query Syntax: Simple keyword, AND, OR, NOT, +required, (grouping), "exact phrase" Example queries: - "gümrük" - Customs regulations (e.g., Gümrük Yönetmeliği) - "ithalat" or "ihracat" - Import/export regulations - "nükleer" - Nuclear regulations - "adalet AND akademi" - Justice academy regulations - Leave empty with dates to list all regulations from a period Returns: Regulation number, title, dates, Official Gazette info. """ logger.info(f"Tool 'search_kurum_yonetmelik' called: '{aranacak_ifade}', dates: {baslangic_tarihi}-{bitis_tarihi}") try: search_req = MevzuatSearchRequestNew( mevzuat_tur="Kurum Yönetmeliği", aranacak_ifade=aranacak_ifade or "", aranacak_yer=aranacak_yer, tam_cumle=tam_cumle, mevzuat_no=None, baslangic_tarihi=baslangic_tarihi, bitis_tarihi=bitis_tarihi, page_number=page_number, page_size=page_size ) result = await mevzuat_client.search_documents(search_req) logger.info(f"Found {result.total_results} institutional regulations") return result except Exception as e: logger.exception("Error in tool 'search_kurum_yonetmelik'") return MevzuatSearchResultNew( documents=[], total_results=0, current_page=page_number, page_size=page_size, total_pages=0, query_used={"error": str(e)}, error_message=f"An unexpected error occurred: {str(e)}" ) - mevzuat_client.py:91-99 (helper)Maps the internal type name 'Kurum Yönetmeliği' to the API value 'KurumVeKurulusYonetmeligi' used by mevzuat.gov.tr search endpoint.
MEVZUAT_TUR_API_MAPPING = { "Kurum Yönetmeliği": "KurumVeKurulusYonetmeligi", "Cumhurbaşkanlığı Kararnamesi": "CumhurbaskaniKararnameleri", "Cumhurbaşkanı Kararı": "CumhurbaskaniKararlari", "CB Yönetmeliği": "CumhurbaskanligiVeBakanlarKuruluYonetmelik", "CB Genelgesi": "CumhurbaskanligiGenelgeleri", "Tebliğ": "Teblig", # Other types remain as-is } - semantic_search/processor.py:24-24 (helper)Defines article-based legislation types; type '7' corresponds to Kurum Yönetmeliği (used in search_within_kurum_yonetmelik).
ARTICLE_BASED_TYPES = {1, 2, 4, 7, 19, 21} # Kanun, Tuzuk, KHK, Kurum Yonetmeligi, CBK, CB Yonetmeligi