
Emsal
io.github.afsozerv1.1.1Updated Oct 7, 2026
Citation-safe Turkish legal research: court decisions and legislation from official sources.
Overview
Lets an assistant search Turkish court decisions and legislation from official sources and prepare citation-checked legal drafts.
- What it does
- Emsal provides MCP tools for Turkish legal research: searching court decisions and legislation, retrieving single documents or individual legislation articles, and running topic research bundles with a quality dashboard. It can work against live official sources (Bedesten/Yargıtay, AYM, Danıştay, mevzuat.gov.tr, Resmî Gazete and others) or against an optional local corpus of roughly 11 million decisions with full-text and semantic search. Extended tools add citation checking, petition drafting, argument scoring, change reports, watch lists, privacy scanning and health checks.
- When to use it
- Use it when an assistant needs Turkish case law or legislation lookups, citation-safe quoting, or help preparing petitions and legal research bundles. It is aimed at a single user on a single machine, and the local corpus is optional: without it, searches run live against official sources.
- Requirements
- Runs locally over stdio as a PyPI package (uvx --from emsal-mcp emsal-mcp-server, or pipx install emsal-mcp); Python 3.11 or newer is required. No accounts, API keys or headers are declared. Optional environment variables configure the corpus cache path, embedding provider and cache, transport, host/port, tool profile, thread pool and timeouts. The full local corpus is a large SQLite file (about 72 GB) and semantic search needs faiss-cpu; network access is needed for live sources.
Installation
In SourceWeft
- Open Emsal in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Emsal-mcp
v1.1.1 — 11 core + 36 extended MCP tools (47 total) · 152 CLI commands · 78 test files · 48 source modules
Proje sayfası: avfatihsozer.com/projeler/emsal-mcp · English: README.en.md
Resmî ve kamuya açık Türk hukuk kaynaklarında (emsal kararlar ve mevzuat) citation-safe arama, araştırma ve belge hazırlık için MCP sunucusu.
İki şekilde çalışır:
- Yerel korpus — 11,1 milyon karar ve güncel mevzuatın tamamı tek bir SQLite dosyasında; FTS5 tam metin + FAISS anlamsal arama. Ağ gerekmez.
- Canlı kaynaklar — Bedesten/Yargıtay, AYM, Danıştay, Uyuşmazlık, Rekabet, Sayıştay, GİB, mevzuat.gov.tr, Resmî Gazete, KVKK adaptörleri.
Kırmızı çizgiler
- Karar, metadata, tarih, esas/karar no, daire, atıf veya kanun maddesi uydurulmaz.
full_text/html_markdowniçeriği olmayan belgeler quote/draft için kullanılmaz.quoteUsablevedraftUsablesadece tam metin/HTML markdown varsatrueolur.- Rate-limit bilinçli olarak muhafazakâr değildir; tek kullanıcı/tek bilgisayar hedeflenmiştir.
Korpus
Ölçüm tarihi 16 Eylül 2026, canlı korpus (cache.sqlite3, 72 GB).
Ayrıntı ve ölçümler: docs/BULK_INDEX.md.
Kurulum
Hızlı kurulum (korpussuz)
Emsal MCP, 11 milyon kararlık yerel korpus olmadan da çalışır. Bu durumda karar ve
mevzuat aramaları resmî kaynaklardan (Bedesten, mevzuat.gov.tr, AYM, Danıştay ve
diğerleri) canlı yapılır, kararın tam metni de canlı getirilir. Yalnız yerel korpusta
arayan araçlar (search_local_corpus, mevzuat_korpus_ara, mevzuat_madde_getir)
boş sonuç döndürür ve canlı araca yönlendirir. Python 3.11 ya da üstü gerekir.
Claude Code'a eklemek için:
Claude Desktop ya da başka bir MCP istemcisi için yapılandırma:
Varsayılan araç profili 11 temel araçtır; tamamı için EMSAL_TOOL_PROFILE=full
ortam değişkenini verin. Çekilen belgeler ~/.emsal_mcp/cache.sqlite3 dosyasında
önbelleğe alınır (EMSAL_CACHE_PATH ile değişir).
Geliştirme kurulumu (korpusla)
Anlamsal aramanın toplu FAISS indeksini kullanabilmesi için ayrıca
pip install faiss-cpu gerekir. Ayrıntılı kurulum: INSTALL.md.
Çalıştırma
HTTP (streamable-http) sunucusu
Canlı kurulumda sunucu scripts\mcp_http_sunucu.cmd ile başlar; bu betik
ortam değişkenlerini kendi içinde kurar ve logu
%LOCALAPPDATA%\emsal-mcp\mcp_http.log dosyasına yazar.
Windows'ta EmsalMcpHttp zamanlanmış görevi aynı betiği oturum açılışında
çalıştırır. Uç nokta: http://<host>:<port>/mcp.
stdio sunucusu
Ortam değişkenleri
Tek seferlik CLI çağrıları için scripts\emsal-env.cmd aynı değişkenleri
kurar (call .\scripts\emsal-env.cmd && .venv\Scripts\emsal-mcp ...).
Makineye özel değerler (veri dizini, dinleme adresi, yedek hedefi) repoda
tutulmaz: scripts\yerel-ayar.ornek.cmd dosyasını scripts\yerel-ayar.cmd
adıyla kopyalayıp doldurun (.gitignore'dadır). emsal-env.cmd,
crawl_incremental.ps1 ve Python betikleri (scripts/_yollar.py) bu dosyayı
okur; boş bırakılan her yol ~/.emsal_mcp altından türetilir.
MCP araçları
Varsayılan profil core — 11 araç kayıtlı gelir. Geri kalanı çalışan sunucuya
load_extended_tools ile kategori kategori eklenir. Sözleşmeler:
docs/MCP_CONTRACTS.md.
Core (11):
Extended (36), kategori bazında:
Core profilin docstring bütçesi (20.000 karakter) dolduğu için
citation_check,prepare_petition,read_legal_file,list_sourcesvelegal_research_guide6 Eylül 2026'da extended'a alındı;load_extended_toolsile geri gelirler.
CLI örnekleri
Korpus crawl + panel
Uzun soluklu korpus taraması (Bedesten'den yıl yıl karar indirme) bir master script ile yürür, durumu tarayıcıdan izlenir.
Notlar:
- Rate limit
EMSAL_RATE_LIMIT_MAX=12. Ölçüldü: 12'de 429 yok (~2.800 belge/saat), 15'te 429 cooldown döngüsüne girip hız sıfırlanıyor. - Panel,
cache.sqlite3üzerinde yıl sayımı yapmaz — tek bir yıl sorgusu tam tablo taraması yüzünden ~60 sn sürüyor. Sayımlar~/.emsal-mcp/panel_stats.sqlite3içinde artımlı (yalnız yenirowid'ler) tutulur, günde bir kez tam sayım yapılır. - Yıl hedefleri Bedesten'in
totalalanından ölçülür (crawl_logs\hedefler.json), tahmin edilmez.
İşletim
Zamanlanmış işler (Windows Görev Zamanlayıcı, korpus sunucusu):
health_check aracı bu işlerin son koşusunu scheduled_jobs bloğunda
raporlar: schtasks çağırmaz, işlerin kendi log dosyalarına yazdığı bitiş
işaretini ve dosya zaman damgasını okur. Bir iş gecikmişse ya da rc != 0
ile bitmişse overall "degraded" döner (src/emsal_mcp/ops_status.py).
Aynı çıktıda tool_runtime bloğu thread havuzu / zaman aşımı sayaçlarını
verir; runaway > 0 ise sunucu yeniden başlatılmalıdır.
Belgeler
Test
Canlı kaynağa giden testler varsayılan olarak atlanır; açmak için
EMSAL_LIVE_TESTS=1.
Lisans
GNU Affero Genel Kamu Lisansı sürüm 3 ile lisanslanmıştır (AGPL-3.0-only); tam
metin LICENSE dosyasındadır. Yazılımı değiştirip ağ üzerinden başkalarına
hizmet olarak sunarsanız, değiştirdiğiniz kaynak kodu da o kullanıcılara aynı lisansla
sunmanız gerekir. Güvenlik açıklarının nasıl bildirileceği SECURITY.md
dosyasında anlatılıyor.
Telif hakkı © 2026 Alpaslan Fatih Sözer
Source: README.md at commit 611a634
Tools
0Version history
1- v1.1.1LatestOct 7, 2026
