Skip to main content
Glama
saidsurucu

İhale MCP

by saidsurucu

İ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

  1. Claude Desktop'ı açın

  2. Settings → Connectors → Add Custom Connector

  3. Bilgileri girin:

    • Name: İhale MCP

    • URL: https://ihalemcp.fastmcp.app/mcp

  4. Add butonuna tıklayın

  5. 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.

  • uv Kurulumu:

    • 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: ihalemcp

    • Name: İhale MCP

    • Command:

      uvx --from git+https://github.com/saidsurucu/ihale-mcp ihale-mcp
    • Save 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

  1. Ö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.

  2. Claude Desktop Settings -> Developer -> Edit Config.

  3. Açılan claude_desktop_config.json dosyasına mcpServers altına ekleyin:

    {
      "mcpServers": {
        "İhale MCP": {
          "command": "uvx",
          "args": [
           "--from", "git+https://github.com/saidsurucu/ihale-mcp",
           "ihale-mcp"
          ]
        }
      }
    }
  4. 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/end

    • Boolean Filtreler: e_ihale, ortak_alim_mi, kismi_teklif_mi, yabanci_isteklilere_izin_veriliyor_mu ve 13+ daha fazla filtre

    • Liste Filtreleri: provinces, tender_statuses, tender_methods, okas_codes, authority_ids, proposal_types, announcement_types

    • Arama Kapsamı: search_in_title, search_in_announcement, search_in_tech_spec vb. 11 farklı alan

    • Dö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), limit

    • Döndürdüğü Değer: OKAS kodları, açıklamaları ve kategorileri

  • search_authorities: Türk kamu kurumlarında arama yapar.

    • Parametreler: search_term, limit

    • Dö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, limit

    • Döndürdüğü Değer: Yakın tarihli ihale listesi

  • get_tender_announcements: Belirli bir ihalenin tüm duyurularını getirir.

    • Parametreler: tender_id

    • Dö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_info nesnesi 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_tenders

    • Dö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_id

    • Dö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_id

    • Dö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/false

      • status_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/Bitis

      • province_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önen token, search_direct_procurements içinde authority_id olarak kullanılır.

  • search_direct_procurement_parent_authorities: Üst İdare (Parent Authority) araması; dönen token, 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

  1. Pazar Araştırması: Belirli sektör veya bölgelerdeki fırsatları takip etme

  2. Uygunluk İzleme: Mevzuata uygunluk için ihale duyurularını takip etme

  3. İş Zekası: Kamu harcama modellerini ve trendlerini analiz etme

  4. Bildirim Sistemleri: Belirli ihale türleri için uyarı sistemleri kurma

  5. Veri Analizi: Araştırma ve analiz için ihale verilerini çıkarma

İlan.gov.tr Resmi İlanları

  1. UYAP E-SATIŞ Takibi: İcra dairesi ve mahkeme satışlarını izleme

  2. Personel Duyuruları: Kamu personel alım ilanlarını takip etme

  3. Tebligat İzleme: Resmi tebligat ve duyuruları takip etme

  4. Belediye İhaleleri: Yerel yönetim ihale ilanlarını izleme

  5. 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 tools
get_direct_procurement_detailsC

Get Direct Procurement (Doğrudan Temin) details (dtDetayGetir) using tokens.

