Emsal

io.github.afsozerv1.1.1更新於 Oct 7, 2026

Citation-safe Turkish legal research: court decisions and legislation from official sources.

概覽

AI 產生的概覽

讓助理檢索土耳其法院判決與官方法規,並產出附引文檢核的法律草稿。

功能
Emsal 提供用於土耳其法律研究的 MCP 工具:檢索法院判決與法規、取得單一文件或單一法規條文,並產生附品質面板的主題研究包。它可對接官方即時來源(Bedesten/Yargıtay、AYM、Danıştay、mevzuat.gov.tr、Resmî Gazete 等),也可使用選用的本機語料庫,內含約 1,100 萬份判決,支援全文與語意檢索。擴充工具另提供引文檢核、書狀撰擬、論證評分、變更報告、監控清單、隱私掃描與健康檢查。
適用情境
當助理需要查詢土耳其判例或法規、進行可安全引用的摘錄,或協助準備書狀與法律研究包時適用。它鎖定單機單一使用者情境,本機語料庫為選用:未安裝時檢索會即時連線官方來源。
執行需求
以 PyPI 套件形式透過 stdio 在本機執行(uvx --from emsal-mcp emsal-mcp-server,或 pipx install emsal-mcp),需要 Python 3.11 以上版本。未宣告任何帳號、API 金鑰或標頭。選用環境變數可設定語料庫快取路徑、嵌入模型供應者與快取、傳輸方式、主機與連接埠、工具設定檔、執行緒集區與逾時。完整本機語料庫是很大的 SQLite 檔案(約 72 GB),語意檢索需要 faiss-cpu;連線即時來源需要網路。
安裝前請注意
即時模式會把查詢送往第三方土耳其官方法律來源,並從這些來源抓取全文;README 說明其限速刻意不保守,鎖定單機單一使用者。文件會快取在使用者家目錄下的 SQLite 檔案中。擴充工具包含撰擬、匯出、監控清單,以及隱私去識別化與稽核等會產生或修改檔案的操作。專案採 AGPL-3.0-only 授權,若修改後以網路服務提供,須以相同授權公開原始碼。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Emsal,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Emsal-mcp

v1.1.1 — 11 core + 36 extended MCP tools (47 total) · 152 CLI commands · 78 test files · 48 source modules

[CI]

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_markdown içeriği olmayan belgeler quote/draft için kullanılmaz.
  • quoteUsable ve draftUsable sadece tam metin/HTML markdown varsa true olur.
  • 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).

KatmanÖlçü
Kararlar11.108.242 belge (documents_v2). Taban: HF hamzabagirsakci/turkish-court-decisions (11.045.085, CC0), üstüne günlük Bedesten crawl'ı.
Mevzuat belgeleri14.298 kayıt / 14.171 güncel sürüm: 916 kanun, 63 KHK, 33 CBK, 8.840 yönetmelik (8.830 güncel), 4.446 tebliğ (4.329 güncel)
Mevzuat maddeleri303.454 madde, 96.186 değişiklik kaydı
Karar anlamsal indeksi29.554.075 parça vektörü — intfloat/multilingual-e5-small (384 boyut), FAISS IVF16384,PQ64 + fp16 sidecar refine, nprobe=128, chunking v2
Mevzuat anlamsal indeksi423.920 parça vektörü (303.454 maddeden), aynı model ve indeks tipi

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.

bash
# Kurmadan doğrudan çalıştırmak için (uv gerekir)uvx --from emsal-mcp emsal-mcp-server
# ya da kalıcı kurulumpipx install emsal-mcp

Claude Code'a eklemek için:

bash
claude mcp add emsal -- uvx --from emsal-mcp emsal-mcp-server

Claude Desktop ya da başka bir MCP istemcisi için yapılandırma:

json
{  "mcpServers": {    "emsal": {      "command": "uvx",      "args": ["--from", "emsal-mcp", "emsal-mcp-server"]    }  }}

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)

powershell
# Windowscd <repo-dizini>python -m venv .venv.\.venv\Scripts\Activate.ps1pip install -e ".[dev,mcp,embeddings]"
# macOS / Linuxcd <repo-dizini>python3 -m venv .venvsource .venv/bin/activatepip install -e ".[dev,mcp,embeddings]"
emsal-mcp version

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.

powershell
.\scripts\mcp_http_sunucu.cmd

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

powershell
call .\scripts\emsal-env.cmdemsal-mcp-server

Ortam değişkenleri

DeğişkenNe işe yararÖrnek değer
EMSAL_CACHE_PATHKorpus SQLite dosyası<veri-dizini>\cache.sqlite3
EMSAL_BULK_VEC_DIRfp16 vektör sidecar'ları (refine için)<bench-dizini>\vec
EMSAL_EMBEDDING_PROVIDERGömme sağlayıcısıfastembed-multilingual-e5
EMSAL_EMBEDDING_CACHE_DIRONNX model önbelleği<veri-dizini>\models\fastembed
EMSAL_MCP_TRANSPORTstdio (varsayılan) veya streamable-httpstreamable-http
EMSAL_MCP_HOST / EMSAL_MCP_PORTHTTP dinleme adresi127.0.0.1 / 8790
EMSAL_TOOL_PROFILEcore (varsayılan) veya fullcore
EMSAL_TOOL_THREADSSync araçları için thread havuzu (0 = kapalı)6
EMSAL_TOOL_TIMEOUTAraç başına saniye sınırı180

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

