Skip to main content
Glama
saidsurucu

Yargı MCP

by saidsurucu

Yargı MCP: Türk Hukuk Kaynakları için MCP Sunucusu

MCP Toplist

✨ Profesyonel Sürüm Hazır: Yargı MCP Pro

Mevzuat ve içtihatı tek bir MCP sunucusunda birleştiren profesyonel sürüm yayında:

👉 https://yargipro.com

Related MCP server: Mevzuat MCP

🚨 SUNUCU YENİ ADRESE TAŞINDI

Yeni Remote MCP adresi: https://yargimcp.surucu.dev/mcp

Eski adres (https://yargimcp.fastmcp.app/mcp) artık kullanım dışıdır — yalnızca taşındığını bildiren bir uyarı tool'u döner.

Yapmanız gereken: MCP istemcinizdeki (Claude Desktop, 5ire, Google Antigravity, ChatGPT vb.) sunucu URL'sini yukarıdaki yeni adresle güncelleyin.

Word'den UDF'ye profesyonel dönüşüm için yeni uygulamam udfcevir.com adresinde!

Star History Chart

Bu proje, çeşitli Türk hukuk kaynaklarına (Yargıtay, Danıştay, Emsal Kararlar, Uyuşmazlık Mahkemesi, Anayasa Mahkemesi - Norm Denetimi ile Bireysel Başvuru Kararları, Kamu İhale Kurulu Kararları, Rekabet Kurumu Kararları, Sayıştay Kararları, KVKK Kararları, BDDK Kararları, BTK Kararları, GİB Özelgeleri ve Sigorta Tahkim Komisyonu Kararları) erişimi kolaylaştıran bir FastMCP sunucusu oluşturur. Bu sayede, bu kaynaklardan veri arama ve belge getirme 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://yargimcp.surucu.dev/mcp

⚠️ Eski adres https://yargimcp.fastmcp.app/mcp artık kullanım dışıdır — yalnızca taşındığını bildiren bir uyarı tool'u döner. Lütfen yukarıdaki yeni adresi kullanın.

Claude Desktop ile Kullanım (Ücretli abonelik gerekir)

  1. Claude Desktop'ı açın

  2. Settings → Connectors → Add Custom Connector

  3. Bilgileri girin:

    • Name: Yargı MCP

    • URL: https://yargimcp.surucu.dev/mcp

  4. Add butonuna tıklayın

  5. Hemen kullanmaya başlayın! 🎉

Google Antigravity ile Kullanım (Lokal uv Kurulumu — Kopyala-Yapıştır)

Ön Gereksinimler: Bilgisayarınızda Python, uv (kurulum) ve Node.js (indir) kurulu olmalı. (Node.js yalnızca aşağıdaki kurulum komutunu çalıştırmak için gerekir; MCP'yi uvx çalıştırır.)

Aşağıdaki bloğun tamamını terminale yapıştırın. Komut, Antigravity'nin okuduğu ~/.gemini/config/mcp_config.json dosyasını sizin yerinize oluşturur/günceller (varsa diğer sunucularınız korunur):

macOS / Linux (Terminal):

node - <<'YARGI'
const fs=require("fs"),os=require("os"),path=require("path");
const dir=path.join(os.homedir(),".gemini","config"),file=path.join(dir,"mcp_config.json");
fs.mkdirSync(dir,{recursive:true});
let cfg={};try{cfg=JSON.parse(fs.readFileSync(file,"utf8"))}catch{}
if(typeof cfg!=="object"||cfg===null||Array.isArray(cfg))cfg={};
if(typeof cfg.mcpServers!=="object"||cfg.mcpServers===null)cfg.mcpServers={};
cfg.mcpServers["yargi-mcp"]={command:"uvx",args:["yargi-mcp"]};
fs.writeFileSync(file,JSON.stringify(cfg,null,2)+"\n");
console.log("yargi-mcp eklendi -> "+file);
YARGI

Windows (PowerShell):

@'
const fs=require("fs"),os=require("os"),path=require("path");
const dir=path.join(os.homedir(),".gemini","config"),file=path.join(dir,"mcp_config.json");
fs.mkdirSync(dir,{recursive:true});
let cfg={};try{cfg=JSON.parse(fs.readFileSync(file,"utf8"))}catch{}
if(typeof cfg!=="object"||cfg===null||Array.isArray(cfg))cfg={};
if(typeof cfg.mcpServers!=="object"||cfg.mcpServers===null)cfg.mcpServers={};
cfg.mcpServers["yargi-mcp"]={command:"uvx",args:["yargi-mcp"]};
fs.writeFileSync(file,JSON.stringify(cfg,null,2)+"\n");
console.log("yargi-mcp eklendi -> "+file);
'@ | node -

Komut yargi-mcp eklendi -> ... çıktısını verdiğinde kurulum tamamlanmıştır. Antigravity'yi (açıksa kapatıp) yeniden başlatın; yargi-mcp araçları otomatik yüklenir.

💡 İpucu: Lokal kurulumda hukuk kaynaklarına erişim doğrudan bilgisayarınızda uvx yargi-mcp ile çalışır; uzaktan sunucuya ihtiyaç duymaz.

Remote MCP Sorun Giderme

https://yargimcp.surucu.dev/mcp bir web sayfası değil, Streamable HTTP MCP uç noktasıdır. Tarayıcıda açınca veya düz curl ile GET isteği atınca 406 Not Acceptable ve Client must accept text/event-stream benzeri bir yanıt görmek normaldir; bu, sunucunun kapalı olduğu anlamına gelmez. MCP istemcisi Accept: application/json, text/event-stream başlığıyla JSON-RPC isteği göndermelidir.

Hızlı sağlık kontrolü için tarayıcıda şu adresleri açabilirsiniz:

  • https://yargimcp.surucu.dev/health — servis sağlık durumu

Claude.ai veya başka bir istemci "araç yok" gibi davranırsa:

  1. Connector'ı kaldırıp yeniden ekleyin.

  2. URL olarak önce https://yargimcp.surucu.dev/mcp deneyin; istemciniz yönlendirmeleri takip etmiyorsa https://yargimcp.surucu.dev/mcp/ deneyin.

  3. Eski https://yargimcp.fastmcp.app/mcp adresinin istemci ayarlarında veya önbellekte kalmadığından emin olun.

  4. İstemcinin remote/Streamable HTTP MCP desteklediğini ve text/event-stream kabul ettiğini kontrol edin.


örnek

🎯 Temel Özellikler

🚀 YÜKSEK PERFORMANS OPTİMİZASYONU: Bu MCP sunucusu %61.8 token azaltma ile optimize edilmiştir (8,692 token tasarrufu). Claude AI ile daha hızlı yanıt süreleri ve daha verimli etkileşim sağlar.

  • Çeşitli Türk hukuk veritabanlarına programatik erişim için standart bir MCP arayüzü.

  • Kapsamlı Mahkeme Daire/Kurul Filtreleme: 79 farklı daire/kurul filtreleme seçeneği

  • Dual/Triple API Desteği: Her mahkeme için birden fazla API kaynağı ile maksimum kapsama

  • Kapsamlı Tarih Filtreleme: Tüm Bedesten API araçlarında ISO 8601 formatında tarih aralığı filtreleme

  • Kesin Cümle Arama: Tüm Bedesten API araçlarında çift tırnak ile tam cümle arama desteği

  • Aşağıdaki kurumların kararlarını arama ve getirme yeteneği:

    • Yargıtay: Detaylı kriterlerle karar arama ve karar metinlerini Markdown formatında getirme. Dual API (Ana + Bedesten) + 52 Daire/Kurul Filtreleme + Tarih & Kesin Cümle Arama (Hukuk/Ceza Daireleri, Genel Kurullar)

    • Danıştay: Anahtar kelime bazlı ve detaylı kriterlerle karar arama; karar metinlerini Markdown formatında getirme. Triple API (Keyword + Detailed + Bedesten) + 27 Daire/Kurul Filtreleme + Tarih & Kesin Cümle Arama (İdari Daireler, Vergi/İdare Kurulları, Askeri Yüksek İdare Mahkemesi)

    • Yerel Hukuk Mahkemeleri: Bedesten API ile yerel hukuk mahkemesi kararlarına erişim + Tarih & Kesin Cümle Arama

    • İstinaf Hukuk Mahkemeleri: Bedesten API ile istinaf mahkemesi kararlarına erişim + Tarih & Kesin Cümle Arama

    • Kanun Yararına Bozma (KYB): Bedesten API ile olağanüstü kanun yoluna erişim + Tarih & Kesin Cümle Arama

    • Emsal (UYAP): Detaylı kriterlerle emsal karar arama ve karar metinlerini Markdown formatında getirme.

    • Uyuşmazlık Mahkemesi: Form tabanlı kriterlerle karar arama ve karar metinlerini (URL ile erişilen) Markdown formatında getirme.

    • Anayasa Mahkemesi (Norm Denetimi): Kapsamlı kriterlerle norm denetimi kararlarını arama; uzun karar metinlerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme.

    • Anayasa Mahkemesi (Bireysel Başvuru): Kapsamlı kriterlerle bireysel başvuru "Karar Arama Raporu" oluşturma ve listedeki kararların metinlerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme.

    • KİK (Kamu İhale Kurulu): Çeşitli kriterlerle Kurul kararlarını arama; uzun karar metinlerini (varsayılan 5.000 karakterlik) sayfalanmış Markdown formatında getirme.

    • Rekabet Kurumu: Çeşitli kriterlerle Kurul kararlarını arama; karar metinlerini Markdown formatında getirme.

    • Sayıştay: 3 karar türü ile kapsamlı denetim kararlarına erişim + 8 Daire Filtreleme + Tarih Aralığı & İçerik Arama (Genel Kurul yorumlayıcı kararları, Temyiz Kurulu itiraz kararları, Daire ilk derece denetim kararları)

    • KVKK (Kişisel Verilerin Korunması Kurulu): Brave Search API ile veri koruma kararlarını arama; uzun karar metinlerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme + Türkçe Arama + Site Hedeflemeli Arama (kvkk.gov.tr kararları)

    • BDDK (Bankacılık Düzenleme ve Denetleme Kurumu): Bankacılık düzenleme kararlarını arama; karar metinlerini Markdown formatında getirme + Optimized Search + "Karar Sayısı" Targeting + Spesifik URL Filtreleme (bddk.org.tr/Mevzuat/DokumanGetir)

    • BTK (Bilgi Teknolojileri ve İletişim Kurumu): Kurul Kararlarını arama (anahtar kelime + karar no + karar tarihi + yayın tarihi + ilgili birim filtreleri); karar PDF'lerini (5.000 karakterlik) sayfalanmış Markdown formatında getirme (btk.gov.tr)

    • GİB (Gelir İdaresi Başkanlığı) Özelgeleri: Resmi vergi özelgelerini arama (18.000+ özelge: KDV, Kurumlar, Gelir, ÖTV, Damga vb.); tam metni sayfalanmış Markdown formatında getirme + Keyword + Özelge No + Kanun No + Tarih Aralığı + Otomatik ISO 8601 Dönüşümü + Metadata Başlık Bloğu

    • Sigorta Tahkim Komisyonu: Hakem Karar Dergisi (64 sayı, 2010-2025) içindeki sigorta tahkim kararlarını arama; dergi PDF'lerini Markdown formatında getirme + Sayı İçi Karar Arama + Türkçe Büyük/Küçük Harf Desteği + Relevance Scoring

  • Karar metinlerinin daha kolay işlenebilmesi için Markdown formatına çevrilmesi.

  • Claude Desktop uygulaması ile fastmcp install komutu kullanılarak kolay entegrasyon.

  • Yargı MCP artık 5ire gibi Claude Desktop haricindeki MCP istemcilerini de destekliyor!


Bu bölüm, Yargı 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: yargimcp

    • Name: Yargı MCP

    • Command:

      uvx yargi-mcp
    • Save butonuna basarak kaydedin. 5ire ayarları

  • Şimdi Tools altında Yargı 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 Yargı MCP ile konuşabilirsiniz.


Ön Gereksinimler: Bilgisayarınızda Python, uv (kurulum), Node.js (indir) ve (Windows için) Microsoft Visual C++ Redistributable kurulu olmalı. (Node.js yalnızca aşağıdaki kurulum komutunu çalıştırmak için gerekir; MCP'yi uvx çalıştırır.)

Aşağıdaki bloğun tamamını terminale yapıştırın. Komut, Claude Desktop'ın claude_desktop_config.json dosyasını sizin yerinize oluşturur/günceller (varsa diğer sunucularınız korunur):

macOS / Linux (Terminal):

node - <<'YARGI'
const fs=require("fs"),os=require("os"),path=require("path");
const dir=process.platform==="darwin"
  ? path.join(os.homedir(),"Library","Application Support","Claude")
  : path.join(os.homedir(),".config","Claude");
const file=path.join(dir,"claude_desktop_config.json");
fs.mkdirSync(dir,{recursive:true});
let cfg={};try{cfg=JSON.parse(fs.readFileSync(file,"utf8"))}catch{}
if(typeof cfg!=="object"||cfg===null||Array.isArray(cfg))cfg={};
if(typeof cfg.mcpServers!=="object"||cfg.mcpServers===null)cfg.mcpServers={};
cfg.mcpServers["yargi-mcp"]={command:"uvx",args:["yargi-mcp"]};
fs.writeFileSync(file,JSON.stringify(cfg,null,2)+"\n");
console.log("yargi-mcp eklendi -> "+file);
YARGI

Windows (PowerShell):

@'
const fs=require("fs"),os=require("os"),path=require("path");
const dir=path.join(process.env.APPDATA||path.join(os.homedir(),"AppData","Roaming"),"Claude");
const file=path.join(dir,"claude_desktop_config.json");
fs.mkdirSync(dir,{recursive:true});
let cfg={};try{cfg=JSON.parse(fs.readFileSync(file,"utf8"))}catch{}
if(typeof cfg!=="object"||cfg===null||Array.isArray(cfg))cfg={};
if(typeof cfg.mcpServers!=="object"||cfg.mcpServers===null)cfg.mcpServers={};
cfg.mcpServers["yargi-mcp"]={command:"uvx",args:["yargi-mcp"]};
fs.writeFileSync(file,JSON.stringify(cfg,null,2)+"\n");
console.log("yargi-mcp eklendi -> "+file);
'@ | node -

Komut yargi-mcp eklendi -> ... çıktısını verdiğinde kurulum tamamlanmıştır. Claude Desktop'ı tamamen kapatıp yeniden başlatın; yargi-mcp araçları otomatik yüklenir.


Manuel alternatif: Claude Desktop Settings → Developer → Edit Config menüsünden claude_desktop_config.json dosyasını açıp mcpServers altına ekleyebilirsiniz:

{
  "mcpServers": {
    "yargi-mcp": {
      "command": "uvx",
      "args": ["yargi-mcp"]
    }
  }
}

Yargı MCP'yi Gemini CLI ile kullanmak için:

  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. Gemini CLI ayarlarını yapılandırın:

    Gemini CLI'ın ayar dosyasını düzenleyin:

    • macOS/Linux: ~/.gemini/settings.json

    • Windows: %USERPROFILE%\.gemini\settings.json

    Aşağıdaki mcpServers bloğunu ekleyin:

    {
      "theme": "Default",
      "selectedAuthType": "###",
      "mcpServers": {
        "yargi_mcp": {
          "command": "uvx",
          "args": [
            "yargi-mcp"
          ]
        }
      }
    }

    Yapılandırma açıklamaları:

    • "yargi_mcp": Sunucunuz için yerel bir isim

    • "command": uvx komutu (uv'nin paket çalıştırma aracı)

    • "args": GitHub'dan doğrudan Yargı MCP'yi çalıştırmak için gerekli argümanlar

  3. Kullanım:

    • Gemini CLI'ı başlatın

    • Yargı MCP araçları otomatik olarak kullanılabilir olacaktır

    • Örnek komutlar:

      • "Yargıtay'ın mülkiyet hakkı ile ilgili son kararlarını ara"

      • "Danıştay'ın imar planı iptaline ilişkin kararlarını bul"

      • "Anayasa Mahkemesi'nin ifade özgürlüğü kararlarını getir"


Yargı MCP, semantik arama özelliği ile kararları anlamsal olarak sıralayabilir. Opsiyoneldir; iki yoldan biri yapılandırıldığında otomatik etkinleşir:

  • Yerel (önerilen, ücretsiz): kendi makinenizdeki OpenAI-uyumlu embedding sunucusu (HuggingFace TEI, llama.cpp, Ollama, vLLM, LM Studio…)

  • Hosted: OpenRouter ya da OrcaRouter API anahtarı

Semantik Arama Nasıl Çalışır?

  1. initial_keyword ile Bedesten API'den 100 karar çekilir

  2. query ile bu kararlar embedding modeli kullanılarak anlamsal olarak sıralanır

  3. En alakalı kararlar döndürülür

Önerilen Türkçe Kurulumu (Yerel — multilingual-e5-large)

intfloat/multilingual-e5-large Türkçe için kıyas ettiğimiz açık kaynak modeller arasında en iyilerinden. HuggingFace'in Text Embeddings Inference (TEI) sunucusuyla tek komutta ayağa kalkar ve OpenAI-uyumlu API sunar:

docker run -p 8080:80 ghcr.io/huggingface/text-embeddings-inference:latest \
    --model-id intfloat/multilingual-e5-large

Sonra Yargı MCP'ye şu env vars'ları geçirin:

EMBEDDING_PROVIDER=local
LOCAL_EMBEDDING_BASE_URL=http://localhost:8080/v1
LOCAL_EMBEDDING_MODEL=intfloat/multilingual-e5-large
LOCAL_EMBEDDING_DIMENSION=1024
EMBEDDING_PROMPT_STYLE=e5

⚠️ Önemli: EMBEDDING_PROMPT_STYLE=e5 şart — e5 modelleri query: / passage: öneki bekleyecek şekilde eğitilmiştir; yanlış önek sessizce kaliteyi düşürür.

Claude Desktop örneği (yerel TEI)

{
  "mcpServers": {
    "Yargı MCP": {
      "command": "uvx",
      "args": ["yargi-mcp"],
      "env": {
        "EMBEDDING_PROVIDER": "local",
        "LOCAL_EMBEDDING_BASE_URL": "http://localhost:8080/v1",
        "LOCAL_EMBEDDING_MODEL": "intfloat/multilingual-e5-large",
        "LOCAL_EMBEDDING_DIMENSION": "1024",
        "EMBEDDING_PROMPT_STYLE": "e5"
      }
    }
  }
}

Alternatif 1: Ollama (yerel, daha hafif kurulum)

ollama serve
ollama pull nomic-embed-text   # 768 dim, İngilizce ağırlıklı
EMBEDDING_PROVIDER=local
LOCAL_EMBEDDING_BASE_URL=http://localhost:11434/v1
LOCAL_EMBEDDING_MODEL=nomic-embed-text
LOCAL_EMBEDDING_DIMENSION=768
EMBEDDING_PROMPT_STYLE=raw

Ollama kütüphanesinde multilingual-e5-large doğrudan yok; Türkçe için TEI yolu daha doğru sonuç verir.

Alternatif 2: OpenRouter (hosted)

OPENROUTER_API_KEY=sk-or-v1-xxx...
# İsteğe bağlı — varsayılan google/gemini-embedding-001 (3072 dim, ÜCRETLİ)
# OPENROUTER_EMBEDDING_MODEL=...
# OPENROUTER_EMBEDDING_DIMENSION=...
# EMBEDDING_PROMPT_STYLE=gemini   # varsayılan

API anahtarınızı openrouter.ai/keys adresinden alın. Varsayılan model google/gemini-embedding-001 artık ücretli — ücretsiz bir model seçerseniz OPENROUTER_EMBEDDING_MODEL, OPENROUTER_EMBEDDING_DIMENSION ve uygun EMBEDDING_PROMPT_STYLE değerlerini birlikte ayarlayın.

Alternatif 3: OrcaRouter (hosted)

OrcaRouter, 200+ modeli tek OpenAI-uyumlu uçta toplayan bir üretim AI ağ geçididir (ağ geçidi seviyesinde, sıfır-güven AI ajan güvenliği de içerir). Mevcut SDK kodu base_url değiştirilerek aynen çalışır.

ORCAROUTER_API_KEY=sk-orca-xxx...
# İsteğe bağlı — varsayılan google/gemini-embedding-001 (3072 dim, çok dilli)
# ORCAROUTER_EMBEDDING_MODEL=...
# ORCAROUTER_EMBEDDING_DIMENSION=...
# EMBEDDING_PROMPT_STYLE=gemini   # varsayılan

API anahtarınızı www.orcarouter.ai adresinden alın. OPENROUTER_API_KEY yerine ORCAROUTER_API_KEY ayarlamanız yeterli — semantik arama aynı OpenAI-uyumlu akışı OrcaRouter ucu üzerinden kullanır.

Yapılandırma Referansı

Env Var

Açıklama

Örnek

EMBEDDING_PROVIDER

local ise yerel sunucu, boş ise hosted (OpenRouter/OrcaRouter)

local

EMBEDDING_PROMPT_STYLE

gemini / e5 / raw — modelin beklediği önek

e5

LOCAL_EMBEDDING_BASE_URL

Yerel sunucunun OpenAI-uyumlu URL'i

http://localhost:8080/v1

LOCAL_EMBEDDING_MODEL

Model adı

intfloat/multilingual-e5-large

LOCAL_EMBEDDING_DIMENSION

Modelin çıktı boyutu (mutlaka eşleşmeli)

1024

OPENROUTER_API_KEY

OpenRouter anahtarı (sadece hosted için)

sk-or-v1-…

OPENROUTER_EMBEDDING_MODEL

OpenRouter model id'si

google/gemini-embedding-001

OPENROUTER_EMBEDDING_DIMENSION

OpenRouter modelinin çıktı boyutu

3072

ORCAROUTER_API_KEY

OrcaRouter anahtarı (sadece hosted için)

sk-orca-…

ORCAROUTER_EMBEDDING_MODEL

OrcaRouter model id'si

google/gemini-embedding-001

ORCAROUTER_EMBEDDING_DIMENSION

OrcaRouter modelinin çıktı boyutu

3072

💡 Not: Hiçbir embedding sağlayıcı yapılandırılmazsa semantik arama aracı görünmez, diğer 28 araç normal şekilde çalışır.

Bu FastMCP sunucusu 26 aktif MCP aracı + 1 opsiyonel semantik arama aracı sunar (token verimliliği için optimize edilmiş):

Yargıtay Araçları (Birleşik Bedesten API - Token Optimized)

Not: Yargıtay araçları token verimliliği için birleşik Bedesten API'ye entegre edilmiştir

Danıştay Araçları (Birleşik Bedesten API - Token Optimized)

Not: Danıştay araçları token verimliliği için birleşik Bedesten API'ye entegre edilmiştir

Birleşik Bedesten API Araçları (5 Mahkeme) - 🚀 TOKEN OPTİMİZE

  1. search_bedesten_unified(phrase, court_types, birimAdi, kararTarihiStart, kararTarihiEnd, ...): 5 mahkeme türünü birleşik arama (Yargıtay, Danıştay, Yerel Hukuk, İstinaf Hukuk, KYB) + 79 daire filtreleme + Tarih & Kesin Cümle Arama

  2. get_bedesten_document_markdown(documentId: str): Bedesten API'den herhangi bir belgeyi Markdown formatında getirir (HTML/PDF → Markdown)

Emsal Karar Araçları (UYAP)

  1. search_emsal_detailed_decisions(keyword, ...): Emsal (UYAP) kararlarını detaylı kriterlerle arar.

  2. get_emsal_document_markdown(id: str): Belirli bir Emsal kararının metnini Markdown formatında getirir.

Uyuşmazlık Mahkemesi Araçları

  1. search_uyusmazlik_decisions(icerik, ...): Uyuşmazlık Mahkemesi kararlarını çeşitli form kriterleriyle arar.

  2. get_uyusmazlik_document_markdown_from_url(document_url): Bir Uyuşmazlık kararını tam URL'sinden alıp Markdown formatında getirir.

Anayasa Mahkemesi Araçları (Birleşik API) - 🚀 TOKEN OPTİMİZE

  1. search_anayasa_unified(decision_type, keywords_all, ...): AYM kararlarını birleşik arama (Norm Denetimi + Bireysel Başvuru) - 4 araç → 2 araç optimizasyonu

  2. get_anayasa_document_unified(document_url, page_number): AYM kararlarını birleşik belge getirme - sayfalanmış Markdown içeriği

KİK (Kamu İhale Kurulu) Araçları

  1. search_kik_v2_decisions(decision_type, karar_metni, karar_no, basvuran, idare_adi, baslangic_tarihi, bitis_tarihi): KİK v2 API ile uyuşmazlık, düzenleyici ve mahkeme kararlarını arar.

  2. get_kik_v2_document_markdown(gundemMaddesiId): Arama sonucundaki gundemMaddesiId ile KİK karar metnini Markdown formatında getirir.

Rekabet Kurumu Araçları

    * search_rekabet_kurumu_decisions(KararTuru: Literal[...], ...) -> RekabetSearchResult: Rekabet Kurumu kararlarını arar. KararTuru için kullanıcı dostu isimler kullanılır (örn: "Birleşme ve Devralma").     * get_rekabet_kurumu_document(karar_id: str, page_number: Optional[int] = 1) -> RekabetDocument: Belirli bir Rekabet Kurumu kararını karar_id ile alır. Kararın PDF formatındaki orijinalinden istenen sayfayı ayıklar ve Markdown formatında döndürür.


  • Sayıştay Araçları (Birleşik API, 3 Karar Türü + 8 Daire Filtreleme):

    • search_sayistay_unified(decision_type, start, length, ...): genel_kurul, temyiz_kurulu veya daire kararlarını tek araçla arar. length 1-100 aralığındadır.

    • get_sayistay_document_unified(decision_id, decision_type): Birleşik arama sonucundaki karar ID'si ve karar türüyle tam metni Markdown formatında getirir.

  • KVKK Araçları (Brave Search API + Türkçe Arama):

    • search_kvkk_decisions(keywords, page): KVKK (Kişisel Verilerin Korunması Kurulu) kararlarını Brave Search API ile arar. Türkçe arama + Site hedeflemeli (site:kvkk.gov.tr "karar özeti") + Sayfalama desteği. Sonuç sayısı sunucuda 10 olarak sabitlenmiştir.

    • get_kvkk_document_markdown(decision_url: str, page_number: Optional[int] = 1): KVKK kararının tam metnini sayfalanmış Markdown formatında getirir (5.000 karakterlik sayfa)

BDDK Araçları

* `search_bddk_decisions(keywords, page)`: BDDK (Bankacılık Düzenleme ve Denetleme Kurumu) kararlarını arar. **"Karar Sayısı" targeting** + **Spesifik URL filtreleme** (`bddk.org.tr/Mevzuat/DokumanGetir`) + **Optimized search**
* `get_bddk_document_markdown(document_id: str, page_number: Optional[int] = 1)`: BDDK kararının tam metnini **sayfalanmış Markdown** formatında getirir (5.000 karakterlik sayfa)

BTK (Bilgi Teknolojileri ve İletişim Kurumu) Araçları (Resmi BTK JSON API)

* `search_btk_decisions(keywords, decision_no, decision_date, publication_date, relevant_unit, page, pageSize)`: BTK Kurul Kararlarını arar. **Anahtar kelime + Karar No** (ör. `2026/DK-THD/91`) **+ Karar Tarihi + Yayın Tarihi + İlgili Birim** filtreleri + **Sayfalama** (`pageSize` 1-50)
* `get_btk_document_markdown(pdf_url: str, page_number: int = 1)`: BTK kararının PDF'ini indirip **sayfalanmış Markdown** formatında getirir (5.000 karakterlik sayfa). `pdf_url`, `search_btk_decisions` sonucundaki `pdf_url` alanından alınır (`btk.gov.tr`)

GİB (Gelir İdaresi Başkanlığı) Özelge Araçları (Resmi GİB JSON API)

* `search_gib_ozelge(keywords, ozelgeNo, kanunNo, ozelgeStartDate, ozelgeEndDate, page, pageSize)`: GİB özelgelerini (Türk Gelir İdaresi Başkanlığı vergi özelgeleri) arar — **18.000+ özelge** (KDV, Kurumlar, Gelir, ÖTV, Damga, VUK vb.). **Keyword + Özelge No + Kanun No + Tarih Aralığı** + **Otomatik ISO 8601 Dönüşümü** (`YYYY-MM-DD` girdileri otomatik olarak full ISO 8601'e çevrilir)
* `get_gib_ozelge_document_markdown(ozelge_id: int, page_number: int = 1)`: Belirli bir özelgenin tam metnini **sayfalanmış Markdown** formatında getirir (5.000 karakterlik sayfa) + **Metadata başlık bloğu** (Başlık, Sayı, Tarih, Kanun, Kaynak URL)

Sigorta Tahkim Komisyonu Araçları (Tavily Search API + PDF)

* `search_sigorta_tahkim_decisions(keywords, page)`: Sigorta Tahkim Komisyonu kararlarını Tavily Search API ile arar. **Site hedeflemeli** (`sigortatahkim.org`) + **Sayfalama desteği**. Sonuç sayısı sunucuda 10 olarak sabitlenmiştir.
* `get_sigorta_tahkim_document_markdown(issue_number: str, page_number: int)`: Hakem Karar Dergisi sayısının PDF'ini indirip **sayfalanmış Markdown** formatında getirir (5.000 karakterlik sayfa). 64 sayı (2010-2025)
* `search_within_sigorta_tahkim_issue(issue_number: str, keyword: str, max_results: int)`: Belirli bir dergi sayısı içindeki kararları anahtar kelime ile arar. **Türkçe İ/I desteği** + **Relevance scoring** + **Excerpt** ile sonuç

Yardımcı ve Uyumluluk Araçları

* `check_government_servers_health()`: Yargı kaynaklarının erişilebilirliğini kontrol eder.
* `search(query)`: ChatGPT Deep Research uyumluluğu için Bedesten destekli kaynaklarda arama yapar.
* `fetch(id)`: ChatGPT Deep Research uyumluluğu için tek bir Bedesten belge ID'sinin tam metnini getirir.

🚀 TOKEN OPTİMİZASYON BAŞARISI:

  • %61.8 Token Azaltma: 14,061 → 5,369 tokens (8,692 token tasarrufu)

  • Hedef Aşım: 10,000 token hedefini 4,631 token aştık

  • Daha Hızlı Yanıt: Claude AI ile optimize edilmiş etkileşim

  • Korunan İşlevsellik: %100 özellik desteği devam ediyor

GENEL İSTATİSTİKLER:

  • Toplam Mahkeme/Kurum: 16 farklı hukuki kurum (BTK, GİB Özelgeleri ve Sigorta Tahkim Komisyonu dahil)

  • Toplam MCP Tool: 28 aktif araç + 1 opsiyonel semantik arama aracı

  • Daire/Kurul Filtreleme: 87 farklı seçenek (52 Yargıtay + 27 Danıştay + 8 Sayıştay)

  • Tarih Filtreleme: Birleşik Bedesten API aracında ISO 8601 formatında tam tarih aralığı desteği

  • Kesin Cümle Arama: Birleşik Bedesten API aracında çift tırnak ile tam cümle arama ("\"mülkiyet kararı\"" formatı)

  • Birleşik API: 10 ayrı Bedesten aracı → 2 birleşik araç (search_bedesten_unified + get_bedesten_document_markdown)

  • API Kaynağı: Dual/Triple API desteği ile maksimum kapsama

  • Tam Türk Adalet Sistemi: Yerel mahkemelerden en yüksek mahkemelere kadar

🏛️ Desteklenen Mahkeme Hiyerarşisi:

Yerel Mahkemeler → İstinaf → Yargıtay/Danıştay → Anayasa Mahkemesi
     ↓              ↓            ↓                    ↓
Bedesten API   Bedesten API   Dual/Triple API   Norm+Bireysel API
+ Tarih + Kesin + Tarih + Kesin + Daire + Tarih   + Gelişmiş
  Cümle Arama    Cümle Arama   + Kesin Cümle     Arama

⚖️ Kapsamlı Filtreleme Özellikleri:

  • Daire Filtreleme: 79 seçenek (52 Yargıtay + 27 Danıştay)

    • Yargıtay: 52 seçenek (1-23 Hukuk, 1-23 Ceza, Genel Kurullar, Başkanlar Kurulu)

    • Danıştay: 27 seçenek (1-17 Daireler, İdare/Vergi Kurulları, Askeri Mahkemeler)

  • Tarih Filtreleme: 5 Bedesten API aracında ISO 8601 formatı (YYYY-MM-DDTHH:MM:SS.000Z)

    • Tek tarih, tarih aralığı, tek taraflı filtreleme desteği

    • Yargıtay, Danıştay, Yerel Hukuk, İstinaf Hukuk, KYB kararları

  • Kesin Cümle Arama: 5 Bedesten API aracında çift tırnak formatı

    • Normal arama: "mülkiyet kararı" (kelimeler ayrı ayrı)

    • Kesin arama: "\"mülkiyet kararı\"" (tam cümle olarak)

    • Daha kesin sonuçlar için hukuki terimler ve kavramlar

🔧 OPTİMİZASYON DETAYLARI:

  • Anayasa Mahkemesi: 4 araç → 2 birleşik araç (search_anayasa_unified + get_anayasa_document_unified)

  • Yargıtay & Danıştay: Ana API araçları birleşik Bedesten API'ye entegre edildi

  • Sayıştay: 6 araç → 2 birleşik araç (search_sayistay_unified + get_sayistay_document_unified)

  • Parameter Optimizasyonu: pageSize parametreleri optimize edildi

  • Açıklama Optimizasyonu: Uzun açıklamalar kısaltıldı (örn: KIK karar_metni)


Yargı MCP artık web servisi olarak da çalıştırılabilir! ASGI desteği sayesinde:

  • Web API olarak erişim: HTTP endpoint'leri üzerinden MCP araçlarına erişim

  • Cloud deployment: Heroku, Railway, Google Cloud Run, AWS Lambda desteği

  • Docker desteği: Production-ready Docker container

  • FastAPI entegrasyonu: REST API ve interaktif dokümantasyon

Hızlı başlangıç:

# ASGI dependencies yükle
pip install yargi-mcp[asgi]

# Web servisi olarak başlat
python run_asgi.py
# veya
uvicorn asgi_app:app --host 0.0.0.0 --port 8000

Detaylı deployment rehberi için: docs/DEPLOYMENT.md


📜 Lisans

Bu proje MIT Lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakınız.

Available Tools

17 tools
fetchA
Read-onlyIdempotent

Only for ChatGPT Deep Research. Retrieves one Turkish legal document by numeric Bedesten ID. For regular MCP use, prefer get_bedesten_document_markdown. This performs one Bedesten document request and avoids an extra metadata lookup to respect upstream rate limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument identifier from search results (numeric only)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint. Description adds context: 'avoids an extra metadata lookup to respect upstream rate limits', explaining its lightweight behavior beyond annotations.

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?

Three concise sentences: purpose, alternative, and rationale. No fluff. Front-loaded with key constraint. Each sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one param, output schema exists), the description fully covers purpose, usage context, and behavioral nuance. No 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?

With 100% schema description coverage, the schema sufficiently documents the 'id' parameter. Description adds no extra semantic details, so baseline 3 applies.

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?

Description specifies 'retrieves one Turkish legal document by numeric Bedesten ID' — a clear verb+resource. It explicitly distinguishes from sibling tool get_bedesten_document_markdown, making its specialized role obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States 'Only for ChatGPT Deep Research' and directs regular use to get_bedesten_document_markdown. Also mentions rate limit rationale, providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bddk_document_markdownA
Read-onlyIdempotent

Use this when retrieving full text of a BDDK banking regulation decision. Returns paginated Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesBDDK document ID (e.g., '310')
page_numberNoPage number

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it specifies the return format ('Markdown format') and pagination behavior ('Returns paginated'). Annotations already cover read-only, closed-world, and idempotent characteristics, so the description appropriately focuses on output characteristics not captured in structured fields.

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 perfectly concise - two sentences that each earn their place. The first establishes when to use the tool, the second specifies key behavioral characteristics (format and pagination). No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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, comprehensive annotations, complete schema coverage, and the presence of an output schema, the description provides exactly what's needed. It covers purpose, format, and pagination behavior without needing to explain parameters or return values that are already documented elsewhere.

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 schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline expectation but doesn't provide additional semantic context about how parameters interact or affect results.

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 ('retrieving full text') and resource ('BDDK banking regulation decision'), distinguishing it from generic fetch/search tools. However, it doesn't explicitly differentiate from its closest sibling 'get_bedesten_document_markdown' which appears to serve a similar function for a different document 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 basic context ('when retrieving full text of a BDDK banking regulation decision') but doesn't specify when NOT to use this tool or mention alternatives like 'search_bddk_decisions' for finding documents before retrieving them. Usage is implied rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bedesten_document_markdownA
Read-onlyIdempotent

Use this when retrieving full text of a Bedesten search result by documentId. Counts against the same Bedesten upstream rate limit as search; after 429, wait retry_after seconds before retrying.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentIdYesDocument ID from Bedesten search results

Output Schema

ParametersJSON Schema
NameRequiredDescription
mime_typeNoOriginal content type (İçerik Türü) (text/html or application/pdf)
documentIdYesThe document ID (Belge Kimliği) from Bedesten
source_urlYesThe source URL (Kaynak URL) of the document
markdown_contentNoThe decision content (Karar İçeriği) converted to Markdown

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds significant behavioral context beyond annotations: rate limit sharing with search and retry guidance. Annotations already declare readOnlyHint and idempotentHint, which are consistent. No contradictions.

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?

Two sentences, front-loaded with purpose, no wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one parameter, high schema coverage, and an output schema, the description covers purpose, usage, and rate limit behavior fully. No missing information.

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 coverage is 100% with a clear description for documentId. The description mentions 'by documentId' but adds no additional meaning beyond the schema. Baseline 3 is appropriate.

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?

Description clearly states the tool retrieves full text of a Bedesten search result by documentId. It uses specific verb and resource, and sibling tool names for other document types help distinguish this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly says when to use ('when retrieving full text of a Bedesten search result') and provides rate limit handling guidance. It does not explicitly mention when not to use or alternatives, but context from sibling names is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_emsal_document_markdownA
Read-onlyIdempotent

Use this when retrieving full text of an Emsal precedent decision. Returns clean Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds value by specifying the return format ('clean Markdown format'), which isn't covered by annotations. However, it doesn't provide additional behavioral context like rate limits, authentication needs, or error handling.

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 extremely concise with just two sentences that directly state the tool's purpose and output format. Every word earns its place, and it's front-loaded with the primary use case, making it efficient and easy to parse.

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 simplicity (one parameter, read-only/idempotent annotations, output schema exists), the description is reasonably complete. It covers the core purpose and output format, and the output schema will handle return value details. However, it could benefit from more explicit differentiation from sibling search tools to fully guide usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'id' with 0% description coverage, so the schema provides no semantic information. The description doesn't explicitly mention parameters, but it implies the 'id' is needed to retrieve a specific document. Since there's only one parameter and its purpose is reasonably inferred from context, this compensates adequately for the low 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 tool's purpose: retrieving full text of an Emsal precedent decision and returning it in clean Markdown format. It specifies both the action ('retrieving') and resource ('Emsal precedent decision'), but doesn't explicitly differentiate from sibling tools like 'search_emsal_detailed_decisions' or other document retrieval tools.

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 guidance with 'Use this when retrieving full text of an Emsal precedent decision,' which implies this is for full document retrieval rather than search. However, it doesn't explicitly state when NOT to use it or mention alternatives like the search tools among siblings, leaving some ambiguity about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gib_ozelge_document_markdownA
Read-onlyIdempotent

Retrieve full text of a GİB özelge (tax ruling) by numeric ID. Returns paginated Markdown (5000-char chunks) with title, reference number, date and law metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
ozelge_idYesNumeric özelge ID from search results (e.g., 38849)
page_numberNoPage number for paginated Markdown (1-indexed)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, indicating safe re-execution. The description adds valuable behavioral context: the output is paginated in 5000-char chunks and includes specific metadata (title, reference number, date, law).

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, front-loaded sentence that conveys the purpose, parameters, output format, and key constraints without any redundant text.

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 simple schema, rich annotations, and existence of an output schema, the description covers the main behavioral aspects (pagination, metadata). It does not mention error handling or prerequisites like requiring an ID from search, but the overall context is sufficient for an agent.

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 coverage is 100% with clear descriptions for both parameters. The tool description does not add additional semantics beyond confirming the ID is numeric and pagination is 1-indexed, which is already in the schema.

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 retrieves the full text of a GİB özelge by numeric ID and returns paginated Markdown with metadata. It uses a specific verb ('Retrieve'), identifies the resource, and distinguishes it from sibling tools like get_bddk_document_markdown.

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 the tool should be used after obtaining an ID from search results (as stated in the parameter description for ozelge_id), but it does not explicitly mention when to use this tool versus alternatives like search_gib_ozelge or other document retrieval tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_kik_v2_document_markdownA
Read-onlyIdempotent

Use this when retrieving full text of a KİK procurement decision. Returns document in Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
gundemMaddesiIdYesgundemMaddesiId from search_kik_v2_decisions results

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating safe, repeatable read operations. The description adds value by specifying the return format ('Markdown format') and the source context ('KİK procurement decision'), but does not provide additional behavioral details like rate limits, authentication needs, or error handling.

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 purpose and key details (use case, resource, output format) with zero wasted words, 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single required parameter), high schema coverage, presence of annotations, and an output schema (implied by 'Has output schema: true'), the description is complete enough. It covers the essential context without needing to explain return values or parameter details.

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%, with the parameter gundemMaddesiId fully documented in the schema. The description does not add any parameter-specific information beyond what the schema provides, so it 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.

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 ('retrieving full text'), resource ('a KİK procurement decision'), and output format ('Markdown format'). It distinguishes from sibling tools like search_kik_v2_decisions by focusing on full document retrieval rather than search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use this when retrieving full text of a KİK procurement decision,' providing clear context for when to use this tool. It also references the sibling tool search_kik_v2_decisions in the parameter description, implying an alternative for initial searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rekabet_kurumu_documentA
Read-onlyIdempotent

Use this when retrieving full text of a Competition Authority decision. Returns paginated Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
karar_idYesGUID (kararId) of the Rekabet Kurumu decision. This ID is obtained from search results.
page_numberNoRequested page number for the Markdown content converted from PDF (1-indexed, accepts int). Default is 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations by specifying the output format ('paginated Markdown format') and the pagination mechanism. While annotations already declare readOnlyHint=true and idempotentHint=true, the description usefully clarifies the document conversion process ('converted from PDF') and pagination behavior.

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 perfectly concise with two sentences that each earn their place: the first establishes purpose and context, the second specifies output format. No wasted words, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/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, comprehensive annotations (readOnlyHint, idempotentHint), complete schema documentation, and the presence of an output schema, the description provides exactly what's needed: clear purpose, usage context, and key behavioral details about format and pagination.

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 schema already fully documents both parameters. The description doesn't add any additional parameter semantics beyond what's in the schema, so it meets the baseline expectation without exceeding it.

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 ('retrieving full text'), resource ('Competition Authority decision'), and output format ('paginated Markdown format'), distinguishing it from sibling search tools like 'search_rekabet_kurumu_decisions' which likely return metadata rather than full document content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use this tool ('when retrieving full text of a Competition Authority decision'), but doesn't explicitly mention when not to use it or name specific alternatives among the many sibling tools, though the distinction from search tools is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sayistay_document_unifiedA
Read-onlyIdempotent

Use this when retrieving full text of a Sayıştay audit decision. Returns clean Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
decision_idYesDecision ID from search_sayistay_unified results
decision_typeYesDecision type: genel_kurul, temyiz_kurulu, or daire

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it specifies the return format ('clean Markdown format'), which isn't covered by annotations. Annotations already indicate read-only, non-open world, and idempotent operations, so the bar is lower, and the description complements this with output details without contradiction.

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: two sentences that directly state the tool's purpose and output format with zero wasted words. Every sentence earns its place by providing essential information efficiently.

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 complexity (simple retrieval with 2 required parameters), rich annotations (readOnlyHint, openWorldHint, idempotentHint), and the presence of an output schema (implied by context signals), the description is mostly complete. It covers purpose and output format, though it could better integrate with sibling tools for clearer usage context.

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 full parameter documentation (decision_id and decision_type with descriptions and enum). The description doesn't add extra parameter semantics beyond what the schema already states, so it meets the baseline of 3 for high schema coverage without compensating 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 tool's purpose: 'retrieving full text of a Sayıştay audit decision' with a specific resource (audit decision) and verb (retrieving). It distinguishes from siblings by specifying the exact document type (Sayıştay audit decisions), though it doesn't explicitly contrast with similar document retrieval tools like get_anayasa_document_unified.

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 guidance with 'Use this when retrieving full text of a Sayıştay audit decision,' which implies context. However, it doesn't specify when to use alternatives (e.g., search_sayistay_unified for finding decisions vs. this for retrieving text) or mention prerequisites like needing a decision_id from search results, which is only hinted at in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sigorta_tahkim_document_markdownA
Read-onlyIdempotent

Retrieve full PDF content of a Sigorta Tahkim Komisyonu Hakem Karar Dergisi issue by number. Returns paginated Markdown. Issues 1-64 available (2010-2025).

ParametersJSON Schema
NameRequiredDescriptionDefault
page_numberNoPage number for paginated content
issue_numberYesJournal issue number (1-64, e.g., '64')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnly and idempotent. Description adds key behaviors: returns paginated Markdown (not raw PDF), and scope of available issues (1-64, 2010-2025). No contradictions.

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?

Two sentences, front-loaded with purpose, no redundant information. Each clause serves a clear function.

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?

Covers purpose, scope, output format, and pagination. Output schema exists, so return value details are not needed. Could mention page number behavior (default 1) but schema covers that. Missing minor guidance on iteration for full content.

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 covers both parameters with descriptions. The description adds minimal extra meaning (e.g., 'by number', 'paginated'), but baseline is 3 due to 100% schema coverage.

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 verb 'Retrieve' and the resource 'full PDF content of a Sigorta Tahkim Komisyonu Hakem Karar Dergisi issue by number'. It distinguishes from sibling tools like 'search_within_sigorta_tahkim_issue' by focusing on retrieving an entire issue.

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?

Implicitly indicates use to retrieve full issue content, but lacks explicit when-to-use or when-not-to-use guidance compared to sibling tools. No mention of alternatives like search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_uyusmazlik_document_markdown_from_urlA
Read-onlyIdempotent

Use this when retrieving full text of an Uyuşmazlık Mahkemesi decision. Returns clean Markdown format.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_urlYesFull URL to the Uyuşmazlık Mahkemesi decision document from search results

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds value by specifying the output format ('clean Markdown format'), which isn't covered by annotations. However, it doesn't provide additional behavioral context like rate limits, authentication needs, or error conditions.

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 extremely concise with just two sentences that are front-loaded and waste-free. Every word contributes essential information about purpose and output format without any redundancy or fluff.

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 annotations covering safety (readOnlyHint, idempotentHint), 100% schema coverage, and an output schema exists, the description provides adequate context. It specifies the court type and output format, which complements the structured data well. However, it could be more complete by mentioning it's specifically for documents from search results (as hinted in the schema) to better integrate with sibling tools.

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%, with the single parameter 'document_url' well-described in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 where 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 verb ('retrieving') and resource ('full text of an Uyuşmazlık Mahkemesi decision'), and specifies the output format ('clean Markdown format'). It distinguishes from some siblings by focusing on this specific court, but doesn't explicitly differentiate from other document retrieval tools like 'get_anayasa_document_unified' or 'get_bddk_document_markdown' beyond the court name.

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 with 'Use this when retrieving full text of an Uyuşmazlık Mahkemesi decision,' which implies this tool is for decisions from that specific court. However, it doesn't explicitly state when NOT to use it or mention alternatives among the many sibling search and retrieval tools, leaving some ambiguity about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_anayasa_unifiedA
Read-onlyIdempotent

Use this when searching Turkish Constitutional Court decision records. Supports norm control decisions and individual application decisions. Norm control filters include reviewed norm metadata; results are court decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsNoKeywords for full-text search (joined into a single query)
decision_typeYesDecision type: norm_denetimi (norm control) or bireysel_basvuru (individual applications)
page_to_fetchNoPage number to fetch (1-100)
results_per_pageNoResults per page (1-100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, openWorldHint, idempotentHint) already cover safety and idempotency. The description adds minor context (norm control filters include reviewed norm metadata) but does not expand on behavioral implications beyond what annotations provide. No contradictions.

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 extremely concise: two sentences, no wasted words. The key instruction ('Use this when...') is front-loaded, making it efficient for an agent to parse.

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?

The tool has an output schema, so the description need not explain return values. It covers the search domain (Turkish Constitutional Court decisions), decision types, and pagination. Minor gap: could mention that results are a list of documents, but output schema likely covers that.

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 four parameters. The description adds minimal additional meaning (e.g., 'norm control filters include reviewed norm metadata'), but this is vague and not necessary. Baseline score of 3 is appropriate.

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 Constitutional Court decision records, specifying the two decision types (norm control and individual applications). The name and description differentiate it from sibling search tools targeting other courts/agencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when searching Turkish Constitutional Court decision records', providing clear context. However, it does not explicitly state when not to use it or mention alternatives, though the sibling list implies other tools for other domains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_bddk_decisionsA
Read-onlyIdempotent

Use this when searching Turkish banking regulation (BDDK) decisions. For banking licenses, fintech, and payment services.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
keywordsYesSearch keywords in Turkish

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already provide readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds useful context about the specific regulatory domain (BDDK decisions) and use cases, but doesn't disclose additional behavioral traits like rate limits, authentication needs, or what constitutes a 'decision' in this context. No contradiction with annotations exists.

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 extremely concise (two sentences) and front-loaded with the primary purpose. Every word earns its place by specifying the regulatory body, domain, and use cases without any redundant information or fluff.

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 pagination), rich annotations (readOnly, openWorld, idempotent), 100% schema coverage, and existence of an output schema, the description is reasonably complete. It clearly defines the search domain and use cases, though it could benefit from mentioning the Turkish language requirement for keywords or distinguishing from sibling tools.

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%, with both parameters ('keywords' and 'page') well-documented in the schema. The description doesn't add any parameter-specific information beyond what the schema provides, such as format examples for keywords or pagination behavior. With high schema coverage, the baseline score of 3 is appropriate.

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 searching Turkish banking regulation (BDDK) decisions, specifying the domain (banking licenses, fintech, payment services). It uses a specific verb ('searching') and resource ('BDDK decisions'), but doesn't explicitly differentiate from sibling tools like 'search_kik_v2_decisions' or 'search_rekabet_kurumu_decisions' that search different regulatory domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('when searching Turkish banking regulation (BDDK) decisions') and mentions specific use cases (banking licenses, fintech, payment services). However, it doesn't explicitly state when NOT to use it or name alternatives among the many sibling search tools for different regulatory bodies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_kik_v2_decisionsA
Read-onlyIdempotent

Use this when searching Turkish public procurement disputes (KİK). Supports dispute, regulatory, and court decision types.

ParametersJSON Schema
NameRequiredDescriptionDefault
basvuranNoApplicant name
karar_noNoDecision number (e.g., '2025/UH.II-1801')
idare_adiNoAdministration/procuring entity name
karar_metniNoDecision text search query
bitis_tarihiNoEnd date (YYYY-MM-DD format, e.g., '2025-12-31')
decision_typeNoDecision type: 'uyusmazlik' (disputes), 'duzenleyici' (regulatory), or 'mahkeme' (court decisions)uyusmazlik
baslangic_tarihiNoStart date (YYYY-MM-DD format, e.g., '2025-01-01')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds context about the specific domain (Turkish public procurement) and decision types supported, which is useful behavioral information beyond the annotations. However, it doesn't mention rate limits, authentication requirements, or other operational constraints that might be relevant.

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 extremely concise - just one sentence that efficiently communicates the tool's purpose and scope. Every word earns its place with no wasted text. It's appropriately sized for a search tool with good schema documentation.

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 that the tool has comprehensive annotations (readOnlyHint, openWorldHint, idempotentHint), 100% schema description coverage, and an output schema exists, the description provides adequate context. It clearly states the domain and decision types, which complements the structured data well. The main gap is lack of explicit differentiation from sibling tools, but otherwise it's reasonably complete for this complexity level.

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, all 7 parameters are well-documented in the input schema itself. The description doesn't add any additional parameter semantics beyond what's already in the schema descriptions. According to the scoring rules, when schema coverage is high (>80%), the baseline score is 3 even without parameter information in the description.

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 'Turkish public procurement disputes (KİK)' and specifies the three decision types it supports. This provides a specific verb ('search') and resource ('Turkish public procurement disputes'), though it doesn't explicitly differentiate from sibling search tools like 'search_uyusmazlik_decisions' or 'search_bddk_decisions' which might cover similar 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 begins with 'Use this when searching Turkish public procurement disputes (KİK)', which provides basic context for when to use the tool. However, it doesn't offer explicit guidance on when to choose this tool over sibling alternatives like 'search_uyusmazlik_decisions' or 'search_bddk_decisions', nor does it mention any exclusions or prerequisites. The guidance is implied rather than comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_rekabet_kurumu_decisionsC
Read-onlyIdempotent

Use this when searching Turkish competition law and antitrust decisions (Rekabet Kurumu).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number to fetch for the results list.
PdfTextNoSearch in decision text. Use "\"kesin cümle\"" for precise matching.
sayfaAdiNoSearch in decision title (Başlık).
KararTuruNoParameter descriptionALL
KararSayisiNoDecision number (Karar Sayısı).
KararTarihiNoDecision date (Karar Tarihi), e.g., DD.MM.YYYY.
YayinlanmaTarihiNoPublication date (Yayım Tarihi), e.g., DD.MM.YYYY.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description doesn't contradict these but adds minimal behavioral context—it specifies the domain (Turkish competition law) but doesn't detail aspects like pagination behavior (implied by the 'page' parameter), rate limits, or authentication needs. With annotations providing core safety info, the description adds some value but lacks depth.

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, clear sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and efficient, though it could be slightly more informative by including key usage details without sacrificing brevity.

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 complexity (7 parameters, search functionality) and rich annotations/output schema, the description is minimally adequate. It identifies the domain but lacks details on result format, pagination, or how it integrates with sibling tools. With annotations and schema covering safety and parameters, the description meets a basic threshold but leaves room for improvement in contextual guidance.

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%, with detailed parameter descriptions in the schema (e.g., 'Search in decision title', date formats, enum values). The tool description adds no parameter-specific information beyond what's already in the schema, so it doesn't enhance understanding of parameters. Baseline 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool searches 'Turkish competition law and antitrust decisions (Rekabet Kurumu)', which provides a clear verb ('search') and resource domain. However, it doesn't specify what aspect of decisions it searches (e.g., metadata, full text) or how it differs from the sibling tool 'get_rekabet_kurumu_document', making it somewhat vague about its exact 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?

The description only says 'Use this when searching Turkish competition law and antitrust decisions', which gives a general context but no explicit guidance on when to choose this tool over alternatives like 'search' (generic) or 'get_rekabet_kurumu_document' (specific document retrieval). There's no mention of prerequisites, exclusions, or comparative use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sigorta_tahkim_decisionsA
Read-onlyIdempotent

Search Sigorta Tahkim Komisyonu (Insurance Arbitration Commission) decisions from Hakem Karar Dergisi journals (64 issues, 2010-2025). Covers insurance disputes: traffic, health, fire, DASK, life insurance.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
keywordsYesSearch keywords in Turkish (e.g., 'trafik sigortası', 'kasko', 'DASK')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint. The description adds useful context: it searches from Hakem Karar Dergisi journals (64 issues, 2010-2025) and covers specific insurance dispute types. No contradictory behavior is mentioned.

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?

Two sentences with no extraneous information. First sentence clearly states the tool's purpose; second adds coverage details and examples. Every sentence earns its place.

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 two parameters, full schema coverage, output schema exists, and rich annotations, the description adequately covers the tool's scope and usage. It could optionally mention pagination or result format, but output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers both parameters with descriptions. The description adds value by providing keyword examples in Turkish and specifying the domain (insurance disputes), which goes beyond the schema's generic descriptions.

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?

Clearly states it searches Sigorta Tahkim Komisyonu decisions from a specific journal, covering insurance disputes with years and issues. This distinguishes it from sibling search tools targeting other databases (e.g., search_bddk_decisions, search_kvkk_decisions) and from search_within_sigorta_tahkim_issue which narrows to a single issue.

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 insurance arbitration decisions and provides example keywords, but does not explicitly state when to use this tool over alternatives like search_within_sigorta_tahkim_issue or other search tools. No exclusions or when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_uyusmazlik_decisionsA
Read-onlyIdempotent

Use this when searching jurisdictional dispute court (Uyuşmazlık Mahkemesi) decisions. Resolves conflicts between civil and administrative courts.

ParametersJSON Schema
NameRequiredDescriptionDefault
icerikNoSearch text. Searches full decision text, or matches a case/decision number depending on search_scope.
page_numberNoResult page number.
search_scopeNoSearch scope: 'All' (full text), 'EsasNo' (by case number), 'KararNo' (by decision number).All
case_sensitiveNoWhether the search is case sensitive.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which sufficiently inform the agent about safety. The description adds the source-specific behavioral context (searching full text or case/decision numbers) but does not extend beyond what annotations provide.

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 consists of two concise sentences that front-load the purpose and key behavioral trait. Every word earns its place with no redundancy or fluff.

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 simple search nature, full schema documentation, and presence of an output schema, the description is complete for the tool's function. It could briefly mention that results are a list of decisions, but the output schema likely covers that.

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?

All four parameters have descriptions in the schema (100% coverage). The description mentions matching case/decision numbers based on search_scope, but this is already detailed in the schema. The description adds no new semantic meaning beyond the schema.

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 Uyuşmazlık Mahkemesi decisions, which resolves conflicts between civil and administrative courts. This specific verb+resource combination distinguishes it from sibling tools targeting different document types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when searching jurisdictional dispute court decisions,' providing clear context. However, it does not offer explicit alternatives or conditions for when not to use it, though sibling names imply other search tools for different sources.

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. 11 tool updatesv0.2.2
    • Removedcheck_government_servers_health
    • Removedget_anayasa_document_unified
    • Removedget_kvkk_document_markdown
    • Changedsearch_anayasa_unified11 fields changed
      • removedInput schema / properties / application_date_end
        Removed value: -{
        -  "default": "",
        -  "description": "Application end date (norm_denetimi only)",
        -  "type": "string"
        -}
      • removedInput schema / properties / application_date_start
        Removed value: -{
        -  "default": "",
        -  "description": "Application start date (norm_denetimi only)",
        -  "type": "string"
        -}
      • removedInput schema / properties / decision_end_date
        Removed value: -{
        -  "default": "",
        -  "description": "Decision end date (bireysel_basvuru only)",
        -  "type": "string"
        -}
      • removedInput schema / properties / decision_start_date
        Removed value: -{
        -  "default": "",
        -  "description": "Decision start date (bireysel_basvuru only)",
        -  "type": "string"
        -}
      • removedInput schema / properties / decision_type_norm
        Removed value: -{
        -  "default": "ALL",
        -  "description": "Decision type for norm denetimi",
        -  "enum": [
        -    "ALL",
        -    "1",
        -    "2",
        -    "3"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / keywords / description
        Previous value: -"Keywords to search for (common parameter)"New value: +"Keywords for full-text search (joined into a single query)"
      • removedInput schema / properties / keywords_all
        Removed value: -{
        -  "description": "All keywords must be present (norm_denetimi only)",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / keywords_any
        Removed value: -{
        -  "description": "Any of these keywords (norm_denetimi only)",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / norm_type
        Removed value: -{
        -  "default": "ALL",
        -  "description": "Norm type (bireysel_basvuru only)",
        -  "enum": [
        -    "ALL",
        -    "1",
        -    "2",
        -    "3",
        -    "4",
        -    "5",
        -    "6",
        -    "7",
        -    "8",
        -    "9",
        -    "10",
        -    "11",
        -    "12",
        -    "13",
        -    "14",
        -    "0"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / results_per_page
        Added value: +{
        +  "default": 10,
        +  "description": "Results per page (1-100)",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / subject_category
        Removed value: -{
        -  "default": "",
        -  "description": "Subject category (bireysel_basvuru only)",
        -  "type": "string"
        -}
    • Removedsearch_bedesten_unified
    • Removedsearch_emsal_detailed_decisions
    • Removedsearch_gib_ozelge
    • Removedsearch_kvkk_decisions
    • Removedsearch_sayistay_unified
    • Changedsearch_uyusmazlik_decisions21 fields changed
      • removedInput schema / properties / bolum
        Removed value: -{
        -  "default": "ALL",
        -  "description": "Select the department (Bölüm). Use 'ALL' for all departments.",
        -  "enum": [
        -    "ALL",
        -    "Ceza Bölümü",
        -    "Genel Kurul Kararları",
        -    "Hukuk Bölümü"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / case_sensitive
        Added value: +{
        +  "default": false,
        +  "description": "Whether the search is case sensitive.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / esas_sayisi
        Removed value: -{
        -  "default": "",
        -  "description": "Case number ('Esas Sayısı').",
        -  "type": "string"
        -}
      • removedInput schema / properties / esas_yil
        Removed value: -{
        -  "default": "",
        -  "description": "Case year ('Esas Yılı').",
        -  "type": "string"
        -}
      • removedInput schema / properties / hepsi
        Removed value: -{
        -  "default": "",
        -  "description": "Search for texts containing all specified words.",
        -  "type": "string"
        -}
      • removedInput schema / properties / herhangi_birisi
        Removed value: -{
        -  "default": "",
        -  "description": "Search for texts containing any of the specified words.",
        -  "type": "string"
        -}
      • changedInput schema / properties / icerik / description
        Previous value: -"Keyword or content for main text search."New value: +"Search text. Searches full decision text, or matches a case/decision number depending on search_scope."
      • removedInput schema / properties / kanun_no
        Removed value: -{
        -  "default": "",
        -  "description": "Relevant Law Number.",
        -  "type": "string"
        -}
      • removedInput schema / properties / karar_date_begin
        Removed value: -{
        -  "default": "",
        -  "description": "Decision start date (DD.MM.YYYY).",
        -  "type": "string"
        -}
      • removedInput schema / properties / karar_date_end
        Removed value: -{
        -  "default": "",
        -  "description": "Decision end date (DD.MM.YYYY).",
        -  "type": "string"
        -}
      • removedInput schema / properties / karar_sayisi
        Removed value: -{
        -  "default": "",
        -  "description": "Decision number ('Karar Sayısı').",
        -  "type": "string"
        -}
      • removedInput schema / properties / karar_sonuclari
        Removed value: -{
        -  "description": "List of desired 'Karar Sonucu' types.",
        -  "items": {
        -    "enum": [
        -      "Hüküm Uyuşmazlığı Olmadığına Dair",
        -      "Hüküm Uyuşmazlığı Olduğuna Dair"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / karar_yil
        Removed value: -{
        -  "default": "",
        -  "description": "Decision year ('Karar Yılı').",
        -  "type": "string"
        -}
      • removedInput schema / properties / not_hepsi
        Removed value: -{
        -  "default": "",
        -  "description": "Exclude texts containing these specified words.",
        -  "type": "string"
        -}
      • addedInput schema / properties / page_number
        Added value: +{
        +  "default": 1,
        +  "description": "Result page number.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / resmi_gazete_date
        Removed value: -{
        -  "default": "",
        -  "description": "Official Gazette date (DD.MM.YYYY).",
        -  "type": "string"
        -}
      • removedInput schema / properties / resmi_gazete_sayi
        Removed value: -{
        -  "default": "",
        -  "description": "Official Gazette number.",
        -  "type": "string"
        -}
      • addedInput schema / properties / search_scope
        Added value: +{
        +  "default": "All",
        +  "description": "Search scope: 'All' (full text), 'EsasNo' (by case number), 'KararNo' (by decision number).",
        +  "enum": [
        +    "All",
        +    "EsasNo",
        +    "KararNo"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / tumce
        Removed value: -{
        -  "default": "",
        -  "description": "Exact phrase search.",
        -  "type": "string"
        -}
      • removedInput schema / properties / uyusmazlik_turu
        Removed value: -{
        -  "default": "ALL",
        -  "description": "Select the type of dispute. Use 'ALL' for all types.",
        -  "enum": [
        -    "ALL",
        -    "Görev Uyuşmazlığı",
        -    "Hüküm Uyuşmazlığı"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / wild_card
        Removed value: -{
        -  "default": "",
        -  "description": "Search for phrase and its inflections.",
        -  "type": "string"
        -}
    • Removedsearch_within_sigorta_tahkim_issue
  2. 6 tool updatesv0.2.1
    • Addedget_gib_ozelge_document_markdown
    • Addedget_sigorta_tahkim_document_markdown
    • Changedsearch_bedesten_unified1 field changed
      • changedInput schema / properties / pageNumber / description
        Previous value: -"Page number"New value: +"Page number. Each page returns 10 results; pageSize is fixed by the server."
    • Addedsearch_gib_ozelge
    • Addedsearch_sigorta_tahkim_decisions
    • Addedsearch_within_sigorta_tahkim_issue
  3. 22 tool updatesv1.0.0
    • Changedfetch1 field changed
      • removedInput schema / properties / id / title
        Removed value: -"Id"
    • Changedget_anayasa_document_unified4 fields changed
      • removedInput schema / properties / document_url / title
        Removed value: -"Document Url"
      • removedInput schema / properties / page_number / title
        Removed value: -"Page Number"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_bddk_document_markdown2 fields changed
      • removedInput schema / properties / document_id / title
        Removed value: -"Document Id"
      • removedInput schema / properties / page_number / title
        Removed value: -"Page Number"
    • Changedget_bedesten_document_markdown6 fields changed
      • removedInput schema / properties / documentId / title
        Removed value: -"Documentid"
      • removedOutput schema / properties / documentId / title
        Removed value: -"Documentid"
      • removedOutput schema / properties / markdown_content / title
        Removed value: -"Markdown Content"
      • removedOutput schema / properties / mime_type / title
        Removed value: -"Mime Type"
      • removedOutput schema / properties / source_url / title
        Removed value: -"Source Url"
      • removedOutput schema / title
        Removed value: -"BedestenDocumentMarkdown"
    • Changedget_emsal_document_markdown6 fields changed
      • removedInput schema / properties / id / title
        Removed value: -"Id"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for an Emsal decision document, containing only Markdown content."
      • removedOutput schema / properties
        Removed value: -{
        -  "id": {
        -    "title": "Id",
        -    "type": "string"
        -  },
        -  "markdown_content": {
        -    "default": "",
        -    "description": "The decision content (Karar İçeriği) converted to Markdown.",
        -    "title": "Markdown Content",
        -    "type": "string"
        -  },
        -  "source_url": {
        -    "format": "uri",
        -    "maxLength": 2083,
        -    "minLength": 1,
        -    "title": "Source Url",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "source_url"
        -]
      • removedOutput schema / title
        Removed value: -"EmsalDocumentMarkdown"
    • Removedget_kik_document_markdown
    • Addedget_kik_v2_document_markdown
    • Changedget_kvkk_document_markdown7 fields changed
      • removedInput schema / properties / decision_url / title
        Removed value: -"Decision Url"
      • removedInput schema / properties / page_number / title
        Removed value: -"Page Number"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for KVKK decision document content converted to paginated Markdown."
      • removedOutput schema / properties
        Removed value: -{
        -  "current_page": {
        -    "description": "The current page number of the markdown chunk (1-indexed).",
        -    "title": "Current Page",
        -    "type": "integer"
        -  },
        -  "decision_date": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Decision date (Karar Tarihi).",
        -    "title": "Decision Date"
        -  },
        -  "decision_number": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Decision number (Karar No).",
        -    "title": "Decision Number"
        -  },
        -  "error_message": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Value",
        -    "title": "Error Message"
        -  },
        -  "is_paginated": {
        -    "description": "True if the full markdown content is split into multiple pages.",
        -    "title": "Is Paginated",
        -    "type": "boolean"
        -  },
        -  "markdown_chunk": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "A 5,000 character chunk of the Markdown content.",
        -    "title": "Markdown Chunk"
        -  },
        -  "source_url": {
        -    "description": "URL of the original KVKK decision page.",
        -    "format": "uri",
        -    "maxLength": 2083,
        -    "minLength": 1,
        -    "title": "Source Url",
        -    "type": "string"
        -  },
        -  "subject_summary": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Subject summary (Konu Özeti).",
        -    "title": "Subject Summary"
        -  },
        -  "title": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Title of the KVKK decision.",
        -    "title": "Title"
        -  },
        -  "total_pages": {
        -    "description": "Total number of pages for the full markdown content.",
        -    "title": "Total Pages",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "source_url",
        -  "current_page",
        -  "total_pages",
        -  "is_paginated"
        -]
      • removedOutput schema / title
        Removed value: -"KvkkDocumentMarkdown"
    • Changedget_rekabet_kurumu_document7 fields changed
      • removedInput schema / properties / karar_id / title
        Removed value: -"Karar Id"
      • removedInput schema / properties / page_number / title
        Removed value: -"Page Number"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for a Rekabet Kurumu decision document.\nContains metadata from the landing page, a link to the PDF,\nand the PDF's content converted to paginated Markdown."
      • removedOutput schema / properties
        Removed value: -{
        -  "current_page": {
        -    "default": 1,
        -    "description": "Page",
        -    "title": "Current Page",
        -    "type": "integer"
        -  },
        -  "error_message": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Error",
        -    "title": "Error Message"
        -  },
        -  "is_paginated": {
        -    "default": false,
        -    "description": "Paginated",
        -    "title": "Is Paginated",
        -    "type": "boolean"
        -  },
        -  "karar_id": {
        -    "description": "ID",
        -    "title": "Karar Id",
        -    "type": "string"
        -  },
        -  "markdown_chunk": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Content",
        -    "title": "Markdown Chunk"
        -  },
        -  "pdf_url": {
        -    "anyOf": [
        -      {
        -        "format": "uri",
        -        "maxLength": 2083,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "PDF URL",
        -    "title": "Pdf Url"
        -  },
        -  "source_landing_page_url": {
        -    "description": "Source URL",
        -    "format": "uri",
        -    "maxLength": 2083,
        -    "minLength": 1,
        -    "title": "Source Landing Page Url",
        -    "type": "string"
        -  },
        -  "title_on_landing_page": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Title",
        -    "title": "Title On Landing Page"
        -  },
        -  "total_pages": {
        -    "default": 1,
        -    "description": "Total pages",
        -    "title": "Total Pages",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "source_landing_page_url",
        -  "karar_id"
        -]
      • removedOutput schema / title
        Removed value: -"RekabetDocument"
    • Changedget_sayistay_document_unified7 fields changed
      • removedInput schema / properties / decision_id / title
        Removed value: -"Decision Id"
      • removedInput schema / properties / decision_type / title
        Removed value: -"Decision Type"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Unified document model for all Sayıştay decision types."
      • removedOutput schema / properties
        Removed value: -{
        -  "decision_id": {
        -    "description": "Decision ID",
        -    "title": "Decision Id",
        -    "type": "string"
        -  },
        -  "decision_type": {
        -    "description": "Type of document",
        -    "enum": [
        -      "genel_kurul",
        -      "temyiz_kurulu",
        -      "daire"
        -    ],
        -    "title": "Decision Type",
        -    "type": "string"
        -  },
        -  "document_data": {
        -    "additionalProperties": true,
        -    "description": "Document content and metadata",
        -    "title": "Document Data",
        -    "type": "object"
        -  },
        -  "error_message": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Error message if retrieval failed",
        -    "title": "Error Message"
        -  },
        -  "markdown_content": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Markdown content",
        -    "title": "Markdown Content"
        -  },
        -  "source_url": {
        -    "description": "Source URL of the document",
        -    "title": "Source Url",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "decision_type",
        -  "decision_id",
        -  "source_url"
        -]
      • removedOutput schema / title
        Removed value: -"SayistayUnifiedDocumentMarkdown"
    • Changedget_uyusmazlik_document_markdown_from_url6 fields changed
      • removedInput schema / properties / document_url / title
        Removed value: -"Document Url"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for an Uyuşmazlık decision document, containing only Markdown content."
      • removedOutput schema / properties
        Removed value: -{
        -  "markdown_content": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "The decision content converted to Markdown.",
        -    "title": "Markdown Content"
        -  },
        -  "source_url": {
        -    "format": "uri",
        -    "maxLength": 2083,
        -    "minLength": 1,
        -    "title": "Source Url",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "source_url"
        -]
      • removedOutput schema / title
        Removed value: -"UyusmazlikDocumentMarkdown"
    • Changedsearch2 fields changed
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • changedOutput schema / additionalProperties
        Previous value: -{
        -  "items": {
        -    "additionalProperties": {
        -      "type": "string"
        -    },
        -    "type": "object"
        -  },
        -  "type": "array"
        -}New value: +true
    • Changedsearch_anayasa_unified14 fields changed
      • removedInput schema / properties / application_date_end / title
        Removed value: -"Application Date End"
      • removedInput schema / properties / application_date_start / title
        Removed value: -"Application Date Start"
      • removedInput schema / properties / decision_end_date / title
        Removed value: -"Decision End Date"
      • removedInput schema / properties / decision_start_date / title
        Removed value: -"Decision Start Date"
      • removedInput schema / properties / decision_type / title
        Removed value: -"Decision Type"
      • removedInput schema / properties / decision_type_norm / title
        Removed value: -"Decision Type Norm"
      • removedInput schema / properties / keywords / title
        Removed value: -"Keywords"
      • removedInput schema / properties / keywords_all / title
        Removed value: -"Keywords All"
      • removedInput schema / properties / keywords_any / title
        Removed value: -"Keywords Any"
      • removedInput schema / properties / norm_type / title
        Removed value: -"Norm Type"
      • removedInput schema / properties / page_to_fetch / title
        Removed value: -"Page To Fetch"
      • removedInput schema / properties / subject_category / title
        Removed value: -"Subject Category"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsearch_bddk_decisions2 fields changed
      • removedInput schema / properties / keywords / title
        Removed value: -"Keywords"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
    • Changedsearch_bedesten_unified6 fields changed
      • removedInput schema / properties / birimAdi / title
        Removed value: -"Birimadi"
      • removedInput schema / properties / court_types / title
        Removed value: -"Court Types"
      • removedInput schema / properties / kararTarihiEnd / title
        Removed value: -"Karartarihiend"
      • removedInput schema / properties / kararTarihiStart / title
        Removed value: -"Karartarihistart"
      • removedInput schema / properties / pageNumber / title
        Removed value: -"Pagenumber"
      • removedInput schema / properties / phrase / title
        Removed value: -"Phrase"
    • Changedsearch_emsal_detailed_decisions21 fields changed
      • removedInput schema / properties / case_end_seq_esas / title
        Removed value: -"Case End Seq Esas"
      • removedInput schema / properties / case_start_seq_esas / title
        Removed value: -"Case Start Seq Esas"
      • removedInput schema / properties / case_year_esas / title
        Removed value: -"Case Year Esas"
      • removedInput schema / properties / decision_end_seq_karar / title
        Removed value: -"Decision End Seq Karar"
      • removedInput schema / properties / decision_start_seq_karar / title
        Removed value: -"Decision Start Seq Karar"
      • removedInput schema / properties / decision_year_karar / title
        Removed value: -"Decision Year Karar"
      • removedInput schema / properties / end_date / title
        Removed value: -"End Date"
      • removedInput schema / properties / keyword / title
        Removed value: -"Keyword"
      • removedInput schema / properties / page_number / title
        Removed value: -"Page Number"
      • removedInput schema / properties / selected_bam_civil_court / title
        Removed value: -"Selected Bam Civil Court"
      • removedInput schema / properties / selected_civil_court / title
        Removed value: -"Selected Civil Court"
      • removedInput schema / properties / selected_regional_civil_chambers / title
        Removed value: -"Selected Regional Civil Chambers"
      • removedInput schema / properties / sort_criteria / title
        Removed value: -"Sort Criteria"
      • removedInput schema / properties / sort_direction / title
        Removed value: -"Sort Direction"
      • removedInput schema / properties / start_date / title
        Removed value: -"Start Date"
      • removedOutput schema / $defs
        Removed value: -{
        -  "EmsalApiDecisionEntry": {
        -    "description": "Model for an individual decision entry from the Emsal API search response.",
        -    "properties": {
        -      "arananKelime": {
        -        "default": "",
        -        "description": "Keyword",
        -        "title": "Aranankelime",
        -        "type": "string"
        -      },
        -      "daire": {
        -        "default": "",
        -        "description": "Chamber",
        -        "title": "Daire",
        -        "type": "string"
        -      },
        -      "document_url": {
        -        "anyOf": [
        -          {
        -            "format": "uri",
        -            "maxLength": 2083,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Document URL",
        -        "title": "Document Url"
        -      },
        -      "durum": {
        -        "default": "",
        -        "description": "Status",
        -        "title": "Durum",
        -        "type": "string"
        -      },
        -      "esasNo": {
        -        "default": "",
        -        "description": "Case number",
        -        "title": "Esasno",
        -        "type": "string"
        -      },
        -      "id": {
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "kararNo": {
        -        "default": "",
        -        "description": "Decision number",
        -        "title": "Kararno",
        -        "type": "string"
        -      },
        -      "kararTarihi": {
        -        "default": "",
        -        "description": "Decision date",
        -        "title": "Karartarihi",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id"
        -    ],
        -    "title": "EmsalApiDecisionEntry",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"A compact search result model for the MCP tool to return."
      • removedOutput schema / properties
        Removed value: -{
        -  "decisions": {
        -    "items": {
        -      "$ref": "#/$defs/EmsalApiDecisionEntry"
        -    },
        -    "title": "Decisions",
        -    "type": "array"
        -  },
        -  "page_size": {
        -    "title": "Page Size",
        -    "type": "integer"
        -  },
        -  "requested_page": {
        -    "title": "Requested Page",
        -    "type": "integer"
        -  },
        -  "total_records": {
        -    "title": "Total Records",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "decisions",
        -  "total_records",
        -  "requested_page",
        -  "page_size"
        -]
      • removedOutput schema / title
        Removed value: -"CompactEmsalSearchResult"
    • Removedsearch_kik_decisions
    • Addedsearch_kik_v2_decisions
    • Changedsearch_kvkk_decisions7 fields changed
      • removedInput schema / properties / keywords / title
        Removed value: -"Keywords"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedOutput schema / $defs
        Removed value: -{
        -  "KvkkDecisionSummary": {
        -    "description": "Model for a single KVKK decision summary from Brave search results.",
        -    "properties": {
        -      "decision_id": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Value",
        -        "title": "Decision Id"
        -      },
        -      "decision_number": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Value",
        -        "title": "Decision Number"
        -      },
        -      "description": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Brief description or snippet from search results.",
        -        "title": "Description"
        -      },
        -      "publication_date": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Value",
        -        "title": "Publication Date"
        -      },
        -      "title": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Decision title from search results.",
        -        "title": "Title"
        -      },
        -      "url": {
        -        "anyOf": [
        -          {
        -            "format": "uri",
        -            "maxLength": 2083,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "URL to the KVKK decision page.",
        -        "title": "Url"
        -      }
        -    },
        -    "title": "KvkkDecisionSummary",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for the overall search result for KVKK decisions."
      • removedOutput schema / properties
        Removed value: -{
        -  "decisions": {
        -    "description": "List of KVKK decisions found.",
        -    "items": {
        -      "$ref": "#/$defs/KvkkDecisionSummary"
        -    },
        -    "title": "Decisions",
        -    "type": "array"
        -  },
        -  "page": {
        -    "default": 1,
        -    "description": "Current page number of results.",
        -    "title": "Page",
        -    "type": "integer"
        -  },
        -  "pageSize": {
        -    "default": 10,
        -    "description": "Number of results per page.",
        -    "title": "Pagesize",
        -    "type": "integer"
        -  },
        -  "query": {
        -    "anyOf": [
        -      {
        -        "type": "string"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "The actual search query sent to Brave API.",
        -    "title": "Query"
        -  },
        -  "total_results": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Value",
        -    "title": "Total Results"
        -  }
        -}
      • removedOutput schema / title
        Removed value: -"KvkkSearchResult"
    • Changedsearch_rekabet_kurumu_decisions13 fields changed
      • removedInput schema / properties / KararSayisi / title
        Removed value: -"Kararsayisi"
      • removedInput schema / properties / KararTarihi / title
        Removed value: -"Karartarihi"
      • removedInput schema / properties / KararTuru / title
        Removed value: -"Kararturu"
      • removedInput schema / properties / PdfText / title
        Removed value: -"Pdftext"
      • removedInput schema / properties / YayinlanmaTarihi / title
        Removed value: -"Yayinlanmatarihi"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedInput schema / properties / sayfaAdi / title
        Removed value: -"Sayfaadi"
      • removedOutput schema / $defs
        Removed value: -{
        -  "RekabetDecisionSummary": {
        -    "description": "Model for a single Rekabet Kurumu decision summary from search results.",
        -    "properties": {
        -      "decision_date": {
        -        "default": "",
        -        "description": "Date",
        -        "title": "Decision Date",
        -        "type": "string"
        -      },
        -      "decision_number": {
        -        "default": "",
        -        "description": "Number",
        -        "title": "Decision Number",
        -        "type": "string"
        -      },
        -      "decision_type_text": {
        -        "default": "",
        -        "description": "Type",
        -        "title": "Decision Type Text",
        -        "type": "string"
        -      },
        -      "decision_url": {
        -        "default": "",
        -        "description": "URL",
        -        "title": "Decision Url",
        -        "type": "string"
        -      },
        -      "karar_id": {
        -        "default": "",
        -        "description": "ID",
        -        "title": "Karar Id",
        -        "type": "string"
        -      },
        -      "publication_date": {
        -        "default": "",
        -        "description": "Pub date",
        -        "title": "Publication Date",
        -        "type": "string"
        -      },
        -      "related_cases_url": {
        -        "default": "",
        -        "description": "Cases URL",
        -        "title": "Related Cases Url",
        -        "type": "string"
        -      },
        -      "title": {
        -        "default": "",
        -        "description": "Title",
        -        "title": "Title",
        -        "type": "string"
        -      }
        -    },
        -    "title": "RekabetDecisionSummary",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Model for the overall search result for Rekabet Kurumu decisions."
      • removedOutput schema / properties
        Removed value: -{
        -  "decisions": {
        -    "items": {
        -      "$ref": "#/$defs/RekabetDecisionSummary"
        -    },
        -    "title": "Decisions",
        -    "type": "array"
        -  },
        -  "retrieved_page_number": {
        -    "description": "Page",
        -    "title": "Retrieved Page Number",
        -    "type": "integer"
        -  },
        -  "total_pages": {
        -    "default": 0,
        -    "description": "Pages",
        -    "title": "Total Pages",
        -    "type": "integer"
        -  },
        -  "total_records_found": {
        -    "default": 0,
        -    "description": "Total",
        -    "title": "Total Records Found",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "decisions",
        -  "retrieved_page_number"
        -]
      • removedOutput schema / title
        Removed value: -"RekabetSearchResult"
    • Changedsearch_sayistay_unified24 fields changed
      • removedInput schema / properties / decision_type / title
        Removed value: -"Decision Type"
      • removedInput schema / properties / dosya_no / title
        Removed value: -"Dosya No"
      • removedInput schema / properties / hesap_yili / title
        Removed value: -"Hesap Yili"
      • removedInput schema / properties / ilam_dairesi / title
        Removed value: -"Ilam Dairesi"
      • removedInput schema / properties / ilam_no / title
        Removed value: -"Ilam No"
      • removedInput schema / properties / kamu_idaresi_turu / title
        Removed value: -"Kamu Idaresi Turu"
      • removedInput schema / properties / karar_ek / title
        Removed value: -"Karar Ek"
      • removedInput schema / properties / karar_no / title
        Removed value: -"Karar No"
      • removedInput schema / properties / karar_tamami / title
        Removed value: -"Karar Tamami"
      • removedInput schema / properties / karar_tarih_baslangic / title
        Removed value: -"Karar Tarih Baslangic"
      • removedInput schema / properties / karar_tarih_bitis / title
        Removed value: -"Karar Tarih Bitis"
      • removedInput schema / properties / length / title
        Removed value: -"Length"
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • removedInput schema / properties / temyiz_karar / title
        Removed value: -"Temyiz Karar"
      • removedInput schema / properties / temyiz_tutanak_no / title
        Removed value: -"Temyiz Tutanak No"
      • removedInput schema / properties / web_karar_konusu / title
        Removed value: -"Web Karar Konusu"
      • removedInput schema / properties / web_karar_metni / title
        Removed value: -"Web Karar Metni"
      • removedInput schema / properties / yargilama_dairesi / title
        Removed value: -"Yargilama Dairesi"
      • removedInput schema / properties / yili / title
        Removed value: -"Yili"
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Unified search result containing decisions from any Sayıştay decision type."
      • removedOutput schema / properties
        Removed value: -{
        -  "decision_type": {
        -    "description": "Type of decisions returned",
        -    "enum": [
        -      "genel_kurul",
        -      "temyiz_kurulu",
        -      "daire"
        -    ],
        -    "title": "Decision Type",
        -    "type": "string"
        -  },
        -  "decisions": {
        -    "description": "Decision list (structure varies by type)",
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "title": "Decisions",
        -    "type": "array"
        -  },
        -  "draw": {
        -    "default": 1,
        -    "description": "DataTables draw counter",
        -    "title": "Draw",
        -    "type": "integer"
        -  },
        -  "total_filtered": {
        -    "default": 0,
        -    "description": "Number of records after filtering",
        -    "title": "Total Filtered",
        -    "type": "integer"
        -  },
        -  "total_records": {
        -    "default": 0,
        -    "description": "Total number of records found",
        -    "title": "Total Records",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "decision_type"
        -]
      • removedOutput schema / title
        Removed value: -"SayistayUnifiedSearchResult"
    • Changedsearch_uyusmazlik_decisions24 fields changed
      • removedInput schema / properties / bolum / title
        Removed value: -"Bolum"
      • removedInput schema / properties / esas_sayisi / title
        Removed value: -"Esas Sayisi"
      • removedInput schema / properties / esas_yil / title
        Removed value: -"Esas Yil"
      • removedInput schema / properties / hepsi / title
        Removed value: -"Hepsi"
      • removedInput schema / properties / herhangi_birisi / title
        Removed value: -"Herhangi Birisi"
      • removedInput schema / properties / icerik / title
        Removed value: -"Icerik"
      • removedInput schema / properties / kanun_no / title
        Removed value: -"Kanun No"
      • removedInput schema / properties / karar_date_begin / title
        Removed value: -"Karar Date Begin"
      • removedInput schema / properties / karar_date_end / title
        Removed value: -"Karar Date End"
      • removedInput schema / properties / karar_sayisi / title
        Removed value: -"Karar Sayisi"
      • removedInput schema / properties / karar_sonuclari / title
        Removed value: -"Karar Sonuclari"
      • removedInput schema / properties / karar_yil / title
        Removed value: -"Karar Yil"
      • removedInput schema / properties / not_hepsi / title
        Removed value: -"Not Hepsi"
      • removedInput schema / properties / resmi_gazete_date / title
        Removed value: -"Resmi Gazete Date"
      • removedInput schema / properties / resmi_gazete_sayi / title
        Removed value: -"Resmi Gazete Sayi"
      • removedInput schema / properties / tumce / title
        Removed value: -"Tumce"
      • removedInput schema / properties / uyusmazlik_turu / title
        Removed value: -"Uyusmazlik Turu"
      • removedInput schema / properties / wild_card / title
        Removed value: -"Wild Card"
      • removedOutput schema / $defs
        Removed value: -{
        -  "UyusmazlikApiDecisionEntry": {
        -    "description": "Model for an individual decision entry parsed from Uyuşmazlık API's HTML search response.",
        -    "properties": {
        -      "bolum": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Bolum"
        -      },
        -      "document_url": {
        -        "format": "uri",
        -        "maxLength": 2083,
        -        "minLength": 1,
        -        "title": "Document Url",
        -        "type": "string"
        -      },
        -      "esas_sayisi": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Esas Sayisi"
        -      },
        -      "karar_sayisi": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Karar Sayisi"
        -      },
        -      "karar_sonucu": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Karar Sonucu"
        -      },
        -      "pdf_url": {
        -        "anyOf": [
        -          {
        -            "format": "uri",
        -            "maxLength": 2083,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "PDF URL",
        -        "title": "Pdf Url"
        -      },
        -      "popover_content": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "description": "Summary",
        -        "title": "Popover Content"
        -      },
        -      "uyusmazlik_konusu": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Uyusmazlik Konusu"
        -      }
        -    },
        -    "required": [
        -      "document_url"
        -    ],
        -    "title": "UyusmazlikApiDecisionEntry",
        -    "type": "object"
        -  }
        -}
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / description
        Removed value: -"Response model for Uyuşmazlık Mahkemesi search results for the MCP tool."
      • removedOutput schema / properties
        Removed value: -{
        -  "decisions": {
        -    "items": {
        -      "$ref": "#/$defs/UyusmazlikApiDecisionEntry"
        -    },
        -    "title": "Decisions",
        -    "type": "array"
        -  },
        -  "total_records_found": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "null"
        -      }
        -    ],
        -    "default": null,
        -    "description": "Total number of records found for the query, if available.",
        -    "title": "Total Records Found"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "decisions"
        -]
      • removedOutput schema / title
        Removed value: -"UyusmazlikSearchResponse"
  4. 21 tool updates
    • First observedcheck_government_servers_health
    • First observedfetch
    • First observedget_anayasa_document_unified
    • First observedget_bddk_document_markdown
    • First observedget_bedesten_document_markdown
    • First observedget_emsal_document_markdown
    • First observedget_kik_document_markdown
    • First observedget_kvkk_document_markdown
    • First observedget_rekabet_kurumu_document
    • First observedget_sayistay_document_unified
    • First observedget_uyusmazlik_document_markdown_from_url
    • First observedsearch
    • First observedsearch_anayasa_unified
    • First observedsearch_bddk_decisions
    • First observedsearch_bedesten_unified
    • First observedsearch_emsal_detailed_decisions
    • First observedsearch_kik_decisions
    • First observedsearch_kvkk_decisions
    • First observedsearch_rekabet_kurumu_decisions
    • First observedsearch_sayistay_unified
    • First observedsearch_uyusmazlik_decisions

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct legal domain (Emsal, Bedesten, Uyuşmazlık, Anayasa, KİK, Rekabet, Sayıştay, BDDK, GİB, Sigorta Tahkim) with clear search vs. get operations per domain. The two Deep Research tools (fetch, search) are explicitly labeled as for ChatGPT Deep Research, and their descriptions clarify they should not be used for regular MCP, eliminating ambiguity.

Naming Consistency3/5

The naming follows a verb_noun pattern (search_* and get_*) but with inconsistencies: some get tools include 'markdown' while others do not (e.g., get_rekabet_kurumu_document vs. get_bddk_document_markdown), some have special suffixes like '_unified' or '_from_url', and two tools ('fetch', 'search') break the pattern entirely. The core pattern is recognizable but not uniform.

Tool Count4/5

With 17 tools, the server is slightly above the ideal 3-15 range but still reasonable for a multi-jurisdiction legal research platform. Each tool serves a distinct domain, and the count is justified by the breadth of sources covered, though it may feel heavy for agents to navigate.

Completeness2/5

Several domains lack either a search or get tool: Emsal has only a getter, Sayıştay has only a getter, GİB has only a getter, and Anayasa has only a search (no document retrieval). Additionally, a referenced 'search_bedesten_unified' is not included, leaving gaps in the Bedesten workflow. The surface is incomplete for a comprehensive legal research tool.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    A FastMCP server providing access to the Turkish Ministry of Justice's Legislative Information System, allowing LLM applications to search legislation, retrieve article lists, and get article contents in Markdown format.
    26
    234
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for accessing Turkish legislation (laws, regulations, decrees) via the Adalet Bakanligi API, providing search, full-text retrieval, and structured citations.
    5
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Türk hukuk MCP sunucusu that enables searching and retrieving Turkish legal decisions (Yargıtay, Danıştay, etc.) with semantic search via NVIDIA embeddings and a Turkish chat tool powered by Llama 3.3 70B.
    MIT