Yargı MCP
Yargı MCP is a Model Context Protocol server providing programmatic access to Turkish legal databases, enabling search and retrieval of court decisions and regulatory documents from 13 judicial institutions.
Supported Institutions: Yargıtay (Court of Cassation), Danıştay (Council of State), Anayasa Mahkemesi (Constitutional Court), Sayıştay (Court of Accounts), Uyuşmazlık Mahkemesi (Jurisdictional Disputes Court), Local Civil Courts, Regional Appeals Courts, KYB (Extraordinary Appeals), Emsal/UYAP (Precedent Decisions), KİK (Public Procurement), Rekabet Kurumu (Competition Authority), KVKK (Personal Data Protection), and BDDK (Banking Regulation).
Key Capabilities:
Advanced Search Features: Unified search tools across multiple courts, 87 chamber/board filters (52 Yargıtay + 27 Danıştay + 8 Sayıştay), date range filtering (ISO 8601), exact phrase search (double quotes), and boolean operators (AND, OR, NOT, +, -)
Document Retrieval: Full decision texts converted to Markdown format with pagination support for long documents (5,000 character chunks)
20 MCP Tools: Including unified search tools (
search_bedesten_unified,search_anayasa_unified,search_sayistay_unified), institution-specific search and retrieval tools, andcheck_government_servers_healthfor server monitoringPerformance Optimized: 61.8% token reduction (8,692 tokens saved) through API consolidation while maintaining 100% feature preservation
Optional Semantic Search: OpenRouter API integration for relevance ranking when API key is configured
Multi-API Support: Dual/triple API coverage for maximum data availability
Deployment Options: Remote MCP server for instant use, local installation for Claude Desktop, 5ire, and Gemini CLI, or web service/ASGI deployment with Docker for cloud hosting and API access.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Yargı MCPfind recent Supreme Court decisions about data privacy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Yargı MCP: Türk Hukuk Kaynakları için MCP Sunucusu
✨ 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:
Related MCP server: Mevzuat MCP
🚨 SUNUCU YENİ ADRESE TAŞINDI
Yeni Remote MCP adresi:
https://yargimcp.surucu.dev/mcpEski 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!
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/mcpartı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)
Claude Desktop'ı açın
Settings → Connectors → Add Custom Connector
Bilgileri girin:
Name:
Yargı MCPURL:
https://yargimcp.surucu.dev/mcp
Add butonuna tıklayın
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'yiuvxç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);
YARGIWindows (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-mcpile ç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:
Connector'ı kaldırıp yeniden ekleyin.
URL olarak önce
https://yargimcp.surucu.dev/mcpdeneyin; istemciniz yönlendirmeleri takip etmiyorsahttps://yargimcp.surucu.dev/mcp/deneyin.Eski
https://yargimcp.fastmcp.app/mcpadresinin istemci ayarlarında veya önbellekte kalmadığından emin olun.İstemcinin remote/Streamable HTTP MCP desteklediğini ve
text/event-streamkabul ettiğini kontrol edin.

🎯 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 installkomutu 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.
uvKurulumu:Windows Kullanıcıları (PowerShell): Bir CMD ekranı açın ve bu kodu çalıştırın:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Mac/Linux Kullanıcıları (Terminal): Bir Terminal ekranı açın ve bu kodu çalıştırın:
curl -LsSf https://astral.sh/uv/install.sh | sh
Microsoft Visual C++ Redistributable (Windows): Bazı Python paketlerinin doğru çalışması için gereklidir. Buradan indirip kurun.
İşletim sisteminize uygun 5ire MCP istemcisini indirip kurun.
5ire'ı açın. Workspace -> Providers menüsünden kullanmak istediğiniz LLM servisinin API anahtarını girin.
Tools menüsüne girin. +Local veya New yazan butona basın.
Tool Key:
yargimcpName:
Yargı MCPCommand:
uvx yargi-mcpSave butonuna basarak kaydedin.

Ş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'yiuvxç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);
YARGIWindows (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:
Ö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.Gemini CLI ayarlarını yapılandırın:
Gemini CLI'ın ayar dosyasını düzenleyin:
macOS/Linux:
~/.gemini/settings.jsonWindows:
%USERPROFILE%\.gemini\settings.json
Aşağıdaki
mcpServersbloğ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":uvxkomutu (uv'nin paket çalıştırma aracı)"args": GitHub'dan doğrudan Yargı MCP'yi çalıştırmak için gerekli argümanlar
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?
initial_keywordile Bedesten API'den 100 karar çekilirqueryile bu kararlar embedding modeli kullanılarak anlamsal olarak sıralanırEn 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-largeSonra 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 modelleriquery:/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=rawOllama kütüphanesinde
multilingual-e5-largedoğ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ılanAPI 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ılanAPI 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 |
|
|
|
|
|
|
| Yerel sunucunun OpenAI-uyumlu URL'i |
|
| Model adı |
|
| Modelin çıktı boyutu (mutlaka eşleşmeli) |
|
| OpenRouter anahtarı (sadece hosted için) |
|
| OpenRouter model id'si |
|
| OpenRouter modelinin çıktı boyutu |
|
| OrcaRouter anahtarı (sadece hosted için) |
|
| OrcaRouter model id'si |
|
| OrcaRouter modelinin çıktı boyutu |
|
💡 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
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 Aramaget_bedesten_document_markdown(documentId: str): Bedesten API'den herhangi bir belgeyi Markdown formatında getirir (HTML/PDF → Markdown)
Emsal Karar Araçları (UYAP)
search_emsal_detailed_decisions(keyword, ...): Emsal (UYAP) kararlarını detaylı kriterlerle arar.get_emsal_document_markdown(id: str): Belirli bir Emsal kararının metnini Markdown formatında getirir.
Uyuşmazlık Mahkemesi Araçları
search_uyusmazlik_decisions(icerik, ...): Uyuşmazlık Mahkemesi kararlarını çeşitli form kriterleriyle arar.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
search_anayasa_unified(decision_type, keywords_all, ...): AYM kararlarını birleşik arama (Norm Denetimi + Bireysel Başvuru) - 4 araç → 2 araç optimizasyonuget_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ı
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.get_kik_v2_document_markdown(gundemMaddesiId): Arama sonucundakigundemMaddesiIdile 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_kuruluveyadairekararlarını tek araçla arar.length1-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 8000Detaylı 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 toolsfetchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Document identifier from search results (numeric only) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_markdownARead-onlyIdempotent
Use this when retrieving full text of a BDDK banking regulation decision. Returns paginated Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | BDDK document ID (e.g., '310') | |
| page_number | No | Page number |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_markdownARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | Document ID from Bedesten search results |
Output Schema
| Name | Required | Description |
|---|---|---|
| mime_type | No | Original content type (İçerik Türü) (text/html or application/pdf) |
| documentId | Yes | The document ID (Belge Kimliği) from Bedesten |
| source_url | Yes | The source URL (Kaynak URL) of the document |
| markdown_content | No | The decision content (Karar İçeriği) converted to Markdown |
TDQS
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.
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.
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.
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.
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.
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_markdownARead-onlyIdempotent
Use this when retrieving full text of an Emsal precedent decision. Returns clean Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_markdownARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| ozelge_id | Yes | Numeric özelge ID from search results (e.g., 38849) | |
| page_number | No | Page number for paginated Markdown (1-indexed) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_markdownARead-onlyIdempotent
Use this when retrieving full text of a KİK procurement decision. Returns document in Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| gundemMaddesiId | Yes | gundemMaddesiId from search_kik_v2_decisions results |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_documentARead-onlyIdempotent
Use this when retrieving full text of a Competition Authority decision. Returns paginated Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| karar_id | Yes | GUID (kararId) of the Rekabet Kurumu decision. This ID is obtained from search results. | |
| page_number | No | Requested page number for the Markdown content converted from PDF (1-indexed, accepts int). Default is 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_unifiedARead-onlyIdempotent
Use this when retrieving full text of a Sayıştay audit decision. Returns clean Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| decision_id | Yes | Decision ID from search_sayistay_unified results | |
| decision_type | Yes | Decision type: genel_kurul, temyiz_kurulu, or daire |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_markdownARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| page_number | No | Page number for paginated content | |
| issue_number | Yes | Journal issue number (1-64, e.g., '64') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_urlARead-onlyIdempotent
Use this when retrieving full text of an Uyuşmazlık Mahkemesi decision. Returns clean Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| document_url | Yes | Full URL to the Uyuşmazlık Mahkemesi decision document from search results |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
searchARead-onlyIdempotent
Only for ChatGPT Deep Research. Searches Bedesten-supported Turkish court databases and returns OpenAI Deep Research compatible results (id, title, text, url). For regular MCP use, prefer search_bedesten_unified. This tool does not fetch document bodies during search so one query stays within Bedesten upstream rate limits; call fetch only for selected result IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Turkish search query |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint. Description adds crucial behavioral detail: does not fetch document bodies during search to respect rate limits, and guides to use fetch separately. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loaded with purpose and audience, followed by behavioral constraint and guidance. No wasted words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool (1 param, output schema exists), description covers purpose, audience, sibling guidance, and output format. Could add minor details like query format expectations, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter 'query' described as 'Turkish search query'. Description adds no additional meaning beyond 'Turkish' from schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Searches Bedesten-supported Turkish court databases' with specific verb and resource, and distinguishes from sibling 'search_bedesten_unified' by specifying this is for ChatGPT Deep Research only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Only for ChatGPT Deep Research' and recommends 'For regular MCP use, prefer search_bedesten_unified', providing clear when-to-use and alternatives. Also advises calling fetch for bodies to stay within rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_anayasa_unifiedARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | No | Keywords for full-text search (joined into a single query) | |
| decision_type | Yes | Decision type: norm_denetimi (norm control) or bireysel_basvuru (individual applications) | |
| page_to_fetch | No | Page number to fetch (1-100) | |
| results_per_page | No | Results per page (1-100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_decisionsARead-onlyIdempotent
Use this when searching Turkish banking regulation (BDDK) decisions. For banking licenses, fintech, and payment services.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| keywords | Yes | Search keywords in Turkish |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_decisionsARead-onlyIdempotent
Use this when searching Turkish public procurement disputes (KİK). Supports dispute, regulatory, and court decision types.
| Name | Required | Description | Default |
|---|---|---|---|
| basvuran | No | Applicant name | |
| karar_no | No | Decision number (e.g., '2025/UH.II-1801') | |
| idare_adi | No | Administration/procuring entity name | |
| karar_metni | No | Decision text search query | |
| bitis_tarihi | No | End date (YYYY-MM-DD format, e.g., '2025-12-31') | |
| decision_type | No | Decision type: 'uyusmazlik' (disputes), 'duzenleyici' (regulatory), or 'mahkeme' (court decisions) | uyusmazlik |
| baslangic_tarihi | No | Start date (YYYY-MM-DD format, e.g., '2025-01-01') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_decisionsCRead-onlyIdempotent
Use this when searching Turkish competition law and antitrust decisions (Rekabet Kurumu).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to fetch for the results list. | |
| PdfText | No | Search in decision text. Use "\"kesin cümle\"" for precise matching. | |
| sayfaAdi | No | Search in decision title (Başlık). | |
| KararTuru | No | Parameter description | ALL |
| KararSayisi | No | Decision number (Karar Sayısı). | |
| KararTarihi | No | Decision date (Karar Tarihi), e.g., DD.MM.YYYY. | |
| YayinlanmaTarihi | No | Publication date (Yayım Tarihi), e.g., DD.MM.YYYY. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_decisionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| keywords | Yes | Search keywords in Turkish (e.g., 'trafik sigortası', 'kasko', 'DASK') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_decisionsARead-onlyIdempotent
Use this when searching jurisdictional dispute court (Uyuşmazlık Mahkemesi) decisions. Resolves conflicts between civil and administrative courts.
| Name | Required | Description | Default |
|---|---|---|---|
| icerik | No | Search text. Searches full decision text, or matches a case/decision number depending on search_scope. | |
| page_number | No | Result page number. | |
| search_scope | No | Search scope: 'All' (full text), 'EsasNo' (by case number), 'KararNo' (by decision number). | All |
| case_sensitive | No | Whether the search is case sensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v0.2.2- Removed
check_government_servers_health - Removed
get_anayasa_document_unified - Removed
get_kvkk_document_markdown - Changed
search_anayasa_unified11 fields changed- removed
Input schema / properties / application_date_endRemoved value: -{ - "default": "", - "description": "Application end date (norm_denetimi only)", - "type": "string" -} - removed
Input schema / properties / application_date_startRemoved value: -{ - "default": "", - "description": "Application start date (norm_denetimi only)", - "type": "string" -} - removed
Input schema / properties / decision_end_dateRemoved value: -{ - "default": "", - "description": "Decision end date (bireysel_basvuru only)", - "type": "string" -} - removed
Input schema / properties / decision_start_dateRemoved value: -{ - "default": "", - "description": "Decision start date (bireysel_basvuru only)", - "type": "string" -} - removed
Input schema / properties / decision_type_normRemoved value: -{ - "default": "ALL", - "description": "Decision type for norm denetimi", - "enum": [ - "ALL", - "1", - "2", - "3" - ], - "type": "string" -} - changed
Input schema / properties / keywords / descriptionPrevious value: -"Keywords to search for (common parameter)"New value: +"Keywords for full-text search (joined into a single query)" - removed
Input schema / properties / keywords_allRemoved value: -{ - "description": "All keywords must be present (norm_denetimi only)", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / keywords_anyRemoved value: -{ - "description": "Any of these keywords (norm_denetimi only)", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / norm_typeRemoved 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" -} - added
Input schema / properties / results_per_pageAdded value: +{ + "default": 10, + "description": "Results per page (1-100)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / subject_categoryRemoved value: -{ - "default": "", - "description": "Subject category (bireysel_basvuru only)", - "type": "string" -}
- Removed
search_bedesten_unified - Removed
search_emsal_detailed_decisions - Removed
search_gib_ozelge - Removed
search_kvkk_decisions - Removed
search_sayistay_unified - Changed
search_uyusmazlik_decisions21 fields changed- removed
Input schema / properties / bolumRemoved 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" -} - added
Input schema / properties / case_sensitiveAdded value: +{ + "default": false, + "description": "Whether the search is case sensitive.", + "type": "boolean" +} - removed
Input schema / properties / esas_sayisiRemoved value: -{ - "default": "", - "description": "Case number ('Esas Sayısı').", - "type": "string" -} - removed
Input schema / properties / esas_yilRemoved value: -{ - "default": "", - "description": "Case year ('Esas Yılı').", - "type": "string" -} - removed
Input schema / properties / hepsiRemoved value: -{ - "default": "", - "description": "Search for texts containing all specified words.", - "type": "string" -} - removed
Input schema / properties / herhangi_birisiRemoved value: -{ - "default": "", - "description": "Search for texts containing any of the specified words.", - "type": "string" -} - changed
Input schema / properties / icerik / descriptionPrevious 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." - removed
Input schema / properties / kanun_noRemoved value: -{ - "default": "", - "description": "Relevant Law Number.", - "type": "string" -} - removed
Input schema / properties / karar_date_beginRemoved value: -{ - "default": "", - "description": "Decision start date (DD.MM.YYYY).", - "type": "string" -} - removed
Input schema / properties / karar_date_endRemoved value: -{ - "default": "", - "description": "Decision end date (DD.MM.YYYY).", - "type": "string" -} - removed
Input schema / properties / karar_sayisiRemoved value: -{ - "default": "", - "description": "Decision number ('Karar Sayısı').", - "type": "string" -} - removed
Input schema / properties / karar_sonuclariRemoved 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" -} - removed
Input schema / properties / karar_yilRemoved value: -{ - "default": "", - "description": "Decision year ('Karar Yılı').", - "type": "string" -} - removed
Input schema / properties / not_hepsiRemoved value: -{ - "default": "", - "description": "Exclude texts containing these specified words.", - "type": "string" -} - added
Input schema / properties / page_numberAdded value: +{ + "default": 1, + "description": "Result page number.", + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / resmi_gazete_dateRemoved value: -{ - "default": "", - "description": "Official Gazette date (DD.MM.YYYY).", - "type": "string" -} - removed
Input schema / properties / resmi_gazete_sayiRemoved value: -{ - "default": "", - "description": "Official Gazette number.", - "type": "string" -} - added
Input schema / properties / search_scopeAdded value: +{ + "default": "All", + "description": "Search scope: 'All' (full text), 'EsasNo' (by case number), 'KararNo' (by decision number).", + "enum": [ + "All", + "EsasNo", + "KararNo" + ], + "type": "string" +} - removed
Input schema / properties / tumceRemoved value: -{ - "default": "", - "description": "Exact phrase search.", - "type": "string" -} - removed
Input schema / properties / uyusmazlik_turuRemoved 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" -} - removed
Input schema / properties / wild_cardRemoved value: -{ - "default": "", - "description": "Search for phrase and its inflections.", - "type": "string" -}
- Removed
search_within_sigorta_tahkim_issue
6 tool updates
v0.2.1- Added
get_gib_ozelge_document_markdown - Added
get_sigorta_tahkim_document_markdown - Changed
search_bedesten_unified1 field changed- changed
Input schema / properties / pageNumber / descriptionPrevious value: -"Page number"New value: +"Page number. Each page returns 10 results; pageSize is fixed by the server."
- Added
search_gib_ozelge - Added
search_sigorta_tahkim_decisions - Added
search_within_sigorta_tahkim_issue
22 tool updates
v1.0.0- Changed
fetch1 field changed- removed
Input schema / properties / id / titleRemoved value: -"Id"
- Changed
get_anayasa_document_unified4 fields changed- removed
Input schema / properties / document_url / titleRemoved value: -"Document Url" - removed
Input schema / properties / page_number / titleRemoved value: -"Page Number" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
get_bddk_document_markdown2 fields changed- removed
Input schema / properties / document_id / titleRemoved value: -"Document Id" - removed
Input schema / properties / page_number / titleRemoved value: -"Page Number"
- Changed
get_bedesten_document_markdown6 fields changed- removed
Input schema / properties / documentId / titleRemoved value: -"Documentid" - removed
Output schema / properties / documentId / titleRemoved value: -"Documentid" - removed
Output schema / properties / markdown_content / titleRemoved value: -"Markdown Content" - removed
Output schema / properties / mime_type / titleRemoved value: -"Mime Type" - removed
Output schema / properties / source_url / titleRemoved value: -"Source Url" - removed
Output schema / titleRemoved value: -"BedestenDocumentMarkdown"
- Changed
get_emsal_document_markdown6 fields changed- removed
Input schema / properties / id / titleRemoved value: -"Id" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Model for an Emsal decision document, containing only Markdown content." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "id", - "source_url" -] - removed
Output schema / titleRemoved value: -"EmsalDocumentMarkdown"
- Removed
get_kik_document_markdown - Added
get_kik_v2_document_markdown - Changed
get_kvkk_document_markdown7 fields changed- removed
Input schema / properties / decision_url / titleRemoved value: -"Decision Url" - removed
Input schema / properties / page_number / titleRemoved value: -"Page Number" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Model for KVKK decision document content converted to paginated Markdown." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "source_url", - "current_page", - "total_pages", - "is_paginated" -] - removed
Output schema / titleRemoved value: -"KvkkDocumentMarkdown"
- Changed
get_rekabet_kurumu_document7 fields changed- removed
Input schema / properties / karar_id / titleRemoved value: -"Karar Id" - removed
Input schema / properties / page_number / titleRemoved value: -"Page Number" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved 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." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "source_landing_page_url", - "karar_id" -] - removed
Output schema / titleRemoved value: -"RekabetDocument"
- Changed
get_sayistay_document_unified7 fields changed- removed
Input schema / properties / decision_id / titleRemoved value: -"Decision Id" - removed
Input schema / properties / decision_type / titleRemoved value: -"Decision Type" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Unified document model for all Sayıştay decision types." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "decision_type", - "decision_id", - "source_url" -] - removed
Output schema / titleRemoved value: -"SayistayUnifiedDocumentMarkdown"
- Changed
get_uyusmazlik_document_markdown_from_url6 fields changed- removed
Input schema / properties / document_url / titleRemoved value: -"Document Url" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Model for an Uyuşmazlık decision document, containing only Markdown content." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "source_url" -] - removed
Output schema / titleRemoved value: -"UyusmazlikDocumentMarkdown"
- Changed
search2 fields changed- removed
Input schema / properties / query / titleRemoved value: -"Query" - changed
Output schema / additionalPropertiesPrevious value: -{ - "items": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "type": "array" -}New value: +true
- Changed
search_anayasa_unified14 fields changed- removed
Input schema / properties / application_date_end / titleRemoved value: -"Application Date End" - removed
Input schema / properties / application_date_start / titleRemoved value: -"Application Date Start" - removed
Input schema / properties / decision_end_date / titleRemoved value: -"Decision End Date" - removed
Input schema / properties / decision_start_date / titleRemoved value: -"Decision Start Date" - removed
Input schema / properties / decision_type / titleRemoved value: -"Decision Type" - removed
Input schema / properties / decision_type_norm / titleRemoved value: -"Decision Type Norm" - removed
Input schema / properties / keywords / titleRemoved value: -"Keywords" - removed
Input schema / properties / keywords_all / titleRemoved value: -"Keywords All" - removed
Input schema / properties / keywords_any / titleRemoved value: -"Keywords Any" - removed
Input schema / properties / norm_type / titleRemoved value: -"Norm Type" - removed
Input schema / properties / page_to_fetch / titleRemoved value: -"Page To Fetch" - removed
Input schema / properties / subject_category / titleRemoved value: -"Subject Category" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
search_bddk_decisions2 fields changed- removed
Input schema / properties / keywords / titleRemoved value: -"Keywords" - removed
Input schema / properties / page / titleRemoved value: -"Page"
- Changed
search_bedesten_unified6 fields changed- removed
Input schema / properties / birimAdi / titleRemoved value: -"Birimadi" - removed
Input schema / properties / court_types / titleRemoved value: -"Court Types" - removed
Input schema / properties / kararTarihiEnd / titleRemoved value: -"Karartarihiend" - removed
Input schema / properties / kararTarihiStart / titleRemoved value: -"Karartarihistart" - removed
Input schema / properties / pageNumber / titleRemoved value: -"Pagenumber" - removed
Input schema / properties / phrase / titleRemoved value: -"Phrase"
- Changed
search_emsal_detailed_decisions21 fields changed- removed
Input schema / properties / case_end_seq_esas / titleRemoved value: -"Case End Seq Esas" - removed
Input schema / properties / case_start_seq_esas / titleRemoved value: -"Case Start Seq Esas" - removed
Input schema / properties / case_year_esas / titleRemoved value: -"Case Year Esas" - removed
Input schema / properties / decision_end_seq_karar / titleRemoved value: -"Decision End Seq Karar" - removed
Input schema / properties / decision_start_seq_karar / titleRemoved value: -"Decision Start Seq Karar" - removed
Input schema / properties / decision_year_karar / titleRemoved value: -"Decision Year Karar" - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - removed
Input schema / properties / keyword / titleRemoved value: -"Keyword" - removed
Input schema / properties / page_number / titleRemoved value: -"Page Number" - removed
Input schema / properties / selected_bam_civil_court / titleRemoved value: -"Selected Bam Civil Court" - removed
Input schema / properties / selected_civil_court / titleRemoved value: -"Selected Civil Court" - removed
Input schema / properties / selected_regional_civil_chambers / titleRemoved value: -"Selected Regional Civil Chambers" - removed
Input schema / properties / sort_criteria / titleRemoved value: -"Sort Criteria" - removed
Input schema / properties / sort_direction / titleRemoved value: -"Sort Direction" - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date" - removed
Output schema / $defsRemoved 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" - } -} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"A compact search result model for the MCP tool to return." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "decisions", - "total_records", - "requested_page", - "page_size" -] - removed
Output schema / titleRemoved value: -"CompactEmsalSearchResult"
- Removed
search_kik_decisions - Added
search_kik_v2_decisions - Changed
search_kvkk_decisions7 fields changed- removed
Input schema / properties / keywords / titleRemoved value: -"Keywords" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Output schema / $defsRemoved 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" - } -} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Model for the overall search result for KVKK decisions." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / titleRemoved value: -"KvkkSearchResult"
- Changed
search_rekabet_kurumu_decisions13 fields changed- removed
Input schema / properties / KararSayisi / titleRemoved value: -"Kararsayisi" - removed
Input schema / properties / KararTarihi / titleRemoved value: -"Karartarihi" - removed
Input schema / properties / KararTuru / titleRemoved value: -"Kararturu" - removed
Input schema / properties / PdfText / titleRemoved value: -"Pdftext" - removed
Input schema / properties / YayinlanmaTarihi / titleRemoved value: -"Yayinlanmatarihi" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Input schema / properties / sayfaAdi / titleRemoved value: -"Sayfaadi" - removed
Output schema / $defsRemoved 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" - } -} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Model for the overall search result for Rekabet Kurumu decisions." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "decisions", - "retrieved_page_number" -] - removed
Output schema / titleRemoved value: -"RekabetSearchResult"
- Changed
search_sayistay_unified24 fields changed- removed
Input schema / properties / decision_type / titleRemoved value: -"Decision Type" - removed
Input schema / properties / dosya_no / titleRemoved value: -"Dosya No" - removed
Input schema / properties / hesap_yili / titleRemoved value: -"Hesap Yili" - removed
Input schema / properties / ilam_dairesi / titleRemoved value: -"Ilam Dairesi" - removed
Input schema / properties / ilam_no / titleRemoved value: -"Ilam No" - removed
Input schema / properties / kamu_idaresi_turu / titleRemoved value: -"Kamu Idaresi Turu" - removed
Input schema / properties / karar_ek / titleRemoved value: -"Karar Ek" - removed
Input schema / properties / karar_no / titleRemoved value: -"Karar No" - removed
Input schema / properties / karar_tamami / titleRemoved value: -"Karar Tamami" - removed
Input schema / properties / karar_tarih_baslangic / titleRemoved value: -"Karar Tarih Baslangic" - removed
Input schema / properties / karar_tarih_bitis / titleRemoved value: -"Karar Tarih Bitis" - removed
Input schema / properties / length / titleRemoved value: -"Length" - removed
Input schema / properties / start / titleRemoved value: -"Start" - removed
Input schema / properties / temyiz_karar / titleRemoved value: -"Temyiz Karar" - removed
Input schema / properties / temyiz_tutanak_no / titleRemoved value: -"Temyiz Tutanak No" - removed
Input schema / properties / web_karar_konusu / titleRemoved value: -"Web Karar Konusu" - removed
Input schema / properties / web_karar_metni / titleRemoved value: -"Web Karar Metni" - removed
Input schema / properties / yargilama_dairesi / titleRemoved value: -"Yargilama Dairesi" - removed
Input schema / properties / yili / titleRemoved value: -"Yili" - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Unified search result containing decisions from any Sayıştay decision type." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "decision_type" -] - removed
Output schema / titleRemoved value: -"SayistayUnifiedSearchResult"
- Changed
search_uyusmazlik_decisions24 fields changed- removed
Input schema / properties / bolum / titleRemoved value: -"Bolum" - removed
Input schema / properties / esas_sayisi / titleRemoved value: -"Esas Sayisi" - removed
Input schema / properties / esas_yil / titleRemoved value: -"Esas Yil" - removed
Input schema / properties / hepsi / titleRemoved value: -"Hepsi" - removed
Input schema / properties / herhangi_birisi / titleRemoved value: -"Herhangi Birisi" - removed
Input schema / properties / icerik / titleRemoved value: -"Icerik" - removed
Input schema / properties / kanun_no / titleRemoved value: -"Kanun No" - removed
Input schema / properties / karar_date_begin / titleRemoved value: -"Karar Date Begin" - removed
Input schema / properties / karar_date_end / titleRemoved value: -"Karar Date End" - removed
Input schema / properties / karar_sayisi / titleRemoved value: -"Karar Sayisi" - removed
Input schema / properties / karar_sonuclari / titleRemoved value: -"Karar Sonuclari" - removed
Input schema / properties / karar_yil / titleRemoved value: -"Karar Yil" - removed
Input schema / properties / not_hepsi / titleRemoved value: -"Not Hepsi" - removed
Input schema / properties / resmi_gazete_date / titleRemoved value: -"Resmi Gazete Date" - removed
Input schema / properties / resmi_gazete_sayi / titleRemoved value: -"Resmi Gazete Sayi" - removed
Input schema / properties / tumce / titleRemoved value: -"Tumce" - removed
Input schema / properties / uyusmazlik_turu / titleRemoved value: -"Uyusmazlik Turu" - removed
Input schema / properties / wild_card / titleRemoved value: -"Wild Card" - removed
Output schema / $defsRemoved 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" - } -} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / descriptionRemoved value: -"Response model for Uyuşmazlık Mahkemesi search results for the MCP tool." - removed
Output schema / propertiesRemoved 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" - } -} - removed
Output schema / requiredRemoved value: -[ - "decisions" -] - removed
Output schema / titleRemoved value: -"UyusmazlikSearchResponse"
21 tool updates
- First observed
check_government_servers_health - First observed
fetch - First observed
get_anayasa_document_unified - First observed
get_bddk_document_markdown - First observed
get_bedesten_document_markdown - First observed
get_emsal_document_markdown - First observed
get_kik_document_markdown - First observed
get_kvkk_document_markdown - First observed
get_rekabet_kurumu_document - First observed
get_sayistay_document_unified - First observed
get_uyusmazlik_document_markdown_from_url - First observed
search - First observed
search_anayasa_unified - First observed
search_bddk_decisions - First observed
search_bedesten_unified - First observed
search_emsal_detailed_decisions - First observed
search_kik_decisions - First observed
search_kvkk_decisions - First observed
search_rekabet_kurumu_decisions - First observed
search_sayistay_unified - First observed
search_uyusmazlik_decisions
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
Connect AI to millions of laws and court cases with the Lawstronaut MCP.
Slovak court decisions as MCP tools. 12,000+ decisions, GDPR-compliant, pseudonymized, SLA-backed.
TED MCP Server: Real-time EU public tenders access. https://www.lexsocket.ai/
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- FlicenseBqualityFmaintenanceAn MCP server providing standardized access to Swiss court decisions through the entscheidsuche.ch API, allowing LLMs to search, retrieve, and analyze legal documents from Swiss jurisdictions.35-
- AlicenseAqualityBmaintenanceA 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.26234MIT
- AlicenseAqualityAmaintenanceAn MCP server for accessing Turkish legislation (laws, regulations, decrees) via the Adalet Bakanligi API, providing search, full-text retrieval, and structured citations.5Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA 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