AraçNe yapar
search_decisionsCanlı kaynaklarda karar araması (yönlendirme dahil)
get_documentTek belge getirme
search_local_corpusYerel 11 M karar korpusunda FTS5 + anlamsal arama
search_legislationmevzuat.gov.tr üzerinde mevzuat araması
get_legislationMevzuat metni / madde getirme
mevzuat_korpus_araYerel mevzuat korpusunda madde bazlı arama
mevzuat_madde_getirYerel korpustan tek madde
research_topicKonu araştırması paketi (bundle + kalite panosu)
export_documentBelge dışa aktarma
load_extended_toolsExtended kategorileri çalışırken yükleme
health_checkKaynak/breaker/indeks/zamanlanmış iş sağlığı

Extended (36), kategori bazında:

KategoriAraç sayısıAraçlar
legislation1mevzuat_degisiklik_raporu
drafting2citation_check, prepare_petition
files1read_legal_file
meta2list_sources, legal_research_guide
health_admin4circuit_breaker_status, source_health, source_smoke, check_government_servers_health
watch4watch_add, watch_list, watch_run, watch_remove
privacy3privacy_scan, privacy_redact, privacy_audit
chambers4chamber_overview, profile_chamber, chamber_timeline, find_similar_chambers
indexing1index_status
drafting_advanced10draft_document, export_bundle, inspect_petition_pack, build_multi_issue_pack, inspect_multi_issue_pack, list_petition_templates, get_petition_template, build_argument_chain, score_argument, get_argument_strength_report
udf_admin4udf_toolkit_status, udf_authoring_instructions, pdf_toolkit_status, promote_pdf_to_full_text

Core profilin docstring bütçesi (20.000 karakter) dolduğu için citation_check, prepare_petition, read_legal_file, list_sources ve legal_research_guide 6 Eylül 2026'da extended'a alındı; load_extended_tools ile geri gelirler.

CLI örnekleri

powershell
emsal-mcp sourcesemsal-mcp search bedesten "muvazaa" --limit 5emsal-mcp get bedesten DOCUMENT_IDemsal-mcp semantic bulk-statusemsal-mcp mevzuat korpus-ara "tahliye taahhüdü"emsal-mcp smoke --offline

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.

powershell
.\scripts\kur-otomatik-baslatma.ps1          # oturum açılışına ekler (yönetici gerekmez).\scripts\kur-otomatik-baslatma.ps1 -Durum   # ne çalışıyor?.\scripts\kur-otomatik-baslatma.ps1 -Kaldir  # geri al
ParçaNe yapar
crawl_master.ps1Yılları sırayla tarar. Tek örnek kilidi (mutex), crawl_logs\crawl_state.json'a checkpoint yazar — PC kapanırsa kaldığı yıl ve sayfadan devam eder.
scripts\panel.pyhttp://127.0.0.1:8799 — canlı crawl durumu, yıl hedefleri, kütüphane dağılımı, hız/tahmin. Ek bağımlılık yok.
Zamanlanmış görevlerEmsalCrawlMaster (oturum + 1 dk), EmsalPanel (oturum + 20 sn).

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.sqlite3 içinde artımlı (yalnız yeni rowid'ler) tutulur, günde bir kez tam sayım yapılır.
  • Yıl hedefleri Bedesten'in total alanından ölçülür (crawl_logs\hedefler.json), tahmin edilmez.

İşletim

Zamanlanmış işler (Windows Görev Zamanlayıcı, korpus sunucusu):

GörevZamanBetikNe yapar
EmsalMcpHttpoturum açılışıscripts\mcp_http_sunucu.cmdMCP sunucusunu yayınlar
EmsalCrawlDailyher gün 04:30scripts\crawl_incremental.ps1Artımlı karar crawl'ı
EmsalMevzuatWeeklyPazar 03:00scripts\mevzuat_weekly.cmdMevzuat güncellemesi (+ art-işlem mevzuat_semantic.cmd)
EmsalMonthlyMergeayın 1'i 02:00scripts\monthly_merge.cmdDelta vektörlerini toplu FAISS indeksine katar

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

Belgeİçerik
docs/BULK_INDEX.mdToplu korpus kurulumu, FAISS indeks yapısı, chunking v2, ölçümler, tuzaklar
docs/MCP_CONTRACTS.mdMCP araç sözleşmeleri, profiller, kategoriler
docs/COOKBOOK.mdKopyala-çalıştır iş akışı reçeteleri
docs/JSON_CONTRACTS.mdGenel API fonksiyonlarının JSON çıktı sözleşmeleri
docs/ERROR_CATALOG.mdHata kodları ve önerilen eylemler
docs/INDEX.mdTüm belgelerin dizini
CHANGELOG.mdSürüm geçmişi

Test

powershell
.venv\Scripts\python.exe -X utf8 -m pytest tests -qruff check src tests scripts

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

來源:README.md,提交 611a634

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v1.1.1最新Oct 7, 2026