ParametersJSON Schema
NameRequiredDescriptionDefault
cookiesNoCookie header (Çerez) for EKAP session (optional)
dogrudan_temin_idYesE10 token (dogrudanTeminId) from list (liste)
idare_idYesE11 token (idareId) from list (liste)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYesAdvertisement ID from ilan.gov.tr search results

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days back to search (1-30)
limitNoMaximum number of results (1-100)
tender_typesNoFilter by tender types

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tender_idYesThe tender ID to get announcements for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tender_idYesThe tender ID to get comprehensive details for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-500)
search_termNoSearch term to find matching authorities/institutions by name

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cookiesNoCookie header (Çerez) for EKAP session (optional)
search_termNoAuthority search term (İdare arama), e.g., 'antalya' or institution name

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
cookiesNoCookie header (Çerez) for EKAP session (optional)
search_termNoParent authority search (Bağlı Olduğu Üst İdare), e.g., 'antalya'

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
authority_idNoAuthority token (İdare ID token) from idareAra
cookiesNoCookie header (Çerez) for EKAP session (optional)
date_endNoOffer due end (Teklif tarihi bitişi) YYYY-MM-DD
date_startNoOffer due start (Teklif tarihi başlangıcı) YYYY-MM-DD
dt_noNoDT reference (DT No) combined, e.g., 25DT1493794
dt_numberNoDT number (DT Sayı), e.g., 1493794
dt_typeNoDT type (Doğrudan Temin Türü): 1=Goods (Mal), 2=Construction (Yapım), 3=Service (Hizmet), 4=Consultancy (Danışmanlık)
e_price_offerNoE-Price Offer (E-Fiyat Teklifi) eihale
order_byNoSort key (Sıralama): e.g., 10=DT No desc
page_indexNoPage index (Sayfa indeksi) 1-n
parent_authority_codeNoParent Authority (Bağlı Olduğu Üst İdare) ustIdareKod
province_nameNoAuthority province name (İl adı), e.g., 'Antalya'
province_plateNoAuthority province plate (İl plaka kodu) 1-81. Accepts integer or string.
scope_idNoScope ID (Doğrudan Temin Kapsamı): 101/102/103
scope_textNoScope text (Kapsam), e.g., 'Within Law 4734 (4734 Kapsamında)'
search_textNoSearch term for Direct Procurement (Doğrudan Temin)
status_idNoStatus ID (Doğrudan Temin Durumu): 202,3,4,5,15
status_textNoStatus text (Durum), e.g., 'Bids Under Evaluation (Teklifler Değerlendiriliyor)'
top_authority_codeNoTop Authority (Bağlı Olduğu En Üst İdare) enUstIdareKod
yearNoDT year (Yıl), e.g., 2025 (API uses two digits)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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ı)

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_type_filterNoFilter by ad type (İcra=2, İhale=3, Tebligat=4, Personel=5, UYAP_E_SATIS=UYAP e-satış)
categoryNoFilter by category
city_plateNoFilter by city plate number (1-81, e.g., 6=ANKARA, 34=İSTANBUL, 35=İZMİR). Accepts integer or string.
current_pageNoCurrent page number (1-based, affects both skip_count and currentPage parameter)
max_result_countNoMaximum number of results to return (1-50)
price_maxNoMaximum price filter (for ads with prices). Accepts integer or string.
price_minNoMinimum price filter (for ads with prices). Accepts integer or string.
publish_date_maxNoMaximum publish date (DD.MM.YYYY format, e.g., '19.09.2025')
publish_date_minNoMinimum publish date (DD.MM.YYYY format, e.g., '01.09.2025')
search_in_contentNoSearch specifically in ad content (uses 'c' parameter)
search_in_titleNoSearch specifically in ad titles (uses 't' parameter)
search_textNoText to search for in ad titles and content
skip_countNoNumber of results to skip for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kalem_turuNoFilter by item type: 1=Mal (Goods), 2=Hizmet (Service), 3=Yapım (Construction)
limitNoMaximum number of results to return (1-500)
search_termNoSearch term to find matching OKAS codes by description

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
alt_yuklenici_calistirilabilir_miNoFilter for subcontractor employment allowed
alternatif_teklif_verilebilir_miNoFilter for alternative proposals allowed
announcement_date_endNoEnd date for announcement dates (YYYY-MM-DD format)
announcement_date_filterNoAnnouncement date filter type
announcement_date_startNoStart date for announcement dates (YYYY-MM-DD format)
announcement_typesNoAnnouncement type IDs: 1=Ön İlan, 2=İhale İlanı, 3=Sonuç İlanı, etc.
authority_idsNoAuthority/institution IDs to filter by
avans_verilecek_miNoFilter for advance payment to be given
cerceve_anlasmasi_miNoFilter for framework agreements
e_eksiltme_yapilacak_miNoFilter for electronic auctions (Elektronik eksiltme yapılacak mı)
e_ihaleNoFilter for electronic tenders (e-İhale)
ekonomik_mali_yeterlilik_belgeleri_isteniyor_muNoFilter for economic/financial qualification documents required
fiyat_disi_unsur_varmiNoFilter for non-price factors (Fiyat dışı unsur var mı)
fiyat_farki_verilecek_miNoFilter for price difference to be given
ikn_numberNoIKN number
ikn_yearNoIKN year (e.g., 2025)
is_deneyimi_gosteren_belgeler_isteniyor_muNoFilter for work experience documents required
kismi_teklif_miNoFilter for partial proposals (Kısmi teklif verilebilir mi)
konsorsiyum_katilabilir_miNoFilter for consortium participation allowed
limitNoMaximum number of results to return (1-100)
mesleki_teknik_yeterlilik_belgeleri_isteniyor_muNoFilter for professional/technical qualification documents required
okas_codesNoOKAS classification codes to filter by
order_byNoOrder results by: ihaleTarihi=date, ihaleAdi=name, idareAdi=authorityihaleTarihi
ortak_alim_miNoFilter for joint procurement (Ortak alım mı)
personel_calistirilmasina_dayali_miNoFilter for personnel employment based tenders
proposal_typesNoProposal type IDs: 1=Götürü-Anahtar Teslimi Götürü, 2=Birim Fiyat, 3=Karma
provincesNoProvince plate numbers to filter by (1-81, e.g., 6=Ankara, 34=İstanbul, 35=İzmir). Accepts integers or strings.
search_in_admin_specNoSearch in administrative specifications
search_in_announcementNoSearch in tender announcement
search_in_bid_formNoSearch in bid form
search_in_contract_draftNoSearch in contract draft
search_in_iknNoSearch in IKN (tender reference number)
search_in_locationNoSearch in work location clause
search_in_nature_quantityNoSearch in nature/quantity clause
search_in_similar_workNoSearch in similar work clause
search_in_tech_specNoSearch in technical specifications
search_in_tender_infoNoSearch in tender information
search_in_titleNoSearch in tender title
search_textNoText to search for in tender titles, descriptions, and specifications
search_typeNoSearch type: GirdigimGibi=exact match, TumKelimeler=all wordsGirdigimGibi
skipNoNumber of results to skip for pagination
sort_orderNoSort orderdesc
tender_date_endNoEnd date for tender dates (YYYY-MM-DD format)
tender_date_filterNoTender date filter type
tender_date_startNoStart date for tender dates (YYYY-MM-DD format)
tender_methodsNoTender method IDs to filter by
tender_statusesNoTender status IDs to filter by
tender_sub_methodsNoTender sub-method IDs to filter by
tender_typesNoTender types: 1=Mal (Goods), 2=Yapım (Construction), 3=Hizmet (Service), 4=Danışmanlık (Consultancy)
yabanci_isteklilere_izin_veriliyor_muNoFilter for foreign bidders allowed
yerli_istekliye_fiyat_avantaji_uygulanıyor_muNoFilter for domestic bidder price advantage applied

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 12 tool updatesv1.0.0
    • First observedget_direct_procurement_details
    • First observedget_ilan_ad_detail
    • First observedget_recent_tenders
    • First observedget_tender_announcements
    • First observedget_tender_details
    • First observedsearch_authorities
    • First observedsearch_direct_procurement_authorities
    • First observedsearch_direct_procurement_parent_authorities
    • First observedsearch_direct_procurements
    • First observedsearch_ilan_ads
    • First observedsearch_okas_codes
    • First observedsearch_tenders

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    Enables 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
    -
  • A
    license
    A
    quality
    D
    maintenance
    Integrates 6 Korean public procurement APIs to search, analyze, and manage procurement data using natural language.
    8
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns Turkish public-tender result notices into structured records and provides analytics on firm history, discount distributions, and competition metrics via an MCP server.
    3
    MIT