İhale MCP
The İhale MCP server provides programmatic access to Turkish public procurement systems (EKAP v2) and official government announcements (ilan.gov.tr) for LLM applications.
EKAP Public Procurement:
Advanced Tender Search - Search tenders using text, IKN numbers, tender types (Goods, Construction, Service, Consultancy), provinces, date ranges, and 17+ boolean filters (e-tender, joint procurement, foreign bidders, partial bids, etc.)
Recent Tenders - Retrieve tenders from the last 1-30 days with optional type filtering
Tender Details & Announcements - Get comprehensive tender information including characteristics, OKAS codes, authority details, process rules, and all related announcements (Pre-Announcement, Tender Notice, Result Notice, Cancellation, etc.) with automatic HTML-to-Markdown conversion
OKAS Code Search - Search Turkish public procurement classification codes by description (Goods/Services/Construction)
Authority Search - Find government institutions (ministries, municipalities, universities) from 72,000+ organizations for filtering
Direct Procurement (Doğrudan Temin):
Search & Details - Search and retrieve detailed information for direct procurements, filtering by type, status, dates, provinces, scope, and authority
Authority Search - Search authorities and parent authorities specifically for direct procurement filtering
İlan.gov.tr Official Announcements:
Government Announcements Search - Search 20,000+ official announcements including UYAP E-SALES (46,000+ court/execution sales), tender notices, real estate sales, personnel postings, notifications, and legal notices
Announcement Details - Retrieve full details with automatic HTML-to-Markdown conversion, including advertiser info, location, and metadata
Advanced Filtering - Filter by category, city (81 provinces), price ranges, publish dates, ad types, and search in titles or content
Key Features: Automatic HTML-to-Markdown conversion, comprehensive filtering options, pagination support, date range filtering, and province-based geographic filtering.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@İhale MCPsearch for construction tenders in Istanbul from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
İhale MCP: Türkiye Kamu İhaleleri için MCP Sunucusu
Bu proje, Türkiye'deki kamu ihalelerine (ekap.kik.gov.tr) erişimi kolaylaştıran bir FastMCP sunucusu oluşturur. Bu sayede, EKAP v2 portalından ihale arama, ihale detaylarını getirme ve ihale duyurularını Markdown formatında alma işlemleri, Model Context Protocol (MCP) destekleyen LLM (Büyük Dil Modeli) uygulamaları (örneğin Claude Desktop veya 5ire) ve diğer istemciler tarafından araç (tool) olarak kullanılabilir hale gelir.
🚀 5 Dakikada Başla (Remote MCP)
✅ Kurulum Gerektirmez! Hemen Kullan!
🔗 Remote MCP Adresi: https://ihalemcp.fastmcp.app/mcp
Claude Desktop ile Kullanım
Claude Desktop'ı açın
Settings → Connectors → Add Custom Connector
Bilgileri girin:
Name:
İhale MCPURL:
https://ihalemcp.fastmcp.app/mcp
Add butonuna tıklayın
Hemen kullanmaya başlayın! 🎉
🎯 Temel Özellikler
EKAP v2 portalına programatik erişim için standart bir MCP arayüzü.
Aşağıdaki yetenekler:
Detaylı İhale Arama: İhale adı/içeriği, IKN numarası, ihale türü, il, tarih aralıkları ve 17+ boolean filtre ile kapsamlı arama.
İhale Detayları: Belirli bir ihalenin tam detaylarını (özellikler, OKAS kodları, idare bilgileri, işlem kuralları) getirme.
İhale Duyuruları: İhale ile ilgili tüm duyuruları (Ön İlan, İhale İlanı, Sonuç İlanı vb.) otomatik HTML-to-Markdown dönüşümü ile getirme.
OKAS Kod Arama: Türk kamu alım sınıflandırma kodlarında arama yapma.
İdare Arama: Bakanlık, belediye, üniversite gibi kamu kurumlarını arama.
İlan.gov.tr Entegrasyonu: Resmi devlet ilanları, UYAP e-satış, icra/mahkeme satışları, kamu personel duyuruları ve tebligat aramalar.
İhale metinlerinin LLM'ler tarafından daha kolay işlenebilmesi için HTML'den Markdown formatına çevrilmesi.
Claude Desktop uygulaması ile kolay entegrasyon.
İhale MCP, 5ire gibi Claude Desktop haricindeki MCP istemcilerini de destekler.
🚀 Claude Haricindeki Modellerle Kullanmak İçin Çok Kolay Kurulum (Örnek: 5ire için)
Bu bölüm, İhale MCP aracını 5ire gibi Claude Desktop dışındaki MCP istemcileriyle kullanmak isteyenler içindir.
Python Kurulumu: Sisteminizde Python 3.11 veya üzeri kurulu olmalıdır. Kurulum sırasında "Add Python to PATH" (Python'ı PATH'e ekle) seçeneğini işaretlemeyi unutmayın. Buradan indirebilirsiniz.
Git Kurulumu (Windows): Bilgisayarınıza git yazılımını indirip kurun. "Git for Windows/x64 Setup" seçeneğini indirmelisiniz.
uvKurulumu:Windows Kullanıcıları (PowerShell): Bir CMD ekranı açın ve bu kodu çalıştırın:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Mac/Linux Kullanıcıları (Terminal): Bir Terminal ekranı açın ve bu kodu çalıştırın:
curl -LsSf https://astral.sh/uv/install.sh | sh
Microsoft Visual C++ Redistributable (Windows): Bazı Python paketlerinin doğru çalışması için gereklidir. Buradan indirip kurun.
İşletim sisteminize uygun 5ire MCP istemcisini indirip kurun.
5ire'ı açın. Workspace -> Providers menüsünden kullanmak istediğiniz LLM servisinin API anahtarını girin.
Tools menüsüne girin. +Local veya New yazan butona basın.
Tool Key:
ihalemcpName:
İhale MCPCommand:
uvx --from git+https://github.com/saidsurucu/ihale-mcp ihale-mcpSave butonuna basarak kaydedin.
Şimdi Tools altında İhale MCP'yi görüyor olmalısınız. Üstüne geldiğinizde sağda çıkan butona tıklayıp etkinleştirin (yeşil ışık yanmalı).
Artık İhale MCP ile konuşabilirsiniz.
⚙️ Claude Desktop Manuel Kurulumu
Ön Gereksinimler: Python,
uv, (Windows için) Microsoft Visual C++ Redistributable'ın sisteminizde kurulu olduğundan emin olun. Detaylı bilgi için yukarıdaki "5ire için Kurulum" bölümündeki ilgili adımlara bakabilirsiniz.Claude Desktop Settings -> Developer -> Edit Config.
Açılan
claude_desktop_config.jsondosyasınamcpServersaltına ekleyin:{ "mcpServers": { "İhale MCP": { "command": "uvx", "args": [ "--from", "git+https://github.com/saidsurucu/ihale-mcp", "ihale-mcp" ] } } }Claude Desktop'ı kapatıp yeniden başlatın.
🛠️ Kullanılabilir Araçlar (MCP Tools)
Bu FastMCP sunucusu LLM modelleri için aşağıdaki araçları sunar:
search_tenders: EKAP v2 portalında kapsamlı ihale arama yapar.Ana Parametreler:
search_text,ikn_year,ikn_number,tender_types,tender_date_start/end,announcement_date_start/endBoolean Filtreler:
e_ihale,ortak_alim_mi,kismi_teklif_mi,yabanci_isteklilere_izin_veriliyor_muve 13+ daha fazla filtreListe Filtreleri:
provinces,tender_statuses,tender_methods,okas_codes,authority_ids,proposal_types,announcement_typesArama Kapsamı:
search_in_title,search_in_announcement,search_in_tech_specvb. 11 farklı alanDöndürdüğü Değer: Sayfalanmış ihale listesi, toplam sonuç sayısı
search_okas_codes: OKAS (kamu alım sınıflandırma) kodlarında arama yapar.Parametreler:
search_term,kalem_turu(1=Mal, 2=Hizmet, 3=Yapım),limitDöndürdüğü Değer: OKAS kodları, açıklamaları ve kategorileri
search_authorities: Türk kamu kurumlarında arama yapar.Parametreler:
search_term,limitDöndürdüğü Değer: Kurum ID'leri, isimleri ve hiyerarşik bilgileri
get_recent_tenders: Son N gündeki ihaleleri getirir.Parametreler:
days(1-30),tender_types,limitDöndürdüğü Değer: Yakın tarihli ihale listesi
get_tender_announcements: Belirli bir ihalenin tüm duyurularını getirir.Parametreler:
tender_idDöndürdüğü Değer: Otomatik HTML-to-Markdown dönüştürülmüş ihale duyuruları
Sonuç İlanları için ek: Sonuç İlanı (tip 4) duyuruları ayrıca ayrıştırılmış bir
result_infonesnesi taşır:winner(yüklenici),contract_amount(sözleşme bedeli),estimated_cost(yaklaşık maliyet),bid_count,valid_bid_count,contract_date. Böylece istemcinin markdown'ı regex ile ayıklaması gerekmez.
search_tender_results_by_bidder: Bir firmanın kazandığı ihaleleri, daraltılmış bir kapsamdaki sonuç ilanlarını tarayarak bulur.Parametreler:
bidder_name(zorunlu),authority_ids/provinces/okas_codes(en az biri zorunlu),date_start,date_end,tender_types,max_tendersDöndürdüğü Değer:
matches(İKN, yüklenici, sözleşme bedeli, yaklaşık maliyet, teklif sayısı),match_count,scanned_tenders⚠️ Bu bir taramadır, tam indeks değildir. EKAP'ın metin arama indeksi sonuç ilanlarını kapsamaz; kazanan adı orada aranamaz. Bu nedenle bir firmanın kazandığı tüm ihaleleri listelemek mümkün değildir. Kapsam daraltılmadan (idare/il/OKAS) araç çalışmaz; kapsam
max_tenders'ı aşarsa sessizce kesmek yerine gerçek kapsam büyüklüğüyle hata döner.Kısmi teklifli ihalelerde her kısım ayrı kayıt olarak döner (
announcement_index).
get_tender_details: Belirli bir ihalenin kapsamlı detaylarını getirir.Parametreler:
tender_idDöndürdüğü Değer: İhale özellikleri, OKAS kodları, idare bilgileri, işlem kuralları ve otomatik markdown'a çevrilmiş duyuru özetleri
search_ilan_ads: İlan.gov.tr'de resmi devlet ilanlarında arama yapar.Parametreler:
search_text,city_plate,ad_type_filter,ad_source_filter,publish_date_min/max,price_min/maxİlan Türleri: İCRA, İHALE, TEBLİGAT, PERSONEL
İlan Kaynakları: UYAP (E-SATIŞ icra/mahkeme satışları), BIK (Basın İlan Kurumu)
Döndürdüğü Değer: Resmi devlet ilanları, kategori bilgileri, şehir sayıları
get_ilan_ad_detail: Belirli bir ilan için detaylı bilgileri getirir.Parametreler:
ad_idDöndürdüğü Değer: İlan başlığı, otomatik HTML-to-Markdown çevrilmiş içerik, ilan veren kurum bilgileri, lokasyon, kategoriler
🧩 Doğrudan Temin (Direct Procurement – Doğrudan Temin) Araçları
Doğrudan Temin ekranındaki filtrelerle uyumlu ek MCP araçları:
search_direct_procurements: Doğrudan Temin listesi (Direct Procurement list).Önemli Parametreler (English with Türkçe):
year (Yıl),dt_no / dt_number (DT No / DT Sayı)dt_type (Tür): 1=Goods (Mal), 2=Construction (Yapım), 3=Service (Hizmet), 4=Consultancy (Danışmanlık)e_price_offer (E‑Fiyat Teklifi)→eihale=true/falsestatus_id/status_text (Durum): 202=Doğrudan Temin Duyurusu Yayımlanmış, 3=Teklifler Değerlendiriliyor, 4=Doğrudan Temin Sonuçlandırıldı, 5=Sonuç Bilgileri Gönderildi, 15=Sonuç Duyurusu Yayımlanmışdate_start/date_end (Teklif tarihi)→dtTarihiBaslangic/Bitisprovince_plate/province_name (İl)scope_id/scope_text (Kapsam): 101=4734, 102=İstisna, 103=Kapsam Dışıauthority_id (İdare ID token)(idareAra’dan),parent_authority_code (Bağlı Olduğu Üst İdare / ustIdareKod)
Not: Bazı filtreler (Durum/Kapsam/İdare) oturum gerektirebilir. Gerekirse
cookies(Çerez) header değeri verilebilir; istemci ayrıca otomatik ısınma (warm‑up) yapar.
get_direct_procurement_details: DT detayları (Details) –dogrudanTeminId (E10)+idareId (E11)ile.search_direct_procurement_authorities: İdare (Authority) araması; dönentoken,search_direct_procurementsiçindeauthority_idolarak kullanılır.search_direct_procurement_parent_authorities: Üst İdare (Parent Authority) araması; dönentoken,parent_authority_code (ustIdareKod)olarak kullanılır.
Örnek (Examples)
search_direct_procurements(
dt_type=1, # Goods (Mal)
province_name="Antalya", # İl adı
status_text="Doğrudan Temin Duyurusu Yayımlanmış",
date_start="2025-09-01",
date_end="2025-09-11"
)
# İdare ara → token’ı listede kullan
search_direct_procurement_authorities("antalya")
# => take authorities[0].token as authority_id
search_direct_procurements(
authority_id="<EIdareToken>",
parent_authority_code="44|07", # Bağlı Olduğu Üst İdare (ustIdareKod)
year=2025, dt_number=1493227
)Related MCP server: Taiwan Tender MCP
İhale Türleri
1 - Mal: Malzeme ve ekipman alımları
2 - Yapım: İnşaat ve altyapı projeleri
3 - Hizmet: Hizmet sözleşmeleri
4 - Danışmanlık: Danışmanlık hizmetleri
Örnek Kullanımlar
EKAP v2 İhaleleri
Pazar Araştırması: Belirli sektör veya bölgelerdeki fırsatları takip etme
Uygunluk İzleme: Mevzuata uygunluk için ihale duyurularını takip etme
İş Zekası: Kamu harcama modellerini ve trendlerini analiz etme
Bildirim Sistemleri: Belirli ihale türleri için uyarı sistemleri kurma
Veri Analizi: Araştırma ve analiz için ihale verilerini çıkarma
İlan.gov.tr Resmi İlanları
UYAP E-SATIŞ Takibi: İcra dairesi ve mahkeme satışlarını izleme
Personel Duyuruları: Kamu personel alım ilanlarını takip etme
Tebligat İzleme: Resmi tebligat ve duyuruları takip etme
Belediye İhaleleri: Yerel yönetim ihale ilanlarını izleme
Emlak Satışları: Kamu kurumlarının emlak satış ilanları
Yeni Özellikler
✅ 17+ Boolean Filtre: e-İhale, ortak alım, kısmi teklif, yabancı katılım vb. ✅ Liste Filtreleri: İller, ihale durumları, usulleri, OKAS kodları, idare ID'leri ✅ Arama Kapsamı Kontrolü: IKN, başlık, duyuru, teknik şartname vb. alanlarda arama ✅ İdare Arama: 72,000+ kamu kurumunda arama (bakanlık, belediye, üniversite) ✅ İhale Duyuruları: Otomatik HTML-to-Markdown dönüşümü ile tam duyuru metinleri ✅ Kapsamlı İhale Detayları: Tüm ihale metadata'sı, özellikler, kurallar bir arada ✅ İlan.gov.tr Entegrasyonu: 20,000+ resmi devlet ilanı aramalar ✅ UYAP E-SATIŞ: 46,000+ icra/mahkeme satış ilanlarına özel erişim ✅ İlan Detayları: Otomatik HTML-to-Markdown dönüşümü ile tam ilan içerikleri ✅ Çoklu İlan Türü: İCRA, İHALE, TEBLİGAT, PERSONEL kategorileri
API Hız Limitleri
Bu sunucu EKAP portalının hız limitlerini gözetir. Üretim kullanımı için aşağıdakileri göz önünde bulundurun:
API çağrılarını azaltmak için istek önbellekleme
Üstel geri çekilme ile yeniden deneme mantığı
Yüksek hacimli kullanım için istek sırası
📜 Lisans
Bu proje MIT Lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakınız.
Sorumluluk Reddi
Bu, Türk hükümetinin EKAP portalı ile resmi olmayan bir entegrasyondır. Kullanıcılar portalın hizmet şartlarına ve geçerli düzenlemelere uymakla yükümlüdür. Yazarlar Türk hükümeti veya EKAP portalı ile bağlantılı değildir.
Available Tools
12 toolsget_direct_procurement_detailsC
Get Direct Procurement (Doğrudan Temin) details (dtDetayGetir) using tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| cookies | No | Cookie header (Çerez) for EKAP session (optional) | |
| dogrudan_temin_id | Yes | E10 token (dogrudanTeminId) from list (liste) | |
| idare_id | Yes | E11 token (idareId) from list (liste) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral context. It mentions 'using tokens' but doesn't disclose authentication needs, rate limits, error handling, or what the output contains. For a tool with required parameters and no annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose. However, it could be slightly more structured by separating usage context from the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage and an output schema exists, the description doesn't need to explain parameters or return values. However, for a tool with required parameters and no annotations, it should provide more context on authentication, errors, or usage scenarios to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional parameter semantics beyond implying tokens are needed, which is already covered in schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('Direct Procurement details'), and includes the Turkish function name 'dtDetayGetir' for specificity. However, it doesn't explicitly differentiate this tool from sibling tools like 'search_direct_procurements' or 'get_tender_details', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions 'using tokens' but doesn't explain prerequisites or compare to sibling tools like 'search_direct_procurements' for listing or 'get_tender_details' for other procurement types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ilan_ad_detailB
Get detailed information for a specific advertisement from ilan.gov.tr.
Returns: title, content (HTML and Markdown), advertiser info, location, categories, filters, hit count, and other advertisement metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | Advertisement ID from ilan.gov.tr search results |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns detailed information but doesn't cover critical aspects like whether it's a read-only operation, requires authentication, has rate limits, or handles errors. This is a significant gap for a tool that likely queries an external API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the purpose, and the second enumerates the return values. Every sentence adds value without redundancy, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which should detail return values), the description doesn't need to fully explain outputs. However, for a tool with no annotations and likely external API calls, it lacks context on behavioral traits like safety or constraints. The purpose is clear, but operational guidance is minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting the single required 'ad_id' parameter. The description adds no additional parameter semantics beyond implying the ad_id comes from 'ilan.gov.tr search results', which is already covered in the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'detailed information for a specific advertisement from ilan.gov.tr', making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'search_ilan_ads' or 'get_tender_details', which might handle similar advertisement data but with different scopes or sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an ad_id from search results), exclusions, or compare it to siblings like 'search_ilan_ads' for broader searches or 'get_tender_details' for tender-specific data, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_tendersB
Get recent tenders from last N days. Convenience function for recent tender activity.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days back to search (1-30) | |
| limit | No | Maximum number of results (1-100) | |
| tender_types | No | Filter by tender types |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'Convenience function' which hints at simplicity, but fails to describe critical behaviors like whether this is a read-only operation, what authentication is needed, rate limits, pagination, or error handling. For a tool with no annotations, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences that are front-loaded with the core purpose. There's no wasted text, though it could be slightly more structured by explicitly differentiating from siblings. Every sentence earns its place by clarifying scope and convenience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not provided here) and 100% schema coverage, the description doesn't need to explain return values or parameters. However, with no annotations and moderate complexity (3 parameters, filtering), the description should do more to cover behavioral aspects like safety and usage constraints, making it minimally adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the parameters (days, limit, tender_types). The description adds no additional semantic meaning beyond implying temporal filtering with 'last N days,' which is already covered in the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Get recent tenders from last N days' which specifies the verb ('get'), resource ('tenders'), and temporal scope ('recent', 'last N days'). It distinguishes itself from siblings like 'search_tenders' by focusing on recency rather than general search, though the distinction could be more explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context with 'Convenience function for recent tender activity,' suggesting it's for quick access to recent data rather than comprehensive searches. However, it doesn't explicitly state when to use this tool versus alternatives like 'search_tenders' or provide any exclusions, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tender_announcementsC
Get all announcements for a tender with HTML-to-Markdown conversion.
Returns: Ön İlan, İhale İlanı, Sonuç İlanı, İptal İlanı, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | Yes | The tender ID to get announcements for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions HTML-to-Markdown conversion, which is a useful behavioral trait, but fails to cover critical aspects such as whether this is a read-only operation, potential rate limits, authentication needs, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the first sentence clearly stating the purpose and key feature. The second sentence lists return types, which adds value but could be more integrated. There's minimal waste, but it could be slightly more structured for optimal clarity, such as by merging the return information into the main sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description doesn't need to explain return values in detail, and the schema coverage is high. However, with no annotations and a tool that likely involves data retrieval and conversion, the description should do more to address behavioral aspects like safety, performance, or error cases. It's adequate but has clear gaps in context for a tool with these characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'tender_id' clearly documented. The description adds no additional parameter information beyond what the schema provides, such as format details or examples. According to the rules, when schema coverage is high (>80%), the baseline score is 3, which is appropriate here as the description doesn't compensate but doesn't need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get all announcements for a tender with HTML-to-Markdown conversion.' It specifies the verb ('Get'), resource ('announcements for a tender'), and a key feature (HTML-to-Markdown conversion). However, it doesn't explicitly differentiate from sibling tools like 'get_tender_details' or 'get_ilan_ad_detail', which might also retrieve tender-related information, so it doesn't reach a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_tender_details' or 'search_tenders', nor does it specify prerequisites or contexts for usage. The only implied usage is for retrieving announcements, but this is insufficient for effective tool selection, resulting in a low score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tender_detailsB
Get comprehensive tender details with HTML-to-Markdown conversion.
Returns: basic info, characteristics, OKAS codes, authority details, process rules, announcements summary, cancellation info if applicable.
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | Yes | The tender ID to get comprehensive details for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the HTML-to-Markdown conversion behavior and lists return categories, but lacks details on permissions, rate limits, error handling, or data freshness. It adequately describes the core operation but misses advanced behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and key feature, followed by a bulleted list of return categories. It's efficient with two sentences, though the list could be slightly more structured. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter with full schema coverage and an output schema exists, the description is reasonably complete. It covers the tool's purpose, conversion feature, and return scope. However, with no annotations and multiple siblings, it could better address usage context and behavioral nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'tender_id', which is well-documented in the schema. The description adds no additional parameter semantics beyond implying it fetches 'comprehensive details', which aligns with the schema but doesn't provide extra value. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'comprehensive tender details' with the specific feature 'HTML-to-Markdown conversion'. It distinguishes from siblings like 'get_recent_tenders' (list) or 'search_tenders' (search), but doesn't explicitly contrast with 'get_ilan_ad_detail' which might overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'get_ilan_ad_detail' or 'search_tenders'. The description implies usage for detailed information on a specific tender, but lacks context on prerequisites, exclusions, or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_authoritiesB
Search Turkish government authorities/institutions.
Find ministries, municipalities, universities for tender filtering. Search in Turkish for best results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-500) | |
| search_term | No | Search term to find matching authorities/institutions by name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that searching in Turkish yields 'best results,' which is useful context about language preferences. However, it lacks critical behavioral details such as whether this is a read-only operation, potential rate limits, authentication requirements, or what happens with empty search terms. For a search tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and front-loaded, consisting of three brief sentences that efficiently convey the tool's purpose, use case, and a key recommendation. Every sentence adds value without redundancy, making it easy for an AI agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, search functionality), the description is reasonably complete. It covers the purpose, context (tender filtering), and a language tip. Since an output schema exists, the description doesn't need to explain return values. However, the lack of annotations means it could benefit from more behavioral details to fully guide usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents the two parameters (limit and search_term) with their types, defaults, and descriptions. The description adds no additional parameter semantics beyond what's in the schema, such as examples of search terms or clarification on how the search operates (e.g., partial matches). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: searching for Turkish government authorities/institutions (ministries, municipalities, universities) for tender filtering. It specifies the resource (authorities/institutions) and verb (search), but doesn't explicitly differentiate from sibling tools like 'search_direct_procurement_authorities' or 'search_direct_procurement_parent_authorities' which may have overlapping domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by mentioning 'for tender filtering' and recommending 'Search in Turkish for best results,' which implies this tool is part of a tender-related workflow. However, it doesn't explicitly state when to use this tool versus alternatives like the sibling 'search_direct_procurement_authorities' or other search tools, leaving room for ambiguity in tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_direct_procurement_authoritiesC
Search authorities (İdare) for Direct Procurement (idareAra). Use returned 'token' as idareId.
| Name | Required | Description | Default |
|---|---|---|---|
| cookies | No | Cookie header (Çerez) for EKAP session (optional) | |
| search_term | No | Authority search term (İdare arama), e.g., 'antalya' or institution name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions the output token usage but doesn't disclose behavioral aspects like authentication needs (cookies parameter is optional but not explained), rate limits, error conditions, or what 'searching' entails (e.g., partial matches, case sensitivity).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose. The second sentence about token usage is relevant but could be integrated more smoothly. No wasted words, though slightly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which should cover return values), the description adequately states the tool's purpose. However, for a search tool with no annotations, it lacks context on authentication, session handling, or result formatting, leaving gaps in operational understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing good documentation for both parameters. The description adds no parameter-specific information beyond what's in the schema, so it meets the baseline of 3 without compensating or adding extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search authorities') and the resource ('for Direct Procurement'), with the specific operation 'idareAra' mentioned. It distinguishes from general 'search_authorities' by specifying 'Direct Procurement' context, though it doesn't explicitly contrast with 'search_direct_procurement_parent_authorities'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search_authorities' or 'search_direct_procurement_parent_authorities'. It mentions using the returned 'token' as idareId, which is a usage instruction but not comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_direct_procurement_parent_authoritiesB
Search parent authorities (Üst İdare) via ustIdareAra. Pass returned 'token' to parent_authority_code (ustIdareKod).
| Name | Required | Description | Default |
|---|---|---|---|
| cookies | No | Cookie header (Çerez) for EKAP session (optional) | |
| search_term | No | Parent authority search (Bağlı Olduğu Üst İdare), e.g., 'antalya' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the token output and its use in another tool, which adds some context, but fails to describe critical behaviors like authentication needs (only hints at optional cookies), rate limits, error handling, or what the search returns beyond the token. For a search tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Search parent authorities') and includes essential workflow information (token usage). There is no wasted text, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which likely covers return values), 100% schema coverage for inputs, and no annotations, the description is reasonably complete for a search tool. It specifies the search target and token workflow, though it could better address behavioral aspects like authentication or errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning about the parameters beyond what's in the schema (e.g., it doesn't clarify search syntax or cookie format). Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for parent authorities via 'ustIdareAra' and mentions the token output, which distinguishes it from generic search tools. However, it doesn't explicitly differentiate from sibling tools like 'search_authorities' or 'search_direct_procurement_authorities' beyond the 'parent authorities' focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning passing the token to 'parent_authority_code', suggesting a workflow context. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'search_authorities' or 'search_direct_procurement_authorities', nor does it specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_direct_procurementsB
Search Direct Procurements (Doğrudan Temin) via EKAP (YeniIhaleAramaData.ashx, metot=dtAra). Returns: dt_no, title, authority, type, due_datetime, announcement_date, province_plate, has_announcement, has_document.
| Name | Required | Description | Default |
|---|---|---|---|
| authority_id | No | Authority token (İdare ID token) from idareAra | |
| cookies | No | Cookie header (Çerez) for EKAP session (optional) | |
| date_end | No | Offer due end (Teklif tarihi bitişi) YYYY-MM-DD | |
| date_start | No | Offer due start (Teklif tarihi başlangıcı) YYYY-MM-DD | |
| dt_no | No | DT reference (DT No) combined, e.g., 25DT1493794 | |
| dt_number | No | DT number (DT Sayı), e.g., 1493794 | |
| dt_type | No | DT type (Doğrudan Temin Türü): 1=Goods (Mal), 2=Construction (Yapım), 3=Service (Hizmet), 4=Consultancy (Danışmanlık) | |
| e_price_offer | No | E-Price Offer (E-Fiyat Teklifi) eihale | |
| order_by | No | Sort key (Sıralama): e.g., 10=DT No desc | |
| page_index | No | Page index (Sayfa indeksi) 1-n | |
| parent_authority_code | No | Parent Authority (Bağlı Olduğu Üst İdare) ustIdareKod | |
| province_name | No | Authority province name (İl adı), e.g., 'Antalya' | |
| province_plate | No | Authority province plate (İl plaka kodu) 1-81. Accepts integer or string. | |
| scope_id | No | Scope ID (Doğrudan Temin Kapsamı): 101/102/103 | |
| scope_text | No | Scope text (Kapsam), e.g., 'Within Law 4734 (4734 Kapsamında)' | |
| search_text | No | Search term for Direct Procurement (Doğrudan Temin) | |
| status_id | No | Status ID (Doğrudan Temin Durumu): 202,3,4,5,15 | |
| status_text | No | Status text (Durum), e.g., 'Bids Under Evaluation (Teklifler Değerlendiriliyor)' | |
| top_authority_code | No | Top Authority (Bağlı Olduğu En Üst İdare) enUstIdareKod | |
| year | No | DT year (Yıl), e.g., 2025 (API uses two digits) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks critical behavioral details. It mentions the API endpoint but doesn't disclose whether this is a read-only operation, potential rate limits, authentication requirements beyond optional cookies, error handling, or pagination behavior (despite having page_index parameter). The description adds minimal context beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: one stating the search function and endpoint, another listing return fields. There's no wasted text, though it could be slightly more front-loaded with key usage context. Every sentence provides concrete information about the tool's operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex 20-parameter search tool with no annotations but with complete schema coverage and an output schema (implied by 'Returns' statement), the description is minimally adequate. It covers what the tool does and what it returns, but lacks important context about when to use it, behavioral constraints, and how it differs from sibling tools, making it incomplete for optimal agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already documents all 20 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain parameter relationships, default behaviors, or search logic. The baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Search Direct Procurements'), target resource ('via EKAP'), and technical endpoint ('YeniIhaleAramaData.ashx, metot=dtAra'), which distinguishes it from sibling tools like get_direct_procurement_details or search_tenders that perform different operations. It also lists the exact return fields, making the purpose highly specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_tenders or get_direct_procurement_details, nor does it mention prerequisites such as needing an EKAP session (only implied by the optional cookies parameter). There is no explicit context for when this search is appropriate versus other procurement-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ilan_adsA
Search Turkish government announcements and advertisements on ilan.gov.tr.
Returns: public announcements, tender notices, real estate sales, notifications, government job postings, legal notices, UYAP e-sales, and other official advertisements.
Categories include: Emlak, İhale Duyuruları, Tebligat ve Duyurular, Kamu-Akademik Personel, İflas Hukuku Davaları, Vasıta, UYAP E-SATIŞ (icra/mahkeme satışları), etc.
Sources: BIK (Basın İlan Kurumu), UYAP (E-SATIŞ icra/mahkeme satışları)
| Name | Required | Description | Default |
|---|---|---|---|
| ad_type_filter | No | Filter by ad type (İcra=2, İhale=3, Tebligat=4, Personel=5, UYAP_E_SATIS=UYAP e-satış) | |
| category | No | Filter by category | |
| city_plate | No | Filter by city plate number (1-81, e.g., 6=ANKARA, 34=İSTANBUL, 35=İZMİR). Accepts integer or string. | |
| current_page | No | Current page number (1-based, affects both skip_count and currentPage parameter) | |
| max_result_count | No | Maximum number of results to return (1-50) | |
| price_max | No | Maximum price filter (for ads with prices). Accepts integer or string. | |
| price_min | No | Minimum price filter (for ads with prices). Accepts integer or string. | |
| publish_date_max | No | Maximum publish date (DD.MM.YYYY format, e.g., '19.09.2025') | |
| publish_date_min | No | Minimum publish date (DD.MM.YYYY format, e.g., '01.09.2025') | |
| search_in_content | No | Search specifically in ad content (uses 'c' parameter) | |
| search_in_title | No | Search specifically in ad titles (uses 't' parameter) | |
| search_text | No | Text to search for in ad titles and content | |
| skip_count | No | Number of results to skip for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions what the tool returns (public announcements, tender notices, etc.) and sources (BIK, UYAP), but lacks critical behavioral details like pagination behavior (implied by parameters but not explained), rate limits, authentication requirements, or error handling. The description is informative but incomplete for operational transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by return types, categories, and sources. Each sentence adds value without redundancy. It could be slightly more concise by integrating some details, but overall it's efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (13 parameters, 100% schema coverage, output schema exists), the description is reasonably complete. It explains the tool's scope, return types, categories, and sources, which complements the structured data. With an output schema, it doesn't need to detail return values. Minor gaps in behavioral transparency prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 13 parameters. The description adds no parameter-specific information beyond what's in the schema, but does provide context on categories and sources that help interpret parameter values like ad_type_filter or category. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Turkish government announcements on ilan.gov.tr, specifying the exact resource. It distinguishes itself from sibling tools like search_tenders or get_recent_tenders by covering a broader range of announcement types (e.g., real estate, job postings, legal notices) beyond just tenders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching various official advertisements, but does not explicitly state when to use this tool versus alternatives like search_tenders or get_recent_tenders. It provides context about the types of announcements covered but lacks explicit guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_okas_codesB
Search OKAS procurement classification codes.
Item types: 1=Goods, 2=Service, 3=Construction Search in Turkish descriptions for best results.
| Name | Required | Description | Default |
|---|---|---|---|
| kalem_turu | No | Filter by item type: 1=Mal (Goods), 2=Hizmet (Service), 3=Yapım (Construction) | |
| limit | No | Maximum number of results to return (1-500) | |
| search_term | No | Search term to find matching OKAS codes by description |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions searching 'in Turkish descriptions for best results,' which adds useful context about language optimization. However, it fails to disclose critical traits like whether this is a read-only operation, potential rate limits, authentication needs, or pagination behavior (beyond the 'limit' parameter in the schema). For a search tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with the core purpose stated first. Both sentences earn their place: the first defines the tool, and the second provides practical guidance (item types and language tip). There is zero waste or redundancy, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with filtering), 100% schema coverage, and the presence of an output schema (which means return values are documented elsewhere), the description is mostly complete. It covers purpose, item types, and a language tip. However, it lacks behavioral context (e.g., safety, performance), which is a minor gap since annotations are absent, but the output schema mitigates some of this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (kalem_turu, limit, search_term) with descriptions and defaults. The description adds minimal value by listing item type codes (1=Goods, etc.), which partially overlaps with the schema's enum description. It doesn't provide additional syntax, format details, or examples beyond what the schema offers, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Search OKAS procurement classification codes,' which is a specific verb+resource combination. It distinguishes itself from siblings by focusing on classification codes rather than tenders, authorities, or announcements. However, it doesn't explicitly contrast with sibling tools like 'search_tenders' or 'search_authorities' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance by mentioning 'Search in Turkish descriptions for best results,' which suggests a language preference. It also lists item type codes (1=Goods, etc.), hinting at when to filter by type. However, it lacks explicit when-to-use rules, alternatives (e.g., vs. other search tools), or exclusions, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersC
Search Turkish government tenders from EKAP v2 portal.
Tender types: 1=Mal, 2=Yapım, 3=Hizmet, 4=Danışmanlık Provinces: Use plate numbers (6=Ankara, 34=İstanbul, 35=İzmir) IKN format: YEAR/NUMBER, dates: YYYY-MM-DD
| Name | Required | Description | Default |
|---|---|---|---|
| alt_yuklenici_calistirilabilir_mi | No | Filter for subcontractor employment allowed | |
| alternatif_teklif_verilebilir_mi | No | Filter for alternative proposals allowed | |
| announcement_date_end | No | End date for announcement dates (YYYY-MM-DD format) | |
| announcement_date_filter | No | Announcement date filter type | |
| announcement_date_start | No | Start date for announcement dates (YYYY-MM-DD format) | |
| announcement_types | No | Announcement type IDs: 1=Ön İlan, 2=İhale İlanı, 3=Sonuç İlanı, etc. | |
| authority_ids | No | Authority/institution IDs to filter by | |
| avans_verilecek_mi | No | Filter for advance payment to be given | |
| cerceve_anlasmasi_mi | No | Filter for framework agreements | |
| e_eksiltme_yapilacak_mi | No | Filter for electronic auctions (Elektronik eksiltme yapılacak mı) | |
| e_ihale | No | Filter for electronic tenders (e-İhale) | |
| ekonomik_mali_yeterlilik_belgeleri_isteniyor_mu | No | Filter for economic/financial qualification documents required | |
| fiyat_disi_unsur_varmi | No | Filter for non-price factors (Fiyat dışı unsur var mı) | |
| fiyat_farki_verilecek_mi | No | Filter for price difference to be given | |
| ikn_number | No | IKN number | |
| ikn_year | No | IKN year (e.g., 2025) | |
| is_deneyimi_gosteren_belgeler_isteniyor_mu | No | Filter for work experience documents required | |
| kismi_teklif_mi | No | Filter for partial proposals (Kısmi teklif verilebilir mi) | |
| konsorsiyum_katilabilir_mi | No | Filter for consortium participation allowed | |
| limit | No | Maximum number of results to return (1-100) | |
| mesleki_teknik_yeterlilik_belgeleri_isteniyor_mu | No | Filter for professional/technical qualification documents required | |
| okas_codes | No | OKAS classification codes to filter by | |
| order_by | No | Order results by: ihaleTarihi=date, ihaleAdi=name, idareAdi=authority | ihaleTarihi |
| ortak_alim_mi | No | Filter for joint procurement (Ortak alım mı) | |
| personel_calistirilmasina_dayali_mi | No | Filter for personnel employment based tenders | |
| proposal_types | No | Proposal type IDs: 1=Götürü-Anahtar Teslimi Götürü, 2=Birim Fiyat, 3=Karma | |
| provinces | No | Province plate numbers to filter by (1-81, e.g., 6=Ankara, 34=İstanbul, 35=İzmir). Accepts integers or strings. | |
| search_in_admin_spec | No | Search in administrative specifications | |
| search_in_announcement | No | Search in tender announcement | |
| search_in_bid_form | No | Search in bid form | |
| search_in_contract_draft | No | Search in contract draft | |
| search_in_ikn | No | Search in IKN (tender reference number) | |
| search_in_location | No | Search in work location clause | |
| search_in_nature_quantity | No | Search in nature/quantity clause | |
| search_in_similar_work | No | Search in similar work clause | |
| search_in_tech_spec | No | Search in technical specifications | |
| search_in_tender_info | No | Search in tender information | |
| search_in_title | No | Search in tender title | |
| search_text | No | Text to search for in tender titles, descriptions, and specifications | |
| search_type | No | Search type: GirdigimGibi=exact match, TumKelimeler=all words | GirdigimGibi |
| skip | No | Number of results to skip for pagination | |
| sort_order | No | Sort order | desc |
| tender_date_end | No | End date for tender dates (YYYY-MM-DD format) | |
| tender_date_filter | No | Tender date filter type | |
| tender_date_start | No | Start date for tender dates (YYYY-MM-DD format) | |
| tender_methods | No | Tender method IDs to filter by | |
| tender_statuses | No | Tender status IDs to filter by | |
| tender_sub_methods | No | Tender sub-method IDs to filter by | |
| tender_types | No | Tender types: 1=Mal (Goods), 2=Yapım (Construction), 3=Hizmet (Service), 4=Danışmanlık (Consultancy) | |
| yabanci_isteklilere_izin_veriliyor_mu | No | Filter for foreign bidders allowed | |
| yerli_istekliye_fiyat_avantaji_uygulanıyor_mu | No | Filter for domestic bidder price advantage applied |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the data source (EKAP v2 portal) and some format constraints, but fails to describe critical behaviors: whether this is a read-only operation, pagination mechanics beyond the 'limit' and 'skip' parameters, rate limits, authentication requirements, error handling, or what the output contains. For a search tool with 51 parameters, this leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with four brief lines. It front-loads the core purpose and efficiently lists key data formats without unnecessary elaboration. Every sentence provides specific information about the tool's domain and expected inputs, though it could be slightly more structured for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (51 parameters) and the presence of an output schema (which handles return values), the description is minimally adequate. It covers the data source and key format mappings but lacks behavioral context, usage guidance, and doesn't compensate for the absence of annotations. For such a parameter-rich search tool, more comprehensive guidance would be beneficial despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal parameter semantics beyond the schema. It provides mappings for tender types (1=Mal, etc.), province plate numbers (6=Ankara), IKN format, and date format, which clarifies some enum values. However, with 100% schema description coverage, the schema already documents all 51 parameters thoroughly. The description's additions are helpful but don't significantly enhance understanding beyond the comprehensive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Turkish government tenders from the EKAP v2 portal, providing a specific verb ('Search') and resource ('Turkish government tenders'). However, it doesn't explicitly differentiate this from sibling tools like 'search_direct_procurements' or 'search_ilan_ads' beyond mentioning the EKAP portal, which might not be sufficient for clear sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_recent_tenders' or 'search_direct_procurements'. It lists data formats (tender types, provinces, IKN format, dates) but offers no context about appropriate use cases, prerequisites, or exclusions compared to other search tools on the server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v1.0.0- First observed
get_direct_procurement_details - First observed
get_ilan_ad_detail - First observed
get_recent_tenders - First observed
get_tender_announcements - First observed
get_tender_details - First observed
search_authorities - First observed
search_direct_procurement_authorities - First observed
search_direct_procurement_parent_authorities - First observed
search_direct_procurements - First observed
search_ilan_ads - First observed
search_okas_codes - First observed
search_tenders
TDQS
Scored across 12 tools
Most tools have distinct purposes targeting specific resources like tenders, direct procurements, authorities, or advertisements, with clear boundaries. However, some overlap exists between search_tenders and get_recent_tenders, which could cause confusion as both relate to tender listings, though descriptions help differentiate them by recency versus comprehensive search.
Tool names follow a highly consistent verb_noun pattern throughout, such as get_direct_procurement_details, search_authorities, and get_tender_details. All tools use snake_case with clear, descriptive names, making them predictable and easy to understand for agents.
With 12 tools, the server is well-scoped for its domain of Turkish government procurement and announcements. Each tool serves a specific function, such as searching, retrieving details, or filtering, covering key aspects without being overly broad or sparse, which is appropriate for this complex domain.
The tool set provides comprehensive coverage for searching and retrieving information on tenders, direct procurements, authorities, advertisements, and classification codes, supporting core workflows. A minor gap exists in update or action-oriented tools, such as submitting bids or managing notifications, but agents can work around this with the available read-focused operations.
Maintenance
Related MCP Connectors
Resmî Kamu İhale Bülteni (EKAP) üzerinden CAPTCHA'sız/girişsiz ihale ilanı arşivleme ve arama,…
Search EU public tenders across TED and 8 national portals. Monitor, match, and analyse procurement.
Search public procurement notices from 17 sources across Germany, the EU and the UK. Read-only.
UK public procurement data for AI agents: tenders, contracts, buyer and supplier profiles.
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides AI models with access to Ukrainian government procurement data from Prozorro, enabling search and retrieval of tender information by organization, date range, and other criteria.17 npm11ISC
- FlicenseAqualityNot gradedmaintenanceEnables users to search and retrieve detailed information about Taiwan government procurement tenders through the Government Electronic Procurement System API. It supports searching tenders by keyword, category code, date, and government unit.6-
- AlicenseAqualityDmaintenanceIntegrates 6 Korean public procurement APIs to search, analyze, and manage procurement data using natural language.83MIT
- AlicenseNot gradedqualityAmaintenanceTurns Turkish public-tender result notices into structured records and provides analytics on firm history, discount distributions, and competition metrics via an MCP server.3MIT