关于 Dayanak
Dayanak 是面向土耳其法律研究与文书准备的 MCP 服务,检索官方公开的法院判决和法规,并强调引文可核验。它既可查询本地 SQLite 语料,也可访问实时官方来源,提供核心和扩展工具。
主要功能
- 01搜索土耳其法院判决与法规
- 02本地全文及语义检索
- 03查询实时官方法律来源
- 04检查引用并辅助法律文书准备
- 05导出文件并检查来源健康状态
适用场景
- 01检索特定法律主题的判决和法规
- 02基于官方来源准备法律文件
- 03核验引文并跟踪法规变更
MCP 相关
Dayanak MCP 服务向客户端提供法律搜索、文档获取、主题研究和导出等工具,默认启用 11 个核心工具,扩展工具可按类别加载。支持 stdio 和 streamable-http 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dil | any | 否 | |
| page | integer | 否 | |
| limit | integer | 否 | |
| query | any | 否 | |
| source | any | 否 | |
| esas_no | any | 否 | |
| sort_by | any | 否 | |
| birimAdi | any | 否 | |
| karar_no | any | 否 | |
| court_types | any | 否 | |
| include_raw | boolean | 否 | |
| include_snippets | boolean | 否 | |
| karar_tarihi_end | any | 否 | |
| karar_tarihi_start | any | 否 |
详细介绍
Dayanak
v2.0.1 — 11 个核心 + 36 个扩展 MCP 工具(共 47 个)· 152 条 CLI 命令 · 80 个测试文件 · 48 个源模块
项目页面: avfatihsozer.com/projeler/dayanak · 英文版:README.en.md
面向土耳其官方公开法律资源(判例和法规),用于安全引用的搜索、研究和文档准备 MCP 服务。
项目原名为 emsal-mcp;自 2.0.0 版本起更名为 Dayanak。旧版 emsal-mcp
包现已安装 dayanak,旧的 EMSAL_* 环境变量和 ~/.emsal_mcp
数据目录仍会继续读取。
有两种运行方式:
- 本地语料库 — 1,110 万份判决和全部现行法规存储在一个 SQLite 文件中;使用 FTS5 全文搜索 + FAISS 语义搜索。无需网络。
- 实时资源 — Bedesten/Yargıtay、AYM、Danıştay、Uyuşmazlık、Rekabet、 Sayıştay、GİB、mevzuat.gov.tr、Resmî Gazete、KVKK 适配器。
红线
- 不得捏造判决、元数据、日期、案号/裁判号、法庭、引用或法律条文。
- 不得将没有
full_text/html_markdown内容的文档用于引用/草拟。 - 只有在存在全文/HTML Markdown 时,
quoteUsable和draftUsable才为true。 - 限流策略有意不设得过于保守;目标场景是单用户/单台电脑。
语料库
测量日期为 2026 年 9 月 16 日,使用实时语料库(cache.sqlite3,72 GB)。
| 层级 | 指标 |
|---|---|
| 判决 | 11.108.242 份文档(documents_v2)。基础数据:HF hamzabagirsakci/turkish-court-decisions(11.045.085,CC0),另加每日 Bedesten 爬取数据。 |
| 法规文档 | 14.298 条记录 / 14.171 个现行版本:916 部法律、63 部 KHK、33 部 CBK、8.840 部条例(8.830 部现行)、4.446 份公告(4.329 份现行) |
| 法规条文 | 303.454 条条文,96.186 条修订记录 |
| 判决语义索引 | 29.554.075 个分块向量 — intfloat/multilingual-e5-small(384 维),FAISS IVF16384,PQ64 + fp16 sidecar refine,nprobe=128,chunking v2 |
| 法规语义索引 | 423.920 个分块向量(来自 303.454 条条文),使用相同的模型和索引类型 |
详细信息和指标:docs/BULK_INDEX.md。
安装
快速安装(不含语料库)
Dayanak 无需 1,100 万份判决的本地语料库也能运行。在这种情况下,判决和
法规搜索会实时查询官方资源(Bedesten、mevzuat.gov.tr、AYM、Danıştay 等),判决全文也会实时获取。仅在本地语料库中搜索的工具(search_local_corpus、mevzuat_korpus_ara、mevzuat_madde_getir)会返回空结果,并引导至实时工具。需要 Python 3.11 或更高版本。
# Kurmadan doğrudan çalıştırmak için (uv gerekir)
uvx --from dayanak dayanak-server
# ya da kalıcı kurulum
pipx install dayanak
添加到 Claude Code:
claude mcp add dayanak -- uvx --from dayanak dayanak-server
Claude Desktop 或其他 MCP 客户端的配置:
{
"mcpServers": {
"dayanak": {
"command": "uvx",
"args": ["--from", "dayanak", "dayanak-server"]
}
}
}
默认工具配置包含 11 个核心工具;如需启用全部工具,请设置环境变量 DAYANAK_TOOL_PROFILE=full。获取的文档会缓存到 ~/.dayanak/cache.sqlite3 文件中(可通过 DAYANAK_CACHE_PATH 更改)。
开发安装(含语料库)
# Windows
cd <repo-dizini>
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev,mcp,embeddings]"
# macOS / Linux
cd <repo-dizini>
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,mcp,embeddings]"
dayanak version
若要让语义搜索使用批量 FAISS 索引,还需运行
pip install faiss-cpu。详细安装说明:INSTALL.md。
运行
HTTP(streamable-http)服务
在实时部署中,服务通过 scripts\mcp_http_sunucu.cmd 启动;此脚本会在内部设置环境变量,并将日志写入
%LOCALAPPDATA%\dayanak\mcp_http.log 文件。
.\scripts\mcp_http_sunucu.cmd
在 Windows 上,计划任务 EmsalMcpHttp 会在用户登录时运行同一脚本。端点:http://<host>:<port>/mcp。
stdio 服务
call .\scripts\dayanak-env.cmd
dayanak-server
环境变量
| 变量 | 用途 | 示例值 |
|---|---|---|
DAYANAK_CACHE_PATH | 语料库 SQLite 文件 | <veri-dizini>\cache.sqlite3 |
DAYANAK_BULK_VEC_DIR | fp16 向量 sidecar(用于 refine) | <bench-dizini>\vec |
DAYANAK_EMBEDDING_PROVIDER | 嵌入提供方 | fastembed-multilingual-e5 |
DAYANAK_EMBEDDING_CACHE_DIR | ONNX 模型缓存 | <veri-dizini>\models\fastembed |
DAYANAK_MCP_TRANSPORT | stdio(默认)或 streamable-http | streamable-http |
DAYANAK_MCP_HOST / DAYANAK_MCP_PORT | HTTP 监听地址 | 127.0.0.1 / 8790 |
DAYANAK_TOOL_PROFILE | core(默认)或 full | core |
DAYANAK_TOOL_THREADS | 同步工具的线程池(0 = 关闭) | 6 |
DAYANAK_TOOL_TIMEOUT | 每个工具的超时秒数 | 180 |
对于一次性 CLI 调用,scripts\dayanak-env.cmd 会设置相同的变量
(call .\scripts\dayanak-env.cmd && .venv\Scripts\dayanak ...)。
机器专属值(数据目录、监听地址、备份目标)不会保存在仓库中:将
scripts\yerel-ayar.ornek.cmd 复制为 scripts\yerel-ayar.cmd
并填写(该文件已列入 .gitignore)。dayanak-env.cmd、
crawl_incremental.ps1 和 Python 脚本(scripts/_yollar.py)会读取此文件;
留空的路径均从 ~/.dayanak 推导。
MCP 工具
默认配置为 core,包含 11 个已注册工具。其余工具通过
load_extended_tools 按类别加载到正在运行的服务中。契约:
docs/MCP_CONTRACTS.md。
Core(11 个):
| 工具 | 用途 |
|---|---|
search_decisions | 搜索实时来源中的裁决(包括路由) |
get_document | 获取单份文档 |
search_local_corpus | 在本地 11 M 裁决语料库中进行 FTS5 + 语义搜索 |
search_legislation | 在 mevzuat.gov.tr 上搜索法规 |
get_legislation | 获取法规文本 / 条文 |
mevzuat_korpus_ara | 在本地法规语料库中按条文搜索 |
mevzuat_madde_getir | 从本地语料库获取单条法规 |
research_topic | 主题研究包(bundle + 质量仪表板) |
export_document | 导出文档 |
load_extended_tools | 在运行时加载 Extended 类别 |
health_check | 来源/熔断器/索引/定时任务健康状态 |
Extended(36 个),按类别划分:
| 类别 | 工具数量 | 工具 |
|---|---|---|
legislation | 1 | mevzuat_degisiklik_raporu |
drafting | 2 | citation_check、prepare_petition |
files | 1 | read_legal_file |
meta | 2 | list_sources、legal_research_guide |
health_admin | 4 | circuit_breaker_status、source_health、source_smoke、check_government_servers_health |
watch | 4 | watch_add、watch_list、watch_run、watch_remove |
privacy | 3 | privacy_scan、privacy_redact、privacy_audit |
chambers | 4 | chamber_overview、profile_chamber、chamber_timeline、find_similar_chambers |
indexing | 1 | index_status |
drafting_advanced | 10 | draft_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_admin | 4 | udf_toolkit_status、udf_authoring_instructions、pdf_toolkit_status、promote_pdf_to_full_text |
由于 Core 配置的 docstring 预算(20,000 个字符)已满,
citation_check、prepare_petition、read_legal_file、list_sources和legal_research_guide于 2026 年 9 月 6 日移至 Extended;使用load_extended_tools即可重新加载。
CLI 示例
dayanak sources
dayanak search bedesten "muvazaa" --limit 5
dayanak get bedesten DOCUMENT_ID
dayanak semantic bulk-status
dayanak mevzuat korpus-ara "tahliye taahhüdü"
dayanak smoke --offline
语料库抓取 + 面板
长期语料库抓取(从 Bedesten 逐年下载判决)由一个主脚本运行, 并可在浏览器中查看状态。
.\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
| 部分 | 功能 |
|---|---|
crawl_master.ps1 | 按顺序抓取各年份。使用单实例锁(mutex),将检查点写入 crawl_logs\crawl_state.json——如果 PC 关机,会从中断时的年份和页面继续。 |
scripts\panel.py | http://127.0.0.1:8799 — 实时抓取状态、年份目标、库分布、速度/预估。无需额外依赖。 |
| 计划任务 | EmsalCrawlMaster(登录时 + 1 分钟),EmsalPanel(登录时 + 20 秒)。 |
注意:
- 速率限制为
DAYANAK_RATE_LIMIT_MAX=12。实测结果:设为 12 时不会出现 429(约 2,800 份文档/小时), 设为 15 时会进入 429 冷却循环,速度降为零。 - 面板不会在
cache.sqlite3上统计年份——单个年份的查询因全表扫描需要约 60 秒。计数会增量保存在~/.dayanak/panel_stats.sqlite3中(仅处理新的rowid),每天进行一次完整计数。 - 年份目标取自 Bedesten 的
total字段(crawl_logs\hedefler.json), 不进行估算。
运维
计划任务(Windows 任务计划程序,语料库服务器):
| 任务 | 时间 | 脚本 | 功能 |
|---|---|---|---|
EmsalMcpHttp | 登录时 | scripts\mcp_http_sunucu.cmd | 发布 MCP 服务 |
EmsalCrawlDaily | 每天 04:30 | scripts\crawl_incremental.ps1 | 增量抓取判决 |
EmsalMevzuatWeekly | 周日 03:00 | scripts\mevzuat_weekly.cmd | 法规更新(+ 后续处理 mevzuat_semantic.cmd) |
EmsalMonthlyMerge | 每月 1 日 02:00 | scripts\monthly_merge.cmd | 将增量向量合并到 FAISS 索引 |
health_check 工具会在 scheduled_jobs 块中报告这些任务的最近运行情况:它不会调用 schtasks,而是读取任务在各自日志文件中写入的完成标记和文件时间戳。如果任务运行延迟或以 rc != 0 结束,overall 会返回 "degraded"(src/dayanak/ops_status.py)。
同一输出中的 tool_runtime 块会提供线程池/超时计数器;如果 runaway > 0,则应重启服务。
文档
| 文档 | 内容 |
|---|---|
docs/BULK_INDEX.md | 批量语料库配置、FAISS 索引结构、chunking v2、测量结果、注意事项 |
docs/MCP_CONTRACTS.md | MCP 工具契约、配置文件、类别 |
docs/COOKBOOK.md | 复制即用的工作流配方 |
docs/JSON_CONTRACTS.md | 通用 API 函数的 JSON 输出契约 |
docs/ERROR_CATALOG.md | 错误代码和建议操作 |
docs/INDEX.md | 所有文档的索引 |
CHANGELOG.md | 版本历史 |
测试
.venv\Scripts\python.exe -X utf8 -m pytest tests -q
ruff check src tests scripts
默认跳过访问实时数据源的测试;如需启用,请设置
DAYANAK_LIVE_TESTS=1。
许可证
本项目依据 GNU Affero 通用公共许可证第 3 版授权(AGPL-3.0-only);完整
文本见 LICENSE 文件。如果您修改软件并通过网络向他人提供服务,
则必须也以相同许可证向这些用户提供修改后的源代码。有关如何报告安全漏洞,
请参阅 SECURITY.md。
版权所有 © 2026 Alpaslan Fatih Sözer
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。